roku_builder 3.13.0 → 4.0.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.
Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG +12 -0
  4. data/Gemfile.lock +22 -7
  5. data/Guardfile +3 -3
  6. data/README.md +22 -398
  7. data/bin/roku +1 -194
  8. data/config.json.example +1 -1
  9. data/intergration/roku_builder/test_core.rb +52 -0
  10. data/intergration/roku_builder/test_files/core_intergration_test/manifest_template +7 -0
  11. data/intergration/roku_builder/test_files/core_intergration_test/test.pkg +0 -0
  12. data/intergration/roku_builder/test_files/inspector_intergration_test/components/rectanglescene.xml +28 -0
  13. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  14. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  15. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_fhd.jpg +0 -0
  16. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_hd.jpg +0 -0
  17. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_sd.jpg +0 -0
  18. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  19. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  20. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  21. data/intergration/roku_builder/test_files/inspector_intergration_test/manifest +21 -0
  22. data/intergration/roku_builder/test_files/inspector_intergration_test/source/main.brs +23 -0
  23. data/intergration/roku_builder/test_files/inspector_intergration_test/test.pkg +0 -0
  24. data/intergration/roku_builder/test_files/linker_intergration_test/components/rectanglescene.xml +29 -0
  25. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  26. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  27. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_fhd.jpg +0 -0
  28. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_hd.jpg +0 -0
  29. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_sd.jpg +0 -0
  30. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  31. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  32. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  33. data/intergration/roku_builder/test_files/linker_intergration_test/manifest +21 -0
  34. data/intergration/roku_builder/test_files/linker_intergration_test/source/main.brs +21 -0
  35. data/intergration/roku_builder/test_files/linker_intergration_test/test.pkg +0 -0
  36. data/intergration/roku_builder/test_files/loader_intergration_test/components/rectanglescene.xml +29 -0
  37. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  38. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  39. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_fhd.jpg +0 -0
  40. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_hd.jpg +0 -0
  41. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_sd.jpg +0 -0
  42. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  43. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  44. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  45. data/intergration/roku_builder/test_files/loader_intergration_test/manifest +21 -0
  46. data/intergration/roku_builder/test_files/loader_intergration_test/source/main.brs +21 -0
  47. data/intergration/roku_builder/test_files/loader_intergration_test/test.pkg +0 -0
  48. data/intergration/roku_builder/test_files/monitor_intergration_test/components/rectanglescene.xml +29 -0
  49. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  50. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  51. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_fhd.jpg +0 -0
  52. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_hd.jpg +0 -0
  53. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_sd.jpg +0 -0
  54. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  55. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  56. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  57. data/intergration/roku_builder/test_files/monitor_intergration_test/manifest +21 -0
  58. data/intergration/roku_builder/test_files/monitor_intergration_test/source/main.brs +21 -0
  59. data/intergration/roku_builder/test_files/monitor_intergration_test/test.pkg +0 -0
  60. data/intergration/roku_builder/test_files/navigator_intergration_test/components/rectanglescene.xml +29 -0
  61. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  62. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  63. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_fhd.jpg +0 -0
  64. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_hd.jpg +0 -0
  65. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_sd.jpg +0 -0
  66. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  67. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  68. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  69. data/intergration/roku_builder/test_files/navigator_intergration_test/manifest +21 -0
  70. data/intergration/roku_builder/test_files/navigator_intergration_test/source/main.brs +21 -0
  71. data/intergration/roku_builder/test_files/navigator_intergration_test/test.pkg +0 -0
  72. data/intergration/roku_builder/test_files/packager_intergration_test/components/rectanglescene.xml +29 -0
  73. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  74. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  75. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_fhd.jpg +0 -0
  76. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_hd.jpg +0 -0
  77. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_sd.jpg +0 -0
  78. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  79. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  80. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  81. data/intergration/roku_builder/test_files/packager_intergration_test/manifest +21 -0
  82. data/intergration/roku_builder/test_files/packager_intergration_test/source/main.brs +21 -0
  83. data/intergration/roku_builder/test_files/packager_intergration_test/test.pkg +0 -0
  84. data/intergration/roku_builder/test_files/profiler_intergration_test/components/rectanglescene.xml +29 -0
  85. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  86. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  87. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_fhd.jpg +0 -0
  88. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_hd.jpg +0 -0
  89. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_sd.jpg +0 -0
  90. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  91. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  92. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  93. data/intergration/roku_builder/test_files/profiler_intergration_test/manifest +21 -0
  94. data/intergration/roku_builder/test_files/profiler_intergration_test/source/main.brs +21 -0
  95. data/intergration/roku_builder/test_files/profiler_intergration_test/test.pkg +0 -0
  96. data/intergration/roku_builder/test_files/scripter_intergration_test/components/rectanglescene.xml +29 -0
  97. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  98. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  99. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_fhd.jpg +0 -0
  100. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_hd.jpg +0 -0
  101. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_sd.jpg +0 -0
  102. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  103. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  104. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  105. data/intergration/roku_builder/test_files/scripter_intergration_test/manifest +21 -0
  106. data/intergration/roku_builder/test_files/scripter_intergration_test/source/main.brs +21 -0
  107. data/intergration/roku_builder/test_files/scripter_intergration_test/test.pkg +0 -0
  108. data/intergration/roku_builder/test_files/tester_intergration_test/components/rectanglescene.xml +29 -0
  109. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  110. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  111. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_fhd.jpg +0 -0
  112. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_hd.jpg +0 -0
  113. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_sd.jpg +0 -0
  114. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  115. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  116. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  117. data/intergration/roku_builder/test_files/tester_intergration_test/manifest +21 -0
  118. data/intergration/roku_builder/test_files/tester_intergration_test/source/main.brs +21 -0
  119. data/intergration/roku_builder/test_files/tester_intergration_test/test.pkg +0 -0
  120. data/intergration/roku_builder/test_helper.rb +138 -0
  121. data/intergration/roku_builder/test_inspector.rb +35 -0
  122. data/intergration/roku_builder/test_linker.rb +32 -0
  123. data/intergration/roku_builder/test_loader.rb +38 -0
  124. data/intergration/roku_builder/test_monitor.rb +21 -0
  125. data/intergration/roku_builder/test_navigator.rb +34 -0
  126. data/intergration/roku_builder/test_packager.rb +41 -0
  127. data/intergration/roku_builder/test_profiler.rb +48 -0
  128. data/intergration/roku_builder/test_scripter.rb +38 -0
  129. data/intergration/roku_builder/test_tester.rb +21 -0
  130. data/lib/roku_builder.rb +143 -154
  131. data/lib/roku_builder/config.rb +17 -40
  132. data/lib/roku_builder/config_parser.rb +49 -200
  133. data/lib/roku_builder/config_validator.rb +1 -1
  134. data/lib/roku_builder/errors.rb +12 -0
  135. data/lib/roku_builder/git.rb +28 -0
  136. data/lib/roku_builder/hash.rb +8 -0
  137. data/lib/roku_builder/manifest.rb +121 -0
  138. data/lib/roku_builder/options.rb +68 -29
  139. data/lib/roku_builder/plugin.rb +30 -0
  140. data/lib/roku_builder/plugins/core.rb +117 -0
  141. data/lib/roku_builder/plugins/inspector.rb +104 -0
  142. data/lib/roku_builder/{linker.rb → plugins/linker.rb} +38 -12
  143. data/lib/roku_builder/plugins/loader.rb +152 -0
  144. data/lib/roku_builder/{monitor.rb → plugins/monitor.rb} +20 -9
  145. data/lib/roku_builder/{navigator.rb → plugins/navigator.rb} +136 -88
  146. data/lib/roku_builder/plugins/packager.rb +194 -0
  147. data/lib/roku_builder/plugins/profiler.rb +135 -0
  148. data/lib/roku_builder/plugins/scripter.rb +53 -0
  149. data/lib/roku_builder/{tester.rb → plugins/tester.rb} +28 -19
  150. data/lib/roku_builder/stager.rb +48 -12
  151. data/lib/roku_builder/string.rb +20 -0
  152. data/lib/roku_builder/util.rb +10 -34
  153. data/lib/roku_builder/version.rb +1 -1
  154. data/rakefile +5 -1
  155. data/roku_builder.gemspec +2 -0
  156. data/test/roku_builder/plugins/test_core.rb +112 -0
  157. data/test/roku_builder/plugins/test_inspector.rb +165 -0
  158. data/test/roku_builder/plugins/test_linker.rb +123 -0
  159. data/test/roku_builder/plugins/test_loader.rb +115 -0
  160. data/test/roku_builder/plugins/test_monitor.rb +141 -0
  161. data/test/roku_builder/plugins/test_navigator.rb +274 -0
  162. data/test/roku_builder/plugins/test_packager.rb +202 -0
  163. data/test/roku_builder/plugins/test_profiler.rb +127 -0
  164. data/test/roku_builder/plugins/test_scripter.rb +110 -0
  165. data/test/roku_builder/plugins/test_tester.rb +109 -0
  166. data/test/roku_builder/test_config.rb +51 -35
  167. data/test/roku_builder/test_config_parser.rb +76 -154
  168. data/test/roku_builder/test_config_validator.rb +18 -1
  169. data/test/roku_builder/test_files/{loader_test/manifest → config_parser_test/test.pkg} +0 -0
  170. data/test/roku_builder/test_files/config_test/config.json +3 -0
  171. data/test/roku_builder/test_files/controller_commands_test/manifest_template +7 -0
  172. data/test/roku_builder/test_files/core_test/manifest_template +7 -0
  173. data/test/roku_builder/test_files/core_test/test.pkg +0 -0
  174. data/test/roku_builder/test_files/inspector_test/manifest +6 -0
  175. data/test/roku_builder/test_files/inspector_test/test.pkg +0 -0
  176. data/test/roku_builder/test_files/linker_test/manifest +6 -0
  177. data/test/roku_builder/test_files/linker_test/test.pkg +0 -0
  178. data/test/roku_builder/test_files/loader_test/manifest_template +6 -0
  179. data/test/roku_builder/test_files/loader_test/test.pkg +0 -0
  180. data/test/roku_builder/test_files/loader_test/test.zip +0 -0
  181. data/test/roku_builder/test_files/manifest_test/manifest_comments +6 -0
  182. data/test/roku_builder/test_files/manifest_test/manifest_template +7 -0
  183. data/test/roku_builder/test_files/manifest_test/test.zip +0 -0
  184. data/test/roku_builder/test_files/packager_test/manifest +6 -0
  185. data/test/roku_builder/test_files/packager_test/scripter_test/manifest +6 -0
  186. data/test/roku_builder/test_files/packager_test/test.pkg +0 -0
  187. data/test/roku_builder/test_files/roku_builder_test/config.json +32 -0
  188. data/test/roku_builder/test_files/scripter_test/manifest +6 -0
  189. data/test/roku_builder/test_files/scripter_test/test.pkg +0 -0
  190. data/test/roku_builder/test_files/stager_test/test.pkg +0 -0
  191. data/test/roku_builder/test_files/tester_test/manifest +6 -0
  192. data/test/roku_builder/test_files/tester_test/test.pkg +0 -0
  193. data/test/roku_builder/test_helper.rb +44 -11
  194. data/test/roku_builder/test_logger.rb +1 -0
  195. data/test/roku_builder/test_manifest.rb +99 -0
  196. data/test/roku_builder/test_options.rb +106 -77
  197. data/test/roku_builder/test_options_plugins.rb +111 -0
  198. data/test/roku_builder/test_plugin.rb +48 -0
  199. data/test/roku_builder/test_roku_builder.rb +239 -0
  200. data/test/roku_builder/test_stager.rb +49 -101
  201. data/test/roku_builder/test_util.rb +19 -4
  202. metadata +241 -47
  203. data/lib/roku_builder/controller.rb +0 -98
  204. data/lib/roku_builder/controller_commands.rb +0 -224
  205. data/lib/roku_builder/error_handler.rb +0 -142
  206. data/lib/roku_builder/inspector.rb +0 -82
  207. data/lib/roku_builder/keyer.rb +0 -106
  208. data/lib/roku_builder/loader.rb +0 -131
  209. data/lib/roku_builder/manifest_manager.rb +0 -126
  210. data/lib/roku_builder/packager.rb +0 -43
  211. data/lib/roku_builder/profiler.rb +0 -96
  212. data/lib/roku_builder/scripter.rb +0 -39
  213. data/test/roku_builder/test_controller.rb +0 -70
  214. data/test/roku_builder/test_controller_commands.rb +0 -465
  215. data/test/roku_builder/test_error_handler.rb +0 -90
  216. data/test/roku_builder/test_inspector.rb +0 -298
  217. data/test/roku_builder/test_keyer.rb +0 -176
  218. data/test/roku_builder/test_linker.rb +0 -110
  219. data/test/roku_builder/test_loader.rb +0 -337
  220. data/test/roku_builder/test_manifest_manager.rb +0 -103
  221. data/test/roku_builder/test_monitor.rb +0 -137
  222. data/test/roku_builder/test_navigator.rb +0 -280
  223. data/test/roku_builder/test_packager.rb +0 -127
  224. data/test/roku_builder/test_profiler.rb +0 -35
  225. data/test/roku_builder/test_scripter.rb +0 -102
  226. data/test/roku_builder/test_tester.rb +0 -130
