mios 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mios.rb CHANGED
@@ -1,4 +1,5 @@
1
- require 'httparty'
1
+ require 'httpclient'
2
+ require 'multi_json'
2
3
  require "mios/version"
3
4
  require "mios/interface"
4
5
  require "mios/device"
data/lib/mios/action.rb CHANGED
@@ -7,19 +7,19 @@ module MiOS
7
7
  end
8
8
 
9
9
  def take(async=false, &block)
10
- response = @device.class.get url
10
+ response = MultiJson.load(@device.client.get("#{@device.base_uri}/data_request", url_params).content)
11
11
  # Are there ever more than one jobs from a device action?
12
12
  Job.new(@device, response.values.first['JobID'], async, &block)
13
13
  end
14
14
 
15
- def url
16
- url = "/data_request?output_format=json&id=action"
17
- url += "&DeviceNum=#{@device.id}"
18
- url += "&action=#{@action}"
19
- url += "&serviceId=#{@service_id}&"
20
- url += @parameters.map { |k, v|
21
- "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"
22
- }.join("&")
15
+ def url_params
16
+ {
17
+ :id => 'action',
18
+ :DeviceNum => @device.attributes["id"],
19
+ :action => @action,
20
+ :serviceId => @service_id,
21
+ :output_format => :json,
22
+ }.merge(@parameters)
23
23
  end
24
24
  end
25
25
  end
data/lib/mios/device.rb CHANGED
@@ -1,93 +1,80 @@
1
1
  module MiOS
2
2
  class Device
3
+ attr_reader :attributes, :client, :base_uri
3
4
 
4
- class << self
5
- def new(uri, *args)
6
- Class.new(AbstractInterface) { |klass|
7
- klass.base_uri(uri)
8
- }.new(*args)
9
- end
5
+ def initialize(client, base_uri, data)
6
+ @client, @base_uri = client, base_uri
7
+ parse(data)
10
8
  end
11
9
 
12
- class AbstractInterface
13
- include HTTParty
14
- format :json
15
-
16
- attr_reader :attributes
17
-
18
- def initialize(data)
19
- parse(data)
20
- end
21
-
22
- def inspect
23
- "#<MiOS::Device:0x#{'%x' % (self.object_id << 1)} name=#{@attributes['name']}>"
24
- end
10
+ def inspect
11
+ "#<MiOS::Device:0x#{'%x' % (self.object_id << 1)} name=#{@attributes['name']}>"
12
+ end
25
13
 
26
- def method_missing(method, *args)
27
- if @attributes.has_key?(method.to_s)
28
- @attributes[method.to_s]
29
- else
30
- super
31
- end
14
+ def method_missing(method, *args)
15
+ if @attributes.has_key?(method.to_s)
16
+ @attributes[method.to_s]
17
+ else
18
+ super
32
19
  end
20
+ end
33
21
 
34
- def reload
35
- parse(self.class.get("/data_request?id=status&DeviceNum=#{id}").parsed_response["Device_Num_#{id}"], true)
36
-
37
- self
38
- end
39
-
40
- private
41
-
42
- def set(urn, action, params, async=false, &block)
43
- MiOS::Action.new(self, urn, action, params).take(async, &block)
44
- end
45
-
46
- def timestamp_for(urn, key)
47
- Time.at integer_for(urn, key)
48
- end
22
+ def reload
23
+ parse(MultiJson.load(@client.get("#{@base_uri}/data_request", {:id => 'status', :DeviceNum => attributes['id'], :output_format => :json}).content)["Device_Num_#{attributes['id']}"], true)
49
24
 
50
- def boolean_for(urn, key)
51
- integer_for(urn, key) == 1
52
- end
53
-
54
- def integer_for(urn, key)
55
- value_for(urn, key).to_i
56
- end
57
-
58
- def value_for(urn, key)
59
- @states.each do |state_hash|
60
- if state_hash['service'] == urn
61
- if state_hash['variable'] == key
62
- return state_hash['value']
63
- end
25
+ self
26
+ end
27
+
28
+ private
29
+
30
+ def set(urn, action, params, async=false, &block)
31
+ MiOS::Action.new(self, urn, action, params).take(async, &block)
32
+ end
33
+
34
+ def timestamp_for(urn, key)
35
+ Time.at integer_for(urn, key)
36
+ end
37
+
38
+ def boolean_for(urn, key)
39
+ integer_for(urn, key) == 1
40
+ end
41
+
42
+ def integer_for(urn, key)
43
+ value_for(urn, key).to_i
44
+ end
45
+
46
+ def value_for(urn, key)
47
+ @states.each do |state_hash|
48
+ if state_hash['service'] == urn
49
+ if state_hash['variable'] == key
50
+ return state_hash['value']
64
51
  end
65
52
  end
66
-
67
- nil
68
53
  end
69
54
 
70
- def parse(data, skip_attributes=false)
55
+ nil
56
+ end
57
+
58
+ def parse(data, skip_attributes=false)
71
59
 
72
- @attributes = Hash[
73
- data.select { |k, v|
74
- !data[k].kind_of?(Hash) and !data[k].kind_of?(Array)
75
- }.to_a
76
- ] unless skip_attributes
77
-
78
- @states = data['states']
79
- @states.map { |state|
80
- state['service'].split(":").last
81
- }.uniq.each { |service|
82
- if MiOS::Services.const_defined?(service)
83
- extend MiOS::Services.const_get(service)
84
- else
85
- $stderr.puts "WARNING: #{service} not yet supported"
86
- end
87
- }
88
-
89
- true
90
- end
60
+ @attributes = Hash[
61
+ data.select { |k, v|
62
+ !data[k].kind_of?(Hash) and !data[k].kind_of?(Array)
63
+ }.to_a
64
+ ] unless skip_attributes
65
+
66
+ @states = data['states']
67
+ @states.map { |state|
68
+ state['service'].split(":").last
69
+ }.uniq.each { |service|
70
+ if MiOS::Services.const_defined?(service)
71
+ extend MiOS::Services.const_get(service)
72
+ else
73
+ $stderr.puts "WARNING: #{service} not yet supported"
74
+ end
75
+ }
76
+
77
+ true
91
78
  end
92
79
  end
93
80
  end
@@ -1,68 +1,56 @@
1
1
  module MiOS
2
2
  class Interface
3
+ attr_reader :attributes, :base_uri
3
4
 
4
- class << self
5
- def new(uri, *args)
6
- Class.new(AbstractInterface) { |klass|
7
- klass.base_uri(uri)
8
- }.new(*args)
9
- end
5
+ def initialize(base_uri)
6
+ @base_uri = base_uri
7
+ @client = HTTPClient.new
8
+ refresh!
10
9
  end
11
10
 
12
- class AbstractInterface
13
- include HTTParty
14
- format :json
15
-
16
- attr_reader :attributes
17
-
18
- def initialize
19
- refresh!
11
+ def method_missing(method, *args)
12
+ if @attributes.has_key?(method.to_s)
13
+ @attributes[method.to_s]
14
+ else
15
+ super
20
16
  end
17
+ end
21
18
 
22
- def method_missing(method, *args)
23
- if @attributes.has_key?(method.to_s)
24
- @attributes[method.to_s]
25
- else
26
- super
27
- end
28
- end
19
+ def inspect
20
+ "#<MiOS::Interface:0x#{'%x' % (self.object_id << 1)} @base_uri=#{@base_uri} @attributes=#{@attributes.inspect}>"
21
+ end
29
22
 
30
- def inspect
31
- "#<MiOS::Interface:0x#{'%x' % (self.object_id << 1)} @attributes=#{@attributes.inspect}>"
23
+ def refresh!
24
+ data = MultiJson.load(@client.get("#{base_uri}/data_request", {:id => "user_data", :output_format => :json}).content)
25
+ @attributes = Hash[
26
+ data.select { |k, v|
27
+ !data[k].kind_of?(Hash) and !data[k].kind_of?(Array)
28
+ }.map { |k, v|
29
+ [k.downcase, v]
30
+ }
31
+ ]
32
+ # Convert some time objects
33
+ ['loadtime', 'devicesync'].each do |attr|
34
+ @attributes[attr] = Time.at(@attributes[attr].to_i)
32
35
  end
33
36
 
34
- def refresh!
35
- data = self.class.get "/data_request?id=user_data"
36
- @attributes = Hash[
37
- data.select { |k, v|
38
- !data[k].kind_of?(Hash) and !data[k].kind_of?(Array)
39
- }.map { |k, v|
40
- [k.downcase, v]
41
- }
42
- ]
43
- # Convert some time objects
44
- ['loadtime', 'devicesync'].each do |attr|
45
- @attributes[attr] = Time.at(@attributes[attr].to_i)
46
- end
37
+ @devices = Hash[
38
+ data['devices'].map { |device|
39
+ [device['id'], Device.new(@client, @base_uri, device)]
40
+ }
41
+ ]
47
42
 
48
- @devices = Hash[
49
- data['devices'].map { |device|
50
- [device['id'], Device.new(self.class.base_uri, device)]
51
- }
52
- ]
53
-
54
- true
55
- end
56
-
57
- def categories
58
- @devices.values.map { |device|
59
- device.category
60
- }.uniq.sort
61
- end
43
+ true
44
+ end
62
45
 
63
- def devices; @devices.values; end
64
-
65
- def device_names; devices.map(&:name); end
46
+ def categories
47
+ @devices.values.map { |device|
48
+ device.category
49
+ }.uniq.sort
66
50
  end
51
+
52
+ def devices; @devices.values; end
53
+
54
+ def device_names; devices.map(&:name); end
67
55
  end
68
56
  end
data/lib/mios/job.rb CHANGED
@@ -73,7 +73,7 @@ module MiOS
73
73
  end
74
74
 
75
75
  def reload_status!
76
- @status = @obj.class.get("/data_request?id=jobstatus&job=#{@id}&plugin=zwave")['status']
76
+ @status = MultiJson.load(@obj.client.get("#{@obj.base_uri}/data_request", {:id => 'jobstatus', :job => @id, :plugin => 'zwave', :output_format => :json}).content)['status']
77
77
  end
78
78
  end
79
79
  end
data/lib/mios/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MiOS
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/mios.gemspec CHANGED
@@ -17,7 +17,8 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency "httparty", ">= 0.9.0"
20
+ gem.add_dependency "httpclient", ">= 2.2.0"
21
+ gem.add_dependency "multi_json", ">= 1.3.0"
21
22
 
22
23
  gem.add_development_dependency "rspec", ">= 2.8.0"
23
24
  gem.add_development_dependency "syntax"
metadata CHANGED
@@ -1,103 +1,127 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mios
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Kelley Reynolds
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-10-10 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: httparty
16
- requirement: !ruby/object:Gem::Requirement
17
+
18
+ date: 2012-11-30 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: httpclient
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
17
25
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 0.9.0
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 2
32
+ - 2
33
+ - 0
34
+ version: 2.2.0
22
35
  type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: multi_json
23
39
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
40
+ requirement: &id002 !ruby/object:Gem::Requirement
25
41
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 0.9.0
30
- - !ruby/object:Gem::Dependency
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 27
46
+ segments:
47
+ - 1
48
+ - 3
49
+ - 0
50
+ version: 1.3.0
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
31
54
  name: rspec
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: 2.8.0
38
- type: :development
39
55
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
56
+ requirement: &id003 !ruby/object:Gem::Requirement
41
57
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 47
62
+ segments:
63
+ - 2
64
+ - 8
65
+ - 0
45
66
  version: 2.8.0
46
- - !ruby/object:Gem::Dependency
47
- name: syntax
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
67
  type: :development
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: syntax
55
71
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
72
+ requirement: &id004 !ruby/object:Gem::Requirement
57
73
  none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: rake
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: 0.9.2
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
70
81
  type: :development
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
71
85
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
86
+ requirement: &id005 !ruby/object:Gem::Requirement
73
87
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 63
92
+ segments:
93
+ - 0
94
+ - 9
95
+ - 2
77
96
  version: 0.9.2
78
- - !ruby/object:Gem::Dependency
79
- name: yard
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: 0.7.2
86
97
  type: :development
98
+ version_requirements: *id005
99
+ - !ruby/object:Gem::Dependency
100
+ name: yard
87
101
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
102
+ requirement: &id006 !ruby/object:Gem::Requirement
89
103
  none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ hash: 7
108
+ segments:
109
+ - 0
110
+ - 7
111
+ - 2
93
112
  version: 0.7.2
113
+ type: :development
114
+ version_requirements: *id006
94
115
  description: Object-oriented interactions with MiOS from MiCasaVerde
95
- email:
116
+ email:
96
117
  - kelley.reynolds@rubyscale.com
97
118
  executables: []
119
+
98
120
  extensions: []
121
+
99
122
  extra_rdoc_files: []
100
- files:
123
+
124
+ files:
101
125
  - .gitignore
102
126
  - Gemfile
103
127
  - LICENSE.txt
@@ -127,37 +151,40 @@ files:
127
151
  - mios.gemspec
128
152
  - spec/random_spec.rb
129
153
  - spec/spec_helper.rb
130
- homepage: ''
154
+ has_rdoc: true
155
+ homepage: ""
131
156
  licenses: []
157
+
132
158
  post_install_message:
133
159
  rdoc_options: []
134
- require_paths:
160
+
161
+ require_paths:
135
162
  - lib
136
- required_ruby_version: !ruby/object:Gem::Requirement
163
+ required_ruby_version: !ruby/object:Gem::Requirement
137
164
  none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- segments:
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ hash: 3
169
+ segments:
143
170
  - 0
144
- hash: 770704339145567336
145
- required_rubygems_version: !ruby/object:Gem::Requirement
171
+ version: "0"
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
173
  none: false
147
- requirements:
148
- - - ! '>='
149
- - !ruby/object:Gem::Version
150
- version: '0'
151
- segments:
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ hash: 3
178
+ segments:
152
179
  - 0
153
- hash: 770704339145567336
180
+ version: "0"
154
181
  requirements: []
182
+
155
183
  rubyforge_project:
156
- rubygems_version: 1.8.23
184
+ rubygems_version: 1.6.2
157
185
  signing_key:
158
186
  specification_version: 3
159
187
  summary: Object-oriented interactions with MiOS from MiCasaVerde
160
- test_files:
188
+ test_files:
161
189
  - spec/random_spec.rb
162
190
  - spec/spec_helper.rb
163
- has_rdoc: