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 +5 -5
- data/README.md +58 -20
- data/adafruit-io.gemspec +6 -6
- data/lib/adafruit/io/arguments.rb +1 -1
- data/lib/adafruit/io/client/dashboards.rb +8 -0
- data/lib/adafruit/io/client/permissions.rb +38 -15
- data/lib/adafruit/io/client/triggers.rb +1 -1
- data/lib/adafruit/io/client.rb +1 -4
- data/lib/adafruit/io/mqtt.rb +19 -6
- data/lib/adafruit/io/request_handler.rb +17 -12
- data/lib/adafruit/io/version.rb +1 -1
- metadata +18 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 0d3a797bff9e66a705fc31f4572f9158dde61f9253e5e3bf501b8d59adb6df5c
|
|
4
|
+
data.tar.gz: 40ad6e3b91d36b1b977584224c7c62448aa924aa78a8dc46beda1d58368d98f4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 56efae94520d3ba34ab840877dfa9e16c2a6fd852bba785adec2ab24ed5c0243ab7d2aefcef4f473caf218affe11cb1f1daf519cfb34407e3a1fb8248efb827c
|
|
7
|
+
data.tar.gz: a81845c9affa024284f07203d2c6dce47d442a531b216dcb139028c1b7e6ebf1918c75a2b89e813d58d95d17c8efa6a6934c6b6f803acc6afa7eed63fdb250c3
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-

|
|
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
|
|
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
|
-
|
|
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['
|
|
91
|
-
username = ENV['
|
|
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)
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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", "~>
|
|
24
|
-
spec.add_dependency "
|
|
25
|
-
spec.add_dependency "activesupport", "~>
|
|
26
|
-
spec.add_dependency "mqtt", "~> 0.
|
|
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", "~>
|
|
29
|
-
spec.add_development_dependency "rake", "~>
|
|
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?(
|
|
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
|
-
|
|
13
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
42
|
-
|
|
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
|
-
|
|
67
|
+
def pluralize_type(resource_type)
|
|
68
|
+
"#{resource_type}s"
|
|
46
69
|
end
|
|
47
70
|
end
|
|
48
71
|
end
|
data/lib/adafruit/io/client.rb
CHANGED
|
@@ -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.
|
|
82
|
-
c.adapter Faraday.default_adapter
|
|
79
|
+
c.response :json
|
|
83
80
|
end
|
|
84
81
|
end
|
|
85
82
|
|
data/lib/adafruit/io/mqtt.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
data/lib/adafruit/io/version.rb
CHANGED
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:
|
|
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:
|
|
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: '
|
|
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: '
|
|
26
|
+
version: '2.14'
|
|
28
27
|
- !ruby/object:Gem::Dependency
|
|
29
|
-
name:
|
|
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
|
|
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
|
|
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: '
|
|
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: '
|
|
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.
|
|
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.
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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:
|
|
141
|
+
version: '0'
|
|
144
142
|
requirements: []
|
|
145
|
-
|
|
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: []
|