adafruit-io 2.0.0.beta.7 → 3.0.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
- SHA1:
3
- metadata.gz: d4e361c9a85392c933fe7c35fda6bfd98f6f80cd
4
- data.tar.gz: 9a68f813bfff5fedee4511bb6fcd7b940ebfb1e4
2
+ SHA256:
3
+ metadata.gz: 0d3a797bff9e66a705fc31f4572f9158dde61f9253e5e3bf501b8d59adb6df5c
4
+ data.tar.gz: 40ad6e3b91d36b1b977584224c7c62448aa924aa78a8dc46beda1d58368d98f4
5
5
  SHA512:
6
- metadata.gz: 730d7000307a9569797d6904f7fa5fba72e7cf6ec507b753fdad266584b1fed8bfdfbe29ae569f2d8b00fe129cf42f93687d1d202816a2944f457121a94f65a2
7
- data.tar.gz: a61eb95bc77ff2aaab6d5893f9d16779e4d60acf1ab9612ba186e395bb73ab93c2e98af86f2f4fcbe518a44fa5f44c863ca12ac2fa3ed8a64ffd99a81ff2d75b
6
+ metadata.gz: 56efae94520d3ba34ab840877dfa9e16c2a6fd852bba785adec2ab24ed5c0243ab7d2aefcef4f473caf218affe11cb1f1daf519cfb34407e3a1fb8248efb827c
7
+ data.tar.gz: a81845c9affa024284f07203d2c6dce47d442a531b216dcb139028c1b7e6ebf1918c75a2b89e813d58d95d17c8efa6a6934c6b6f803acc6afa7eed63fdb250c3
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ![Build Status](https://travis-ci.org/adafruit/io-client-ruby.svg?branch=master)
1
+ ![CI](https://github.com/adafruit/io-client-ruby/workflows/CI/badge.svg)
2
2
 
3
3
  # adafruit-io
4
4
 
@@ -14,10 +14,11 @@ Older releases are available at these links:
14
14
 
15
15
  This is a near complete rewrite and strip-down of the library intended to support V2 of the Adafruit IO API with less code, maintenance, and stress.
16
16
 
17
- Why rewrite? This lets us the replace the existing, custom ActiveRecord-based interface with a flat, stateless API client returning plain hashes based on the JSON returned from API.Instead of writing a bunch of Ruby to make it feel like we're in a Rails app, we're just providing hooks into the API and a thin wrapper around Faraday.
17
+ Why rewrite? This lets us the replace the existing, custom ActiveRecord-based interface with a flat, stateless API client returning plain hashes based on the JSON returned from API. Instead of writing a bunch of Ruby to make it feel like we're in a Rails app, we're just providing hooks into the API and a thin wrapper around Faraday.
18
18
 
19
19
  The API is not very complex, code that uses it shouldn't be either.
20
20
 
21
+
21
22
  ## Roadmap
22
23
 
23
24
  It is our goal to eventually support all API V2 methods, but that will happen in stages.
@@ -35,17 +36,9 @@ It is our goal to eventually support all API V2 methods, but that will happen in
35
36
 
36
37
  Still needing complete tests:
37
38
 
38
- - [x] Feeds
39
- - [x] Data
40
- - [x] Tokens
41
- - [x] Blocks
42
- - [ ] Dashboards *has pending*
43
- - [ ] Groups *has pending*
44
- - [ ] Activities
45
- - [ ] Permissions
46
- - [ ] Triggers
47
39
  - [ ] MQTT
48
40
 
41
+
49
42
  ## Installation
50
43
 
51
44
  Add this line to your application's Gemfile:
@@ -60,9 +53,12 @@ Or install it yourself as:
60
53
 
61
54
  $ gem install adafruit-io
62
55
 
56
+
57
+
63
58
  ## Basic Usage
64
59
 
65
- Each time you use the library, you'll want to pass your [AIO Key][4] to the client.
60
+ Each time you use the library, you'll have to pass your [Adafruit IO Key][4] to the client.
61
+
66
62
 
67
63
  ```ruby
68
64
  require 'adafruit/io'
@@ -73,6 +69,7 @@ aio = Adafruit::IO::Client.new key: 'KEY'
73
69
 
74
70
  Since every API request requires a username, you can also pass a username to the client initializer to use it for every request.
75
71
 
72
+
76
73
  ```ruby
77
74
  require 'adafruit/io'
78
75
 
@@ -80,15 +77,50 @@ require 'adafruit/io'
80
77
  aio = Adafruit::IO::Client.new key: 'KEY', username: 'USERNAME'
81
78
  ```
82
79
 
83
- All return values are plain Ruby hashes based on the JSON response returned by the API. Most basic requests should get back a Hash with a `key` field. The key can be used in subsequent requests. API requests that return a list of objects will return a simple array of hashes. Feeds, Groups, and Dashboards all rely on the `key` value, other endpoints (Blocks, Permissions, Tokens, Triggers) use `id`.
80
+
81
+
82
+ ### Environment Variables
83
+
84
+ Whenever possible, we recommend you keep your Adafruit IO API credentials out of your application code by using environment variables. All the examples
85
+
86
+ [Others](http://blog.honeybadger.io/ruby-guide-environment-variables/) have written about using environment variables in Ruby, so we're not going to go into detail. We recommend the [dotenv](https://github.com/bkeepers/dotenv) gem if you're building a Ruby project.
87
+
88
+
89
+
90
+ ### API Response Values
91
+
92
+ All return values are **plain Ruby hashes** based on the JSON response returned by the API. Most basic requests should get back a Hash with a `key` field. The key can be used in subsequent requests. API requests that return a list of objects will return a simple array of hashes. Feeds, Groups, and Dashboards all rely on the `key` value, other endpoints (Blocks, Permissions, Tokens, Triggers) use `id`.
93
+
94
+ You can find the current API documentation at [https://io.adafruit.com/api/docs/](https://io.adafruit.com/api/docs/). This library implements v2 of the Adafruit IO API.
95
+
96
+
97
+
98
+ ### API Error Responses
99
+
100
+ As of **v2.0.0**, this library raises an `Adafruit::IO::RequestError` on any non HTTP 200 status responses. Generally, this means your code should wrap API calls in `begin...rescue...end` blocks.
101
+
102
+ ```ruby
103
+ require 'adafruit/io'
104
+
105
+ api_key = ENV['IO_KEY']
106
+ username = ENV['IO_USER']
107
+
108
+ api = Adafruit::IO::Client.new key: api_key, username: username
109
+
110
+
111
+
112
+ ```
113
+
114
+ ## Example
84
115
 
85
116
  Here's an example of creating, adding data to, and deleting a feed.
86
117
 
118
+
87
119
  ```ruby
88
120
  require 'adafruit/io'
89
121
 
90
- api_key = ENV['AIO_KEY']
91
- username = ENV['AIO_USER']
122
+ api_key = ENV['IO_KEY']
123
+ username = ENV['IO_USER']
92
124
 
93
125
  api = Adafruit::IO::Client.new key: api_key, username: username
94
126
 
@@ -120,19 +152,25 @@ puts "read?"
120
152
  puts api.feed(garbage['key']).inspect
121
153
  ```
122
154
 
155
+
156
+ This code and more is available in [the examples/ directory](examples/).
157
+
123
158
  ## License
124
159
 
125
- Copyright (c) 2017 Adafruit Industries. Licensed under the MIT license.
160
+ Copyright (c) 2018 Adafruit Industries. Licensed under the MIT license.
126
161
 
127
162
  [Adafruit](https://adafruit.com) invests time and resources providing this open source code. Please support Adafruit and open-source hardware by purchasing products from [Adafruit](https://adafruit.com).
128
163
 
129
164
  ## Contributing
130
165
 
131
166
  1. Fork it ( http://github.com/adafruit/io-client-ruby/fork )
132
- 2. Create your feature branch (`git checkout -b my-new-feature`)
133
- 3. Commit your changes (`git commit -am 'Add some feature'`)
134
- 4. Push to the branch (`git push origin my-new-feature`)
135
- 5. Create new Pull Request
167
+ 1. Create your feature branch (`git checkout -b my-new-feature`)
168
+ 1. Write tests, write code, and run the tests (`bundle exec rspec`)
169
+ 1. Commit your changes (`git commit -am 'Add some feature'`)
170
+ 1. Push to the branch (`git push origin my-new-feature`)
171
+ 1. Create a new Pull Request
172
+
173
+ If you'd like to contribute and don't know where to start, [reach out on the Adafruit IO forum](https://forums.adafruit.com/viewforum.php?f=56) or in the [adafruit-io channel on our Discord server](https://discord.gg/adafruit).
136
174
 
137
175
  [1]: https://www.ruby-lang.org
138
176
  [2]: https://io.adafruit.com
data/adafruit-io.gemspec CHANGED
@@ -20,11 +20,11 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
  spec.licenses = ['MIT']
22
22
 
23
- spec.add_dependency "faraday", "~> 0.8"
24
- spec.add_dependency "faraday_middleware", "~> 0.9"
25
- spec.add_dependency "activesupport", "~> 4.2"
26
- spec.add_dependency "mqtt", "~> 0.4"
23
+ spec.add_dependency "faraday", "~> 2.14"
24
+ spec.add_dependency "faraday-multipart", "~> 1.0"
25
+ spec.add_dependency "activesupport", "~> 8.0"
26
+ spec.add_dependency "mqtt", "~> 0.7"
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.5"
29
- spec.add_development_dependency "rake", "~> 10.4"
28
+ spec.add_development_dependency "bundler", "~> 2.7"
29
+ spec.add_development_dependency "rake", "~> 13.2"
30
30
  end
@@ -46,7 +46,7 @@ module Adafruit
46
46
  record_or_id = arguments.shift
47
47
  return nil if record_or_id.nil?
48
48
 
49
- if record_or_id.is_a?(String) || record_or_id.is_a?(Fixnum)
49
+ if record_or_id.is_a?(String) || record_or_id.is_a?(Integer)
50
50
  record_or_id
51
51
  elsif record_or_id.is_a?(Hash) && (record_or_id.has_key?('id') || record_or_id.has_key?(:id))
52
52
  record_or_id['id'] || record_or_id[:id]
@@ -40,6 +40,14 @@ module Adafruit
40
40
 
41
41
  put api_url(username, 'dashboards', dashboard_key), query
42
42
  end
43
+
44
+ def update_dashboard_layouts(*args)
45
+ username, arguments = extract_username(args)
46
+ dashboard_key = get_key_from_arguments(arguments)
47
+ query = get_query_from_arguments(arguments, %w(layouts))
48
+
49
+ post api_url(username, 'dashboards', dashboard_key, 'update_layouts'), query
50
+ end
43
51
  end
44
52
  end
45
53
  end
@@ -2,6 +2,7 @@ module Adafruit
2
2
  module IO
3
3
  class Client
4
4
  module Permissions
5
+ VALID_TYPES = %(feed group dashboard)
5
6
 
6
7
  # Get all permissions for a resource.
7
8
  #
@@ -9,40 +10,62 @@ module Adafruit
9
10
  def permissions(*args)
10
11
  username, arguments = extract_username(args)
11
12
 
12
- if arguments.size < 2
13
- raise 'permissions requires model type (string) and model key (string) values. valid types are feeds, groups, or dashboards'
14
- end
13
+ assert_argument_size(arguments, 2)
14
+ assert_resource_type(arguments[0])
15
15
 
16
- get api_url(username, arguments[0], arguments[1], 'acl')
16
+ get api_url(username, pluralize_type(arguments[0]), arguments[1], 'acl')
17
17
  end
18
18
 
19
19
  def permission(*args)
20
20
  username, arguments = extract_username(args)
21
21
 
22
- if arguments.size < 3
23
- raise 'permission requires model type (string), model key (string), and id (integer) values. valid types are feeds, groups, or dashboards'
24
- end
22
+ assert_argument_size(arguments, 3)
23
+ assert_resource_type(arguments[0])
25
24
 
26
- get api_url(username, arguments[0], arguments[1], 'acl', arguments[2])
25
+ get api_url(username, pluralize_type(arguments[0]), arguments[1], 'acl', arguments[2])
27
26
  end
28
27
 
29
28
  def create_permission(*args)
30
29
  username, arguments = extract_username(args)
31
- if arguments.size < 3
32
- raise 'permission requires model type (string), model key (string), and id (integer) values. valid types are feeds, groups, or dashboards'
33
- end
30
+
31
+ assert_argument_size(arguments, 2)
32
+ assert_resource_type(arguments[0])
33
+
34
34
  permission_attrs = arguments.pop
35
- post api_url(username, arguments[0], arguments[1], 'acl'), permission_attrs
35
+ post api_url(username, pluralize_type(arguments[0]), arguments[1], 'acl'), permission_attrs
36
36
  end
37
37
 
38
38
  def delete_permission(*args)
39
39
  username, arguments = extract_username(args)
40
40
 
41
- if arguments.size < 3
42
- raise 'permission requires model type (string), key (string), and id (integer) values. valid types are feeds, groups, or dashboards'
41
+ assert_argument_size(arguments, 3)
42
+ assert_resource_type(arguments[0])
43
+
44
+ delete api_url(username, pluralize_type(arguments[0]), arguments[1], 'acl', arguments[2])
45
+ end
46
+
47
+ private
48
+
49
+ def assert_resource_type(resource_type)
50
+ if !VALID_TYPES.include?(resource_type)
51
+ raise Adafruit::IO::Arguments::ArgumentError.new('permission resource type must be one of: feed, group, or dashboard')
52
+ end
53
+ end
54
+
55
+ def assert_argument_size(arguments, size)
56
+ if size === 3
57
+ if arguments.size < 3
58
+ raise Adafruit::IO::Arguments::ArgumentError.new('permission requires resource type (string), key (string), and permission id (integer) values. valid types are feeds, groups, or dashboards')
59
+ end
60
+ elsif size == 2
61
+ if arguments.size < size
62
+ raise Adafruit::IO::Arguments::ArgumentError.new('permissions requires resource type (string) and resource key (string) values. valid types are feed, group, or dashboard')
63
+ end
43
64
  end
65
+ end
44
66
 
45
- delete api_url(username, arguments[0], arguments[1], 'acl', arguments[2])
67
+ def pluralize_type(resource_type)
68
+ "#{resource_type}s"
46
69
  end
47
70
  end
48
71
  end
@@ -38,7 +38,7 @@ module Adafruit
38
38
  trigger_id = get_id_from_arguments(arguments)
39
39
  attrs = valid_trigger_attrs(arguments)
40
40
 
41
- put api_url(username, 'triggers', feed_key), query
41
+ put api_url(username, 'triggers', trigger_id), attrs
42
42
  end
43
43
 
44
44
  private
@@ -1,8 +1,6 @@
1
1
  require 'json'
2
2
 
3
3
  require 'faraday'
4
- require 'faraday_middleware'
5
- require 'faraday_middleware/response/mashify'
6
4
 
7
5
  require 'adafruit/io/arguments'
8
6
  require 'adafruit/io/configurable'
@@ -78,8 +76,7 @@ module Adafruit
78
76
  c.response :logger
79
77
  end
80
78
 
81
- c.use :instrumentation
82
- c.adapter Faraday.default_adapter
79
+ c.response :json
83
80
  end
84
81
  end
85
82
 
@@ -95,11 +95,18 @@ module Adafruit
95
95
 
96
96
  # Subscribe to the feed with the given key. Use .get to retrieve messages
97
97
  # from subscribed feeds.
98
- def subscribe(key)
98
+ #
99
+ # Include the { last_value: true } option if you'd like the feed to
100
+ # receive the last value immediately. (like MQTT retain)
101
+ def subscribe(key, options={})
99
102
  raise 'client is not connected' unless @client.connected?
100
103
 
101
104
  topic = key_to_feed_topic(key)
102
105
  @client.subscribe(topic)
106
+
107
+ if options[:last_value]
108
+ @client.publish(topic + '/get', '')
109
+ end
103
110
  end
104
111
 
105
112
  def unsubscribe(key)
@@ -143,15 +150,21 @@ module Adafruit
143
150
  # # do something
144
151
  # end
145
152
  #
146
- # NOTE: if a feed already has a value, subscribing and calling get will
147
- # immediately return the most recent value for the subscription,
148
- # regardless of when it was received by IO.
149
153
  def get(&block)
150
154
  @client.get(&block)
151
155
  end
152
156
 
153
157
  private
154
158
 
159
+ def encode_json(record)
160
+ begin
161
+ JSON.generate record
162
+ rescue JSON::GeneratorError => ex
163
+ puts "failed to generate JSON from record: #{record.inspect}"
164
+ raise ex
165
+ end
166
+ end
167
+
155
168
  def key_to_feed_topic(key)
156
169
  "%s/f/%s" % [@options[:username], key]
157
170
  end
@@ -169,7 +182,7 @@ module Adafruit
169
182
  end
170
183
  end
171
184
 
172
- JSON.generate payload
185
+ encode_json payload
173
186
  end
174
187
 
175
188
  def payload_from_values_with_location(values, location)
@@ -183,7 +196,7 @@ module Adafruit
183
196
  end
184
197
  end
185
198
 
186
- JSON.generate payload
199
+ encode_json payload
187
200
  end
188
201
 
189
202
  def indifferent_keys(hash)
@@ -2,6 +2,15 @@ require 'open-uri'
2
2
 
3
3
  module Adafruit
4
4
  module IO
5
+ class RequestError < StandardError
6
+ attr_reader :response
7
+
8
+ def initialize(message, response)
9
+ super(message)
10
+ @response = response
11
+ end
12
+ end
13
+
5
14
  module RequestHandler
6
15
 
7
16
  attr_reader :last_response, :pagination
@@ -61,7 +70,7 @@ module Adafruit
61
70
 
62
71
  def handle_get(url, options = {})
63
72
  response = conn.get do |req|
64
- req.url URI::encode(url)
73
+ req.url url
65
74
  options.each do |k,v|
66
75
  req.params[k] = v
67
76
  end
@@ -70,11 +79,7 @@ module Adafruit
70
79
  update_pagination(response)
71
80
 
72
81
  if response.status < 200 || response.status > 299
73
- if response.status === 404
74
- nil
75
- else
76
- raise "GET error: #{ response.body }"
77
- end
82
+ raise Adafruit::IO::RequestError.new("GET error: #{ response.body }", response)
78
83
  else
79
84
  parsed_response response
80
85
  end
@@ -82,12 +87,12 @@ module Adafruit
82
87
 
83
88
  def handle_post(url, data, options = {})
84
89
  response = conn.post do |req|
85
- req.url URI::encode(url)
90
+ req.url url
86
91
  req.body = data
87
92
  end
88
93
 
89
94
  if response.status < 200 || response.status > 299
90
- raise "POST error: #{ response.body }"
95
+ raise Adafruit::IO::RequestError.new("POST error: #{ response.body }", response)
91
96
  else
92
97
  parsed_response response
93
98
  end
@@ -95,12 +100,12 @@ module Adafruit
95
100
 
96
101
  def handle_put(url, data, options = {})
97
102
  response = conn.put do |req|
98
- req.url URI::encode(url)
103
+ req.url url
99
104
  req.body = data
100
105
  end
101
106
 
102
107
  if response.status < 200 || response.status > 299
103
- raise "PUT error: #{ response.body }"
108
+ raise Adafruit::IO::RequestError.new("PUT error: #{ response.body }", response)
104
109
  else
105
110
  parsed_response response
106
111
  end
@@ -108,14 +113,14 @@ module Adafruit
108
113
 
109
114
  def handle_delete(url, options = {})
110
115
  response = conn.delete do |req|
111
- req.url URI::encode(url)
116
+ req.url url
112
117
  end
113
118
 
114
119
  if response.status < 200 || response.status > 299
115
120
  if response.status === 404
116
121
  nil
117
122
  else
118
- raise "DELETE error: #{ response.body }"
123
+ raise Adafruit::IO::RequestError.new("DELETE error: #{ response.body }", response)
119
124
  end
120
125
  else
121
126
  parsed_response response
@@ -1,5 +1,5 @@
1
1
  module Adafruit
2
2
  module IO
3
- VERSION = "2.0.0.beta.7"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adafruit-io
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta.7
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Cooper
8
8
  - Adam Bachman
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2018-04-02 00:00:00.000000000 Z
11
+ date: 2025-11-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: faraday
@@ -17,84 +16,84 @@ dependencies:
17
16
  requirements:
18
17
  - - "~>"
19
18
  - !ruby/object:Gem::Version
20
- version: '0.8'
19
+ version: '2.14'
21
20
  type: :runtime
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
24
  - - "~>"
26
25
  - !ruby/object:Gem::Version
27
- version: '0.8'
26
+ version: '2.14'
28
27
  - !ruby/object:Gem::Dependency
29
- name: faraday_middleware
28
+ name: faraday-multipart
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - "~>"
33
32
  - !ruby/object:Gem::Version
34
- version: '0.9'
33
+ version: '1.0'
35
34
  type: :runtime
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
38
  - - "~>"
40
39
  - !ruby/object:Gem::Version
41
- version: '0.9'
40
+ version: '1.0'
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: activesupport
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
45
  - - "~>"
47
46
  - !ruby/object:Gem::Version
48
- version: '4.2'
47
+ version: '8.0'
49
48
  type: :runtime
50
49
  prerelease: false
51
50
  version_requirements: !ruby/object:Gem::Requirement
52
51
  requirements:
53
52
  - - "~>"
54
53
  - !ruby/object:Gem::Version
55
- version: '4.2'
54
+ version: '8.0'
56
55
  - !ruby/object:Gem::Dependency
57
56
  name: mqtt
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
59
  - - "~>"
61
60
  - !ruby/object:Gem::Version
62
- version: '0.4'
61
+ version: '0.7'
63
62
  type: :runtime
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
66
65
  requirements:
67
66
  - - "~>"
68
67
  - !ruby/object:Gem::Version
69
- version: '0.4'
68
+ version: '0.7'
70
69
  - !ruby/object:Gem::Dependency
71
70
  name: bundler
72
71
  requirement: !ruby/object:Gem::Requirement
73
72
  requirements:
74
73
  - - "~>"
75
74
  - !ruby/object:Gem::Version
76
- version: '1.5'
75
+ version: '2.7'
77
76
  type: :development
78
77
  prerelease: false
79
78
  version_requirements: !ruby/object:Gem::Requirement
80
79
  requirements:
81
80
  - - "~>"
82
81
  - !ruby/object:Gem::Version
83
- version: '1.5'
82
+ version: '2.7'
84
83
  - !ruby/object:Gem::Dependency
85
84
  name: rake
86
85
  requirement: !ruby/object:Gem::Requirement
87
86
  requirements:
88
87
  - - "~>"
89
88
  - !ruby/object:Gem::Version
90
- version: '10.4'
89
+ version: '13.2'
91
90
  type: :development
92
91
  prerelease: false
93
92
  version_requirements: !ruby/object:Gem::Requirement
94
93
  requirements:
95
94
  - - "~>"
96
95
  - !ruby/object:Gem::Version
97
- version: '10.4'
96
+ version: '13.2'
98
97
  description: API Client Library for the Adafruit IO product
99
98
  email:
100
99
  - justin@adafruit.com
@@ -127,7 +126,6 @@ homepage: https://github.com/adafruit/io-client-ruby
127
126
  licenses:
128
127
  - MIT
129
128
  metadata: {}
130
- post_install_message:
131
129
  rdoc_options: []
132
130
  require_paths:
133
131
  - lib
@@ -138,13 +136,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
136
  version: '0'
139
137
  required_rubygems_version: !ruby/object:Gem::Requirement
140
138
  requirements:
141
- - - ">"
139
+ - - ">="
142
140
  - !ruby/object:Gem::Version
143
- version: 1.3.1
141
+ version: '0'
144
142
  requirements: []
145
- rubyforge_project:
146
- rubygems_version: 2.5.2
147
- signing_key:
143
+ rubygems_version: 3.6.2
148
144
  specification_version: 4
149
145
  summary: Adafruit IO API Client Library
150
146
  test_files: []