hive-runner-ios 1.1.7 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/hive/controller/ios.rb +120 -63
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 73bed06ad8be83cadd0e3e11b835e6b8812e3204
4
- data.tar.gz: 61612ea8e5df880a5dc03fe3fa01bf6549de4ed1
3
+ metadata.gz: d50b94f4a51da9e915016b1a89b30b5a18a0ccec
4
+ data.tar.gz: 526308c5066d0a1f810479e68ab2bf827fe39fd7
5
5
  SHA512:
6
- metadata.gz: 1b0019c3cfb2af3ddf205f8734e8d62d091d5a7c559efd798e97537aa098b913e721b1ce3ae8b55a9e1e66e47ad6f10087bfc46a1989a5f64f2a074ce60201f2
7
- data.tar.gz: 0a97162d1649633946bda435a939fce26309a3ad14b25ab52490757004b04eb579cb463f166f6e6cd97b2379b73d157433519a774a2b893444260d9d27382d6b
6
+ metadata.gz: 93fb4be5a060c2dbe2810fd320d584b87e3dceb1cb563433af2593ff7d085c77e24e6cdbb4d612475bb591a5102be583008aa463977d389ef351cfd5f87edfc0
7
+ data.tar.gz: ed389aa7b9b7c78ce2130af1bf2b0e722b83e93d7e2ea6a9969f06da9d115e47042651ad5d7639e1dbf8690d216368e4d86492bd18715d2f062c521b7344b898
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # hive-runner-ios
2
2
 
3
- iOS component for the hive-runner
3
+ iOS component for the hive-runner - see the [change log](CHANGELOG.md) for release notes
4
4
 
5
5
  ## Quick start
6
6
 
@@ -7,89 +7,146 @@ module Hive
7
7
  class Ios < Controller
8
8
 
9
9
  def detect
10
- devices = DeviceAPI::IOS.devices
11
- Hive.logger.debug('No devices attached') if devices.empty?
10
+ if Hive.hive_mind.device_details.has_key? :error
11
+ detect_without_hivemind
12
+ else
13
+ detect_with_hivemind
14
+ end
15
+ end
12
16
 
13
- if not Hive.hive_mind.device_details.has_key? :error
17
+ def detect_with_hivemind
18
+ connected_devices = get_connected_devices
19
+ Hive.logger.debug('No devices attached') if connected_devices.empty?
20
+
21
+ # Selecting only ios mobiles
22
+ hivemind_devices = get_hivemind_devices
23
+ to_poll = []
24
+ attached_devices = []
25
+
26
+ hivemind_devices.each do |device|
27
+ Hive.logger.debug("Device details: #{device.inspect}")
14
28
  begin
15
- connected_devices = Hive.hive_mind.device_details['connected_devices'].select{ |d| d['device_type'] == 'Mobile' && d['operating_system_name'] == 'ios' }
16
- rescue NoMethodError
17
- # Failed to find connected devices
18
- raise Hive::Controller::DeviceDetectionFailed
29
+ registered_device = connected_devices.select { |a| a.serial == device['serial'] && a.trusted? }
30
+ rescue => e
31
+ registered_device = []
19
32
  end
20
33
 
