adafruit-io 1.0.4 → 2.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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