trmnl-api 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5cfbabf5898c2d22a9c6ec94054d5a6aacea3f7f67665075657869a4fb60f5c1
4
- data.tar.gz: 683715537fcbe499691d19cfb4f8fe50a63d2ac9c4783fa82b8a9c44630c096e
3
+ metadata.gz: 6159aaeff6f5885bfb0b4b94feb6f4d99fe55c3e4ae6b87c64009eda6014c397
4
+ data.tar.gz: c86fe1cc48d9521ea6130951469d3c78505c297fe2b1ac03ae188582268213bf
5
5
  SHA512:
6
- metadata.gz: 983d4a70dc3421c50eb008cdcd7784a6c26d03e8e2bc012d50948201073fa3ed887e3bad7d2b4033f9a3067fe32ee003ee8fb34b710c872d4db386cdfd8cd764
7
- data.tar.gz: 42ec614353a7193a95ecdc38400abf95b6cb4d17f54704d6a689b2b5b7a8f05b3593735924df3e7f557388d736037db08547481629818b56047143bbfaed65f8
6
+ metadata.gz: d2d17033a2207edd65d2c0fe14fc07bd68e31fc520467833be1cbcd35f8d752b299c72d7394c67f8463ba18d9fbd1aa3854ba7610012383eabe2c1e1dd9341be
7
+ data.tar.gz: 0e8e4a98208e47f3ed3eeab06e06b82f0e7693349108a74b59a0590ff06e839f1d4f671fde9233b3dceee71421d463f4beacd41ce3397b6b01277286ed139f9f
checksums.yaml.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -82,6 +82,24 @@ Any/all environment changes will be applied unless you override these settings v
82
82
 
83
83
  === Endpoints
84
84
 
85
+ ==== Categories
86
+
87
+ Allows you to obtain the list of approved plugin categories. Example:
88
+
89
+ [source,ruby]
90
+ ----
91
+ client = TRMNL::API::Client.new
92
+ client.categories
93
+
94
+ # Success(
95
+ # [
96
+ # "analytics",
97
+ # "art",
98
+ # "calendar"
99
+ # ]
100
+ # )
101
+ ----
102
+
85
103
  ==== Current Screen
86
104
 
87
105
  Allows you to obtain current screen being displayed for your device. You must supply your device's API token as the `token`. Example:
@@ -135,6 +153,29 @@ client.firmware
135
153
  # Success(#<data TRMNL::API::Models::Firmware url="https://trmnl-fw.s3.us-east-2.amazonaws.com/FW1.4.8.bin", version="1.4.8">)
136
154
  ----
137
155
 
156
+ ==== IP Addresses
157
+
158
+ Allows you obtain a list of public IP addresses for all TRMNL core servers because plugin poll requests will only originate from these IPs. Example:
159
+
160
+ [source,ruby]
161
+ ----
162
+ client = TRMNL::API::Client.new
163
+ client.ip_addresses
164
+
165
+ # Success(
166
+ # #<data TRMNL::API::Models::IPAddress
167
+ # version_4=[
168
+ # #<IPAddr: IPv4:111.230.59.36/255.255.255.255>,
169
+ # #<IPAddr: IPv4:222.9.106.45/255.255.255.255>
170
+ # ],
171
+ # version_6=[
172
+ # #<IPAddr: IPv6:1:2:0400:00d0:0000:0000:1874:e001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>,
173
+ # #<IPAddr: IPv6:1:2:0400:00d1:0000:0001:705e:1001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>
174
+ # ]
175
+ # >
176
+ # )
177
+ ----
178
+
138
179
  ==== Log
139
180
 
140
181
  Allows you to create a log entry (which is what the device reports when it captures an error). You must supply your device's API token as the `token`. Example:
@@ -188,6 +229,7 @@ client.models
188
229
  # name="test",
189
230
  # label="Test",
190
231
  # description="A test.",
232
+ # kind="trmnl",
191
233
  # colors=2,
192
234
  # bit_depth=1,
193
235
  # scale_factor=1,
@@ -197,13 +239,66 @@ client.models
197
239
  # height=480,
198
240
  # offset_x=10,
199
241
  # offset_y=15,
200
- # published_at="2025-07-16T18:18:11+00:00"
242
+ # palette_ids=["bw"],
243
+ # css: {
244
+ # classes: {
245
+ # device: "screen--og_png",
246
+ # size: "screen--md"
247
+ # },
248
+ # variables: [
249
+ # [
250
+ # "--screen-w",
251
+ # "800px"
252
+ # ],
253
+ # [
254
+ # "--screen-h",
255
+ # "480px"
256
+ # ],
257
+ # [
258
+ # "--ui-scale",
259
+ # "1.0"
260
+ # ],
261
+ # [
262
+ # "--gap-scale",
263
+ # "1.0"
264
+ # ]
265
+ # ]
266
+ # }
201
267
  # >
202
268
  # )
203
269
  ----
204
270
 
205
271
  ℹ️ The `scale_factor` can be an integer or float.
206
272
 
273
+ ==== Palettes
274
+
275
+ Allows you to obtain palettes details. The IDs correlate to the `palette_ids` as found in the Models API. Example:
276
+
277
+ [source,ruby]
278
+ ----
279
+ client = TRMNL::API::Client.new
280
+ client.palettes
281
+
282
+ Success(
283
+ [
284
+ #<data TRMNL::API::Models::Palette
285
+ id="bw",
286
+ name="Black & White (1-bit)",
287
+ grays=2,
288
+ colors=nil,
289
+ framework_class="screen--1bit"
290
+ >,
291
+ #<data TRMNL::API::Models::Palette
292
+ id="color-24bit",
293
+ name="Color (24-bit)",
294
+ grays=nil,
295
+ colors=nil,
296
+ framework_class=""
297
+ >
298
+ ]
299
+ )
300
+ ----
301
+
207
302
  ==== Setup
208
303
 
209
304
  Allows you to obtain the setup response for when a new device is setup. You must supply your device's MAC Address as the `id`. Example:
@@ -9,21 +9,27 @@ module TRMNL
9
9
  include Dependencies[:settings]
10
10
 
11
11
  include Endpoints::Dependencies[
12
+ endpoint_categories: :categories,
12
13
  endpoint_current_screen: :current_screen,
13
14
  endpoint_display: :display,
14
15
  endpoint_firmware: :firmware,
16
+ endpoint_ip_addresses: :ip_addresses,
15
17
  endpoint_log: :log,
16
18
  endpoint_models: :models,
19
+ endpoint_palettes: :palettes,
17
20
  endpoint_setup: :setup
18
21
  ]
19
22
 
20
23
  include Inspectable[
21
- endpoint_current_screen: :class,
22
- endpoint_display: :class,
23
- endpoint_firmware: :class,
24
- endpoint_log: :class,
25
- endpoint_models: :class,
26
- endpoint_setup: :class
24
+ endpoint_categories: :type,
25
+ endpoint_current_screen: :type,
26
+ endpoint_display: :type,
27
+ endpoint_firmware: :type,
28
+ endpoint_ip_addresses: :type,
29
+ endpoint_log: :type,
30
+ endpoint_models: :type,
31
+ endpoint_palettes: :type,
32
+ endpoint_setup: :type
27
33
  ]
28
34
 
29
35
  def initialize(**)
@@ -31,16 +37,22 @@ module TRMNL
31
37
  yield settings if block_given?
32
38
  end
33
39
 
40
+ def categories = endpoint_categories.call
41
+
34
42
  def current_screen(**) = endpoint_current_screen.call(**)
35
43
 
36
44
  def display(**) = endpoint_display.call(**)
37
45
 
38
46
  def firmware = endpoint_firmware.call
39
47
 
48
+ def ip_addresses = endpoint_ip_addresses.call
49
+
40
50
  def log(**) = endpoint_log.call(**)
41
51
 
42
52
  def models(**) = endpoint_models.call(**)
43
53
 
54
+ def palettes = endpoint_palettes.call
55
+
44
56
  def setup(**) = endpoint_setup.call(**)
45
57
  end
46
58
  end
@@ -20,10 +20,13 @@ module TRMNL
20
20
  end
21
21
 
22
22
  namespace :contracts do
23
+ register :category, Contracts::Category
23
24
  register :current_screen, Contracts::CurrentScreen
24
25
  register :display, Contracts::Display
25
26
  register :firmware, Contracts::Firmware
27
+ register :ip_address, Contracts::IPAddress
26
28
  register :model, Contracts::Model
29
+ register :palette, Contracts::Palette
27
30
  register :setup, Contracts::Setup
28
31
  end
29
32
 
