particlerb 1.1.0 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1bd66b4a2b884efde88833f4ee2d94a162fa4789
4
- data.tar.gz: d2ed5ee6cf52ff91877055852d27eb38e989d043
3
+ metadata.gz: b3cd7821e357f56784da61e8a4153386b1dc37f8
4
+ data.tar.gz: 187b03c7a9f20f73f82bcf11c42ad41c0b0b20ee
5
5
  SHA512:
6
- metadata.gz: a1031411589533999c88c5fb758a2a1ca483547239574eb57396d2d427b7daa86f728af0783162ae143e759eca71a7bf61e26ba5264c94d3a417cab4b7d466fd
7
- data.tar.gz: 460e045376aa527059387b18bd0ff1c1a3b4ea8838c0cd1d7103d47dfd9313d91bc8b2d72df2f5901e25ab95af02dc771b6ff1f716f06f3e43fb3df93ffcdba9
6
+ metadata.gz: 7e186ccf65aaca73843e27aa03b71784577db8fb58bc6e330ca056eb6c710f72f1ac53a5a663e153b4f9e1b0c81b803520c266f11b896b2aea916f6fffe74b38
7
+ data.tar.gz: a932cd5ff45d59b23994ad3afd50e700dc5ff21c7881d9b61739063ad0efe5eeda826e914e92d590593dc5eec806d693c6cbd735ba77cf3e62e63ec02847153d
data/README.md CHANGED
@@ -67,7 +67,7 @@ When using this gem in a multi-threaded program like a Rails application running
67
67
 
68
68
  ## Interacting with devices
69
69
 
70
- List all devices. Rreturns an `Array` of `Particle::Device`.
70
+ List all devices. Returns an `Array` of `Particle::Device`.
71
71
 
72
72
  ```ruby
73
73
  devices = Particle.devices
@@ -151,6 +151,13 @@ Change the product id. The meaning of the product id is specific to your applica
151
151
  Particle.device('f8bbe1e6e69e05c9c405ba1ca504d438061f1b0d').change_product(3)
152
152
  ```
153
153
 
154
+ Update the public key for a device. The public key must be in PEM format. See <spec/fixtures/device.pub.pem> for an example.
155
+
156
+ ```ruby
157
+ public_key = IO.read('device.pub.pem')
158
+ Particle.device('f8bbe1e6e69e05c9c405ba1ca504d438061f1b0d').update_public_key(public_key, algorithm: 'rsa')
159
+ ```
160
+
154
161
  See the [Particle Cloud API documentation about devices][device docs] for more details.
155
162
 
156
163
  [device docs]: http://docs.particle.io/core/api/#introduction-device-information
data/Rakefile CHANGED
@@ -50,6 +50,6 @@ task :build do
50
50
  end
51
51
 
52
52
  task :release => :build do
53
- system "gem push particlerb-#{Particle::VERSION}"
53
+ system "gem push particlerb-#{Particle::VERSION}.gem"
54
54
  end
55
55
 
@@ -0,0 +1,27 @@
1
+ require 'particle/model'
2
+ module Particle
3
+ # Domain model for one Particle Build Target, underlying http api json looks like
4
+ # {
5
+ # "platforms": [
6
+ # 0,
7
+ # 8,
8
+ # 6,
9
+ # 10
10
+ # ],
11
+ # "prereleases": [
12
+ # 0,
13
+ # 8,
14
+ # 6,
15
+ # 10
16
+ # ],
17
+ # "firmware_vendor": "Particle",
18
+ # "version": "0.6.0-rc.2"
19
+ # },
20
+ class BuildTarget < Model
21
+ def initialize(client, attributes)
22
+ super(client, attributes)
23
+ end
24
+ attribute_reader :platforms, :prereleases, :firmware_vendor, :version
25
+ end
26
+ end
27
+
@@ -0,0 +1,26 @@
1
+ require 'particle/build_target'
2
+ require 'ostruct'
3
+
4
+ module Particle
5
+ class Client
6
+ module BuildTargets
7
+ HTTP_PATH = "v1/build_targets"
8
+ # List all available Particle cloud compile build targets
9
+ #
10
+ # @return [Array<BuildTarget>] List of Particle Build Targets you can compile sources with
11
+ def build_targets
12
+ get(HTTP_PATH)[:targets].map do |target_h|
13
+ BuildTarget.new(self, target_h)
14
+ end
15
+ end
16
+
17
+ def build_target(attributes)
18
+ if attributes.is_a? BuildTarget
19
+ attributes
20
+ else
21
+ BuildTarget.new(self, attributes)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -118,6 +118,22 @@ module Particle
118
118
  end
119
119
  result[:ok]
120
120
  end
121
+
122
+ # Update the public key for a device you own
123
+ #
124
+ # @param target [String, Device] A device id, name or {Device} object
125
+ # @param public_key [String] The public key in PEM format (default
126
+ # format generated by openssl)
127
+ # @param algorithm [String] The encryption algorithm for the key
128
+ # (default rsa)
129
+ # @return [boolean] true when successful
130
+ def update_device_public_key(target, public_key, algorithm = 'rsa')
131
+ result = post(Device.provision_path,
132
+ deviceID: device(target).id,
133
+ publicKey: public_key,
134
+ algorithm: algorithm)
135
+ !result.empty?
136
+ end
121
137
  end
122
138
  end
123
139
  end
@@ -12,7 +12,8 @@ module Particle
12
12
  PLATFORMS = {
13
13
  core: 0,
14
14
  photon: 6,
15
- p1: 8
15
+ p1: 8,
16
+ electron: 10
16
17
  }
17
18
 
18
19
  # Flash new firmware to a Particle device from source code or
@@ -0,0 +1,28 @@
1
+ require 'particle/platform'
2
+ require 'particle/client/build_targets'
3
+ require 'ostruct'
4
+
5
+ module Particle
6
+ class Client
7
+ module Platforms
8
+ # List all available Particle Hardware platforms that you can use the cloud compiler with
9
+ #
10
+ # @return [Array<Platform>] List of Particle Hardware platforms that have build targets you can compile sources with
11
+ def platforms
12
+ @platforms = []
13
+ get(Particle::Client::BuildTargets::HTTP_PATH)[:platforms].each_pair do |platform_name, platform_id|
14
+ @platforms << Platform.new(self, {name: platform_name, id: platform_id})
15
+ end
16
+ @platforms
17
+ end
18
+
19
+ def platform(attributes)
20
+ if attributes.is_a? Platform
21
+ attributes
22
+ else
23
+ Platform.new(self, attributes)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -4,6 +4,8 @@ require 'particle/client/publish'
4
4
  require 'particle/client/webhooks'
5
5
  require 'particle/client/tokens'
6
6
  require 'particle/client/firmware'
7
+ require 'particle/client/build_targets'
8
+ require 'particle/client/platforms'
7
9
 
8
10
  module Particle
9
11
 
@@ -18,6 +20,8 @@ module Particle
18
20
  include Particle::Client::Webhooks
19
21
  include Particle::Client::Tokens
20
22
  include Particle::Client::Firmware
23
+ include Particle::Client::BuildTargets
24
+ include Particle::Client::Platforms
21
25
 
22
26
  def initialize(options = {})
23
27
  # Use options passed in, but fall back to module defaults
@@ -7,7 +7,9 @@ module Particle
7
7
  ID_REGEX = /\h{24}/
8
8
  PRODUCT_IDS = {
9
9
  0 => "Core".freeze,
10
- 6 => "Photon".freeze
10
+ 6 => "Photon".freeze,
11
+ 8 => "P1".freeze,
12
+ 10 => "Electron".freeze
11
13
  }
12
14
 
13
15
  def initialize(client, attributes)
@@ -161,6 +163,17 @@ module Particle
161
163
  @client.change_device_product(self, product_id, should_update)
162
164
  end
163
165
 
166
+ # Update the public key for a device you own
167
+ #
168
+ # @param public_key [String] The public key in PEM format (default
169
+ # format generated by openssl)
170
+ # @param algorithm [String] The encryption algorithm for the key
171
+ # (default rsa)
172
+ # @return [boolean] true when successful
173
+ def update_public_key(public_key, algorithm = 'rsa')
174
+ @client.update_device_public_key(self, public_key, algorithm)
175
+ end
176
+
164
177
  def self.list_path