21
- to_poll = []
22
- attached_devices = []
23
- connected_devices.each do |device|
24
- Hive.logger.debug("Device details: #{device.inspect}")
25
- registered_device = devices.select { |a| a.serial == device['serial'] && a.trusted? }
26
- if registered_device.empty?
27
- Hive.logger.debug("Removing previously registered device - #{device}")
28
- else
29
- Hive.logger.debug("Device #{device} to be polled")
30
- begin
31
- attached_devices << self.create_device(device.merge(
32
- 'os_version' => registered_device[0].version,
33
- 'device_range' => registered_device[0].device_class
34
- )
34
+ if registered_device.empty?
35
+ # A previously registered device isn't attached
36
+ Hive.logger.debug("A previously registered device has disappeared: #{device}")
37
+ else
38
+ # A previously registered device is attached, poll it
39
+ Hive.logger.debug("Setting #{device['name']} to be polled")
40
+ Hive.logger.debug("Device: #{registered_device.inspect}")
41
+ begin
42
+ Hive.logger.debug("#{device['name']} OS version: #{registered_device[0].version}")
43
+ # Check OS version and update if necessary
44
+ if device['operating_system_version'] != registered_device[0].version
45
+ Hive.logger.info("Updating OS version of #{device['name']} from #{device['operating_system_version']} to #{registered_device[0].version}")
46
+ Hive.hive_mind.register(
47
+ id: device['id'],
48
+ operating_system_name: 'android',
49
+ operating_system_version: registered_device[0].version
35
50
  )
36
- to_poll << device['id']
37
- rescue => e
38
- Hive.logger.warn("Error with connected device: #{e.message}")
39
51
  end
40
-
41
- devices = devices - registered_device
52
+ attached_devices << self.create_device(device.merge(
53
+ 'os_version' => registered_device[0].version,
54
+ 'device_range' => registered_device[0].device_class
55
+ )
56
+ )
57
+ to_poll << device['id']
58
+ rescue DeviceAPI::DeviceNotFound => e
59
+ Hive.logger.warn("Device disconnected before registration (serial: #{device['serial']})")
60
+ rescue => e
61
+ Hive.logger.warn("Error with connected device: #{e.message}")
42
62
  end
63
+
64
+ connected_devices = connected_devices - registered_device
43
65
  end
66
+ end
44
67
 
45
- Hive.logger.debug("Polling - #{to_poll}")
68
+ # Poll already registered devices
69
+ Hive.logger.debug("Polling: #{to_poll}")
46
70
  Hive.hive_mind.poll(*to_poll)
47
71
 
48
- devices.select{|a| a.trusted? }.each do |device|
72
+ # Register new devices
73
+ if !connected_devices.empty?
49
74
  begin
50
- dev = Hive.hive_mind.register(
51
- hostname: device.model,
52
- serial: device.serial,
53
- macs: [device.wifi_mac_address],
54
- brand: 'Apple',
55
- model: device.model,
56
- device_type: 'Mobile',
57
- imei: device.imei,
58
- operating_system_name: 'ios',
59
- operating_system_version: device.version
60
- )
61
- Hive.hive_mind.connect(dev['id'])
62
- Hive.logger.info("Device registered: #{dev}")
75
+ connected_devices.select{|a| a.trusted? }.each do |device|
76
+ begin
77
+ dev = Hive.hive_mind.register(
78
+ hostname: device.model,
79
+ serial: device.serial,
80
+ macs: [device.wifi_mac_address],
81
+ brand: 'Apple',
82
+ model: device.model,
83
+ device_type: 'Mobile',
84
+ imei: device.imei,
85
+ operating_system_name: 'ios',
86
+ operating_system_version: device.version
87
+ )
88
+ Hive.hive_mind.connect(dev['id'])
89
+ Hive.logger.info("Device registered: #{dev}")
90
+ rescue DeviceAPI::DeviceNotFound => e
91
+ Hive.logger.warn("Device disconnected before registration #{e.message}")
92
+ rescue => e
93
+ Hive.logger.warn("Error with connected device: #{e.message}")
94
+ end
95
+ end
63
96
  rescue => e
64
- Hive.logger.warn("Error with connected device - #{e.message}")
97
+ Hive.logger.debug("Connected Devices: #{connected_devices}")
98
+ Hive.logger.warn(e)
65
99
  end
66
100
  end
67
- else
68
- Hive.logger.info('No Hive Mind connection')
69
- device_info = devices.select{|a| a.trusted? }.map do |device|
70
- {
71
- 'id' => device.serial,
72
- 'serial' => device.serial,
73
- 'status' => 'idle',
74
- 'model' => device.model,
75
- 'brand' => 'Apple',
76
- 'os_version' => device.version,
77
- 'device_range' => device.device_class,
78
- 'queue_prefix' => @config['queue_prefix']
79
- }
80
- end
101
+ Hive.logger.info(attached_devices)
102
+ attached_devices
103
+ end
81
104
 
82
- attached_devices = device_info.collect do |physical_device|
83
- begin
105
+ def detect_without_hivemind
106
+ connected_devices = get_connected_devices
107
+ Hive.logger.debug('No devices attached') if connected_devices.empty?
108
+
109
+ Hive.logger.info('No Hive Mind connection')
110
+ Hive.logger.debug("Error: #{Hive.hive_mind.device_details[:error]}")
111
+ # Hive Mind isn't available, use DeviceAPI instead
112
+ begin
113
+ device_info = devices.select{|a| a.trusted? }.map do |device|
114
+ {
115
+ 'id' => device.serial,
116
+ 'serial' => device.serial,
117
+ 'status' => 'idle',
118
+ 'model' => device.model,
119
+ 'brand' => 'Apple',
120
+ 'os_version' => device.version,
121
+ 'device_range' => device.device_class,
122
+ 'queue_prefix' => @config['queue_prefix']
123
+ }
124
+ end
125
+ attached_devices = device_info.collect do |physical_device|
84
126
  self.create_device(physical_device)
85
- rescue => e
86
- Hive.logger.info("Could not create device: #{physical_device}");
87
127
  end
128
+ rescue DeviceAPI::DeviceNotFound => e
129
+ Hive.logger.warn("Device disconnected while fetching device_info #{e.message}")
130
+ rescue => e
131
+ Hive.logger.warn(e)
88
132
  end
133
+
134
+ Hive.logger.info(attached_devices)
135
+ attached_devices
89
136
  end
90
137
 
91
- Hive.logger.info(attached_devices)
92
- attached_devices
138
+ def get_connected_devices
139
+ devices = DeviceAPI::IOS.devices
140
+ devices.select{|a| a.trusted? }
141
+ end
142
+
143
+ def get_hivemind_devices
144
+ begin
145
+ connected_devices = Hive.hive_mind.device_details['connected_devices'].select{ |d| d['device_type'] == 'Mobile' && d['operating_system_name'] == 'ios' }
146
+ rescue NoMethodError
147
+ # Failed to find connected devices
148
+ raise Hive::Controller::DeviceDetectionFailed
149
+ end
93
150
  end
94
151
 
95
152
  def display_untrusted
@@ -99,7 +156,7 @@ module Hive
99
156
  return if untrusted_devices.empty?
100
157
  puts Terminal::Table.new headings: ['Untrusted devices'], rows: [untrusted_devices]
101
158
  end
159
+
102
160
  end
103
161
  end
104
162
  end
105
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hive-runner-ios
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Wilson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-07 00:00:00.000000000 Z
11
+ date: 2017-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hive-runner
@@ -83,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  version: '0'
84
84
  requirements: []
85
85
  rubyforge_project:
86
- rubygems_version: 2.5.1
86
+ rubygems_version: 2.6.8
87
87
  signing_key:
88
88
  specification_version: 4
89
89
  summary: Hive Runner iOS