mios 0.1.1 → 0.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.
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: