mirror of
https://github.com/usetrmnl/trmnl-api.git
synced 2026-04-29 13:35:13 -07:00
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:
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) }
|
||||
)
|
||||
|
||||
@@ -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) }
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user