roku_builder 3.12.8 → 3.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/CHANGELOG +9 -0
  4. data/Gemfile.lock +17 -11
  5. data/bin/roku +4 -8
  6. data/lib/roku_builder.rb +16 -24
  7. data/lib/roku_builder/config.rb +213 -0
  8. data/lib/roku_builder/config_parser.rb +304 -267
  9. data/lib/roku_builder/config_validator.rb +149 -126
  10. data/lib/roku_builder/controller.rb +34 -184
  11. data/lib/roku_builder/controller_commands.rb +85 -79
  12. data/lib/roku_builder/error_handler.rb +0 -11
  13. data/lib/roku_builder/errors.rb +12 -0
  14. data/lib/roku_builder/inspector.rb +6 -4
  15. data/lib/roku_builder/keyer.rb +1 -1
  16. data/lib/roku_builder/loader.rb +1 -1
  17. data/lib/roku_builder/logger.rb +32 -0
  18. data/lib/roku_builder/manifest_manager.rb +2 -2
  19. data/lib/roku_builder/monitor.rb +1 -1
  20. data/lib/roku_builder/options.rb +113 -0
  21. data/lib/roku_builder/stager.rb +2 -2
  22. data/lib/roku_builder/tester.rb +57 -11
  23. data/lib/roku_builder/util.rb +3 -4
  24. data/lib/roku_builder/version.rb +1 -1
  25. data/roku_builder.gemspec +2 -1
  26. data/test/roku_builder/test_config.rb +168 -0
  27. data/test/roku_builder/test_config_parser.rb +347 -394
  28. data/test/roku_builder/test_config_validator.rb +193 -190
  29. data/test/roku_builder/test_controller.rb +59 -178
  30. data/test/roku_builder/test_controller_commands.rb +407 -394
  31. data/test/roku_builder/test_error_handler.rb +67 -69
  32. data/test/roku_builder/test_files/config_test/bad.json +2 -0
  33. data/test/roku_builder/test_files/config_test/child.json +11 -0
  34. data/test/roku_builder/test_files/config_test/config.json +29 -0
  35. data/test/roku_builder/test_files/config_test/non_json.json +1 -0
  36. data/test/roku_builder/test_files/config_test/parent.json +21 -0
  37. data/test/roku_builder/test_files/config_test/parent_projects.json +35 -0
  38. data/test/roku_builder/test_files/manifest_manager_test/manifest_template_2 +1 -1
  39. data/test/roku_builder/test_helper.rb +55 -45
  40. data/test/roku_builder/test_inspector.rb +278 -213
  41. data/test/roku_builder/test_keyer.rb +144 -147
  42. data/test/roku_builder/test_linker.rb +91 -95
  43. data/test/roku_builder/test_loader.rb +279 -289
  44. data/test/roku_builder/test_logger.rb +47 -0
  45. data/test/roku_builder/test_manifest_manager.rb +92 -94
  46. data/test/roku_builder/test_monitor.rb +101 -103
  47. data/test/roku_builder/test_navigator.rb +240 -245
  48. data/test/roku_builder/test_options.rb +156 -0
  49. data/test/roku_builder/test_packager.rb +108 -108
  50. data/test/roku_builder/test_profiler.rb +20 -19
  51. data/test/roku_builder/test_scripter.rb +83 -81
  52. data/test/roku_builder/test_stager.rb +299 -311
  53. data/test/roku_builder/test_tester.rb +112 -115
  54. data/test/roku_builder/test_util.rb +18 -17
  55. metadata +39 -6
  56. data/lib/roku_builder/config_manager.rb +0 -161
  57. data/test/roku_builder/test_config_manager.rb +0 -372
@@ -1,118 +1,125 @@
1
1
  # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
2
 
3
3
  module RokuBuilder
4
-
5
- MISSING_DEVICES = 1
6
- MISSING_DEVICES_DEFAULT = 2
7
- DEVICE_DEFAULT_BAD = 3
8
- # = 4
9
- MISSING_PROJECTS_DEFAULT = 5
10
- PROJECTS_DEFAULT_BAD = 6
11
- DEVICE_MISSING_IP = 7
12
- DEVICE_MISSING_USER = 8
13
- DEVICE_MISSING_PASSWORD = 9
14
- PROJECT_MISSING_APP_NAME = 10
15
- PROJECT_MISSING_DIRECTORY = 11
16
- PROJECT_MISSING_FOLDERS = 12
17
- PROJECT_FOLDERS_BAD = 13
18
- PROJECT_MISSING_FILES = 14
19
- PROJECT_FILES_BAD = 15
20
- STAGE_MISSING_BRANCH = 16
21
- STAGE_MISSING_SCRIPT = 17
22
- PROJECT_STAGE_METHOD_BAD = 18
23
- KEY_MISSING_PATH = 19
24
- KEY_MISSING_PASSWORD = 20
25
- INVALID_MAPPING_INFO = 21
26
- MISSING_KEY = 22
27
-
28
- MISSING_STAGE_METHOD = -1
29
-
30
- # Validate Config File
31
4
  class ConfigValidator
32
5
 
33
- # Validates the roku config
34
- # @param config [Hash] roku config object
35
- # @return [Array] error codes for valid config (see self.error_codes)
36
- def self.validate_config(config:)
37
- codes = []
38
- validate_structure(codes: codes, config: config)
39
- [:projects, :devices, :keys].each do |type|
40
- if config[type]
41
- config[type].each do |key, value|
42
- next if [:default, :key_dir, :project_dir].include?(key)
43
- method = "validate_#{type.to_s[0..-2]}".to_sym
44
- attrs = {codes: codes}
45
- attrs[type.to_s[0..-2].to_sym] = value
46
- send(method, attrs)
47
- if value[:stages]
48
- value[:stages].each {|_stage, stage_config|
49
- validate_stage(codes: codes, stage: stage_config, project: value, config: config)
50
- }
51
- end
52
- end
6
+ VALID_CONFIG = 0
7
+ MISSING_DEVICES = 1
8
+ MISSING_DEVICES_DEFAULT = 2
9
+ DEVICE_DEFAULT_BAD = 3
10
+ # = 4
11
+ MISSING_PROJECTS_DEFAULT = 5
12
+ PROJECTS_DEFAULT_BAD = 6
13
+ DEVICE_MISSING_IP = 7
14
+ DEVICE_MISSING_USER = 8
15
+ DEVICE_MISSING_PASSWORD = 9
16
+ PROJECT_MISSING_APP_NAME = 10
17
+ PROJECT_MISSING_DIRECTORY = 11
18
+ PROJECT_MISSING_FOLDERS = 12
19
+ PROJECT_FOLDERS_BAD = 13
20
+ PROJECT_MISSING_FILES = 14
21
+ PROJECT_FILES_BAD = 15
22
+ STAGE_MISSING_BRANCH = 16
23
+ STAGE_MISSING_SCRIPT = 17
24
+ PROJECT_STAGE_METHOD_BAD = 18
25
+ KEY_MISSING_PATH = 19
26
+ KEY_MISSING_PASSWORD = 20
27
+ INVALID_MAPPING_INFO = 21
28
+ MISSING_KEY = 22
29
+ MISSING_STAGE_METHOD = 23
30
+
31
+ def initialize(config:)
32
+ @logger = Logger.instance
33
+ @config = config
34
+ validate_config
35
+ end
36
+
37
+ def print_errors
38
+ @codes.each do |code|
39
+ if code > 0
40
+ @logger.fatal error_codes[code]
41
+ end
42
+ if code < 0
43
+ @logger.warn error_codes[code]
53
44
  end
54
45
  end
55
- if config[:input_mapping]
56
- config[:input_mapping].each_value {|info| validate_mapping(codes: codes, mapping: info) }
46
+ end
47
+
48
+ def is_fatal?
49
+ !@codes.select{|code| code > 0}.empty?
50
+ end
51
+
52
+ def is_depricated?
53
+ !@codes.select{|code| code < 0}.empty?
54
+ end
55
+
56
+ def is_valid?
57
+ @codes.select{|code| code > 0}.empty?
58
+ end
59
+
60
+ private
61
+
62
+ def validate_config
63
+ @codes = []
64
+ validate_structure
65
+ [:projects, :devices, :keys, :input_mapping].each do |section|
66
+ validate_section(section: section) if @config[section]
57
67
  end
58
- codes.uniq!
59
- codes.push(0) if codes.empty?
60
- codes
68
+ @codes.uniq!
69
+ @codes.push(VALID_CONFIG) if @codes.empty?
61
70
  end
62
71
 
63
- # Error code messages for config validation
64
- # @return [Array] error code messages
65
- def self.error_codes()
66
- [
67
- #===============FATAL ERRORS===============#
68
- "Valid Config.",
69
- "Devices config is missing.",
70
- "Devices default is missing.",
71
- "Devices default is not a hash.",
72
- "",
73
- "Projects default is missing.", #5
74
- "Projects default is not a hash.",
75
- "A device config is missing its IP address.",
76
- "A device config is missing its username.",
77
- "A device config is missing its password.",
78
- "A project config is missing its app_name.", #10
79
- "A project config is missing its directorty.",
80
- "A project config is missing its folders.",
81
- "A project config's folders is not an array.",
82
- "A project config is missing its files.",
83
- "A project config's files is not an array.", #15
84
- "A project stage is missing its branch.",
85
- "A project stage is missing its script.",
86
- "A project as an invalid stage method.",
87
- "A key is missing its keyed package path.",
88
- "A key is missing its password.", #20
89
- "A input mapping is invalid",
90
- "A key is missing from the keys section",
91
- #===============WARNINGS===============#
92
- "A project is missing its stage method."
93
- ]
72
+ def validate_section(section:)
73
+ @config[section].each do |key, value|
74
+ next unless should_validate(key: key)
75
+ call_validate_method_for_section(section: section, content: value)
76
+ if has_stages(section_content: value)
77
+ validate_stages(project_content: value)
78
+ end
79
+ end
80
+ end
81
+
82
+ def should_validate(key:)
83
+ !([:default, :key_dir, :project_dir].include?(key))
84
+ end
85
+
86
+ def call_validate_method_for_section(section:, content:)
87
+ section_singular = singularize(section: section.to_s)
88
+ attrs = {}
89
+ attrs[section_singular] = content
90
+ method = "validate_#{section_singular}".to_sym
91
+ send(method, attrs)
92
+ end
93
+
94
+ def singularize(section:)
95
+ section = section[0..-2] if section.end_with?("s")
96
+ section.to_sym
97
+ end
98
+
99
+ def has_stages(section_content:)
100
+ section_content.class == Hash and section_content[:stages]
101
+ end
102
+
103
+ def validate_stages(project_content:)
104
+ project_content[:stages].each_value {|stage_config|
105
+ validate_stage(stage: stage_config, project: project_content)
106
+ }
94
107
  end
95
108
 
96
- # Validates the roku config structure
97
- # @param codes [Array] array of error codes
98
- # @param config [Hash] roku config object
99
- def self.validate_structure(codes:, config:)
109
+
110
+ def validate_structure
100
111
  errors = [
101
- [MISSING_DEVICES, !config[:devices]],
102
- [MISSING_DEVICES_DEFAULT, (config[:devices] and !config[:devices][:default])],
103
- [DEVICE_DEFAULT_BAD, (config[:devices] and config[:devices][:default] and !config[:devices][:default].is_a?(Symbol))],
104
- [MISSING_PROJECTS_DEFAULT, (config[:projects] and !config[:projects][:default])],
105
- [MISSING_PROJECTS_DEFAULT, (config[:projects] and config[:projects][:default] == "<project id>".to_sym)],
106
- [PROJECTS_DEFAULT_BAD, (config[:projects] and config[:projects][:default] and !config[:projects][:default].is_a?(Symbol))]
112
+ [MISSING_DEVICES, !@config[:devices]],
113
+ [MISSING_DEVICES_DEFAULT, (@config[:devices] and !@config[:devices][:default])],
114
+ [DEVICE_DEFAULT_BAD, (@config[:devices] and @config[:devices][:default] and !@config[:devices][:default].is_a?(Symbol))],
115
+ [MISSING_PROJECTS_DEFAULT, (@config[:projects] and !@config[:projects][:default])],
116
+ [MISSING_PROJECTS_DEFAULT, (@config[:projects] and @config[:projects][:default] == "<project id>".to_sym)],
117
+ [PROJECTS_DEFAULT_BAD, (@config[:projects] and @config[:projects][:default] and !@config[:projects][:default].is_a?(Symbol))]
107
118
  ]