@@ -5,10 +5,13 @@ module RokuBuilder
5
5
  # Change stage of roku application
6
6
  class Stager
7
7
 
8
- def initialize(key: nil, method:, root_dir: nil)
9
- @method = method
10
- @key = key
11
- @root_dir = root_dir
8
+ def initialize(config:, options:)
9
+ @config = config
10
+ @options = options
11
+ @method = get_method
12
+ @ref = get_git_ref
13
+ @scripts = get_scripts
14
+ @root_dir = config.root_dir
12
15
  @logger = Logger.instance
13
16
  @stage_success = true
14
17
  @stash_key = "roku-builder-temp-stash"
@@ -25,19 +28,22 @@ module RokuBuilder
25
28
  # @return [Boolean] whether the staging was successful or not
26
29
  def stage
27
30
  @orginal_directory = Dir.pwd
28
- Dir.chdir(@root_dir) unless @root_dir.nil? or @root_dir == @orginal_directory
29
31
  case @method
30
- when :current, :in, :working
32
+ when :current, :in
31
33
  # Do Nothing
34
+ when :working
35
+ switch_directory
32
36
  when :git
37
+ switch_directory
33
38
  begin
34
- git_switch_to(branch: @key)
39
+ git_switch_to(branch: @ref)
35
40
  rescue Git::GitExecuteError
36
41
  git_rescue
37
42
  @stage_success = false
38
43
  end
39
44
  when :script
40
- Controller.system(command: @key[:stage])
45
+ switch_directory
46
+ RokuBuilder.system(command: @scripts[:stage])
41
47
  end
42
48
  @stage_success
43
49
  end
@@ -46,27 +52,57 @@ module RokuBuilder
46
52
  # @return [Boolean] whether the revert was successful or not
47
53
  def unstage
48
54
  @orginal_directory ||= Dir.pwd
49
- Dir.chdir(@root_dir) unless @root_dir.nil? or @root_dir == @orginal_directory
50
55
  unstage_success = true
51
56
  case @method
52
57
  when :current, :in, :working
53
58
  # Do Nothing
54
59
  when :git
60
+ switch_directory
55
61
  begin
56
- git_switch_from(branch: @key, checkout: @stage_success)
62
+ git_switch_from(branch: @ref, checkout: @stage_success)
57
63
  rescue Git::GitExecuteError
58
64
  git_rescue
59
65
  unstage_success = false
60
66
  end
67
+ switch_directory_back
61
68
  when :script
62
- Controller.system(command: @key[:unstage]) if @key[:unstage]
69
+ switch_directory
70
+ RokuBuilder.system(command: @scripts[:unstage]) if @scripts[:unstage]
71
+ switch_directory_back
63
72
  end
64
- Dir.chdir(@orginal_directory) unless @root_dir == @orginal_directory
65
73
  unstage_success
66
74
  end
67
75
 
68
76
  private
69
77
 
78
+ def get_method
79
+ method = ([:in, :current, :working] & @options.keys).first
80
+ if @config.project
81
+ method = @config.project[:stage_method]
82
+ end
83
+ method
84
+ end
85
+
86
+ def get_git_ref
87
+ if @options[:ref]
88
+ @options[:ref]
89
+ elsif @config.stage
90
+ @config.stage[:branch]
91
+ end
92
+ end
93
+
94
+ def get_scripts
95
+ @config.stage[:script] if @config.stage
96
+ end
97
+
98
+ def switch_directory
99
+ Dir.chdir(@root_dir) unless @root_dir.nil? or @root_dir == @orginal_directory
100
+ end
101
+
102
+ def switch_directory_back
103
+ Dir.chdir(@orginal_directory) unless @root_dir == @orginal_directory
104
+ end
105
+
70
106
  # Switch to the correct branch
71
107
  # @param branch [String] the branch to switch to
72
108
  def git_switch_to(branch:)
@@ -0,0 +1,20 @@
1
+ # ********** Copyright 2016 Viacom, Inc. Apache 2.0 **********
2
+
3
+ class ::String
4
+ def underscore!
5
+ word = self
6
+ word.gsub!(/::/, '/')
7
+ word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
8
+ word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
9
+ word.tr!("-", "_")
10
+ word.downcase!
11
+ nil
12
+ end
13
+
14
+ def underscore
15
+ word = self.dup
16
+ word.underscore!
17
+ word
18
+ end
19
+ end
20
+
@@ -1,34 +1,25 @@
1
1
  # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