@@ -31,7 +34,9 @@ module TRMNL
31
34
  register :current_screen, Models::CurrentScreen
32
35
  register :display, Models::Display
33
36
  register :firmware, Models::Firmware
37
+ register :ip_address, Models::IPAddress
34
38
  register :model, Models::Model
39
+ register :palette, Models::Palette
35
40
  register :setup, Models::Setup
36
41
  end
37
42
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/schema"
4
+
5
+ module TRMNL
6
+ module API
7
+ module Contracts
8
+ # Validates API response.
9
+ Category = Dry::Schema.JSON { required(:data).array(:string) }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/schema"
4
+
5
+ module TRMNL
6
+ module API
7
+ module Contracts
8
+ # Validates API response.
9
+ IPAddress = Dry::Schema.JSON do
10
+ required(:data).hash do
11
+ required(:ipv4).array(Types::IPAddress)
12
+ required(:ipv6).array(Types::IPAddress)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -21,7 +21,15 @@ module TRMNL
21
21
  required(:height).filled :integer
22
22
  required(:offset_x).filled :integer
23
23
  required(:offset_y).filled :integer
24
- required(:published_at).filled :time
24
+ required(:palette_ids).array(:string)
25
+ optional(:css).hash do
26
+ optional(:classes).hash do
27
+ required(:device).filled :string
28
+ required(:size).filled :string
29
+ end
30
+
31
+ optional(:variables).filled(Types::CSSVariables)
32
+ end
25
33
  end
26
34
  end
27
35
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/schema"
4
+
5
+ module TRMNL
6
+ module API
7
+ module Contracts
8
+ # Validates API response.
9
+ Palette = Dry::Schema.JSON do
10
+ required(:data).array(:hash) do
11
+ required(:id).filled :string
12
+ required(:name).filled :string
13
+ optional(:grays).maybe :integer
14
+ optional(:colors).maybe(:array)
15
+ optional(:framework_class).maybe :string
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "inspectable"
4
+ require "pipeable"
5
+
6
+ module TRMNL
7
+ module API
8
+ module Endpoints
9
+ # Handles API request/response.
10
+ class Category
11
+ include TRMNL::API::Dependencies[:requester, contract: "contracts.category"]
12
+
13
+ include Inspectable[contract: :type]
14
+ include Pipeable
15
+
16
+ def call
17
+ pipe(
18
+ requester.get("categories"),
19
+ try(:parse, catch: JSON::ParserError),
20
+ validate(contract, as: :to_h),
21
+ as(:fetch, :data)
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -9,11 +9,14 @@ module TRMNL
9
9
  module Container
10
10
  extend Containable
11
11
 
12
+ register(:categories) { Category.new }
12
13
  register(:current_screen) { CurrentScreen.new }
13
14
  register(:display) { Display.new }
14
15
  register(:firmware) { Firmware.new }
16
+ register(:ip_addresses) { IPAddress.new }
15
17
  register(:log) { Log.new }
16
18
  register(:models) { Model.new }
19
+ register(:palettes) { Palette.new }
17
20
  register(:setup) { Setup.new }
18
21
  end
19
22
  end
@@ -14,7 +14,7 @@ module TRMNL
14
14
  model: "models.current_screen"
15
15
  ]
16
16
 
17
- include Inspectable[contract: :class]
17
+ include Inspectable[contract: :type]
18
18
  include Pipeable
19
19
 
20
20
  def call token:
@@ -14,7 +14,7 @@ module TRMNL
14
14
  model: "models.display"
15
15
  ]
16
16
 
17
- include Inspectable[contract: :class]
17
+ include Inspectable[contract: :type]
18
18
  include Pipeable
19
19
 
20
20
  def call token:
@@ -14,7 +14,7 @@ module TRMNL
14
14
  model: "models.firmware"
15
15
  ]
16
16
 
17
- include Inspectable[contract: :class]
17
+ include Inspectable[contract: :type]
18
18
  include Pipeable
19
19
 
20
20
  def call
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "inspectable"
4
+ require "pipeable"
5
+
6
+ module TRMNL
7
+ module API
8
+ module Endpoints
9
+ # Handles API request/response.
10
+ class IPAddress
11
+ include TRMNL::API::Dependencies[
12
+ :requester,
13
+ contract: "contracts.ip_address",
14
+ model: "models.ip_address"
15
+ ]
16
+
17
+ include Inspectable[contract: :type]
18
+ include Pipeable
19
+
20
+ def call
21
+ pipe requester.get("ips"),
22
+ try(:parse, catch: JSON::ParserError),
23
+ validate(contract, as: :to_h),
24
+ as(:fetch, :data),
25
+ to(model, :for)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -14,7 +14,7 @@ module TRMNL
14
14
  model: "models.model"