108
- process_errors(codes: codes, errors: errors)
119
+ process_errors(errors: errors)
109
120
  end
110
- private_class_method :validate_structure
111
121
 
112
- # Validates a roku config device
113
- # @param codes [Array] array of error codes
114
- # @param device [Hash] device config object
115
- def self.validate_device(codes:, device:)
122
+ def validate_device(device:)
116
123
  errors = [
117
124
  [DEVICE_MISSING_IP, (!device[:ip])],
118
125
  [DEVICE_MISSING_IP, (device[:ip] == "xxx.xxx.xxx.xxx")],
@@ -124,14 +131,10 @@ module RokuBuilder
124
131
  [DEVICE_MISSING_PASSWORD, (device[:password] == "<password>")],
125
132
  [DEVICE_MISSING_PASSWORD, (device[:password] == "")]
126
133
  ]
127
- process_errors(codes: codes, errors: errors)
134
+ process_errors(errors: errors)
128
135
  end
129
- private_class_method :validate_device
130
136
 
131
- # Validates a roku config project
132
- # @param codes [Array] array of error codes
133
- # @param project [Hash] project config object
134
- def self.validate_project(codes:, project:)
137
+ def validate_project(project:)
135
138
  errors= [
136
139
  [PROJECT_MISSING_APP_NAME, (!project[:app_name])],
137
140
  [PROJECT_MISSING_DIRECTORY, (!project[:directory])],
@@ -142,49 +145,69 @@ module RokuBuilder
142
145
  [MISSING_STAGE_METHOD, ( !project[:stage_method])],
143
146
  [PROJECT_STAGE_METHOD_BAD, (![:git, :script, nil].include?(project[:stage_method]))]
144
147
  ]
145
- process_errors(codes: codes, errors: errors)
148
+ process_errors(errors: errors)
146
149
  end
147
- private_class_method :validate_project
148
150
 
149
- # Validates a roku config project
150
- # @param codes [Array] array of error codes
151
- # @param project [Hash] project config object
152
- def self.validate_stage(codes:, stage:, project:, config:)
151
+ def validate_stage(stage:, project:)
153
152
  errors= [
154
153
  [STAGE_MISSING_BRANCH, (!stage[:branch] and project[:stage_method] == :git)],
155
154
  [STAGE_MISSING_SCRIPT, (!stage[:script] and project[:stage_method] == :script)],
156
- [MISSING_KEY, (!!stage[:key] and stage[:key].class == String and (!config[:keys] or !config[:keys][stage[:key].to_sym]))]
155
+ [MISSING_KEY, (!!stage[:key] and stage[:key].class == String and (!@config[:keys] or !@config[:keys][stage[:key].to_sym]))]
157
156
  ]
158
- process_errors(codes: codes, errors: errors)
157
+ process_errors(errors: errors)
159
158
  end
160
- private_class_method :validate_stage
161
159
 
162
- # Validates a roku config project
163
- # @param codes [Array] array of error codes
164
- # @param project [Hash] project config object
165
- def self.validate_key(codes:, key:)
160
+ def validate_key(key:)
166
161
  errors= [
167
162
  [KEY_MISSING_PATH, (!key[:keyed_pkg])],
168
163
  [KEY_MISSING_PATH, (key[:keyed_pkg] == "<path/to/signed/package>")],
169
164
  [KEY_MISSING_PASSWORD, (!key[:password])],
170
165
  [KEY_MISSING_PASSWORD, (key[:password] == "<password>")],
171
166
  ]
172
- process_errors(codes: codes, errors: errors)
167
+ process_errors(errors: errors)
173
168
  end
174
- private_class_method :validate_key
175
169
 
176
- def self.validate_mapping(codes:, mapping:)
170
+ def validate_input_mapping(input_mapping:)
177
171
  errors=[
178
- [INVALID_MAPPING_INFO, (mapping.count != 2)]
172
+ [INVALID_MAPPING_INFO, (input_mapping.count != 2)]
179
173
  ]
180
- process_errors(codes: codes, errors: errors)
174
+ process_errors(errors: errors)
181
175
  end
182
- private_class_method :validate_mapping
183
176
 
184
- def self.process_errors(codes:, errors:)
177
+ def process_errors(errors:)
185
178
  errors.each do |error|
186
- codes.push(error[0]) if error[1]
179
+ @codes.push(error[0]) if error[1]
187
180
  end
188
181
  end
182
+
183
+ def error_codes
184
+ [
185
+ #===============FATAL ERRORS===============#
186
+ "Valid Config.",
187
+ "Devices config is missing.",
188
+ "Devices default is missing.",
189
+ "Devices default is not a hash.",
190
+ "",
191
+ "Projects default is missing.", #5
192
+ "Projects default is not a hash.",
193
+ "A device config is missing its IP address.",
194
+ "A device config is missing its username.",
195
+ "A device config is missing its password.",
196
+ "A project config is missing its app_name.", #10
197
+ "A project config is missing its directorty.",
198
+ "A project config is missing its folders.",
199
+ "A project config's folders is not an array.",
200
+ "A project config is missing its files.",
201
+ "A project config's files is not an array.", #15
202
+ "A project stage is missing its branch.",
203
+ "A project stage is missing its script.",
204
+ "A project as an invalid stage method.",
205
+ "A key is missing its keyed package path.",
206
+ "A key is missing its password.", #20
207
+ "A input mapping is invalid",
208
+ "A key is missing from the keys section",
209
+ "A project is missing its stage method."
210
+ ]
211
+ end
189
212
  end
190
213
  end
@@ -7,126 +7,46 @@ module RokuBuilder
7
7
 
8
8
  # Run the builder
9
9
  # @param options [Hash] The options hash
10
- def self.run(options:, logger:)
11
- if options[:debug]
12
- logger.level = Logger::DEBUG
13
- elsif options[:verbose]
14
- logger.level = Logger::INFO
15
- else
16
- logger.level = Logger::WARN
17
- end
18
-
19
- # Validate Options
20
- options_code = validate_options(options: options)
21
- ErrorHandler.handle_options_codes(options_code: options_code, options: options, logger: logger)
10
+ def self.run(options:)
11
+ options = Options.new(options: options)
22
12
 
23
- # Configure Gem
24
- configure_code = configure(options: options, logger: logger)
25
- ErrorHandler.handle_configure_codes(configure_code: configure_code, logger: logger)
13
+ initialize_logger(options: options)
26
14
 
27
15
  # Load Config
28
- load_code, config, configs = ConfigManager.load_config(options: options, logger: logger)
29
- ErrorHandler.handle_load_codes(options: options, load_code: load_code, logger: logger)
30
-
31
- # Check Configs
32
- configs_code = validate_configs(configs: configs)
33
- ErrorHandler.handle_configs_codes(configs_code: configs_code, logger: logger)
16
+ config = Config.new(options: options)
17
+ config.configure
18
+ config.load
19
+ config.validate
20
+ config.parse
34
21
 
35
22
  # Check devices
36
- device_code, configs = check_devices(options: options, config: config, configs: configs, logger: logger)
37
- ErrorHandler.handle_device_codes(device_code: device_code, logger: logger)
23
+ device_code = check_devices(options: options, config: config)
24
+ ErrorHandler.handle_device_codes(device_code: device_code, logger: Logger.instance)
38
25
 
39
26
  # Run Commands
40
- command_code = execute_commands(options: options, configs: configs, logger: logger)
41
- ErrorHandler.handle_command_codes(command_code: command_code, logger: logger)
42
- end
43
-
44
- # Validates the user options
45
- # @param options [Hash] The options hash
46
- # @return [Integer] Status code for command validation
47
- def self.validate_options(options:)
48
- command_result = validate_command_options(options: options)
49
- return command_result unless command_result == VALID
50
- source_result = validate_source_options(options: options)
51
- return source_result unless source_result == VALID
52
- combination_result = validate_option_combinations(options: options)
53
- return combination_result unless combination_result == VALID
54
- return validate_depricated_commands(options: options)
55
- end
56
- private_class_method :validate_options
57
-
58
- # Validates use of command options
59
- # @param options [Hash] The options hash
60
- # @return [Integer] Status code for command validation
61
- def self.validate_command_options(options:)
62
- all_commands = options.keys & commands
63
- return EXTRA_COMMANDS if all_commands.count > 1
64
- return NO_COMMANDS if all_commands.count < 1
65
- VALID
66
- end
67
- private_class_method :validate_command_options
68
-
69
- # Validates use of source options
70
- # @param options [Hash] The options hash
71
- # @return [Integer] Status code for command validation
72
- def self.validate_source_options(options:)
73
- all_sources = options.keys & sources
74
- return EXTRA_SOURCES if all_sources.count > 1
75
- if (options.keys & source_commands).count == 1
76
- return NO_SOURCE unless all_sources.count == 1
77
- end
78
- VALID
79
- end
80
- private_class_method :validate_source_options
81
-
82
- # Validates proper option combinations
83
- # @param options [Hash] The options hash
84
- # @return [Integer] Status code for command validation
85
- def self.validate_option_combinations(options:)
86
- all_sources = options.keys & sources
87
- if all_sources.include?(:current)
88
- return BAD_CURRENT unless options[:build] or options[:sideload]
89
- end
90
- if options[:in]
91
- return BAD_IN_FILE unless options[:sideload]
92
- end
93
- VALID
94
- end
95
- private_class_method :validate_option_combinations
96
-
97
- # Validate depricated options adn commands
98
- # @param options [Hash] The Options hash
99
- # @return [Integer] Status code for command validation
100
- def self.validate_depricated_commands(options:)
101
- depricated = options.keys & depricated_options.keys
102
- if depricated.count > 0
103
- return DEPRICATED
104
- end
105
- VALID
27
+ command_code = execute_commands(options: options, config: config)
28
+ ErrorHandler.handle_command_codes(command_code: command_code, logger: Logger.instance)
106
29
  end
107
- private_class_method :validate_depricated_commands
108
30
 
109
- # Validate config hash
110
- # @param configs [Hash] The Configs hash
111
- # @return [Integer] Status code for command validation
112
- def self.validate_configs(configs:)
113
- unless Dir.exist?(configs[:out][:folder])
114
- return MISSING_OUT_FOLDER
31
+ def self.initialize_logger(options:)
32
+ if options[:debug]
33
+ Logger.set_debug
34
+ elsif options[:verbose]
35
+ Logger.set_info
36
+ else
37
+ Logger.set_warn
115
38
  end
116
- VALID
117
39
  end
118
- private_class_method :validate_configs
119
40
 
120
41
  # Run commands
121
42
  # @param options [Hash] The options hash
122
43
  # @return [Integer] Return code for options handeling
123
44
  # @param logger [Logger] system logger
124
- def self.execute_commands(options:, configs:, logger:)
125
- command = (commands & options.keys).first
45
+ def self.execute_commands(options:, config:)
46
+ command = options.command
126
47
  if ControllerCommands.simple_commands.keys.include?(command)
127
48
  params = ControllerCommands.simple_commands[command]
128
- params[:configs] = configs
129
- params[:logger] = logger
49
+ params[:config] = config
130
50
  ControllerCommands.simple_command(**params)
131
51
  else
132
52
  params = ControllerCommands.method(command.to_s).parameters.collect{|a|a[1]}
@@ -135,10 +55,8 @@ module RokuBuilder
135
55
  case key
136
56
  when :options
137
57
  args[:options] = options
138
- when :configs
139
- args[:configs] = configs
140
- when :logger
141
- args[:logger] = logger
58
+ when :config
59
+ args[:config] = config
142
60
  end
143
61
  end
144
62
  ControllerCommands.send(command, args)
@@ -149,95 +67,27 @@ module RokuBuilder
149
67
  # Ensure that the selected device is accessable
150
68
  # @param options [Hash] The options hash
151
69
  # @param logger [Logger] system logger
152
- def self.check_devices(options:, config:, configs:, logger:)
153
- command = (options.keys & commands).first
154
- if device_commands.include?(command)
70
+ def self.check_devices(options:, config:)
71
+ if options.device_command?
155
72
  ping = Net::Ping::External.new
156
- host = configs[:device_config][:ip]
157
- return [GOOD_DEVICE, configs] if ping.ping? host, 1, 0.2, 1
158
- return [BAD_DEVICE, nil] if options[:device_given]
159
- config[:devices].each_pair {|key, value|
73
+ host = config.parsed[:device_config][:ip]
74
+ return GOOD_DEVICE if ping.ping? host, 1, 0.2, 1
75
+ return BAD_DEVICE if options[:device_given]
76
+ config.raw[:devices].each_pair {|key, value|
160
77
  unless key == :default
161
78
  host = value[:ip]
162
79
  if ping.ping? host, 1, 0.2, 1
163
- configs[:device_config] = value
164
- configs[:device_config][:logger] = logger
165
- return [CHANGED_DEVICE, configs]
80
+ config.parsed[:device_config] = value
81
+ return CHANGED_DEVICE
166
82
  end
167
83
  end
168
84
  }
169
- return [NO_DEVICES, nil]
85
+ return NO_DEVICES
170
86
  end
171
- return [GOOD_DEVICE, configs]
87
+ return GOOD_DEVICE
172
88
  end
173
89
  private_class_method :check_devices
174
90
 
175
- # List of command options
176
- # @return [Array<Symbol>] List of command symbols that can be used in the options hash
177
- def self.commands
178
- [:sideload, :package, :test, :deeplink,:configure, :validate, :delete,
179
- :navigate, :navigator, :text, :build, :monitor, :update, :screencapture,
180
- :key, :genkey, :screen, :screens, :applist, :print, :profile, :dostage,
181
- :dounstage]
182
- end
183
-
184
- # List of depricated options
185
- # @return [Hash] Hash of depricated options and the warning message for each
186
- def self.depricated_options
187
- {deeplink_depricated: "-L and --deeplink are depricated. Use -o or --deeplink-options." }
188
- end
189
-
190
- # List of source options
191
- # @return [Array<Symbol>] List of source symbols that can be used in the options hash
192
- def self.sources
193
- [:ref, :set_stage, :working, :current, :in]
194
- end
195
-
196
- # List of commands requiring a source option
197
- # @return [Array<Symbol>] List of command symbols that require a source in the options hash
198
- def self.source_commands
199
- [:sideload, :package, :test, :build, :key, :update, :print]
200
- end
201
-
202
- # List of commands the activate the exclude files
203
- # @return [Array<Symbol] List of commands the will activate the exclude files lists
204
- def self.exclude_commands
205
- [:build, :package]
206
- end
207
-
208
- # List of commands that require a device
209
- # @return [Array<Symbol>] List of commands that require a device
210
- def self.device_commands
211
- [:sideload, :package, :test, :deeplink, :delete, :navigate, :navigator,
212
- :text, :monitor, :screencapture, :applist, :profile, :key, :genkey ]
213
- end
214
-
215
-
216
- # Configure the gem
217
- # @param options [Hash] The options hash
218
- # @return [Integer] Success or failure code
219
- # @param logger [Logger] system logger
220
- def self.configure(options:, logger:)
221
- if options[:configure]
222
- source_config = File.expand_path(File.join(File.dirname(__FILE__), "..", '..', 'config.json.example'))
223
- target_config = File.expand_path(options[:config])
224
- if File.exist?(target_config)
225
- unless options[:edit_params]
226
- return CONFIG_OVERWRITE
227
- end
228
- else
229
- ### Copy Config File ###
230
- FileUtils.copy(source_config, target_config)
231
- end
232
- if options[:edit_params]
233
- ConfigManager.edit_config(config: target_config, options: options, logger: logger)
234
- end
235
- return SUCCESS
236
- end
237
- nil
238
- end
239
- private_class_method :configure
240
-
241
91
  # Run a system command
242
92
  # @param command [String] The command to be run
243
93
  # @return [String] The output of the command