diff --git a/.config/rubocop/config.yml b/.config/rubocop/config.yml index 77af493..9530268 100644 --- a/.config/rubocop/config.yml +++ b/.config/rubocop/config.yml @@ -4,6 +4,9 @@ inherit_gem: Metrics/ParameterLists: Exclude: - lib/trmnl/api/requester.rb +Naming/VariableNumber: + Exclude: + - lib/trmnl/api/contracts/ip_address.rb Style/IpAddresses: Exclude: - spec/lib/trmnl/api/types_spec.rb diff --git a/lib/trmnl/api.rb b/lib/trmnl/api.rb index 6578a5e..ff64a0e 100644 --- a/lib/trmnl/api.rb +++ b/lib/trmnl/api.rb @@ -6,7 +6,7 @@ require "zeitwerk" Dry::Schema.load_extensions :monads Zeitwerk::Loader.new.then do |loader| - loader.inflector.inflect "api" => "API", "trmnl" => "TRMNL" + loader.inflector.inflect "api" => "API", "ip_address" => "IPAddress", "trmnl" => "TRMNL" loader.tag = "trmnl-api" loader.push_dir "#{__dir__}/.." loader.setup diff --git a/lib/trmnl/api/container.rb b/lib/trmnl/api/container.rb index 88a75a8..5c0774a 100644 --- a/lib/trmnl/api/container.rb +++ b/lib/trmnl/api/container.rb @@ -24,6 +24,7 @@ module TRMNL register :current_screen, Contracts::CurrentScreen register :display, Contracts::Display register :firmware, Contracts::Firmware + register :ip_address, Contracts::IPAddress register :model, Contracts::Model register :setup, Contracts::Setup end diff --git a/lib/trmnl/api/contracts/ip_address.rb b/lib/trmnl/api/contracts/ip_address.rb new file mode 100644 index 0000000..9d9d683 --- /dev/null +++ b/lib/trmnl/api/contracts/ip_address.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require "dry/schema" + +module TRMNL + module API + module Contracts + # Validates API response. + IPAddress = Dry::Schema.JSON do + required(:data).hash do + required(:ipv4).array(Types::IPAddress) + required(:ipv6).array(Types::IPAddress) + end + end + end + end +end