adafruit-io 1.0.4 → 2.0.0.beta.1
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 +4 -4
- data/LICENSE.md +1 -1
- data/README.md +79 -290
- data/adafruit-io.gemspec +1 -4
- data/lib/adafruit/io.rb +1 -2
- data/lib/adafruit/io/arguments.rb +73 -0
- data/lib/adafruit/io/client.rb +36 -38
- data/lib/adafruit/io/client/data.rb +103 -51
- data/lib/adafruit/io/client/feeds.rb +60 -0
- data/lib/adafruit/io/client/groups.rb +63 -0
- data/lib/adafruit/io/client/tokens.rb +48 -0
- data/lib/adafruit/io/configurable.rb +22 -0
- data/lib/adafruit/io/request_handler.rb +126 -0
- data/lib/adafruit/io/version.rb +1 -1
- metadata +13 -51
- data/lib/adafruit/io/client/feed.rb +0 -55
- data/lib/adafruit/io/client/group.rb +0 -87
- data/lib/adafruit/io/client/io_object.rb +0 -90
- data/lib/adafruit/io/client/request_handler.rb +0 -42
@@ -0,0 +1,63 @@
|
|
1
|
+
module Adafruit
|
2
|
+
module IO
|
3
|
+
class Client
|
4
|
+
module Groups
|
5
|
+
|
6
|
+
# Get all groups.
|
7
|
+
def groups(*args)
|
8
|
+
username, _ = extract_username(args)
|
9
|
+
|
10
|
+
get api_url(username, 'groups')
|
11
|
+
end
|
12
|
+
|
13
|
+
# Get a group specified by key
|
14
|
+
def group(*args)
|
15
|
+
username, arguments = extract_username(args)
|
16
|
+
group_key = get_key_from_arguments(arguments)
|
17
|
+
|
18
|
+
get api_url(username, 'groups', group_key)
|
19
|
+
end
|
20
|
+
|
21
|
+
def group_add_feed(*args)
|
22
|
+
username, arguments = extract_username(args)
|
23
|
+
group_key = get_key_from_arguments(arguments)
|
24
|
+
feed_key = get_key_from_arguments(arguments)
|
25
|
+
|
26
|
+
post api_url(username, 'groups', group_key, 'add'), feed_key: feed_key
|
27
|
+
end
|
28
|
+
|
29
|
+
def group_remove_feed(*args)
|
30
|
+
username, arguments = extract_username(args)
|
31
|
+
group_key = get_key_from_arguments(arguments)
|
32
|
+
feed_key = get_key_from_arguments(arguments)
|
33
|
+
|
34
|
+
post api_url(username, 'groups', group_key, 'remove'), feed_key: feed_key
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_group(*args)
|
38
|
+
username, arguments = extract_username(args)
|
39
|
+
group_attrs = arguments.shift
|
40
|
+
|
41
|
+
post api_url(username, 'groups'), group_attrs
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete_group(*args)
|
45
|
+
username, arguments = extract_username(args)
|
46
|
+
group_key = get_key_from_arguments(arguments)
|
47
|
+
|
48
|
+
delete api_url(username, 'groups', group_key)
|
49
|
+
end
|
50
|
+
|
51
|
+
def update_group(*args)
|
52
|
+
username, arguments = extract_username(args)
|
53
|
+
group_key = get_key_from_arguments(arguments)
|
54
|
+
query = get_query_from_arguments(arguments, %w(name key))
|
55
|
+
|
56
|
+
put api_url(username, 'groups', group_key), query
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Adafruit
|
2
|
+
module IO
|
3
|
+
class Client
|
4
|
+
module Tokens
|
5
|
+
|
6
|
+
# Get all tokens.
|
7
|
+
def tokens(*args)
|
8
|
+
username, _ = extract_username(args)
|
9
|
+
|
10
|
+
get api_url(username, 'tokens')
|
11
|
+
end
|
12
|
+
|
13
|
+
# Get a token specified by key
|
14
|
+
def token(*args)
|
15
|
+
username, arguments = extract_username(args)
|
16
|
+
token_key = get_key_from_arguments(arguments)
|
17
|
+
|
18
|
+
get api_url(username, 'tokens', token_key)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get a token along with additional details about the token. This method
|
22
|
+
# has more to lookup and so is slower than `token`
|
23
|
+
def token_details(*args)
|
24
|
+
username, arguments = extract_username(args)
|
25
|
+
token_key = get_id_from_arguments(arguments)
|
26
|
+
|
27
|
+
get api_url(username, 'tokens', token_key, 'details')
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_token(*args)
|
31
|
+
username, arguments = extract_username(args)
|
32
|
+
token_attrs = arguments.shift
|
33
|
+
|
34
|
+
post api_url(username, 'tokens'), token_attrs
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete_token(*args)
|
38
|
+
username, arguments = extract_username(args)
|
39
|
+
token_key = get_id_from_arguments(arguments)
|
40
|
+
|
41
|
+
delete api_url(username, 'tokens', token_key)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Adafruit
|
2
|
+
module IO
|
3
|
+
module Configurable
|
4
|
+
|
5
|
+
# Client configuration variables
|
6
|
+
attr_accessor :key, :username
|
7
|
+
|
8
|
+
# Client configuration variables with defaults
|
9
|
+
attr_writer :api_endpoint
|
10
|
+
|
11
|
+
def api_endpoint
|
12
|
+
if @api_endpoint.nil?
|
13
|
+
'https://io.adafruit.com'
|
14
|
+
else
|
15
|
+
@api_endpoint
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
module Adafruit
|
4
|
+
module IO
|
5
|
+
module RequestHandler
|
6
|
+
|
7
|
+
attr_reader :last_response, :pagination
|
8
|
+
|
9
|
+
def request(method, url, data = nil, options = nil)
|
10
|
+
@last_response = send(method, url, data)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get(url, options = {})
|
14
|
+
request(:handle_get, url, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def post(url, data, options = {})
|
18
|
+
request :handle_post, url, data, options
|
19
|
+
end
|
20
|
+
|
21
|
+
def put(url, data, options = {})
|
22
|
+
request :handle_put, url, data, options
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete(url, options = {})
|
26
|
+
request :handle_delete, url
|
27
|
+
end
|
28
|
+
|
29
|
+
def last_page?
|
30
|
+
pagination.nil? || (pagination['limit'] != pagination['count'])
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def update_pagination(response)
|
36
|
+
@pagination = nil
|
37
|
+
|
38
|
+
if pagination_keys = response.headers.keys.grep(/x-pagination-/i)
|
39
|
+
@pagination = {}
|
40
|
+
pagination_keys.each do |k|
|
41
|
+
@pagination[k.gsub(/x-pagination-/i, '')] = response.headers[k]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def parsed_response(response)
|
47
|
+
if response.respond_to?(:data)
|
48
|
+
response.data
|
49
|
+
else
|
50
|
+
begin
|
51
|
+
json = JSON.parse(response.body)
|
52
|
+
rescue => ex
|
53
|
+
if @debug
|
54
|
+
puts "ERROR PARSING JSON: #{ex.message}"
|
55
|
+
puts ex.backtrace[0..5].join("\n")
|
56
|
+
end
|
57
|
+
response.body
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def handle_get(url, options = {})
|
63
|
+
response = conn.get do |req|
|
64
|
+
req.url URI::encode(url)
|
65
|
+
options.each do |k,v|
|
66
|
+
req.params[k] = v
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
update_pagination(response)
|
71
|
+
|
72
|
+
if response.status < 200 || response.status > 299
|
73
|
+
if response.status === 404
|
74
|
+
nil
|
75
|
+
else
|
76
|
+
raise "GET error: #{ response.body }"
|
77
|
+
end
|
78
|
+
else
|
79
|
+
parsed_response response
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def handle_post(url, data, options = {})
|
84
|
+
response = conn.post do |req|
|
85
|
+
req.url URI::encode(url)
|
86
|
+
req.body = data
|
87
|
+
end
|
88
|
+
|
89
|
+
if response.status < 200 || response.status > 299
|
90
|
+
raise "POST error: #{ response.body }"
|
91
|
+
else
|
92
|
+
parsed_response response
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def handle_put(url, data, options = {})
|
97
|
+
response = conn.put do |req|
|
98
|
+
req.url URI::encode(url)
|
99
|
+
req.body = data
|
100
|
+
end
|
101
|
+
|
102
|
+
if response.status < 200 || response.status > 299
|
103
|
+
raise "PUT error: #{ response.body }"
|
104
|
+
else
|
105
|
+
parsed_response response
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def handle_delete(url, options = {})
|
110
|
+
response = conn.delete do |req|
|
111
|
+
req.url URI::encode(url)
|
112
|
+
end
|
113
|
+
|
114
|
+
if response.status < 200 || response.status > 299
|
115
|
+
if response.status === 404
|
116
|
+
nil
|
117
|
+
else
|
118
|
+
raise "DELETE error: #{ response.body }"
|
119
|
+
end
|
120
|
+
else
|
121
|
+
parsed_response response
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/lib/adafruit/io/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adafruit-io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.beta.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Cooper
|
8
|
+
- Adam Bachman
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2017-04-12 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: faraday
|
@@ -38,48 +39,6 @@ dependencies:
|
|
38
39
|
- - "~>"
|
39
40
|
- !ruby/object:Gem::Version
|
40
41
|
version: '0.9'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: activemodel
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '4.2'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '4.2'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: multi_xml
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.5'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.5'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: addressable
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '2.3'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '2.3'
|
83
42
|
- !ruby/object:Gem::Dependency
|
84
43
|
name: bundler
|
85
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,12 +79,14 @@ files:
|
|
120
79
|
- Rakefile
|
121
80
|
- adafruit-io.gemspec
|
122
81
|
- lib/adafruit/io.rb
|
82
|
+
- lib/adafruit/io/arguments.rb
|
123
83
|
- lib/adafruit/io/client.rb
|
124
84
|
- lib/adafruit/io/client/data.rb
|
125
|
-
- lib/adafruit/io/client/
|
126
|
-
- lib/adafruit/io/client/
|
127
|
-
- lib/adafruit/io/client/
|
128
|
-
- lib/adafruit/io/
|
85
|
+
- lib/adafruit/io/client/feeds.rb
|
86
|
+
- lib/adafruit/io/client/groups.rb
|
87
|
+
- lib/adafruit/io/client/tokens.rb
|
88
|
+
- lib/adafruit/io/configurable.rb
|
89
|
+
- lib/adafruit/io/request_handler.rb
|
129
90
|
- lib/adafruit/io/version.rb
|
130
91
|
homepage: https://github.com/adafruit/io-client-ruby
|
131
92
|
licenses:
|
@@ -142,13 +103,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
103
|
version: '0'
|
143
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
105
|
requirements:
|
145
|
-
- - "
|
106
|
+
- - ">"
|
146
107
|
- !ruby/object:Gem::Version
|
147
|
-
version:
|
108
|
+
version: 1.3.1
|
148
109
|
requirements: []
|
149
110
|
rubyforge_project:
|
150
|
-
rubygems_version: 2.5.
|
111
|
+
rubygems_version: 2.5.2
|
151
112
|
signing_key:
|
152
113
|
specification_version: 4
|
153
114
|
summary: Adafruit IO API Client Library
|
154
115
|
test_files: []
|
116
|
+
has_rdoc:
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'adafruit/io/client/io_object'
|
2
|
-
require 'adafruit/io/client/data'
|
3
|
-
|
4
|
-
module Adafruit
|
5
|
-
module IO
|
6
|
-
|
7
|
-
class Feed < IOObject
|
8
|
-
def initialize(client = nil, id_or_key = nil)
|
9
|
-
super(client, id_or_key)
|
10
|
-
end
|
11
|
-
|
12
|
-
def create(options = {})
|
13
|
-
response = @client.post 'feeds', options
|
14
|
-
return process_response(response)
|
15
|
-
end
|
16
|
-
|
17
|
-
def retrieve(id_or_key = nil, options = {})
|
18
|
-
if id_or_key
|
19
|
-
@id_or_key = id_or_key
|
20
|
-
response = @client.get "feeds/#{id_or_key}", options
|
21
|
-
else
|
22
|
-
response = @client.get 'feeds', options
|
23
|
-
end
|
24
|
-
|
25
|
-
return process_response(response)
|
26
|
-
end
|
27
|
-
|
28
|
-
def delete
|
29
|
-
response = @client.delete "feeds/#{self.id}"
|
30
|
-
if response == 200
|
31
|
-
{"delete" => true, "id" => self.id}
|
32
|
-
else
|
33
|
-
{"delete" => false, "id" => self.id}
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def save
|
38
|
-
response = @client.put "feeds/#{self.id}", serialize_params(self)
|
39
|
-
@unsaved_values.clear
|
40
|
-
|
41
|
-
return process_response(response)
|
42
|
-
end
|
43
|
-
|
44
|
-
def data(id_or_key = nil)
|
45
|
-
Adafruit::IO::Data.new(@client, self, id_or_key)
|
46
|
-
end
|
47
|
-
|
48
|
-
def to_s
|
49
|
-
%[#<Adafruit::IO::Feed id=#{self.id} name=#{self.name} key=#{self.key}>]
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'adafruit/io/client/io_object'
|
2
|
-
|
3
|
-
module Adafruit
|
4
|
-
module IO
|
5
|
-
class Group < IOObject
|
6
|
-
def initialize(client = nil, id_or_key = nil)
|
7
|
-
super(client, id_or_key)
|
8
|
-
end
|
9
|
-
|
10
|
-
def create(options = {})
|
11
|
-
response = @client.post 'groups', options
|
12
|
-
return process_response(response)
|
13
|
-
end
|
14
|
-
|
15
|
-
def retrieve(id_or_key = nil, options = {})
|
16
|
-
if id_or_key
|
17
|
-
@id_or_key = id_or_key
|
18
|
-
response = @client.get "groups/#{id_or_key}", options
|
19
|
-
else
|
20
|
-
response = @client.get 'groups', options
|
21
|
-
end
|
22
|
-
|
23
|
-
return process_response(response)
|
24
|
-
end
|
25
|
-
|
26
|
-
def delete
|
27
|
-
response = @client.delete "groups/#{self.id}"
|
28
|
-
if response == 200
|
29
|
-
{"delete" => true, "id" => self.id}
|
30
|
-
else
|
31
|
-
{"delete" => false, "id" => self.id}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def save
|
36
|
-
response = @client.put "groups/#{self.id}", serialize_params(self)
|
37
|
-
@unsaved_values.clear
|
38
|
-
|
39
|
-
return process_response(response)
|
40
|
-
end
|
41
|
-
|
42
|
-
def send_group(group_name, data)
|
43
|
-
if group_name
|
44
|
-
group_name = URI::escape(group_name)
|
45
|
-
response = @client.post "groups/#{group_name}/send", {:value => data}
|
46
|
-
|
47
|
-
return process_response(response)
|
48
|
-
else
|
49
|
-
# no-op
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def receive_group(group_name)
|
54
|
-
if group_name
|
55
|
-
group_name = URI::escape(group_name)
|
56
|
-
response = @client.get "groups/#{group_name}/last"
|
57
|
-
|
58
|
-
return process_response(response)
|
59
|
-
else
|
60
|
-
# no-op
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def receive_next_group(group_name)
|
65
|
-
if group_name
|
66
|
-
group_name = URI::escape(group_name)
|
67
|
-
response = @client.get "groups/#{group_name}/next"
|
68
|
-
|
69
|
-
return process_response(response)
|
70
|
-
else
|
71
|
-
# no-op
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def create_group(feed_id_or_key, options = {})
|
76
|
-
response = @client.post "groups/#{feed_id_or_key}", options
|
77
|
-
|
78
|
-
return process_response(response)
|
79
|
-
end
|
80
|
-
|
81
|
-
# Deprecated: this method was not present in the io.adafruit.com API.
|
82
|
-
# This method will be removed in v2.0.0
|
83
|
-
def groups(*args)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|