-
3
2
  module RokuBuilder
4
3
 
5
- # Super class for device utilities
4
+ # Super class for modules
6
5
  # This class defines a common initializer and allows subclasses
7
6
  # to define their own secondary initializer
8
7
  class Util
9
8
 
10
9
  # Common initializer of device utils
11
- # @param ip [String] IP address of roku device
12
- # @param user [String] Username for roku device
13
- # @param password [String] Password for roku device
14
- def initialize(ip:, user:, password:, init_params: nil)
10
+ # @param config [Config] Configuration object for the app
11
+ def initialize(config: )
15
12
  @logger = Logger.instance
16
- @device_config = {
17
- ip: ip,
18
- user: user,
19
- password: password
20
- }
21
- @roku_ip_address = ip
22
- @dev_username = user
23
- @dev_password = password
13
+ @config = config
14
+ @roku_ip_address = @config.device_config[:ip]
15
+ @dev_username = @config.device_config[:user]
16
+ @dev_password = @config.device_config[:password]
24
17
  @url = "http://#{@roku_ip_address}"
25
- if init_params
26
- init(**init_params)
27
- else
28
- init
29
- end
18
+ init
30
19
  end
31
20
 
21
+ private
22
+
32
23
  # Second initializer to be overwriten
33
24
  def init
34
25
  #Override in subclass
@@ -57,20 +48,5 @@ module RokuBuilder
57
48
  f.adapter Faraday.default_adapter
58
49
  end
59
50
  end
60
-
61
- # Parses a string into and options hash
62
- # @param options [String] string of options in the format "a:b, c:d"
63
- # @return [Hash] Options hash generated
64
- def self.options_parse(options:)
65
- parsed = {}
66
- opts = options.split(/,\s*/)
67
- opts.each do |opt|
68
- opt = opt.split(":")
69
- key = opt.shift.to_sym
70
- value = opt.join(":")
71
- parsed[key] = value
72
- end
73
- parsed
74
- end
75
51
  end
76
52
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "3.13.0"
5
+ VERSION = "4.0.0"
6
6
  end
data/rakefile CHANGED
@@ -4,7 +4,11 @@ require 'rake'
4
4
  require 'rake/testtask'
5
5
 
6
6
  Rake::TestTask.new do |t|
7
- t.test_files = Dir.glob('test/roku_builder/test_*.rb')
7
+ t.test_files = Dir.glob('test/roku_builder/**/test_*.rb')
8
+ end
9
+
10
+ Rake::TestTask.new(:intergration) do |t|
11
+ t.test_files = Dir.glob('intergration/roku_builder/**/test_*.rb')
8
12
  end
9
13
 
10
14
  task(default: :test)
data/roku_builder.gemspec CHANGED
@@ -35,6 +35,8 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency "minitest", "~> 5.10"
36
36
  spec.add_development_dependency "minitest-autotest", "~> 1.0"
37
37
  spec.add_development_dependency "minitest-server", "~> 1.0"
38
+ spec.add_development_dependency "minitest-utils", "~> 0.3"
39
+ spec.add_development_dependency "webmock", "~> 3.0"
38
40
  spec.add_development_dependency "simplecov", "~> 0.12"
39
41
  spec.add_development_dependency "coveralls", "~> 0.8"
40
42
  spec.add_development_dependency "yard", "~> 0.9"
@@ -0,0 +1,112 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "../test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class CoreTest < Minitest::Test
7
+ def setup
8
+ Logger.set_testing
9
+ RokuBuilder.setup_plugins
10
+ register_plugins(Core)
11
+ end
12
+ def test_core_parse_options_long
13
+ parser = OptionParser.new
14
+ options = {}
15
+ Core.parse_options(parser: parser, options: options)
16
+ argv = ["roku", "--configure", "--validate", "--update-manifest", "--do-stage",
17
+ "--do-unstage", "--edit", "params", "--config", "config-path",
18
+ "--ref", "ref", "--working", "--current", "--stage", "stage", "--project",
19
+ "project", "--out", "out", "--in", "in", "--device", "device",
20
+ "--verbose", "--debug"]
21
+ parser.parse! argv
22
+ assert options[:configure]
23
+ assert options[:validate]
24
+ assert options[:increment]
25
+ assert options[:dostage]
26
+ assert options[:dounstage]
27
+ assert_equal "params", options[:edit_params]
28
+ assert_equal "config-path", options[:config]
29
+ assert_equal "ref", options[:ref]
30
+ assert options[:working]
31
+ assert options[:current]
32
+ assert_equal "stage", options[:stage]
33
+ assert_equal "project", options[:project]
34
+ assert_equal "out", options[:out]
35
+ assert_equal "in", options[:in]
36
+ assert_equal "device", options[:device]
37
+ assert options[:device_given]
38
+ assert options[:verbose]
39
+ assert options[:debug]
40
+ end
41
+ def test_core_parse_options_short
42
+ parser = OptionParser.new
43
+ options = {}
44
+ Core.parse_options(parser: parser, options: options)
45
+ argv = ["roku", "-u", "-e", "params", "-r", "ref", "-w", "-c", "-s",
46
+ "stage", "-p", "project", "-O", "out", "-I", "in", "-D", "device", "-V"]
47
+ parser.parse! argv
48
+ assert options[:increment]
49
+ assert_equal "params", options[:edit_params]
50
+ assert_equal "ref", options[:ref]
51
+ assert options[:working]
52
+ assert options[:current]
53
+ assert_equal "stage", options[:stage]
54
+ assert_equal "project", options[:project]
55
+ assert_equal "out", options[:out]
56
+ assert_equal "in", options[:in]
57
+ assert_equal "device", options[:device]
58
+ assert options[:device_given]
59
+ assert options[:verbose]
60
+ end
61
+ def test_core_configure
62
+ logger = Minitest::Mock.new
63
+ options = {configure: true, config: File.join(test_files_path(CoreTest), "config.json")}
64
+ config, options = build_config_options_objects(CoreTest, options, false)
65
+ logger.expect(:unknown, nil, ["Configured"])
66
+ Logger.class_variable_set(:@@instance, logger)
67
+ core = Core.new(config: config)
68
+ core.configure(options: options)
69
+ logger.verify
70
+ end
71
+ def test_core_validate
72
+ logger = Minitest::Mock.new
73
+ config, options = build_config_options_objects(CoreTest, {validate: true}, false)
74
+ logger.expect(:unknown, nil, ["Config Validated"])
75
+ Logger.class_variable_set(:@@instance, logger)
76
+ core = Core.new(config: config)
77
+ core.validate(options: options)
78
+ logger.verify
79
+ end
80
+ def test_core_increment
81
+ config, options = build_config_options_objects(CoreTest, {increment: true, working: true}, false)
82
+ source = File.join(test_files_path(CoreTest), "manifest_template")
83
+ target = File.join(test_files_path(CoreTest), "manifest")
84
+ FileUtils.cp(source, target)
85
+ core = Core.new(config: config)
86
+ Time.stub(:now, Time.new(2001, 02, 01)) do
87
+ core.increment(options: options)
88
+ end
89
+ assert_equal "020101.2", Manifest.new(config: config).build_version
90
+ FileUtils.rm(target)
91
+ end
92
+ def test_core_dostage
93
+ stager = Minitest::Mock.new
94
+ config, options = build_config_options_objects(CoreTest, {increment: true, working: true}, false)
95
+ stager.expect(:stage, nil)
96
+ core = Core.new(config: config)
97
+ Stager.stub(:new, stager) do
98
+ core.dostage(options: options)
99
+ end
100
+ end
101
+ def test_core_dounstage
102
+ stager = Minitest::Mock.new
103
+ config, options = build_config_options_objects(CoreTest, {increment: true, working: true}, false)
104
+ stager.expect(:unstage, nil)
105
+ core = Core.new(config: config)
106
+ Stager.stub(:new, stager) do
107
+ core.dounstage(options: options)
108
+ end
109
+ end
110
+ end
111
+ end
112
+
@@ -0,0 +1,165 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "../test_helper.rb"
4
+ module RokuBuilder
5
+ class InspectorTest < Minitest::Test
6
+ def setup
7
+ Logger.set_testing
8
+ RokuBuilder.setup_plugins
9
+ register_plugins(Inspector)
10
+ @requests = []
11
+ end
12
+ def teardown
13
+ @requests.each {|req| remove_request_stub(req)}
14
+ end
15
+ def test_inspector_parse_options_long
16
+ parser = OptionParser.new
17
+ options = {}
18
+ Inspector.parse_options(parser: parser, options: options)
19
+ argv = ["roku", "--inspect", "--screencapture", "--password", "password"]
20
+ parser.parse! argv
21
+ assert options[:inspect]
22
+ assert options[:screencapture]
23
+ assert_equal "password", options[:password]
24
+ end
25
+ def test_scripter_parse_options_short
26
+ parser = OptionParser.new
27
+ options = {}
28
+ Inspector.parse_options(parser: parser, options: options)
29
+ argv = ["roku", "-S"]
30
+ parser.parse! argv
31
+ assert options[:screencapture]
32
+ end
33
+ def test_inspector_inspect
34
+ logger = Minitest::Mock.new()
35
+
36
+ logger.expect(:formatter=, nil, [Proc])
37
+ logger.expect(:unknown, nil){|text| /=*/ =~ text}
38
+ logger.expect(:unknown, nil){|text| /app_name/ =~ text}
39
+ logger.expect(:unknown, nil){|text| /dev_id/ =~ text}
40
+ logger.expect(:unknown, nil, [String])
41
+ logger.expect(:unknown, nil){|text| /dev_zip/ =~ text}
42
+ logger.expect(:unknown, nil){|text| /=*/ =~ text}
43
+
44
+ body = "r1.insertCell(0).innerHTML = 'App Name: ';"+
45
+ " r1.insertCell(1).innerHTML = '<div class=\"roku-color-c3\">app_name</div>';"+
46
+ ""+
47
+ " var r2 = table.insertRow(1);"+
48
+ " r2.insertCell(0).innerHTML = 'Dev ID: ';"+
49
+ " r2.insertCell(1).innerHTML = '<div class=\"roku-color-c3\"><font face=\"Courier\">dev_id</font></div>';"+
50
+ " "+
51
+ " var dd = new Date(628232400);"+
52
+ " var ddStr = \"\";"+
53
+ " ddStr += (dd.getMonth()+1);"+
54
+ " ddStr += \"/\";"+
55
+ " ddStr += dd.getDate();"+
56
+ " ddStr += \"/\";"+
57
+ " ddStr += dd.getFullYear();"+
58
+ " ddStr += \" \";"+
59
+ " ddStr += dd.getHours();"+
60
+ " ddStr += \":\";"+
61
+ " ddStr += dd.getMinutes();"+
62
+ " ddStr += \":\";"+
63
+ " ddStr += dd.getSeconds(); "+
64
+ " "+
65
+ " var r3 = table.insertRow(2);"+
66
+ " r3.insertCell(0).innerHTML = 'Creation Date: ';"+
67
+ " r3.insertCell(1).innerHTML = '<div class=\"roku-color-c3\">'+ddStr+'</div>';"+
68
+ " "+
69
+ " var r4 = table.insertRow(3);"+
70
+ " r4.insertCell(0).innerHTML = 'dev.zip: ';"+
71
+ " r4.insertCell(1).innerHTML = '<div class=\"roku-color-c3\"><font face=\"Courier\">dev_zip</font></div>';"
72
+
73
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
74
+ to_return(status: 200, body: body, headers: {}))
75
+
76
+ options = {inspect: true, in: File.join(test_files_path(InspectorTest), "test.pkg"), password: "password"}
77
+ config, options = build_config_options_objects(InspectorTest, options, false)
78
+ inspector = Inspector.new(config: config)
79
+ ::Logger.stub(:new, logger) do
80
+ inspector.inspect(options: options)
81
+ end
82
+ end
83
+ def test_inspector_inspect_old_interface
84
+ logger = Minitest::Mock.new()
85
+
86
+ logger.expect(:formatter=, nil, [Proc])
87
+ logger.expect(:unknown, nil){|text| /=*/ =~ text}
88
+ logger.expect(:unknown, nil){|text| /app_name/ =~ text}
89
+ logger.expect(:unknown, nil){|text| /dev_id/ =~ text}
90
+ logger.expect(:unknown, nil, [String])
91
+ logger.expect(:unknown, nil){|text| /dev_zip/ =~ text}
92
+ logger.expect(:unknown, nil){|text| /=*/ =~ text}
93
+ body = " <table cellpadding=\"2\">"+
94
+ " <tbody><tr><td> App Name: </td><td> <font color=\"blue\">app_name</font> </td></tr>"+
95
+ " <tr><td> Dev ID: </td><td> <font face=\"Courier\" color=\"blue\">dev_id</font> </td></tr>"+
96
+ " <tr><td> Creation Date: </td><td> <font color=\"blue\">"+
97
+ " <script type=\"text/javascript\">"+
98
+ " var d = new Date(628232400)"+
99
+ " document.write(d.getMonth()+1)"+
100
+ " document.write(\"/\")"+
101
+ " document.write(d.getDate())"+
102
+ " document.write(\"/\");"+
103
+ " document.write(d.getFullYear())"+
104
+ " document.write(\" \")"+
105
+ " document.write(d.getHours())"+
106
+ " document.write(\":\")"+
107
+ " document.write(d.getMinutes())"+
108
+ " document.write(\":\")"+
109
+ " document.write(d.getSeconds())"+
110
+ " </script>1/17/1970 16:42:28"+
111
+ " </font> </td></tr>"+
112
+ " <tr><td> dev.zip: </td><td> <font face=\"Courier\" color=\"blue\">dev_zip</font> </td></tr>"+
113
+ " </tbody></table>"
114
+
115
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
116
+ to_return(status: 200, body: body, headers: {}))
117
+
118
+ options = {inspect: true, in: File.join(test_files_path(InspectorTest), "test.pkg"), password: "password"}
119
+ config, options = build_config_options_objects(InspectorTest, options, false)
120
+ inspector = Inspector.new(config: config)
121
+ ::Logger.stub(:new, logger) do
122
+ inspector.inspect(options: options)
123
+ end
124
+ end
125
+
126
+ def test_screencapture
127
+ body = "<hr /><img src=\"pkgs/dev.jpg?time=1455629573\">"
128
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
129
+ to_return(status: 200, body: body, headers: {}))
130
+
131
+ body2 = "<screencapture>"
132
+ @requests.push(stub_request(:get, "http://192.168.0.100/pkgs/dev.jpg?time=1455629573").
133
+ to_return(status: 200, body: body2, headers: {}))
134
+
135
+ io = Minitest::Mock.new()
136
+ io.expect("write", nil, [body2])
137
+
138
+ options = {screencapture: true }
139
+ config, options = build_config_options_objects(InspectorTest, options, false)
140
+ inspector = Inspector.new(config: config)
141
+ File.stub(:open, nil, io) do
142
+ inspector.screencapture(options: options)
143
+ end
144
+ end
145
+ def test_screencapture_png
146
+ body = "<hr /><img src=\"pkgs/dev.png?time=1455629573\">"
147
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
148
+ to_return(status: 200, body: body, headers: {}))
149
+
150
+ body2 = "<screencapture>"
151
+ @requests.push(stub_request(:get, "http://192.168.0.100/pkgs/dev.png?time=1455629573").
152
+ to_return(status: 200, body: body2, headers: {}))
153
+
154
+ io = Minitest::Mock.new()
155
+ io.expect("write", nil, [body2])
156
+
157
+ options = {screencapture: true }
158
+ config, options = build_config_options_objects(InspectorTest, options, false)
159
+ inspector = Inspector.new(config: config)
160
+ File.stub(:open, nil, io) do
161
+ inspector.screencapture(options: options)
162
+ end
163
+ end
164
+ end
165
+ end