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.
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Adafruit
2
2
  module IO
3
- VERSION = "1.0.4"
3
+ VERSION = "2.0.0.beta.1"
4
4
  end
5
5
  end
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: 1.0.4
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: 2016-08-16 00:00:00.000000000 Z
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/feed.rb
126
- - lib/adafruit/io/client/group.rb
127
- - lib/adafruit/io/client/io_object.rb
128
- - lib/adafruit/io/client/request_handler.rb
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: '0'
108
+ version: 1.3.1
148
109
  requirements: []
149
110
  rubyforge_project:
150
- rubygems_version: 2.5.1
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