15
15
  ]
16
16
 
17
- include Inspectable[contract: :class]
17
+ include Inspectable[contract: :type]
18
18
  include Pipeable
19
19
 
20
20
  def call
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "inspectable"
4
+ require "pipeable"
5
+
6
+ module TRMNL
7
+ module API
8
+ module Endpoints
9
+ # Handles API request/response.
10
+ class Palette
11
+ include TRMNL::API::Dependencies[
12
+ :requester,
13
+ contract: "contracts.palette",
14
+ model: "models.palette"
15
+ ]
16
+
17
+ include Inspectable[contract: :type]
18
+ include Pipeable
19
+
20
+ def call
21
+ pipe(
22
+ requester.get("palettes"),
23
+ try(:parse, catch: JSON::ParserError),
24
+ validate(contract, as: :to_h),
25
+ as(:fetch, :data),
26
+ map { |data| model.for(**data) }
27
+ )
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -14,7 +14,7 @@ module TRMNL
14
14
  model: "models.setup"
15
15
  ]
16
16
 
17
- include Inspectable[contract: :class]
17
+ include Inspectable[contract: :type]
18
18
  include Pipeable
19
19
 
20
20
  def call id:
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TRMNL
4
+ module API
5
+ module Models
6
+ # IPs API response.
7
+ IPAddress = Data.define :version_4, :version_6 do
8
+ def self.for attributes
9
+ new(**attributes.transform_keys(ipv4: :version_4, ipv6: :version_6))
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -18,7 +18,8 @@ module TRMNL
18
18
  :height,
19
19
  :offset_x,
20
20
  :offset_y,
21
- :published_at
21
+ :palette_ids,
22
+ :css
22
23
  ) do
23
24
  def self.for(attributes) = new(**attributes)
24
25
 
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TRMNL
4
+ module API
5
+ module Models
6
+ # IPs API response.
7
+ Palette = Data.define :id, :name, :grays, :colors, :framework_class do
8
+ def self.for(attributes) = new(**attributes)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/types"
4
+ require "ipaddr"
5
+
6
+ module TRMNL
7
+ module API
8
+ # A collection of custom types.
9
+ module Types
10
+ include Dry.Types(default: :strict)
11
+
12
+ CSSVariables = Dry::Types["array"].of(
13
+ Dry::Types["array"].constrained(filled: true, size: 2).of(Dry::Types["coercible.string"])
14
+ )
15
+
16
+ IPAddress = Constructor IPAddr
17
+ end
18
+ end
19
+ end
data/lib/trmnl/api.rb CHANGED
@@ -6,7 +6,7 @@ require "zeitwerk"
6
6
  Dry::Schema.load_extensions :monads
7
7
 
8
8
  Zeitwerk::Loader.new.then do |loader|
9
- loader.inflector.inflect "api" => "API", "trmnl" => "TRMNL"
9
+ loader.inflector.inflect "api" => "API", "ip_address" => "IPAddress", "trmnl" => "TRMNL"
10
10
  loader.tag = "trmnl-api"
11
11
  loader.push_dir "#{__dir__}/.."
12
12
  loader.setup
data/trmnl-api.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "trmnl-api"
5
- spec.version = "0.6.1"
5
+ spec.version = "0.8.0"
6
6
  spec.authors = ["TRMNL"]
7
7
  spec.email = ["engineering@usetrmnl.com"]
8
8
  spec.homepage = "https://github.com/usetrmnl/trmnl-api"
@@ -21,17 +21,17 @@ Gem::Specification.new do |spec|
21
21
  spec.signing_key = Gem.default_key_path
22
22
  spec.cert_chain = [Gem.default_cert_path]
23
23
 
24
- spec.required_ruby_version = ">= 3.4"
24
+ spec.required_ruby_version = ">= 4.0"
25
25
 
