hive-runner-ios 1.1.7 → 1.1.9

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.
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