roku_builder 3.13.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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