roku_builder 3.3.3 → 3.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +1158 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile.lock +19 -14
  6. data/README.md +5 -0
  7. data/bin/roku +32 -37
  8. data/config.json.example +2 -2
  9. data/lib/roku_builder/config_manager.rb +83 -118
  10. data/lib/roku_builder/config_parser.rb +192 -0
  11. data/lib/roku_builder/config_validator.rb +125 -0
  12. data/lib/roku_builder/controller.rb +97 -484
  13. data/lib/roku_builder/controller_commands.rb +112 -0
  14. data/lib/roku_builder/error_handler.rb +116 -0
  15. data/lib/roku_builder/inspector.rb +5 -18
  16. data/lib/roku_builder/keyer.rb +3 -11
  17. data/lib/roku_builder/linker.rb +3 -15
  18. data/lib/roku_builder/loader.rb +52 -89
  19. data/lib/roku_builder/manifest_manager.rb +2 -3
  20. data/lib/roku_builder/monitor.rb +15 -12
  21. data/lib/roku_builder/navigator.rb +2 -10
  22. data/lib/roku_builder/packager.rb +1 -7
  23. data/lib/roku_builder/tester.rb +1 -0
  24. data/lib/roku_builder/util.rb +39 -0
  25. data/lib/roku_builder/version.rb +1 -1
  26. data/lib/roku_builder.rb +96 -1
  27. data/roku_builder.gemspec +5 -4
  28. data/tests/roku_builder/config_manager_test.rb +80 -241
  29. data/tests/roku_builder/{controller_config_test.rb → config_parser_test.rb} +5 -5
  30. data/tests/roku_builder/config_validator_test.rb +158 -0
  31. data/tests/roku_builder/controller_commands_test.rb +304 -0
  32. data/tests/roku_builder/controller_test.rb +61 -620
  33. data/tests/roku_builder/error_handler_test.rb +76 -0
  34. data/tests/roku_builder/inspector_test.rb +3 -0
  35. data/tests/roku_builder/keyer_test.rb +3 -2
  36. data/tests/roku_builder/linker_test.rb +2 -1
  37. data/tests/roku_builder/loader_test.rb +2 -0
  38. data/tests/roku_builder/manifest_manager_test.rb +3 -6
  39. data/tests/roku_builder/monitor_test.rb +5 -13
  40. data/tests/roku_builder/navigator_test.rb +2 -0
  41. data/tests/roku_builder/test_helper.rb +38 -0
  42. metadata +34 -11
@@ -0,0 +1,125 @@
1
+ module RokuBuilder
2
+
3
+ MISSING_DEVICES = 1
4
+ MISSING_DEVICES_DEFAULT = 2
5
+ DEVICE_DEFAULT_BAD = 3
6
+ MISSING_PROJECTS = 4
7
+ MISSING_PROJECTS_DEFAULT = 5
8
+ PROJECTS_DEFAULT_BAD = 6
9
+ DEVICE_MISSING_IP = 7
10
+ DEVICE_MISSING_USER = 8
11
+ DEVICE_MISSING_PASSWORD = 9
12
+ PROJECT_MISSING_APP_NAME = 10
13
+ PROJECT_MISSING_DIRECTORY = 11
14
+ PROJECT_MISSING_FOLDERS = 12
15
+ PROJECT_FOLDERS_BAD = 13
16
+ PROJECT_MISSING_FILES = 14
17
+ PROJECT_FILES_BAD = 15
18
+ STAGE_MISSING_BRANCH = 16
19
+
20
+ # Validate Config File
21
+ class ConfigValidator
22
+
23
+ # Validates the roku config
24
+ # @param config [Hash] roku config object
25
+ # @return [Array] error codes for valid config (see self.error_codes)
26
+ def self.validate_config(config:)
27
+ codes = []
28
+ validate_device_structure(codes: codes, config: config)
29
+ validate_project_structure(codes: codes, config: config)
30
+ if config[:devices]
31
+ config[:devices].each {|k,v|
32
+ next if k == :default
33
+ validate_device(codes: codes, device: v)
34
+ }
35
+ end
36
+ if config[:projects]
37
+ config[:projects].each {|project,v|
38
+ next if project == :default
39
+ validate_project(codes: codes, project: v)
40
+ }
41
+ end
42
+ codes.push(0) if codes.empty?
43
+ codes
44
+ end
45
+
46
+ # Error code messages for config validation
47
+ # @return [Array] error code messages
48
+ def self.error_codes()
49
+ [
50
+ #===============FATAL ERRORS===============#
51
+ "Valid Config.",
52
+ "Devices config is missing.",
53
+ "Devices default is missing.",
54
+ "Devices default is not a hash.",
55
+ "Projects config is missing.",
56
+ "Projects default is missing.", #5
57
+ "Projects default is not a hash.",
58
+ "A device config is missing its IP address.",
59
+ "A device config is missing its username.",
60
+ "A device config is missing its password.",
61
+ "A project config is missing its app_name.", #10
62
+ "A project config is missing its directorty.",
63
+ "A project config is missing its folders.",
64
+ "A project config's folders is not an array.",
65
+ "A project config is missing its files.",
66
+ "A project config's files is not an array.", #15
67
+ "A project stage is missing its branch."
68
+ #===============WARNINGS===============#
69
+ ]
70
+ end
71
+
72
+ # Validates the roku config config structure
73
+ # @param codes [Array] array of error codes
74
+ # @param config [Hash] roku config object
75
+ def self.validate_device_structure(codes:, config:)
76
+ codes.push(MISSING_DEVICES) if not config[:devices]
77
+ codes.push(MISSING_DEVICES_DEFAULT) if config[:devices] and not config[:devices][:default]
78
+ codes.push(DEVICE_DEFAULT_BAD) if config[:devices] and config[:devices][:default] and not config[:devices][:default].is_a?(Symbol)
79
+ end
80
+ private_class_method :validate_device_structure
81
+
82
+ # Validates the roku config project structure
83
+ # @param codes [Array] array of error codes
84
+ # @param config [Hash] roku config object
85
+ def self.validate_project_structure(codes:, config:)
86
+ codes.push(MISSING_PROJECTS) if not config[:projects]
87
+ codes.push(MISSING_PROJECTS_DEFAULT) if config[:projects] and not config[:projects][:default]
88
+ codes.push(MISSING_PROJECTS_DEFAULT) if config[:projects] and config[:projects][:default] == "<project id>".to_sym
89
+ codes.push(PROJECTS_DEFAULT_BAD) if config[:projects] and config[:projects][:default] and not config[:projects][:default].is_a?(Symbol)
90
+ end
91
+ private_class_method :validate_project_structure
92
+
93
+ # Validates a roku config device
94
+ # @param codes [Array] array of error codes
95
+ # @param device [Hash] device config object
96
+ def self.validate_device(codes:, device:)
97
+ codes.push(DEVICE_MISSING_IP) if not device[:ip]
98
+ codes.push(DEVICE_MISSING_IP) if device[:ip] == "xxx.xxx.xxx.xxx"
99
+ codes.push(DEVICE_MISSING_IP) if device[:ip] == ""
100
+ codes.push(DEVICE_MISSING_USER) if not device[:user]
101
+ codes.push(DEVICE_MISSING_USER) if device[:user] == "<username>"
102
+ codes.push(DEVICE_MISSING_USER) if device[:user] == ""
103
+ codes.push(DEVICE_MISSING_PASSWORD) if not device[:password]
104
+ codes.push(DEVICE_MISSING_PASSWORD) if device[:password] == "<password>"
105
+ codes.push(DEVICE_MISSING_PASSWORD) if device[:password] == ""
106
+ end
107
+ private_class_method :validate_device
108
+
109
+ # Validates a roku config project
110
+ # @param codes [Array] array of error codes
111
+ # @param project [Hash] project config object
112
+ def self.validate_project(codes:, project:)
113
+ codes.push(PROJECT_MISSING_APP_NAME) if not project[:app_name]
114
+ codes.push(PROJECT_MISSING_DIRECTORY) if not project[:directory]
115
+ codes.push(PROJECT_MISSING_FOLDERS) if not project[:folders]
116
+ codes.push(PROJECT_FOLDERS_BAD) if project[:folders] and not project[:folders].is_a?(Array)
117
+ codes.push(PROJECT_MISSING_FILES) if not project[:files]
118
+ codes.push(PROJECT_FILES_BAD) if project[:files] and not project[:files].is_a?(Array)
119
+ project[:stages].each {|_stage,value|
120
+ codes.push(STAGE_MISSING_BRANCH) if not value[:branch]
121
+ }
122
+ end
123
+ private_class_method :validate_project
124
+ end
125
+ end