particlerb 0.0.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 +7 -0
- data/LICENSE.txt +674 -0
- data/README.md +136 -0
- data/Rakefile +8 -0
- data/lib/particle/client/devices.rb +109 -0
- data/lib/particle/client.rb +44 -0
- data/lib/particle/configurable.rb +64 -0
- data/lib/particle/connection.rb +125 -0
- data/lib/particle/default.rb +44 -0
- data/lib/particle/device.rb +129 -0
- data/lib/particle/error.rb +83 -0
- data/lib/particle/response/raise_error.rb +21 -0
- data/lib/particle/version.rb +3 -0
- data/lib/particle.rb +31 -0
- data/lib/particlerb.rb +2 -0
- data/particlerb.gemspec +29 -0
- metadata +186 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
module Particle
|
2
|
+
# Custom error class for rescuing from all Particle errors
|
3
|
+
class Error < StandardError
|
4
|
+
|
5
|
+
# Returns the appropriate Particle::Error subclass based
|
6
|
+
# on status and response message
|
7
|
+
#
|
8
|
+
# @param [Hash] response HTTP response
|
9
|
+
# @return [Particle::Error]
|
10
|
+
def self.from_response(response)
|
11
|
+
status = response[:status].to_i
|
12
|
+
body = response[:body].to_s
|
13
|
+
|
14
|
+
if klass = case status
|
15
|
+
when 400 then bad_request_error(body)
|
16
|
+
when 401 then Particle::Unauthorized
|
17
|
+
when 403 then Particle::Forbidden
|
18
|
+
when 404 then Particle::NotFound
|
19
|
+
when 408 then Particle::TimedOut
|
20
|
+
when 500..599 then Particle::ServerError
|
21
|
+
end
|
22
|
+
klass.new(response)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(response=nil)
|
27
|
+
@response = response
|
28
|
+
super(build_error_message)
|
29
|
+
end
|
30
|
+
|
31
|
+
attr_reader :response
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def self.bad_request_error(body)
|
36
|
+
if body =~ /access token was not found/i
|
37
|
+
MissingTokenError
|
38
|
+
else
|
39
|
+
BadRequest
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_error_message
|
44
|
+
return nil if @response.nil?
|
45
|
+
|
46
|
+
message = "#{@response[:method].to_s.upcase} "
|
47
|
+
message << redact_url(@response[:url].to_s) + ": "
|
48
|
+
message << "#{@response[:status]} - "
|
49
|
+
message << "#{@response[:body]}"
|
50
|
+
message
|
51
|
+
end
|
52
|
+
|
53
|
+
def redact_url(url_string)
|
54
|
+
token = "access_token"
|
55
|
+
url_string.gsub!(/#{token}=\S+/, "#{token}=(redacted)") if url_string.include? token
|
56
|
+
url_string
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Raised on errors in the 400-499 range
|
61
|
+
class ClientError < Error; end
|
62
|
+
|
63
|
+
# Raised when no authentication token is provided
|
64
|
+
class MissingTokenError < Error; end
|
65
|
+
|
66
|
+
# Raised when Particle returns a 400 HTTP status code
|
67
|
+
class BadRequest < ClientError; end
|
68
|
+
|
69
|
+
# Raised when Particle returns a 401 HTTP status code
|
70
|
+
class Unauthorized < ClientError; end
|
71
|
+
|
72
|
+
# Raised when Particle returns a 403 HTTP status code
|
73
|
+
class Forbidden < ClientError; end
|
74
|
+
|
75
|
+
# Raised when Particle returns a 404 HTTP status code
|
76
|
+
class NotFound < ClientError; end
|
77
|
+
|
78
|
+
# Raised when Particle returns a 408 HTTP status code
|
79
|
+
class TimedOut < ClientError; end
|
80
|
+
|
81
|
+
# Raised when Particle returns a 500 HTTP status code
|
82
|
+
class ServerError < Error; end
|
83
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'particle/error'
|
3
|
+
|
4
|
+
module Particle
|
5
|
+
# Faraday response middleware
|
6
|
+
module Response
|
7
|
+
|
8
|
+
# This class raises an Particle-flavored exception based on
|
9
|
+
# HTTP status codes returned by the API
|
10
|
+
class RaiseError < Faraday::Response::Middleware
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def on_complete(response)
|
15
|
+
if error = Particle::Error.from_response(response)
|
16
|
+
raise error
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/particle.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'particle/configurable'
|
2
|
+
require 'particle/default'
|
3
|
+
require 'particle/client'
|
4
|
+
|
5
|
+
module Particle
|
6
|
+
class << self
|
7
|
+
include Particle::Configurable
|
8
|
+
|
9
|
+
def client
|
10
|
+
return @client if @client && @client.same_options?(options)
|
11
|
+
@client = Particle::Client.new(options)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def respond_to_missing?(method_name, include_private = false)
|
17
|
+
client.respond_to?(method_name, include_private)
|
18
|
+
end
|
19
|
+
|
20
|
+
def method_missing(method_name, *args, &block)
|
21
|
+
if client.respond_to?(method_name)
|
22
|
+
return client.send(method_name, *args, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
super
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Set default configuration
|
31
|
+
Particle.reset!
|
data/lib/particlerb.rb
ADDED
data/particlerb.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'particle/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.authors = ["Julien Vanier"]
|
8
|
+
spec.summary = %q{Ruby client for the Particle.io Cloud API}
|
9
|
+
spec.description = %q{Ruby client for the Particle.io Cloud API}
|
10
|
+
spec.email = ['jvanier@gmail.com']
|
11
|
+
spec.files = %w(LICENSE.txt README.md Rakefile particlerb.gemspec)
|
12
|
+
spec.files += Dir.glob("lib/**/*.rb")
|
13
|
+
spec.homepage = 'https://github.com/monkbroc/particlerb'
|
14
|
+
spec.licenses = ['GPL-3.0']
|
15
|
+
spec.name = 'particlerb'
|
16
|
+
spec.require_paths = ['lib']
|
17
|
+
spec.required_ruby_version = '>= 1.9.3'
|
18
|
+
spec.required_rubygems_version = '>= 1.3.5'
|
19
|
+
spec.version = Particle::VERSION.dup
|
20
|
+
spec.add_dependency 'sawyer', '~> 0.6.0'
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.0'
|
22
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
23
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.5'
|
24
|
+
spec.add_development_dependency 'pry', '~> 0.10'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
26
|
+
spec.add_development_dependency 'vcr', '~> 2.9'
|
27
|
+
spec.add_development_dependency 'webmock', '~> 1.21'
|
28
|
+
spec.add_development_dependency 'multi_json', '~> 1.11'
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: particlerb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Julien Vanier
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sawyer
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.6.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.10'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.10'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: vcr
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.9'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.9'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.21'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.21'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: multi_json
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.11'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.11'
|
139
|
+
description: Ruby client for the Particle.io Cloud API
|
140
|
+
email:
|
141
|
+
- jvanier@gmail.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- LICENSE.txt
|
147
|
+
- README.md
|
148
|
+
- Rakefile
|
149
|
+
- lib/particle.rb
|
150
|
+
- lib/particle/client.rb
|
151
|
+
- lib/particle/client/devices.rb
|
152
|
+
- lib/particle/configurable.rb
|
153
|
+
- lib/particle/connection.rb
|
154
|
+
- lib/particle/default.rb
|
155
|
+
- lib/particle/device.rb
|
156
|
+
- lib/particle/error.rb
|
157
|
+
- lib/particle/response/raise_error.rb
|
158
|
+
- lib/particle/version.rb
|
159
|
+
- lib/particlerb.rb
|
160
|
+
- particlerb.gemspec
|
161
|
+
homepage: https://github.com/monkbroc/particlerb
|
162
|
+
licenses:
|
163
|
+
- GPL-3.0
|
164
|
+
metadata: {}
|
165
|
+
post_install_message:
|
166
|
+
rdoc_options: []
|
167
|
+
require_paths:
|
168
|
+
- lib
|
169
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 1.9.3
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: 1.3.5
|
179
|
+
requirements: []
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 2.4.5
|
182
|
+
signing_key:
|
183
|
+
specification_version: 4
|
184
|
+
summary: Ruby client for the Particle.io Cloud API
|
185
|
+
test_files: []
|
186
|
+
has_rdoc:
|