cloud_connect 2.0.2 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +20 -3
- data/Gemfile +2 -1
- data/Gemfile.lock +42 -31
- data/README.md +28 -83
- data/Rakefile +7 -35
- data/cloud_connect.gemspec +27 -28
- data/lib/cloud_connect/authentication.rb +15 -0
- data/lib/cloud_connect/client/assets.rb +102 -0
- data/lib/cloud_connect/client/channels.rb +83 -16
- data/lib/cloud_connect/client/configurations.rb +54 -0
- data/lib/cloud_connect/client/custom_methods.rb +20 -0
- data/lib/cloud_connect/client/fields.rb +88 -15
- data/lib/cloud_connect/client/messages.rb +60 -48
- data/lib/cloud_connect/client/tracks.rb +46 -0
- data/lib/cloud_connect/client.rb +39 -53
- data/lib/cloud_connect/configuration.rb +60 -0
- data/lib/cloud_connect/connection.rb +49 -0
- data/lib/cloud_connect/error.rb +27 -5
- data/lib/cloud_connect/notification/notification.rb +78 -0
- data/lib/cloud_connect/notification.rb +43 -0
- data/lib/cloud_connect/request.rb +70 -0
- data/lib/cloud_connect/version.rb +1 -1
- data/lib/cloud_connect.rb +18 -35
- data/lib/faraday/response/raise_cloud_connect_error.rb +44 -0
- metadata +93 -45
- data/.yardopts +0 -7
- data/HISTORY.md +0 -33
- data/lib/cloud_connect/client/trackings.rb +0 -22
- data/lib/cloud_connect/client/units.rb +0 -77
- data/lib/cloud_connect/client/users.rb +0 -36
- data/lib/ext/hash.rb +0 -5
- data/lib/ext/module.rb +0 -59
- data/lib/ext/object.rb +0 -57
- data/lib/faraday/cookie_auth.rb +0 -21
- data/lib/faraday/raise_http_4xx.rb +0 -41
- data/lib/faraday/raise_http_5xx.rb +0 -27
data/.gitignore
CHANGED
@@ -1,6 +1,23 @@
|
|
1
|
-
pkg/*
|
2
1
|
*.gem
|
2
|
+
*.rbc
|
3
|
+
*.swp
|
4
|
+
*.tmproj
|
5
|
+
*~
|
6
|
+
.\#*
|
3
7
|
.bundle
|
8
|
+
.config
|
4
9
|
.yardoc
|
5
|
-
.
|
6
|
-
|
10
|
+
Gemfile.lock
|
11
|
+
InstalledFiles
|
12
|
+
\#*
|
13
|
+
_yardoc
|
14
|
+
coverage
|
15
|
+
doc/
|
16
|
+
lib/bundler/man
|
17
|
+
pkg
|
18
|
+
rdoc
|
19
|
+
spec/reports
|
20
|
+
test/tmp
|
21
|
+
test/version_tmp
|
22
|
+
tmp
|
23
|
+
tmtags
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,46 +1,57 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cloud_connect (
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
multi_json
|
4
|
+
cloud_connect (3.0.0)
|
5
|
+
addressable (~> 2.2)
|
6
|
+
faraday (~> 0.8)
|
7
|
+
faraday_middleware (~> 0.8)
|
8
|
+
hashie (~> 1.2)
|
9
|
+
multi_json
|
10
10
|
|
11
11
|
GEM
|
12
|
-
remote:
|
12
|
+
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
addressable (2.3.2)
|
15
|
+
crack (0.3.1)
|
16
|
+
diff-lcs (1.1.3)
|
17
|
+
faraday (0.8.4)
|
18
|
+
multipart-post (~> 1.1)
|
19
|
+
faraday_middleware (0.9.0)
|
19
20
|
faraday (>= 0.7.4, < 0.9)
|
20
21
|
hashie (1.2.0)
|
21
|
-
json (1.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
rspec-
|
29
|
-
|
30
|
-
rspec-
|
31
|
-
rspec-
|
32
|
-
|
33
|
-
|
34
|
-
rspec-mocks (
|
35
|
-
|
36
|
-
|
22
|
+
json (1.7.5)
|
23
|
+
maruku (0.6.1)
|
24
|
+
syntax (>= 1.0.0)
|
25
|
+
multi_json (1.3.7)
|
26
|
+
multipart-post (1.1.5)
|
27
|
+
rake (10.0.2)
|
28
|
+
rspec (2.12.0)
|
29
|
+
rspec-core (~> 2.12.0)
|
30
|
+
rspec-expectations (~> 2.12.0)
|
31
|
+
rspec-mocks (~> 2.12.0)
|
32
|
+
rspec-core (2.12.0)
|
33
|
+
rspec-expectations (2.12.0)
|
34
|
+
diff-lcs (~> 1.1.3)
|
35
|
+
rspec-mocks (2.12.0)
|
36
|
+
simplecov (0.7.1)
|
37
|
+
multi_json (~> 1.0)
|
38
|
+
simplecov-html (~> 0.7.1)
|
39
|
+
simplecov-html (0.7.1)
|
40
|
+
syntax (1.0.0)
|
41
|
+
webmock (1.9.0)
|
42
|
+
addressable (>= 2.2.7)
|
43
|
+
crack (>= 0.1.7)
|
44
|
+
yard (0.8.3)
|
37
45
|
|
38
46
|
PLATFORMS
|
39
47
|
ruby
|
40
48
|
|
41
49
|
DEPENDENCIES
|
42
|
-
bluecloth (>= 2.0)
|
43
|
-
bundler (>= 1.0.0)
|
44
50
|
cloud_connect!
|
45
|
-
|
51
|
+
json (~> 1.7)
|
52
|
+
maruku
|
53
|
+
rake
|
46
54
|
rspec
|
55
|
+
simplecov
|
56
|
+
webmock
|
57
|
+
yard
|
data/README.md
CHANGED
@@ -1,97 +1,42 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# CloudConnect
|
2
|
+
Simple Ruby wrapper for the CloudConnect v3 API.
|
3
3
|
|
4
|
-
|
4
|
+
## Installation
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
```bash
|
7
|
+
gem install cloud_connect
|
8
|
+
```
|
9
9
|
|
10
|
-
|
11
|
-
-----
|
10
|
+
## Documentation
|
12
11
|
|
13
|
-
|
14
|
-
require 'cloud_connect'
|
12
|
+
http://rdoc.info/gems/cloud_connect
|
15
13
|
|
16
|
-
|
14
|
+
## Authenticated Requests
|
17
15
|
|
18
|
-
|
16
|
+
### Setup a client with your token
|
19
17
|
|
20
|
-
|
18
|
+
```ruby
|
19
|
+
cc = CloudConnect::Client.new(:account => "demo", :token => "token")
|
20
|
+
cc.asset("imei")
|
21
|
+
```
|
21
22
|
|
22
|
-
|
23
|
-
config.username = 'user'
|
24
|
-
config.password = 'password'
|
25
|
-
config.account = 'test'
|
26
|
-
config.env = 'sandbox'
|
27
|
-
end
|
28
|
-
cloud_connect = CloudConnect.client.new
|
23
|
+
## Examples
|
29
24
|
|
30
|
-
###
|
25
|
+
### Show an asset
|
31
26
|
|
32
|
-
|
27
|
+
```ruby
|
28
|
+
cc.asset("imei")
|
29
|
+
=> #<Hashie::Mash imei="imei" name=nil serial=nil url="http://url.cloudconnect.io/api/v3/assets/imei">
|
30
|
+
```
|
33
31
|
|
34
|
-
###
|
32
|
+
### Show last messages for an asset
|
35
33
|
|
36
|
-
|
37
|
-
|
34
|
+
```ruby
|
35
|
+
cc.messages(asset:"imei")
|
36
|
+
```
|
38
37
|
|
39
|
-
|
40
|
-
cloud_connect.user
|
38
|
+
### Channels
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
cloud_connect.user(1)
|
46
|
-
|
47
|
-
Send a message to a unit
|
48
|
-
|
49
|
-
cloud_connect.send_message(1, 11, "Hello World!")
|
50
|
-
|
51
|
-
Get a unit's last known position
|
52
|
-
|
53
|
-
unit = cloud_connect.unit(3)
|
54
|
-
puts "#{unit.location.join(', ')} @ #{unit.time}"
|
55
|
-
|
56
|
-
We recommand you install the [yajl-ruby](http://github.com/brianmario/yajl-ruby) Gem
|
57
|
-
for improved performance over the default pure ruby JSON library.
|
58
|
-
|
59
|
-
Contributing
|
60
|
-
------------
|
61
|
-
In the spirit of [free software](http://www.fsf.org/licensing/essays/free-sw.html), **everyone** is encouraged to help improve this project.
|
62
|
-
|
63
|
-
Here are some ways *you* can contribute:
|
64
|
-
|
65
|
-
* by using alpha, beta, and prerelease versions
|
66
|
-
* by reporting bugs
|
67
|
-
* by suggesting new features
|
68
|
-
* by writing or editing documentation
|
69
|
-
* by writing specifications
|
70
|
-
* by writing code (**no patch is too small**: fix typos, add comments, clean up inconsistent whitespace)
|
71
|
-
* by refactoring code
|
72
|
-
* by closing [issues](http://github.com/mobile-devices/cloud_connect/issues)
|
73
|
-
* by reviewing patches
|
74
|
-
|
75
|
-
All contributors will be added to the [HISTORY](https://github.com/mobile-devices/cloud_connect/blob/master/HISTORY.md)
|
76
|
-
file and will receive the respect and gratitude of the community.
|
77
|
-
|
78
|
-
Submitting an Issue
|
79
|
-
-------------------
|
80
|
-
We use the [GitHub issue tracker](http://github.com/mobile-devices/cloud_connect/issues) to track bugs and
|
81
|
-
features. Before submitting a bug report or feature request, check to make sure it hasn't already
|
82
|
-
been submitted. You can indicate support for an existing issuse by voting it up. When submitting a
|
83
|
-
bug report, please include a [Gist](http://gist.github.com/) that includes a stack trace and any
|
84
|
-
details that may be necessary to reproduce the bug, including your gem version, Ruby version, and
|
85
|
-
operating system. Ideally, a bug report should include a pull request with failing specs.
|
86
|
-
|
87
|
-
Submitting a Pull Request
|
88
|
-
-------------------------
|
89
|
-
1. Fork the project.
|
90
|
-
2. Create a topic branch.
|
91
|
-
3. Implement your feature or bug fix.
|
92
|
-
4. Add documentation for your feature or bug fix.
|
93
|
-
5. Run <tt>bundle exec rake doc:yard</tt>. If your changes are not 100% documented, go back to step 4.
|
94
|
-
6. Add specs for your feature or bug fix.
|
95
|
-
7. Run <tt>bundle exec rake spec</tt>. If your changes are not 100% covered, go back to step 6.
|
96
|
-
8. Commit and push your changes.
|
97
|
-
9. Submit a pull request. Please do not include changes to the gemspec, version, or history file. (If you want to create your own version for some reason, please do so in a separate commit.)
|
40
|
+
```
|
41
|
+
cc.channels
|
42
|
+
```
|
data/Rakefile
CHANGED
@@ -1,47 +1,19 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
|
7
|
+
task :test => :spec
|
8
|
+
task :default => :spec
|
9
|
+
|
4
10
|
namespace :doc do
|
5
11
|
require 'yard'
|
6
12
|
YARD::Rake::YardocTask.new do |task|
|
7
|
-
task.files = ['
|
13
|
+
task.files = ['README.md', 'LICENSE.md', 'lib/**/*.rb']
|
8
14
|
task.options = [
|
9
|
-
'--protected',
|
10
15
|
'--output-dir', 'doc/yard',
|
11
|
-
'--tag', 'format:Supported formats',
|
12
|
-
'--tag', 'authenticated:Requires Authentication',
|
13
|
-
'--tag', 'rate_limited:Rate Limited',
|
14
16
|
'--markup', 'markdown',
|
15
17
|
]
|
16
18
|
end
|
17
19
|
end
|
18
|
-
|
19
|
-
task :irb do
|
20
|
-
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
21
|
-
require 'irb'
|
22
|
-
require 'bundler/setup'
|
23
|
-
require 'cloud_connect'
|
24
|
-
module IRB # :nodoc:
|
25
|
-
def self.start_session(binding)
|
26
|
-
unless @__initialized
|
27
|
-
args = ARGV
|
28
|
-
ARGV.replace(ARGV.dup)
|
29
|
-
IRB.setup(nil)
|
30
|
-
ARGV.replace(args)
|
31
|
-
@__initialized = true
|
32
|
-
end
|
33
|
-
|
34
|
-
ws = WorkSpace.new(binding)
|
35
|
-
irb = Irb.new(ws)
|
36
|
-
|
37
|
-
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
|
38
|
-
@CONF[:MAIN_CONTEXT] = irb.context
|
39
|
-
|
40
|
-
catch(:IRB_EXIT) do
|
41
|
-
irb.eval_input
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
IRB.start_session(binding)
|
46
|
-
end
|
47
|
-
end
|
data/cloud_connect.gemspec
CHANGED
@@ -1,31 +1,30 @@
|
|
1
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.expand_path('../lib/cloud_connect/version', __FILE__)
|
2
3
|
|
3
|
-
Gem::Specification.new do |
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.add_dependency 'addressable', '~> 2.2'
|
6
|
+
gem.add_dependency 'faraday', '~> 0.8'
|
7
|
+
gem.add_dependency 'faraday_middleware', '~> 0.8'
|
8
|
+
gem.add_dependency 'hashie', '~> 1.2'
|
9
|
+
gem.add_dependency 'multi_json'
|
10
|
+
gem.add_development_dependency 'json', '~> 1.7'
|
11
|
+
gem.add_development_dependency 'maruku'
|
12
|
+
gem.add_development_dependency 'rake'
|
13
|
+
gem.add_development_dependency 'rspec'
|
14
|
+
gem.add_development_dependency 'simplecov'
|
15
|
+
gem.add_development_dependency 'webmock'
|
16
|
+
gem.add_development_dependency 'yard'
|
17
|
+
gem.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
|
13
18
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
#s.add_development_dependency "yard", "~> 0.6"
|
26
|
-
s.add_development_dependency "rspec"
|
27
|
-
|
28
|
-
s.files = `git ls-files`.split("\n")
|
29
|
-
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
30
|
-
s.require_path = 'lib'
|
19
|
+
gem.authors = ['Jean-Paul Bonnetouche']
|
20
|
+
gem.summary = 'Wrapper for the CloudConnect v3 API'
|
21
|
+
gem.description = 'Simple wrapper for the CloudConnect v3 API'
|
22
|
+
gem.email = ['jean-paul.bonnetouche@mobile-devices.fr']
|
23
|
+
gem.files = `git ls-files`.split("\n")
|
24
|
+
gem.homepage = 'https://github.com/mobile-devices/cloud_connect'
|
25
|
+
gem.name = 'cloud_connect'
|
26
|
+
gem.platform = Gem::Platform::RUBY
|
27
|
+
gem.require_paths = ['lib']
|
28
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
29
|
+
gem.version = CloudConnect::VERSION
|
31
30
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module CloudConnect
|
2
|
+
class Client
|
3
|
+
module Assets
|
4
|
+
# Get an asset
|
5
|
+
#
|
6
|
+
# @param imei [String] IMEI of the asset
|
7
|
+
# @return [Asset] The asset you requested, if it exists
|
8
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0003-assets
|
9
|
+
# @example Get asset 0123456789012345
|
10
|
+
# @client = CloudConnect::Client.new(:account => 'foor', :token => 'bar')
|
11
|
+
# @client.asset("0123456789012345")
|
12
|
+
def asset(imei, options={})
|
13
|
+
enhance( get("assets/#{imei}", options), with: AssetMethods )
|
14
|
+
end
|
15
|
+
|
16
|
+
# Search assets
|
17
|
+
#
|
18
|
+
# @param search_term [String] The term to search for
|
19
|
+
# @return [Array] A list of assets matching the search term
|
20
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0003-assets
|
21
|
+
# @example Search for '123' in the assets
|
22
|
+
# @client = CloudConnect::Client.new(:account => 'foor', :token => 'bar')
|
23
|
+
# @client.search_assets
|
24
|
+
def search_assets(search_term, options={})
|
25
|
+
enhance( get("assets?q=#{search_term}", options), with: AssetMethods )
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get assets
|
29
|
+
#
|
30
|
+
# @return [Array] A list of all assets
|
31
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0003-assets
|
32
|
+
# @example List all assets
|
33
|
+
# @client = CloudConnect::Client.new(:account => 'foor', :token => 'bar')
|
34
|
+
# @client.list_assets
|
35
|
+
def assets(options={})
|
36
|
+
enhance( get("assets", options), with: AssetMethods )
|
37
|
+
end
|
38
|
+
alias :list_assets :assets
|
39
|
+
|
40
|
+
# Create an asset
|
41
|
+
#
|
42
|
+
# @param imei [String] IMEI of the asset
|
43
|
+
# @param options [Hash] A customizable set of options
|
44
|
+
# @options options [String] :name Name of the asset
|
45
|
+
# @options options [String] :serial Serial number of the asset
|
46
|
+
# @options options [String] :description Description of the asset
|
47
|
+
# @return [Asset] Your newly created asset
|
48
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0003-assets#create_a_new_asset
|
49
|
+
# @example Create a new Asset
|
50
|
+
# @client = CloudConnect::CloudConnect.new(:account => 'foo', :token => 'bar')
|
51
|
+
# @client.create_asset("359551033822346", :name => 'General Lee', :serial => "50030000005322", :description => "The Dukes of Hazzard")
|
52
|
+
def create_asset(imei, options={})
|
53
|
+
enhance( post("assets", options.merge({:imei => imei})), with: AssetMethods )
|
54
|
+
end
|
55
|
+
|
56
|
+
# Update an asset
|
57
|
+
#
|
58
|
+
# @param imei [String] IMEI of the asset
|
59
|
+
# @param options [Hash] A customizable set of options
|
60
|
+
# @options options [String] :name Name of the asset
|
61
|
+
# @options options [String] :serial Serial number of the asset
|
62
|
+
# @options options [String] :description Description of the asset
|
63
|
+
# @return [Asset] Your newly updated asset
|
64
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0003-assets#update_an_asset
|
65
|
+
# @example Update an Asset
|
66
|
+
# @client = CloudConnect::CloudConnect.new(:account => 'foo', :token => 'bar')
|
67
|
+
# @client.update_asset("359551033822346", :name => 'General Lee', :serial => "50030000005322", :description => "The Dukes of Hazzard")
|
68
|
+
def update_asset(imei, options={})
|
69
|
+
enhance( put("assets/#{imei}", options.merge({:imei => imei})), with: AssetMethods )
|
70
|
+
end
|
71
|
+
|
72
|
+
# Delete a single asset
|
73
|
+
#
|
74
|
+
# @param imei [String] IMEI fo the field
|
75
|
+
# @return [Response] A response object with status
|
76
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0003-assets#delete_an_asset
|
77
|
+
# @example Delete the "359551033822346" asset
|
78
|
+
# @client = CloudConnect::CloudConnect.new(:account => 'foo', :token => 'bar')
|
79
|
+
# @client.delete_asset("359551033822346")
|
80
|
+
def delete_asset(imei, options={})
|
81
|
+
delete("assets/#{imei}", options, true)
|
82
|
+
end
|
83
|
+
|
84
|
+
module AssetMethods
|
85
|
+
extend CustomMethods
|
86
|
+
# Send a message to the unit
|
87
|
+
#
|
88
|
+
# @param channel [String] Channel for the message
|
89
|
+
# @param payload [String] Payload of the message to send
|
90
|
+
# @return [Message] The message
|
91
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0005-messages#push_a_message_to_an_asset
|
92
|
+
def send_message(channel, payload, opts = {})
|
93
|
+
_client.send_message(imei, channel, payload, opts)
|
94
|
+
end
|
95
|
+
|
96
|
+
def messages(opts = {})
|
97
|
+
_client.messages(opts.merge asset: imei)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -1,22 +1,89 @@
|
|
1
1
|
module CloudConnect
|
2
|
-
|
2
|
+
class Client
|
3
|
+
module Channels
|
4
|
+
# Get a channel
|
5
|
+
#
|
6
|
+
# @param name [String] Name of the channel
|
7
|
+
# @return [Channel] The channel you requested, if it exists
|
8
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0006-channels
|
9
|
+
# @example Get channel 0123456789012345
|
10
|
+
# @client = CloudConnect::Client.new(:account => 'foo', :token => 'bar')
|
11
|
+
# @client.channel("0123456789012345")
|
12
|
+
def channel(name, options={})
|
13
|
+
enhance( get("channels/#{name}", options), with: ChannelMethods )
|
14
|
+
end
|
3
15
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
# Search channels
|
17
|
+
#
|
18
|
+
# @param search_term [String] The term to search for
|
19
|
+
# @return [Array] A list of channels matching the search term
|
20
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0006-channels
|
21
|
+
# @example Search for 'com.mdi.services.adminProtocol' in the channels
|
22
|
+
# @client = CloudConnect::Client.new(:account => 'foor', :token => 'bar')
|
23
|
+
# @client.search_channels
|
24
|
+
def search_channels(search_term, options={})
|
25
|
+
enhance( get("channels?q=#{search_term}", options), with: ChannelMethods )
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get channels
|
29
|
+
#
|
30
|
+
# @return [Array] A list of all channels
|
31
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0003-channels
|
32
|
+
# @example List all channels
|
33
|
+
# @client = CloudConnect::Client.new(:account => 'foo', :token => 'bar')
|
34
|
+
# @client.channels
|
35
|
+
def channels(options={})
|
36
|
+
enhance( get("channels", options), with: ChannelMethods )
|
37
|
+
end
|
38
|
+
alias :list_channels :channels
|
39
|
+
|
40
|
+
# Create a channel
|
41
|
+
#
|
42
|
+
# @param name [String] Name of the channel
|
43
|
+
# @param options [Hash] A customizable set of options
|
44
|
+
# @options options [Integer] :msgttl The delay in seconds before the message is considered expired (and will not be sent)
|
45
|
+
# @options options [Integer] :unitack The delay in seconds for acknowledgment by the asset (after the message has been sent)
|
46
|
+
# @options options [Integer] :serverack The delay in seconds for acknowledgment by the server (after the message has been sent)
|
47
|
+
# @return [Channel] Your newly created channel
|
48
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0007-channels#create_a_new_channel
|
49
|
+
# @example Create a new Channel
|
50
|
+
# @client = CloudConnect::CloudConnect.new(:account => 'foo', :token => 'bar')
|
51
|
+
# @client.create_channel("weather")
|
52
|
+
def create_channel(name, options={})
|
53
|
+
enhance( post("channels", options.merge({:name => name})), with: ChannelMethods )
|
17
54
|
end
|
18
|
-
@channels = channels.sort_by(&:channel)
|
19
|
-
end
|
20
55
|
|
56
|
+
# Update a channel
|
57
|
+
#
|
58
|
+
# @param name [String] Name of the channel
|
59
|
+
# @param options [Hash] A customizable set of options
|
60
|
+
# @options options [Integer] :msgttl The delay in seconds before the message is considered expired (and will not be sent)
|
61
|
+
# @options options [Integer] :unitack The delay in seconds for acknowledgment by the asset (after the message has been sent)
|
62
|
+
# @options options [Integer] :serverack The delay in seconds for acknowledgment by the server (after the message has been sent)
|
63
|
+
# @return [Channel] Your newly updated channel
|
64
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0007-channel#update_a_channel
|
65
|
+
# @example Update a Channel
|
66
|
+
# @client = CloudConnect::CloudConnect.new(:account => 'foo', :token => 'bar')
|
67
|
+
# @client.create_channel("weather", :msgttl => 123, ...)
|
68
|
+
def update_channel(name, options={})
|
69
|
+
enhance( put("channels/#{name}", options.merge({:name => name})), with: ChannelMethods )
|
70
|
+
end
|
71
|
+
|
72
|
+
# Delete a single channel
|
73
|
+
#
|
74
|
+
# @param name [String] Name fo the channel
|
75
|
+
# @return [Response] A response object with status
|
76
|
+
# @see http://wordsabout.it/mobile-devices/cloudconnect-user-documentation/cc-0006-channels#delete_a_channel
|
77
|
+
# @example Delete the CUSTOM_SENSOR_TEMP channel
|
78
|
+
# @client = CloudConnect::CloudConnect.new(:account => 'foo', :token => 'bar')
|
79
|
+
# @client.delete_channel("com.acmecorp.weather")
|
80
|
+
def delete_channel(name, options={})
|
81
|
+
delete("channels/#{name}", options, true)
|
82
|
+
end
|
83
|
+
|
84
|
+
module ChannelMethods
|
85
|
+
extend CustomMethods
|
86
|
+
end
|
87
|
+
end
|
21
88
|
end
|
22
89
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module CloudConnect
|
2
|
+
class Client
|
3
|
+
module Configurations
|
4
|
+
# Get a configuration
|
5
|
+
#
|
6
|
+
# @param id [String] ID of the configuration
|
7
|
+
# @return [Configuration] The configuration you requested, if it exists
|
8
|
+
def configuration(id, options={})
|
9
|
+
enhance( get("configs/#{id}", options), with: ConfigurationMethods )
|
10
|
+
end
|
11
|
+
|
12
|
+
# Search configurations
|
13
|
+
#
|
14
|
+
# @param search_term [String] The term to search for
|
15
|
+
# @return [Array] A list of configurations matching the search term
|
16
|
+
def search_configurations(search_term, options={})
|
17
|
+
enhance( get("configs?q=#{search_term}", options), with: ConfigurationMethods )
|
18
|
+
end
|
19
|
+
|
20
|
+
# Create a configuration
|
21
|
+
#
|
22
|
+
# @param name [String] Name of the configuration
|
23
|
+
# @options options [Hash] :data JSON data of the config
|
24
|
+
# @options options [Array] :imeis list of assets concerned by this configuration
|
25
|
+
# @return [Field] Your newly created configuration
|
26
|
+
def create_configuration(name, options={})
|
27
|
+
enhance( post("configs", options.merge(name: name)), with: ConfigurationMethods )
|
28
|
+
end
|
29
|
+
|
30
|
+
# Update a configuration
|
31
|
+
#
|
32
|
+
# @param id [String] Id of the configuration
|
33
|
+
# @options options [String] Name of the configuration
|
34
|
+
# @options options [Hash] :data JSON data of the config
|
35
|
+
# @options options [Array] :imeis list of assets concerned by this configuration
|
36
|
+
# @return [Field] Your newly created configuration
|
37
|
+
def update_configuration(id, options={})
|
38
|
+
enhance( put("configs/#{id}", options), with: ConfigurationMethods )
|
39
|
+
end
|
40
|
+
|
41
|
+
# Get all configurations
|
42
|
+
#
|
43
|
+
# @return [Array] A list of all configurations
|
44
|
+
def configurations(options={})
|
45
|
+
enhance( get("configs", options), with: ConfigurationMethods )
|
46
|
+
end
|
47
|
+
alias :list_configurations :configurations
|
48
|
+
|
49
|
+
module ConfigurationMethods
|
50
|
+
extend CustomMethods
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module CustomMethods
|
2
|
+
# @private
|
3
|
+
def extended(base)
|
4
|
+
# FIXME: Useless time consuming (especially for arrays)...
|
5
|
+
base.class.send(:attr_accessor, :_client) unless base.respond_to?(:_client)
|
6
|
+
end
|
7
|
+
|
8
|
+
# @private
|
9
|
+
# By extending CustomMethods in YourModule, you are able to call
|
10
|
+
# YourModule.apply_to(object_or_array) to add YourModule methods to the
|
11
|
+
# object or to all objects in the array.
|
12
|
+
def apply_to(receiver, client_opts)
|
13
|
+
case receiver
|
14
|
+
when Array
|
15
|
+
receiver.each{|a| a.extend self; a._client = client_opts[:client]}
|
16
|
+
when Hashie::Mash
|
17
|
+
receiver.extend self; receiver._client = client_opts[:client]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|