remotedroid 0.4.0 → 0.5.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.
@@ -0,0 +1,227 @@
1
+ module RemoteDroid
2
+
3
+ class Model
4
+ include AppRoutes
5
+
6
+ def initialize(obj=nil, root: 'device1', debug: false)
7
+
8
+ super()
9
+ @root, @debug = root, debug
10
+ @location = nil
11
+
12
+ if obj then
13
+
14
+ s = obj.strip
15
+
16
+ puts 's: ' + s.inspect if @debug
17
+
18
+ if s[0] == '<' or s.lines[1][0..1] == ' ' then
19
+
20
+ puts 'before easydom' if @debug
21
+
22
+ s2 = if s.lines[1][0..1] == ' ' then
23
+
24
+ lines = s.lines.map do |line|
25
+ line.sub(/(\w+) +is +(\w+)$/) {|x| "#{$1} {switch: #{$2}}" }
26
+ end
27
+
28
+ lines.join
29
+
30
+ else
31
+ s
32
+ end
33
+
34
+ @ed = EasyDom.new(s2)
35
+ else
36
+ build(s, root: root)
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ def build(raw_requests, root: @root)
44
+
45
+ @ed = EasyDom.new(debug: false, root: root)
46
+ raw_requests.lines.each {|line| request(line) }
47
+
48
+ end
49
+
50
+
51
+ def get_thing(h)
52
+
53
+ h[:thing].gsub!(/ /,'_')
54
+
55
+ if not h.has_key? :location then
56
+ location = false
57
+ h[:location] = find_path(h[:thing])
58
+ else
59
+ location = true
60
+ end
61
+
62
+ puts 'h: ' + h.inspect if @debug
63
+
64
+ a = []
65
+ a += h[:location].split(/ /)
66
+ a << h[:thing]
67
+ status = a.inject(@ed) {|r,x| r.send(x)}.send(h[:action])
68
+
69
+ if location then
70
+ "The %s %s is %s." % [h[:location], h[:thing], status]
71
+ else
72
+ "%s is %s." % [h[:thing].capitalize, status]
73
+ end
74
+
75
+ end
76
+
77
+ # Object Property (op)
78
+ # Helpful for accessing properites in dot notation
79
+ # e.g. op.livingroom.light.switch = 'off'
80
+ #
81
+ def op()
82
+ @ed
83
+ end
84
+
85
+ def query(s)
86
+ @ed.e.element(s)
87
+ end
88
+
89
+ # request accepts a string in plain english
90
+ # e.g. request 'switch the livingroom light on'
91
+ #
92
+ def request(s)
93
+
94
+ params = {request: s}
95
+ requests(params)
96
+ h = find_request(s)
97
+
98
+ method(h.first[-1]).call(h).gsub(/_/,' ')
99
+
100
+ end
101
+
102
+ def set_thing(h)
103
+
104
+ h[:thing].gsub!(/ /,'_')
105
+ h[:location] = find_path(h[:thing]) unless h.has_key? :location
106
+
107
+ a = []
108
+ a += h[:location].split(/ /)
109
+ a << h[:thing]
110
+
111
+ a.inject(@ed) {|r,x| r.send(x)}.send(h[:action], h[:value])
112
+
113
+ end
114
+
115
+ def to_sliml(level: 0)
116
+
117
+ s = @ed.to_sliml
118
+
119
+ return s if level.to_i > 0
120
+
121
+ lines = s.lines.map do |line|
122
+
123
+ line.sub(/\{[^\}]+\}/) do |x|
124
+
125
+ a = x.scan(/\w+: +[^ ]+/)
126
+ if a.length == 1 and x[/switch:/] then
127
+
128
+ val = x[/(?<=switch: ) *["']([^"']+)/,1]
129
+ 'is ' + val
130
+ else
131
+ x
132
+ end
133
+
134
+ end
135
+ end
136
+
137
+ lines.join
138
+
139
+ end
140
+
141
+ def to_xml(options=nil)
142
+ @ed.xml(pretty: true).gsub(' style=\'\'','')
143
+ end
144
+
145
+ alias xml to_xml
146
+
147
+ # to_xml() is the preferred method
148
+
149
+ protected
150
+
151
+ def requests(params)
152
+
153
+ # e.g. switch the livingroom gas_fire off
154
+ #
155
+ get /(?:switch|turn) the ([^ ]+) +([^ ]+) +(on|off)$/ do |location, device, onoff|
156
+ {type: :set_thing, action: 'switch=', location: location, thing: device, value: onoff}
157
+ end
158
+
159
+ # e.g. switch the gas _fire off
160
+ #
161
+ get /(?:switch|turn) the ([^ ]+) +(on|off)$/ do |device, onoff|
162
+ {type: :set_thing, action: 'switch=', thing: device, value: onoff}
163
+ end
164
+
165
+ # e.g. is the livingroom gas_fire on?
166
+ #
167
+ get /is the ([^ ]+) +([^ ]+) +(?:on|off)\??$/ do |location, device|
168
+ {type: :get_thing, action: 'switch', location: location, thing: device}
169
+ end
170
+
171
+ # e.g. enable airplane mode
172
+ #
173
+ get /((?:dis|en)able) ([^$]+)$/ do |state, service|
174
+ {type: :set_thing, action: 'switch=', thing: service, value: state + 'd'}
175
+ end
176
+
177
+ # e.g. switch airplane mode off
178
+ #
179
+ get /switch (.*) (on|off)/ do |service, rawstate|
180
+
181
+ state = rawstate == 'on' ? 'enabled' : 'disabled'
182
+ {type: :set_thing, action: 'switch=', thing: service, value: state}
183
+
184
+ end
185
+
186
+ # e.g. is airplane mode enabed?
187
+ #
188
+ get /is (.*) +(?:(?:dis|en)abled)\??$/ do |service|
189
+ {type: :get_thing, action: 'switch', thing: service.gsub(/ /,'_')}
190
+ end
191
+
192
+ # e.g. is the gas_fire on?
193
+ #
194
+ get /is the ([^ ]+) +(?:on|off)\??$/ do |device|
195
+ location = find_path(device)
196
+ {type: :get_thing, action: 'switch', location: location, thing: device}
197
+ end
198
+
199
+ # e.g. fetch the livingroom temperature reading
200
+ #
201
+ get /fetch the ([^ ]+) +([^ ]+) +(?:reading)$/ do |location, device|
202
+ {type: :get_thing, action: 'reading', location: location, thing: device}
203
+ end
204
+
205
+ # e.g. fetch the temperature reading
206
+ #
207
+ get /fetch the ([^ ]+) +(?:reading)$/ do |device|
208
+ location = find_path(device)
209
+ {type: :get_thing, action: 'reading', location: location, thing: device}
210
+ end
211
+
212
+ end
213
+
214
+ private
215
+
216
+ def find_path(s)
217
+ puts 'find_path s: ' + s.inspect if @debug
218
+ found = query('//'+ s)
219
+ return unless found
220
+ a = found.backtrack.to_xpath.split('/')
221
+ a[1..-2].join(' ')
222
+ end
223
+
224
+ alias find_request run_route
225
+
226
+ end
227
+ end
@@ -0,0 +1,60 @@
1
+ module RemoteDroid
2
+
3
+ class Query
4
+
5
+ attr_accessor :locations
6
+
7
+ def initialize(callback)
8
+ @callback = callback
9
+ @locations = []
10
+ end
11
+
12
+ def airplane_mode_enabled?()
13
+ q(:airplane_mode_on).to_i > 0
14
+ end
15
+
16
+ def battery()
17
+ q(:battery).to_i
18
+ end
19
+
20
+ def current_brightness()
21
+ q(:current_brightness).to_i
22
+ end
23
+
24
+ alias brightness current_brightness
25
+
26
+ def cell_id()
27
+ q(:cell_id)
28
+ end
29
+
30
+ alias cell_tower cell_id
31
+
32
+ def ip()
33
+ q(:ip)
34
+ end
35
+
36
+ def location()
37
+
38
+ r = @callback.query(:location)
39
+ return r if r.nil? or r.empty? or r[:coords].nil?
40
+
41
+ r[:coords] = r[:coords].split(',')
42
+ r[:time] = Time.parse(r[:time])
43
+ @locations << r
44
+ @locations.shift if @locations.length > 1000
45
+
46
+ return r
47
+ end
48
+
49
+ def take_picture()
50
+ @callback.query(:'take-picture')
51
+ end
52
+
53
+ private
54
+
55
+ def q(id)
56
+ @callback.query(id)[id]
57
+ end
58
+
59
+ end
60
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remotedroid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,7 +35,7 @@ cert_chain:
35
35
  io3WPRDjULC924M5S8wbrus31v2AUjqFBPvmHr7caf/VHErWypV482xcDhWt1eif
36
36
  0G2k2ptozXcBS9odsqGUTb5N
37
37
  -----END CERTIFICATE-----
38
- date: 2020-10-11 00:00:00.000000000 Z
38
+ date: 2020-10-19 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: onedrb
@@ -106,7 +106,7 @@ dependencies:
106
106
  version: '0.9'
107
107
  - - ">="
108
108
  - !ruby/object:Gem::Version
109
- version: 0.9.5
109
+ version: 0.9.12
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
@@ -116,7 +116,7 @@ dependencies:
116
116
  version: '0.9'
117
117
  - - ">="
118
118
  - !ruby/object:Gem::Version
119
- version: 0.9.5
119
+ version: 0.9.12
120
120
  description:
121
121
  email: james@jamesrobertson.eu
122
122
  executables: []
@@ -124,6 +124,11 @@ extensions: []
124
124
  extra_rdoc_files: []
125
125
  files:
126
126
  - lib/remotedroid.rb
127
+ - lib/remotedroid/client.rb
128
+ - lib/remotedroid/control.rb
129
+ - lib/remotedroid/controller.rb
130
+ - lib/remotedroid/model.rb
131
+ - lib/remotedroid/query.rb
127
132
  homepage: https://github.com/jrobertson/remotedroid
128
133
  licenses:
129
134
  - MIT
metadata.gz.sig CHANGED
Binary file