26
- spec.add_dependency "cogger", "~> 1.4"
27
- spec.add_dependency "containable", "~> 1.2"
28
- spec.add_dependency "dry-monads", "~> 1.8"
26
+ spec.add_dependency "cogger", "~> 2.0"
27
+ spec.add_dependency "containable", "~> 2.0"
28
+ spec.add_dependency "dry-monads", "~> 1.9"
29
29
  spec.add_dependency "dry-schema", "~> 1.14"
30
+ spec.add_dependency "dry-types", "~> 1.8"
30
31
  spec.add_dependency "http", "~> 5.3"
31
- spec.add_dependency "infusible", "~> 4.3"
32
- spec.add_dependency "inspectable", "~> 0.3"
33
- spec.add_dependency "openssl", "~> 3.3"
34
- spec.add_dependency "pipeable", "~> 1.3"
32
+ spec.add_dependency "infusible", "~> 5.0"
33
+ spec.add_dependency "inspectable", "~> 1.0"
34
+ spec.add_dependency "pipeable", "~> 2.0"
35
35
  spec.add_dependency "zeitwerk", "~> 2.7"
36
36
 
37
37
  spec.extra_rdoc_files = Dir["README*", "LICENSE*"]
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trmnl-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TRMNL
@@ -41,42 +41,42 @@ dependencies:
41
41
  requirements:
42
42
  - - "~>"
43
43
  - !ruby/object:Gem::Version
44
- version: '1.4'
44
+ version: '2.0'
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: !ruby/object:Gem::Requirement
48
48
  requirements:
49
49
  - - "~>"
50
50
  - !ruby/object:Gem::Version
51
- version: '1.4'
51
+ version: '2.0'
52
52
  - !ruby/object:Gem::Dependency
53
53
  name: containable
54
54
  requirement: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - "~>"
57
57
  - !ruby/object:Gem::Version
58
- version: '1.2'
58
+ version: '2.0'
59
59
  type: :runtime
60
60
  prerelease: false
61
61
  version_requirements: !ruby/object:Gem::Requirement
62
62
  requirements:
63
63
  - - "~>"
64
64
  - !ruby/object:Gem::Version
65
- version: '1.2'
65
+ version: '2.0'
66
66
  - !ruby/object:Gem::Dependency
67
67
  name: dry-monads
68
68
  requirement: !ruby/object:Gem::Requirement
69
69
  requirements:
70
70
  - - "~>"
71
71
  - !ruby/object:Gem::Version
72
- version: '1.8'
72
+ version: '1.9'
73
73
  type: :runtime
74
74
  prerelease: false
75
75
  version_requirements: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '1.8'
79
+ version: '1.9'
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: dry-schema
82
82
  requirement: !ruby/object:Gem::Requirement
@@ -92,75 +92,75 @@ dependencies:
92
92
  - !ruby/object:Gem::Version
93
93
  version: '1.14'
94
94
  - !ruby/object:Gem::Dependency
95
- name: http
95
+ name: dry-types
96
96
  requirement: !ruby/object:Gem::Requirement
97
97
  requirements:
98
98
  - - "~>"
99
99
  - !ruby/object:Gem::Version
100
- version: '5.3'
100
+ version: '1.8'
101
101
  type: :runtime
102
102
  prerelease: false
103
103
  version_requirements: !ruby/object:Gem::Requirement
104
104
  requirements:
105
105
  - - "~>"
106
106
  - !ruby/object:Gem::Version
107
- version: '5.3'
107
+ version: '1.8'
108
108
  - !ruby/object:Gem::Dependency
109
- name: infusible
109
+ name: http
110
110
  requirement: !ruby/object:Gem::Requirement
111
111
  requirements:
112
112
  - - "~>"
113
113
  - !ruby/object:Gem::Version
114
- version: '4.3'
114
+ version: '5.3'
115
115
  type: :runtime
116
116
  prerelease: false
117
117
  version_requirements: !ruby/object:Gem::Requirement
118
118
  requirements:
119
119
  - - "~>"
120
120
  - !ruby/object:Gem::Version
121
- version: '4.3'
121
+ version: '5.3'
122
122
  - !ruby/object:Gem::Dependency
123
- name: inspectable
123
+ name: infusible
124
124
  requirement: !ruby/object:Gem::Requirement
125
125
  requirements:
126
126
  - - "~>"
127
127
  - !ruby/object:Gem::Version
128
- version: '0.3'
128
+ version: '5.0'
129
129
  type: :runtime
130
130
  prerelease: false
131
131
  version_requirements: !ruby/object:Gem::Requirement
