Refactored contracts as schemas

Necessary to properly namespace these objects. This will also allow for contracts in the future if ever needed since contracts can be built upon schemas.

Milestone: patch
This commit is contained in:
Brooke Kuhlmann
2026-04-01 13:43:49 -06:00
parent 65b422b335
commit 616c11b9a4
31 changed files with 58 additions and 58 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ Metrics/ParameterLists:
- lib/trmnl/api/requester.rb
Naming/VariableNumber:
Exclude:
- lib/trmnl/api/contracts/ip_address.rb
- lib/trmnl/api/schemas/ip_address.rb
- lib/trmnl/api/models/ip_address.rb
- spec/lib/trmnl/api/models/ip_address_spec.rb
Style/IpAddresses:
+10 -10
View File
@@ -19,16 +19,16 @@ module TRMNL
HTTP
end
namespace :contracts do
register :category, Contracts::Category
register :current_screen, Contracts::CurrentScreen
register :display, Contracts::Display
register :firmware, Contracts::Firmware
register :ip_address, Contracts::IPAddress
register :model, Contracts::Model
register :palette, Contracts::Palette
register :recipe, Contracts::Recipe
register :setup, Contracts::Setup
namespace :schemas do
register :category, Schemas::Category
register :current_screen, Schemas::CurrentScreen
register :display, Schemas::Display
register :firmware, Schemas::Firmware
register :ip_address, Schemas::IPAddress
register :model, Schemas::Model
register :palette, Schemas::Palette
register :recipe, Schemas::Recipe
register :setup, Schemas::Setup
end
namespace :models do
+3 -3
View File
@@ -8,16 +8,16 @@ module TRMNL
module Endpoints
# Handles API request/response.
class Category
include TRMNL::API::Dependencies[:requester, contract: "contracts.category"]
include TRMNL::API::Dependencies[:requester, schema: "schemas.category"]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
def call
pipe(
requester.get("categories"),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
as(:fetch, :data)
)
end
+3 -3
View File
@@ -10,17 +10,17 @@ module TRMNL
class CurrentScreen
include TRMNL::API::Dependencies[
:requester,
contract: "contracts.current_screen",
schema: "schemas.current_screen",
model: "models.current_screen"
]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
def call token:
pipe requester.get("current_screen", headers: {"Access-Token" => token}),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
to(model, :for)
end
end
+3 -3
View File
@@ -10,17 +10,17 @@ module TRMNL
class Display
include TRMNL::API::Dependencies[
:requester,
contract: "contracts.display",
schema: "schemas.display",
model: "models.display"
]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
def call token:
pipe requester.get("display", headers: {"Access-Token" => token}),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
to(model, :for)
end
end
+3 -3
View File
@@ -10,17 +10,17 @@ module TRMNL
class Firmware
include TRMNL::API::Dependencies[
:requester,
contract: "contracts.firmware",
schema: "schemas.firmware",
model: "models.firmware"
]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
def call
pipe requester.get("firmware/latest"),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
to(model, :for)
end
end
+3 -3
View File
@@ -10,17 +10,17 @@ module TRMNL
class IPAddress
include TRMNL::API::Dependencies[
:requester,
contract: "contracts.ip_address",
schema: "schemas.ip_address",
model: "models.ip_address"
]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
def call
pipe requester.get("ips"),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
as(:fetch, :data),
to(model, :for)
end
+3 -3
View File
@@ -10,18 +10,18 @@ module TRMNL
class Model
include TRMNL::API::Dependencies[
:requester,
contract: "contracts.model",
schema: "schemas.model",
model: "models.model"
]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
def call
pipe(
requester.get("models"),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
as(:fetch, :data),
map { |data| model.for(**data) }
)
+3 -3
View File
@@ -10,18 +10,18 @@ module TRMNL
class Palette
include TRMNL::API::Dependencies[
:requester,
contract: "contracts.palette",
schema: "schemas.palette",
model: "models.palette"
]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
def call
pipe(
requester.get("palettes"),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
as(:fetch, :data),
map { |data| model.for(**data) }
)
+3 -3
View File
@@ -11,11 +11,11 @@ module TRMNL
class Recipe
include TRMNL::API::Dependencies[
:requester,
contract: "contracts.recipe",
schema: "schemas.recipe",
model: "models.recipe"
]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
using Refinements::Hash
@@ -26,7 +26,7 @@ module TRMNL
pipe(
requester.get("recipes.json", **parameters),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
to(model, :for)
)
end
+3 -3
View File
@@ -10,17 +10,17 @@ module TRMNL
class Setup
include TRMNL::API::Dependencies[
:requester,
contract: "contracts.setup",
schema: "schemas.setup",
model: "models.setup"
]
include Inspectable[contract: :type]
include Inspectable[schema: :type]
include Pipeable
def call id:
pipe requester.get("setup", headers: {"ID" => id}),
try(:parse, catch: JSON::ParserError),
validate(contract, as: :to_h),
validate(schema, as: :to_h),
to(model, :for)
end
end
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
# Validates API response.
Category = Dry::Schema.JSON { required(:data).array(:string) }
end
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
# Validates API response.
CurrentScreen = Dry::Schema.JSON do
required(:refresh_rate).filled :integer
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
# Validates API response.
Display = Dry::Schema.JSON do
required(:filename).filled :string
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
# Validates API response.
Firmware = Dry::Schema.JSON do
required(:url).filled :string
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
# Validates API response.
IPAddress = Dry::Schema.JSON do
required(:data).hash do
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
# Validates API response.
Model = Dry::Schema.JSON do
required(:data).array(:hash) do
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
# Validates API response.
Palette = Dry::Schema.JSON do
required(:data).array(:hash) do
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
# Validates API response.
Recipe = Dry::Schema.JSON do
required(:data).array(:hash) do
@@ -4,7 +4,7 @@ require "dry/schema"
module TRMNL
module API
module Contracts
module Schemas
module Recipes
# Validates API response.
Author = Dry::Schema.JSON do

Some files were not shown because too many files have changed in this diff Show More