adafruit-io 2.0.0 → 4.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 +3 -12
- data/adafruit-io.gemspec +4 -6
- data/lib/adafruit/io/arguments.rb +18 -10
- data/lib/adafruit/io/client/blocks.rb +7 -2
- data/lib/adafruit/io/client/data.rb +3 -1
- data/lib/adafruit/io/client/permissions.rb +7 -2
- data/lib/adafruit/io/client/tokens.rb +2 -2
- data/lib/adafruit/io/client.rb +13 -13
- data/lib/adafruit/io/errors.rb +18 -0
- data/lib/adafruit/io/mqtt.rb +9 -8
- data/lib/adafruit/io/request_handler.rb +31 -45
- data/lib/adafruit/io/version.rb +1 -1
- metadata +11 -56
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a1d57d2998069e7dda6fd18ab4dac69cf1ce98d67e84568046118bda4bb14bf7
|
|
4
|
+
data.tar.gz: 6d31d21c4ff9186492d93202dc27a1359b935d5e33d8ee57d0f376c63a6ea33c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 61b089f5f60170a8e2133c66f6db86ab631ab2820d302ad905ec26e1a0d65b9954a02682b264063580bbd7400d6c693d0880c4b5627b7877c706c5440d0da3d3
|
|
7
|
+
data.tar.gz: f38e367aabdd8e5f86edf645aea9697dbb248e229b2f4adbb6427f984ea2da1ea837cdbc09fe935534cac505a8822b2581cbb3c2933caa15494726739b915fdf
|
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.
|
|
@@ -32,22 +33,12 @@ It is our goal to eventually support all API V2 methods, but that will happen in
|
|
|
32
33
|
- [x] Activities `2.0.0.beta.5`
|
|
33
34
|
- [x] Permissions `2.0.0.beta.5`
|
|
34
35
|
- [x] Triggers `2.0.0.beta.6`
|
|
35
|
-
- [x] Feeds `2.0.0`
|
|
36
|
-
- [x] Data `2.0.0`
|
|
37
|
-
- [x] Tokens `2.0.0`
|
|
38
|
-
- [x] Blocks `2.0.0`
|
|
39
|
-
- [x] Dashboards `2.0.0`
|
|
40
|
-
- [x] Groups `2.0.0`
|
|
41
|
-
- [x] Activities `2.0.0`
|
|
42
|
-
- [x] Permissions `2.0.0`
|
|
43
|
-
- [x] Triggers `2.0.0`
|
|
44
36
|
|
|
45
37
|
Still needing complete tests:
|
|
46
38
|
|
|
47
39
|
- [ ] MQTT
|
|
48
40
|
|
|
49
41
|
|
|
50
|
-
|
|
51
42
|
## Installation
|
|
52
43
|
|
|
53
44
|
Add this line to your application's Gemfile:
|
data/adafruit-io.gemspec
CHANGED
|
@@ -18,13 +18,11 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
20
20
|
spec.require_paths = ["lib"]
|
|
21
|
+
spec.required_ruby_version = ">= 3.3"
|
|
21
22
|
spec.licenses = ['MIT']
|
|
22
23
|
|
|
23
|
-
spec.add_dependency "faraday", "~>
|
|
24
|
-
spec.add_dependency "
|
|
25
|
-
spec.add_dependency "activesupport", "~> 4.2"
|
|
26
|
-
spec.add_dependency "mqtt", "~> 0.4"
|
|
24
|
+
spec.add_dependency "faraday", "~> 2.14"
|
|
25
|
+
spec.add_dependency "mqtt", "~> 0.7"
|
|
27
26
|
|
|
28
|
-
spec.add_development_dependency "
|
|
29
|
-
spec.add_development_dependency "rake", "~> 10.4"
|
|
27
|
+
spec.add_development_dependency "rake", "~> 13.2"
|
|
30
28
|
end
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
+
require 'adafruit/io/errors'
|
|
2
|
+
|
|
1
3
|
module Adafruit
|
|
2
4
|
module IO
|
|
3
5
|
module Arguments
|
|
4
|
-
class ArgumentError < StandardError; end
|
|
5
|
-
|
|
6
6
|
# Allows us to give a username during client initialization or with a specific method.
|
|
7
7
|
def extract_username(args)
|
|
8
8
|
username = @username
|
|
9
9
|
|
|
10
10
|
if args.last.is_a?(Hash) && args.last.has_key?(:username)
|
|
11
|
-
|
|
11
|
+
options = args.last.dup
|
|
12
|
+
username = options.delete(:username)
|
|
13
|
+
args = args[0...-1] + [options]
|
|
12
14
|
end
|
|
13
15
|
|
|
14
16
|
if username.nil?
|
|
15
|
-
raise "cannot make request when username is nil"
|
|
17
|
+
raise ArgumentError.new("cannot make request when username is nil")
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
[ username, args ]
|
|
@@ -34,10 +36,11 @@ module Adafruit
|
|
|
34
36
|
record_or_key
|
|
35
37
|
elsif record_or_key.is_a?(Hash) && (record_or_key.has_key?('key') || record_or_key.has_key?(:key))
|
|
36
38
|
record_or_key['key'] || record_or_key[:key]
|
|
37
|
-
elsif record_or_key.respond_to?(:key)
|
|
39
|
+
elsif !record_or_key.is_a?(Hash) && record_or_key.respond_to?(:key)
|
|
40
|
+
# Hash#key(value) exists, so plain hashes must not land here
|
|
38
41
|
record_or_key.key
|
|
39
42
|
else
|
|
40
|
-
raise 'unrecognized object or key value in arguments'
|
|
43
|
+
raise ArgumentError.new('unrecognized object or key value in arguments')
|
|
41
44
|
end
|
|
42
45
|
end
|
|
43
46
|
|
|
@@ -46,25 +49,30 @@ module Adafruit
|
|
|
46
49
|
record_or_id = arguments.shift
|
|
47
50
|
return nil if record_or_id.nil?
|
|
48
51
|
|
|
49
|
-
if record_or_id.is_a?(String) || record_or_id.is_a?(
|
|
52
|
+
if record_or_id.is_a?(String) || record_or_id.is_a?(Integer)
|
|
50
53
|
record_or_id
|
|
51
54
|
elsif record_or_id.is_a?(Hash) && (record_or_id.has_key?('id') || record_or_id.has_key?(:id))
|
|
52
55
|
record_or_id['id'] || record_or_id[:id]
|
|
53
56
|
elsif record_or_id.respond_to?(:id)
|
|
54
57
|
record_or_id.id
|
|
55
58
|
else
|
|
56
|
-
raise 'unrecognized object or id value in arguments'
|
|
59
|
+
raise ArgumentError.new('unrecognized object or id value in arguments')
|
|
57
60
|
end
|
|
58
61
|
end
|
|
59
62
|
|
|
60
|
-
# Get a filtered list of parameters from the next argument
|
|
63
|
+
# Get a filtered list of parameters from the next argument. Accepts
|
|
64
|
+
# either symbol or string keys.
|
|
61
65
|
def get_query_from_arguments(arguments, params)
|
|
62
66
|
query = {}
|
|
63
67
|
options = arguments.shift
|
|
64
68
|
return query if options.nil?
|
|
65
69
|
|
|
66
70
|
params.each do |param|
|
|
67
|
-
|
|
71
|
+
if options.has_key?(param.to_sym)
|
|
72
|
+
query[param] = options[param.to_sym]
|
|
73
|
+
elsif options.has_key?(param.to_s)
|
|
74
|
+
query[param] = options[param.to_s]
|
|
75
|
+
end
|
|
68
76
|
end
|
|
69
77
|
query
|
|
70
78
|
end
|
|
@@ -38,12 +38,17 @@ module Adafruit
|
|
|
38
38
|
delete api_url(username, 'dashboards', dashboard_key, 'blocks', block_id)
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
# Update a block
|
|
41
|
+
# Update a block. Attributes can be given in the same hash as
|
|
42
|
+
# dashboard_key and key, or as a separate second hash:
|
|
43
|
+
#
|
|
44
|
+
# client.update_block(dashboard_key: 'db', key: 1, name: 'new')
|
|
45
|
+
# client.update_block({ dashboard_key: 'db', key: 1 }, { name: 'new' })
|
|
42
46
|
def update_block(*args)
|
|
43
47
|
username, arguments = extract_username(args)
|
|
44
48
|
dashboard_key = require_argument(arguments, :dashboard_key)
|
|
49
|
+
options = arguments.first
|
|
45
50
|
block_id = get_key_from_arguments(arguments)
|
|
46
|
-
block_attrs = valid_block_attrs(arguments)
|
|
51
|
+
block_attrs = valid_block_attrs(arguments.empty? ? [options] : arguments)
|
|
47
52
|
|
|
48
53
|
put api_url(username, 'dashboards', dashboard_key, 'blocks', block_id), block_attrs
|
|
49
54
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'time'
|
|
2
|
+
|
|
1
3
|
module Adafruit
|
|
2
4
|
module IO
|
|
3
5
|
class Client
|
|
@@ -53,7 +55,7 @@ module Adafruit
|
|
|
53
55
|
values = arguments.shift
|
|
54
56
|
|
|
55
57
|
if values.nil? || !values.is_a?(Array)
|
|
56
|
-
raise "expected batch values to be an array"
|
|
58
|
+
raise Adafruit::IO::Arguments::ArgumentError.new("expected batch values to be an array")
|
|
57
59
|
end
|
|
58
60
|
|
|
59
61
|
if !values.first.is_a?(Hash)
|
|
@@ -2,7 +2,7 @@ module Adafruit
|
|
|
2
2
|
module IO
|
|
3
3
|
class Client
|
|
4
4
|
module Permissions
|
|
5
|
-
VALID_TYPES = %(feed group dashboard)
|
|
5
|
+
VALID_TYPES = %w(feed group dashboard).freeze
|
|
6
6
|
|
|
7
7
|
# Get all permissions for a resource.
|
|
8
8
|
#
|
|
@@ -25,13 +25,18 @@ module Adafruit
|
|
|
25
25
|
get api_url(username, pluralize_type(arguments[0]), arguments[1], 'acl', arguments[2])
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
+
# client.create_permission(TYPE, KEY, { scope: 'public', mode: 'r' })
|
|
28
29
|
def create_permission(*args)
|
|
29
30
|
username, arguments = extract_username(args)
|
|
30
31
|
|
|
31
32
|
assert_argument_size(arguments, 2)
|
|
32
33
|
assert_resource_type(arguments[0])
|
|
33
34
|
|
|
34
|
-
permission_attrs = arguments
|
|
35
|
+
permission_attrs = arguments[2]
|
|
36
|
+
if !permission_attrs.is_a?(Hash)
|
|
37
|
+
raise Adafruit::IO::Arguments::ArgumentError.new('create_permission requires resource type (string), resource key (string), and a Hash of permission attributes, e.g. { scope: "public", mode: "r" }')
|
|
38
|
+
end
|
|
39
|
+
|
|
35
40
|
post api_url(username, pluralize_type(arguments[0]), arguments[1], 'acl'), permission_attrs
|
|
36
41
|
end
|
|
37
42
|
|
|
@@ -20,9 +20,9 @@ module Adafruit
|
|
|
20
20
|
|
|
21
21
|
# Create a token. No attributes need to be passed in.
|
|
22
22
|
def create_token(*args)
|
|
23
|
-
username,
|
|
23
|
+
username, _ = extract_username(args)
|
|
24
24
|
|
|
25
|
-
post api_url(username, 'tokens')
|
|
25
|
+
post api_url(username, 'tokens'), {}
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def delete_token(*args)
|
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'
|
|
@@ -38,9 +36,7 @@ module Adafruit
|
|
|
38
36
|
#
|
|
39
37
|
# @return [String]
|
|
40
38
|
def inspect
|
|
41
|
-
|
|
42
|
-
inspected = inspected.gsub! @key, "#{@key[0..3]}#{'*' * (@key.size - 3)}" if @key
|
|
43
|
-
inspected
|
|
39
|
+
"#<#{self.class.name} username=#{@username.inspect} api_endpoint=#{api_endpoint.inspect} key=#{masked_key.inspect}>"
|
|
44
40
|
end
|
|
45
41
|
|
|
46
42
|
def last_response
|
|
@@ -60,14 +56,19 @@ module Adafruit
|
|
|
60
56
|
|
|
61
57
|
private
|
|
62
58
|
|
|
59
|
+
def masked_key
|
|
60
|
+
return nil if @key.nil?
|
|
61
|
+
return '*' * @key.size if @key.size <= 4
|
|
62
|
+
|
|
63
|
+
"#{@key[0..3]}#{'*' * (@key.size - 4)}"
|
|
64
|
+
end
|
|
65
|
+
|
|
63
66
|
def conn
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
else
|
|
67
|
-
url = 'https://io.adafruit.com'
|
|
68
|
-
end
|
|
67
|
+
settings = [api_endpoint, @key, @debug]
|
|
68
|
+
return @conn if @conn && @conn_settings == settings
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
@conn_settings = settings
|
|
71
|
+
@conn = Faraday.new(:url => api_endpoint) do |c|
|
|
71
72
|
c.headers['X-AIO-Key'] = @key
|
|
72
73
|
c.headers['Accept'] = 'application/json'
|
|
73
74
|
c.headers['User-Agent'] = "AdafruitIO-Ruby/#{VERSION} (#{RUBY_PLATFORM})"
|
|
@@ -78,8 +79,7 @@ module Adafruit
|
|
|
78
79
|
c.response :logger
|
|
79
80
|
end
|
|
80
81
|
|
|
81
|
-
c.
|
|
82
|
-
c.adapter Faraday.default_adapter
|
|
82
|
+
c.response :json
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Adafruit
|
|
2
|
+
module IO
|
|
3
|
+
class Error < StandardError; end
|
|
4
|
+
|
|
5
|
+
class RequestError < Error
|
|
6
|
+
attr_reader :response
|
|
7
|
+
|
|
8
|
+
def initialize(message, response)
|
|
9
|
+
super(message)
|
|
10
|
+
@response = response
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module Arguments
|
|
15
|
+
class ArgumentError < Adafruit::IO::Error; end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/adafruit/io/mqtt.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'mqtt'
|
|
2
|
+
require 'adafruit/io/errors'
|
|
2
3
|
|
|
3
4
|
#
|
|
4
5
|
# Adafruit::IO::MQTT provides a simple Adafruit IO aware wrapper around the
|
|
@@ -65,7 +66,7 @@ module Adafruit
|
|
|
65
66
|
|
|
66
67
|
# Publish value to feed with given key
|
|
67
68
|
def publish(key, value, location={})
|
|
68
|
-
raise 'client is not connected' unless @client.connected?
|
|
69
|
+
raise Adafruit::IO::Error.new('client is not connected') unless @client.connected?
|
|
69
70
|
|
|
70
71
|
topic = key_to_feed_topic(key)
|
|
71
72
|
location = indifferent_keys(location)
|
|
@@ -83,8 +84,8 @@ module Adafruit
|
|
|
83
84
|
# location data for this publish event.
|
|
84
85
|
#
|
|
85
86
|
def publish_group(key, values, location={})
|
|
86
|
-
raise 'client is not connected' unless @client.connected?
|
|
87
|
-
raise 'values must be a hash' unless values.is_a?(Hash)
|
|
87
|
+
raise Adafruit::IO::Error.new('client is not connected') unless @client.connected?
|
|
88
|
+
raise Adafruit::IO::Arguments::ArgumentError.new('values must be a hash') unless values.is_a?(Hash)
|
|
88
89
|
|
|
89
90
|
topic = key_to_group_topic(key, false)
|
|
90
91
|
location = indifferent_keys(location)
|
|
@@ -99,7 +100,7 @@ module Adafruit
|
|
|
99
100
|
# Include the { last_value: true } option if you'd like the feed to
|
|
100
101
|
# receive the last value immediately. (like MQTT retain)
|
|
101
102
|
def subscribe(key, options={})
|
|
102
|
-
raise 'client is not connected' unless @client.connected?
|
|
103
|
+
raise Adafruit::IO::Error.new('client is not connected') unless @client.connected?
|
|
103
104
|
|
|
104
105
|
topic = key_to_feed_topic(key)
|
|
105
106
|
@client.subscribe(topic)
|
|
@@ -110,7 +111,7 @@ module Adafruit
|
|
|
110
111
|
end
|
|
111
112
|
|
|
112
113
|
def unsubscribe(key)
|
|
113
|
-
raise 'client is not connected' unless @client.connected?
|
|
114
|
+
raise Adafruit::IO::Error.new('client is not connected') unless @client.connected?
|
|
114
115
|
|
|
115
116
|
topic = key_to_feed_topic(key)
|
|
116
117
|
@client.unsubscribe(topic)
|
|
@@ -123,7 +124,7 @@ module Adafruit
|
|
|
123
124
|
# JSON object whose keys are feed keys and whose values are the last
|
|
124
125
|
# value received for that feed.
|
|
125
126
|
def subscribe_group(key)
|
|
126
|
-
raise 'client is not connected' unless @client.connected?
|
|
127
|
+
raise Adafruit::IO::Error.new('client is not connected') unless @client.connected?
|
|
127
128
|
|
|
128
129
|
topic = key_to_group_topic(key)
|
|
129
130
|
@client.subscribe(topic)
|
|
@@ -176,7 +177,7 @@ module Adafruit
|
|
|
176
177
|
def payload_from_value_with_location(value, location)
|
|
177
178
|
payload = { value: value.to_s }
|
|
178
179
|
|
|
179
|
-
if location.has_key?('lat') && location.has_key?
|
|
180
|
+
if location.has_key?('lat') && location.has_key?('lon')
|
|
180
181
|
%w(lat lon ele).each do |f|
|
|
181
182
|
payload[f] = location[f]
|
|
182
183
|
end
|
|
@@ -188,7 +189,7 @@ module Adafruit
|
|
|
188
189
|
def payload_from_values_with_location(values, location)
|
|
189
190
|
payload = { feeds: values }
|
|
190
191
|
|
|
191
|
-
if location.has_key?('lat') && location.has_key?
|
|
192
|
+
if location.has_key?('lat') && location.has_key?('lon')
|
|
192
193
|
payload[:location] = {}
|
|
193
194
|
|
|
194
195
|
%w(lat lon ele).each do |f|
|
|
@@ -1,21 +1,13 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'adafruit/io/errors'
|
|
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
|
-
|
|
14
5
|
module RequestHandler
|
|
15
6
|
|
|
16
7
|
attr_reader :last_response, :pagination
|
|
17
8
|
|
|
18
|
-
def request(method, url, data = nil
|
|
9
|
+
def request(method, url, data = nil)
|
|
10
|
+
@pagination = nil
|
|
19
11
|
@last_response = send(method, url, data)
|
|
20
12
|
end
|
|
21
13
|
|
|
@@ -23,15 +15,15 @@ module Adafruit
|
|
|
23
15
|
request(:handle_get, url, options)
|
|
24
16
|
end
|
|
25
17
|
|
|
26
|
-
def post(url, data
|
|
27
|
-
request :handle_post, url, data
|
|
18
|
+
def post(url, data)
|
|
19
|
+
request :handle_post, url, data
|
|
28
20
|
end
|
|
29
21
|
|
|
30
|
-
def put(url, data
|
|
31
|
-
request :handle_put, url, data
|
|
22
|
+
def put(url, data)
|
|
23
|
+
request :handle_put, url, data
|
|
32
24
|
end
|
|
33
25
|
|
|
34
|
-
def delete(url
|
|
26
|
+
def delete(url)
|
|
35
27
|
request :handle_delete, url
|
|
36
28
|
end
|
|
37
29
|
|
|
@@ -44,33 +36,31 @@ module Adafruit
|
|
|
44
36
|
def update_pagination(response)
|
|
45
37
|
@pagination = nil
|
|
46
38
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
39
|
+
pagination_keys = response.headers.keys.grep(/x-pagination-/i)
|
|
40
|
+
return if pagination_keys.empty?
|
|
41
|
+
|
|
42
|
+
@pagination = {}
|
|
43
|
+
pagination_keys.each do |k|
|
|
44
|
+
@pagination[k.gsub(/x-pagination-/i, '')] = response.headers[k]
|
|
52
45
|
end
|
|
53
46
|
end
|
|
54
47
|
|
|
48
|
+
# Faraday's :json middleware already parses responses with a JSON
|
|
49
|
+
# content type. Only try to parse bodies it left as strings.
|
|
55
50
|
def parsed_response(response)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
puts "ERROR PARSING JSON: #{ex.message}"
|
|
64
|
-
puts ex.backtrace[0..5].join("\n")
|
|
65
|
-
end
|
|
66
|
-
response.body
|
|
67
|
-
end
|
|
51
|
+
body = response.body
|
|
52
|
+
return body unless body.is_a?(String)
|
|
53
|
+
|
|
54
|
+
begin
|
|
55
|
+
JSON.parse(body)
|
|
56
|
+
rescue JSON::ParserError
|
|
57
|
+
body
|
|
68
58
|
end
|
|
69
59
|
end
|
|
70
60
|
|
|
71
61
|
def handle_get(url, options = {})
|
|
72
62
|
response = conn.get do |req|
|
|
73
|
-
req.url
|
|
63
|
+
req.url url
|
|
74
64
|
options.each do |k,v|
|
|
75
65
|
req.params[k] = v
|
|
76
66
|
end
|
|
@@ -85,9 +75,9 @@ module Adafruit
|
|
|
85
75
|
end
|
|
86
76
|
end
|
|
87
77
|
|
|
88
|
-
def handle_post(url, data
|
|
78
|
+
def handle_post(url, data)
|
|
89
79
|
response = conn.post do |req|
|
|
90
|
-
req.url
|
|
80
|
+
req.url url
|
|
91
81
|
req.body = data
|
|
92
82
|
end
|
|
93
83
|
|
|
@@ -98,9 +88,9 @@ module Adafruit
|
|
|
98
88
|
end
|
|
99
89
|
end
|
|
100
90
|
|
|
101
|
-
def handle_put(url, data
|
|
91
|
+
def handle_put(url, data)
|
|
102
92
|
response = conn.put do |req|
|
|
103
|
-
req.url
|
|
93
|
+
req.url url
|
|
104
94
|
req.body = data
|
|
105
95
|
end
|
|
106
96
|
|
|
@@ -111,17 +101,13 @@ module Adafruit
|
|
|
111
101
|
end
|
|
112
102
|
end
|
|
113
103
|
|
|
114
|
-
def handle_delete(url,
|
|
104
|
+
def handle_delete(url, _data = nil)
|
|
115
105
|
response = conn.delete do |req|
|
|
116
|
-
req.url
|
|
106
|
+
req.url url
|
|
117
107
|
end
|
|
118
108
|
|
|
119
109
|
if response.status < 200 || response.status > 299
|
|
120
|
-
|
|
121
|
-
nil
|
|
122
|
-
else
|
|
123
|
-
raise Adafruit::IO::RequestError.new("DELETE error: #{ response.body }", response)
|
|
124
|
-
end
|
|
110
|
+
raise Adafruit::IO::RequestError.new("DELETE error: #{ response.body }", response)
|
|
125
111
|
else
|
|
126
112
|
parsed_response response
|
|
127
113
|
end
|
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: 4.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: 2026-11-03 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: faraday
|
|
@@ -17,84 +16,42 @@ 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: '
|
|
28
|
-
- !ruby/object:Gem::Dependency
|
|
29
|
-
name: faraday_middleware
|
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
|
31
|
-
requirements:
|
|
32
|
-
- - "~>"
|
|
33
|
-
- !ruby/object:Gem::Version
|
|
34
|
-
version: '0.9'
|
|
35
|
-
type: :runtime
|
|
36
|
-
prerelease: false
|
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
-
requirements:
|
|
39
|
-
- - "~>"
|
|
40
|
-
- !ruby/object:Gem::Version
|
|
41
|
-
version: '0.9'
|
|
42
|
-
- !ruby/object:Gem::Dependency
|
|
43
|
-
name: activesupport
|
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
|
45
|
-
requirements:
|
|
46
|
-
- - "~>"
|
|
47
|
-
- !ruby/object:Gem::Version
|
|
48
|
-
version: '4.2'
|
|
49
|
-
type: :runtime
|
|
50
|
-
prerelease: false
|
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
-
requirements:
|
|
53
|
-
- - "~>"
|
|
54
|
-
- !ruby/object:Gem::Version
|
|
55
|
-
version: '4.2'
|
|
26
|
+
version: '2.14'
|
|
56
27
|
- !ruby/object:Gem::Dependency
|
|
57
28
|
name: mqtt
|
|
58
29
|
requirement: !ruby/object:Gem::Requirement
|
|
59
30
|
requirements:
|
|
60
31
|
- - "~>"
|
|
61
32
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: '0.
|
|
33
|
+
version: '0.7'
|
|
63
34
|
type: :runtime
|
|
64
35
|
prerelease: false
|
|
65
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
37
|
requirements:
|
|
67
38
|
- - "~>"
|
|
68
39
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: '0.
|
|
70
|
-
- !ruby/object:Gem::Dependency
|
|
71
|
-
name: bundler
|
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
|
73
|
-
requirements:
|
|
74
|
-
- - "~>"
|
|
75
|
-
- !ruby/object:Gem::Version
|
|
76
|
-
version: '1.5'
|
|
77
|
-
type: :development
|
|
78
|
-
prerelease: false
|
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
-
requirements:
|
|
81
|
-
- - "~>"
|
|
82
|
-
- !ruby/object:Gem::Version
|
|
83
|
-
version: '1.5'
|
|
40
|
+
version: '0.7'
|
|
84
41
|
- !ruby/object:Gem::Dependency
|
|
85
42
|
name: rake
|
|
86
43
|
requirement: !ruby/object:Gem::Requirement
|
|
87
44
|
requirements:
|
|
88
45
|
- - "~>"
|
|
89
46
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: '
|
|
47
|
+
version: '13.2'
|
|
91
48
|
type: :development
|
|
92
49
|
prerelease: false
|
|
93
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
94
51
|
requirements:
|
|
95
52
|
- - "~>"
|
|
96
53
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: '
|
|
54
|
+
version: '13.2'
|
|
98
55
|
description: API Client Library for the Adafruit IO product
|
|
99
56
|
email:
|
|
100
57
|
- justin@adafruit.com
|
|
@@ -120,6 +77,7 @@ files:
|
|
|
120
77
|
- lib/adafruit/io/client/triggers.rb
|
|
121
78
|
- lib/adafruit/io/client/user.rb
|
|
122
79
|
- lib/adafruit/io/configurable.rb
|
|
80
|
+
- lib/adafruit/io/errors.rb
|
|
123
81
|
- lib/adafruit/io/mqtt.rb
|
|
124
82
|
- lib/adafruit/io/request_handler.rb
|
|
125
83
|
- lib/adafruit/io/version.rb
|
|
@@ -127,7 +85,6 @@ homepage: https://github.com/adafruit/io-client-ruby
|
|
|
127
85
|
licenses:
|
|
128
86
|
- MIT
|
|
129
87
|
metadata: {}
|
|
130
|
-
post_install_message:
|
|
131
88
|
rdoc_options: []
|
|
132
89
|
require_paths:
|
|
133
90
|
- lib
|
|
@@ -135,16 +92,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
135
92
|
requirements:
|
|
136
93
|
- - ">="
|
|
137
94
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: '
|
|
95
|
+
version: '3.3'
|
|
139
96
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
97
|
requirements:
|
|
141
98
|
- - ">="
|
|
142
99
|
- !ruby/object:Gem::Version
|
|
143
100
|
version: '0'
|
|
144
101
|
requirements: []
|
|
145
|
-
|
|
146
|
-
rubygems_version: 2.5.2
|
|
147
|
-
signing_key:
|
|
102
|
+
rubygems_version: 3.6.2
|
|
148
103
|
specification_version: 4
|
|
149
104
|
summary: Adafruit IO API Client Library
|
|
150
105
|
test_files: []
|