132
132
  requirements:
133
133
  - - "~>"
134
134
  - !ruby/object:Gem::Version
135
- version: '0.3'
135
+ version: '5.0'
136
136
  - !ruby/object:Gem::Dependency
137
- name: openssl
137
+ name: inspectable
138
138
  requirement: !ruby/object:Gem::Requirement
139
139
  requirements:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
- version: '3.3'
142
+ version: '1.0'
143
143
  type: :runtime
144
144
  prerelease: false
145
145
  version_requirements: !ruby/object:Gem::Requirement
146
146
  requirements:
147
147
  - - "~>"
148
148
  - !ruby/object:Gem::Version
149
- version: '3.3'
149
+ version: '1.0'
150
150
  - !ruby/object:Gem::Dependency
151
151
  name: pipeable
152
152
  requirement: !ruby/object:Gem::Requirement
153
153
  requirements:
154
154
  - - "~>"
155
155
  - !ruby/object:Gem::Version
156
- version: '1.3'
156
+ version: '2.0'
157
157
  type: :runtime
158
158
  prerelease: false
159
159
  version_requirements: !ruby/object:Gem::Requirement
160
160
  requirements:
161
161
  - - "~>"
162
162
  - !ruby/object:Gem::Version
163
- version: '1.3'
163
+ version: '2.0'
164
164
  - !ruby/object:Gem::Dependency
165
165
  name: zeitwerk
166
166
  requirement: !ruby/object:Gem::Requirement
@@ -190,26 +190,35 @@ files:
190
190
  - lib/trmnl/api/configuration/content.rb
191
191
  - lib/trmnl/api/configuration/loader.rb
192
192
  - lib/trmnl/api/container.rb
193
+ - lib/trmnl/api/contracts/category.rb
193
194
  - lib/trmnl/api/contracts/current_screen.rb
194
195
  - lib/trmnl/api/contracts/display.rb
195
196
  - lib/trmnl/api/contracts/firmware.rb
197
+ - lib/trmnl/api/contracts/ip_address.rb
196
198
  - lib/trmnl/api/contracts/model.rb
199
+ - lib/trmnl/api/contracts/palette.rb
197
200
  - lib/trmnl/api/contracts/setup.rb
198
201
  - lib/trmnl/api/dependencies.rb
202
+ - lib/trmnl/api/endpoints/category.rb
199
203
  - lib/trmnl/api/endpoints/container.rb
200
204
  - lib/trmnl/api/endpoints/current_screen.rb
201
205
  - lib/trmnl/api/endpoints/dependencies.rb
202
206
  - lib/trmnl/api/endpoints/display.rb
203
207
  - lib/trmnl/api/endpoints/firmware.rb
208
+ - lib/trmnl/api/endpoints/ip_address.rb
204
209
  - lib/trmnl/api/endpoints/log.rb
205
210
  - lib/trmnl/api/endpoints/model.rb
211
+ - lib/trmnl/api/endpoints/palette.rb
206
212
  - lib/trmnl/api/endpoints/setup.rb
207
213
  - lib/trmnl/api/models/current_screen.rb
208
214
  - lib/trmnl/api/models/display.rb
209
215
  - lib/trmnl/api/models/firmware.rb
216
+ - lib/trmnl/api/models/ip_address.rb
210
217
  - lib/trmnl/api/models/model.rb
218
+ - lib/trmnl/api/models/palette.rb
211
219
  - lib/trmnl/api/models/setup.rb
212
220
  - lib/trmnl/api/requester.rb
221
+ - lib/trmnl/api/types.rb
213
222
  - trmnl-api.gemspec
214
223
  homepage: https://github.com/usetrmnl/trmnl-api
215
224
  licenses:
@@ -228,14 +237,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
237
  requirements:
229
238
  - - ">="
230
239
  - !ruby/object:Gem::Version
231
- version: '3.4'
240
+ version: '4.0'
232
241
  required_rubygems_version: !ruby/object:Gem::Requirement
233
242
  requirements:
234
243
  - - ">="
235
244
  - !ruby/object:Gem::Version
236
245
  version: '0'
237
246
  requirements: []
238
- rubygems_version: 3.7.2
247
+ rubygems_version: 4.0.3
239
248
  specification_version: 4
240
249
  summary: A monadic TRMNL API client.
241
250
  test_files: []
metadata.gz.sig CHANGED
Binary file