165
178
  "v1/devices"
166
179
  end
@@ -169,6 +182,10 @@ module Particle
169
182
  "v1/devices"
170
183
  end
171
184
 
185
+ def self.provision_path
186
+ "v1/provisioning/x"
187
+ end
188
+
172
189
  def path
173
190
  "/v1/devices/#{id_or_name}"
174
191
  end
@@ -0,0 +1,16 @@
1
+ require 'particle/model'
2
+ module Particle
3
+ # Domain model for one Particle Platform from the /v1/build_targets endpoint
4
+ class Platform < Model
5
+ def initialize(client, attributes)
6
+ super(client, attributes)
7
+ end
8
+ attribute_reader :name, :id
9
+
10
+ # This avoids upstream magic from making .name a Symbol--keep it a string yo
11
+ def name
12
+ @attributes[:name].to_s
13
+ end
14
+ end
15
+ end
16
+
@@ -11,7 +11,10 @@ module Particle
11
11
  end
12
12
 
13
13
  define_parser do |body|
14
- ::JSON.parse(body, symbolize_names: true) unless body.strip.empty?
14
+ body = body.strip
15
+ # Workaround for body returned as a quoted string
16
+ body = "[#{body}]" if body.match(/^".*"$/)
17
+ ::JSON.parse(body, symbolize_names: true) unless body.empty?
15
18
  end
16
19
  end
17
20
  end
@@ -1,3 +1,3 @@
1
1
  module Particle
2
- VERSION = "1.1.0".freeze
2
+ VERSION = "1.2.0".freeze
3
3
  end
data/particlerb.gemspec CHANGED
@@ -21,10 +21,11 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency 'faraday_middleware', '>= 0.9.0'
22
22
  spec.add_development_dependency 'bundler', '~> 1.0'
23
23
  spec.add_development_dependency 'rake', '~> 10.0'
24
- spec.add_development_dependency 'guard-rspec', '~> 4.5'
24
+ spec.add_development_dependency 'guard-rspec', '~> 4.5.0'
25
25
  spec.add_development_dependency 'pry', '~> 0.10'
26
26
  spec.add_development_dependency 'rspec', '~> 3.0'
27
27
  spec.add_development_dependency 'rspec-pride', '~> 3.1'
28
+ spec.add_development_dependency 'listen', '~> 3.0.8'
28
29
  spec.add_development_dependency 'vcr', '~> 2.9'
29
30
  spec.add_development_dependency 'webmock', '~> 1.21'
30
31
  spec.add_development_dependency 'multi_json', '~> 1.11'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: particlerb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Vanier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-21 00:00:00.000000000 Z
11
+ date: 2016-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '4.5'
75
+ version: 4.5.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '4.5'
82
+ version: 4.5.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '3.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: listen
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.0.8
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 3.0.8
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: vcr
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -189,9 +203,12 @@ files:
189
203
  - README.md
190
204
  - Rakefile
191
205
  - lib/particle.rb
206
+ - lib/particle/build_target.rb
192
207
  - lib/particle/client.rb
208
+ - lib/particle/client/build_targets.rb
193
209
  - lib/particle/client/devices.rb
194
210
  - lib/particle/client/firmware.rb
211
+ - lib/particle/client/platforms.rb
195
212
  - lib/particle/client/publish.rb
196
213
  - lib/particle/client/tokens.rb
197
214
  - lib/particle/client/webhooks.rb
@@ -201,6 +218,7 @@ files:
201
218
  - lib/particle/device.rb
202
219
  - lib/particle/error.rb
203
220
  - lib/particle/model.rb
221
+ - lib/particle/platform.rb
204
222
  - lib/particle/response/parse_json_symbols.rb
205
223
  - lib/particle/response/raise_error.rb
206
224
  - lib/particle/token.rb
@@ -228,9 +246,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
246
  version: 1.3.5
229
247
  requirements: []
230
248
  rubyforge_project:
231
- rubygems_version: 2.4.5
249
+ rubygems_version: 2.2.5
232
250
  signing_key:
233
251
  specification_version: 4
234
252
  summary: Ruby client for the Particle.io Cloud API
235
253
  test_files: []
236
- has_rdoc: