epall-limelight 0.5.0-java

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 (282) hide show
  1. data/bin/icons/icon.ico +0 -0
  2. data/bin/icons/icon_48.gif +0 -0
  3. data/bin/icons/limelight.icns +0 -0
  4. data/bin/limelight +5 -0
  5. data/bin/ll +10 -0
  6. data/bin/ll.bat +5 -0
  7. data/lib/init.rb +16 -0
  8. data/lib/limelight.jar +0 -0
  9. data/lib/limelight/animation.rb +41 -0
  10. data/lib/limelight/builtin/players.rb +16 -0
  11. data/lib/limelight/builtin/players/button.rb +39 -0
  12. data/lib/limelight/builtin/players/check_box.rb +50 -0
  13. data/lib/limelight/builtin/players/combo_box.rb +89 -0
  14. data/lib/limelight/builtin/players/combo_box_popup_list.rb +19 -0
  15. data/lib/limelight/builtin/players/combo_box_popup_list_item.rb +21 -0
  16. data/lib/limelight/builtin/players/curtains.rb +23 -0
  17. data/lib/limelight/builtin/players/image.rb +54 -0
  18. data/lib/limelight/builtin/players/password_box.rb +34 -0
  19. data/lib/limelight/builtin/players/radio_button.rb +65 -0
  20. data/lib/limelight/builtin/players/stage_mover.rb +31 -0
  21. data/lib/limelight/builtin/players/stage_sizer.rb +34 -0
  22. data/lib/limelight/builtin/players/text_area.rb +34 -0
  23. data/lib/limelight/builtin/players/text_box.rb +34 -0
  24. data/lib/limelight/builtin/styles.rb +35 -0
  25. data/lib/limelight/builtin/utilities_production/alert/players/alert.rb +11 -0
  26. data/lib/limelight/builtin/utilities_production/alert/props.rb +8 -0
  27. data/lib/limelight/builtin/utilities_production/alert/styles.rb +14 -0
  28. data/lib/limelight/builtin/utilities_production/incompatible_version/props.rb +20 -0
  29. data/lib/limelight/builtin/utilities_production/incompatible_version/styles.rb +12 -0
  30. data/lib/limelight/builtin/utilities_production/production.rb +62 -0
  31. data/lib/limelight/builtin/utilities_production/stages.rb +12 -0
  32. data/lib/limelight/builtin/utilities_production/styles.rb +53 -0
  33. data/lib/limelight/button_group_cache.rb +11 -0
  34. data/lib/limelight/casting_director.rb +112 -0
  35. data/lib/limelight/client/playbills.rb +86 -0
  36. data/lib/limelight/commands/command.rb +168 -0
  37. data/lib/limelight/commands/create_command.rb +98 -0
  38. data/lib/limelight/commands/freeze_command.rb +131 -0
  39. data/lib/limelight/commands/help_command.rb +61 -0
  40. data/lib/limelight/commands/open_command.rb +60 -0
  41. data/lib/limelight/commands/pack_command.rb +45 -0
  42. data/lib/limelight/commands/unpack_command.rb +44 -0
  43. data/lib/limelight/commands/version_command.rb +31 -0
  44. data/lib/limelight/data.rb +37 -0
  45. data/lib/limelight/dsl/build_exception.rb +55 -0
  46. data/lib/limelight/dsl/menu_bar.rb +71 -0
  47. data/lib/limelight/dsl/prop_builder.rb +155 -0
  48. data/lib/limelight/dsl/stage_builder.rb +105 -0
  49. data/lib/limelight/dsl/styles_builder.rb +157 -0
  50. data/lib/limelight/file_chooser.rb +68 -0
  51. data/lib/limelight/file_filter.rb +33 -0
  52. data/lib/limelight/file_loader.rb +46 -0
  53. data/lib/limelight/gems.rb +51 -0
  54. data/lib/limelight/java_couplings.rb +66 -0
  55. data/lib/limelight/java_util.rb +49 -0
  56. data/lib/limelight/limelight_exception.rb +24 -0
  57. data/lib/limelight/main.rb +108 -0
  58. data/lib/limelight/paint_action.rb +27 -0
  59. data/lib/limelight/pen.rb +83 -0
  60. data/lib/limelight/producer.rb +179 -0
  61. data/lib/limelight/production.rb +169 -0
  62. data/lib/limelight/prop.rb +367 -0
  63. data/lib/limelight/scene.rb +151 -0
  64. data/lib/limelight/specs/spec_helper.rb +87 -0
  65. data/lib/limelight/specs/test_scene_opener.rb +60 -0
  66. data/lib/limelight/stage.rb +292 -0
  67. data/lib/limelight/string.rb +38 -0
  68. data/lib/limelight/studio.rb +185 -0
  69. data/lib/limelight/styles.rb +347 -0
  70. data/lib/limelight/templates/production_templater.rb +49 -0
  71. data/lib/limelight/templates/scene_templater.rb +47 -0
  72. data/lib/limelight/templates/sources/freezing/limelight_init.rb.template +5 -0
  73. data/lib/limelight/templates/sources/production/init.rb.template +15 -0
  74. data/lib/limelight/templates/sources/production/production.rb.template +49 -0
  75. data/lib/limelight/templates/sources/production/spec/spec_helper.rb.template +12 -0
  76. data/lib/limelight/templates/sources/production/stages.rb.template +17 -0
  77. data/lib/limelight/templates/sources/production/styles.rb.template +12 -0
  78. data/lib/limelight/templates/sources/scene/props.rb.template +6 -0
  79. data/lib/limelight/templates/sources/scene/styles.rb.template +18 -0
  80. data/lib/limelight/templates/sources/scene_spec/scene_spec.rb.template +13 -0
  81. data/lib/limelight/templates/templater.rb +131 -0
  82. data/lib/limelight/templates/templater_logger.rb +39 -0
  83. data/lib/limelight/theater.rb +77 -0
  84. data/lib/limelight/util.rb +65 -0
  85. data/lib/limelight/util/downloader.rb +115 -0
  86. data/lib/limelight/version.rb +20 -0
  87. data/productions/examples/8thlight.com/about/about.txt +24 -0
  88. data/productions/examples/8thlight.com/about/props.rb +11 -0
  89. data/productions/examples/8thlight.com/about/styles.rb +2 -0
  90. data/productions/examples/8thlight.com/footer.rb +6 -0
  91. data/productions/examples/8thlight.com/home/props.rb +28 -0
  92. data/productions/examples/8thlight.com/home/styles.rb +2 -0
  93. data/productions/examples/8thlight.com/images/anvil.jpg +0 -0
  94. data/productions/examples/8thlight.com/images/bg.jpg +0 -0
  95. data/productions/examples/8thlight.com/images/botticelli.jpg +0 -0
  96. data/productions/examples/8thlight.com/images/button_bg.jpg +0 -0
  97. data/productions/examples/8thlight.com/images/canvas_bg.jpg +0 -0
  98. data/productions/examples/8thlight.com/images/footer_bg.jpg +0 -0
  99. data/productions/examples/8thlight.com/images/header.jpg +0 -0
  100. data/productions/examples/8thlight.com/images/moses.jpg +0 -0
  101. data/productions/examples/8thlight.com/images/statemachine_thumbnail.png +0 -0
  102. data/productions/examples/8thlight.com/images/thumbnail_book.jpg +0 -0
  103. data/productions/examples/8thlight.com/menu.rb +11 -0
  104. data/productions/examples/8thlight.com/services/props.rb +11 -0
  105. data/productions/examples/8thlight.com/services/services.txt +8 -0
  106. data/productions/examples/8thlight.com/services/styles.rb +2 -0
  107. data/productions/examples/8thlight.com/stages.rb +8 -0
  108. data/productions/examples/8thlight.com/styles.rb +210 -0
  109. data/productions/examples/calculator/players/button.rb +24 -0
  110. data/productions/examples/calculator/players/calculator.rb +15 -0
  111. data/productions/examples/calculator/players/calculator_model.rb +13 -0
  112. data/productions/examples/calculator/props.rb +23 -0
  113. data/productions/examples/calculator/styles.rb +36 -0
  114. data/productions/examples/langstons_ant/html_javascript/ant.css +39 -0
  115. data/productions/examples/langstons_ant/html_javascript/ant.html +22 -0
  116. data/productions/examples/langstons_ant/html_javascript/ant.js +23 -0
  117. data/productions/examples/langstons_ant/init.rb +4 -0
  118. data/productions/examples/langstons_ant/players/ant.rb +103 -0
  119. data/productions/examples/langstons_ant/players/log.rb +29 -0
  120. data/productions/examples/langstons_ant/players/start_stop_button.rb +37 -0
  121. data/productions/examples/langstons_ant/players/world.rb +35 -0
  122. data/productions/examples/langstons_ant/props.rb +22 -0
  123. data/productions/examples/langstons_ant/styles.rb +104 -0
  124. data/productions/examples/sandbox/alerts/incompatible_production/default_scene/props.rb +10 -0
  125. data/productions/examples/sandbox/alerts/incompatible_production/default_scene/styles.rb +32 -0
  126. data/productions/examples/sandbox/alerts/incompatible_production/production.rb +52 -0
  127. data/productions/examples/sandbox/alerts/incompatible_production/spec/default_scene/default_scene_spec.rb +16 -0
  128. data/productions/examples/sandbox/alerts/incompatible_production/spec/spec_helper.rb +8 -0
  129. data/productions/examples/sandbox/alerts/incompatible_production/stages.rb +20 -0
  130. data/productions/examples/sandbox/alerts/incompatible_production/styles.rb +15 -0
  131. data/productions/examples/sandbox/alerts/players/alerts.rb +17 -0
  132. data/productions/examples/sandbox/alerts/props.rb +10 -0
  133. data/productions/examples/sandbox/alerts/styles.rb +46 -0
  134. data/productions/examples/sandbox/background_images/props.rb +22 -0
  135. data/productions/examples/sandbox/background_images/styles.rb +40 -0
  136. data/productions/examples/sandbox/click_me/players/chromaton.rb +52 -0
  137. data/productions/examples/sandbox/click_me/props.rb +8 -0
  138. data/productions/examples/sandbox/click_me/styles.rb +11 -0
  139. data/productions/examples/sandbox/floaters/players/floater.rb +108 -0
  140. data/productions/examples/sandbox/floaters/players/surface.rb +21 -0
  141. data/productions/examples/sandbox/floaters/props.rb +10 -0
  142. data/productions/examples/sandbox/floaters/styles.rb +24 -0
  143. data/productions/examples/sandbox/frameing/players/sandbox.rb +17 -0
  144. data/productions/examples/sandbox/frameing/props.rb +35 -0
  145. data/productions/examples/sandbox/frameing/styles.rb +45 -0
  146. data/productions/examples/sandbox/gradients/players/spinner.rb +20 -0
  147. data/productions/examples/sandbox/gradients/players/teaser.rb +19 -0
  148. data/productions/examples/sandbox/gradients/players/wave.rb +19 -0
  149. data/productions/examples/sandbox/gradients/players/waves.rb +19 -0
  150. data/productions/examples/sandbox/gradients/props.rb +13 -0
  151. data/productions/examples/sandbox/gradients/styles.rb +47 -0
  152. data/productions/examples/sandbox/header.rb +22 -0
  153. data/productions/examples/sandbox/homer/players/homer.rb +24 -0
  154. data/productions/examples/sandbox/homer/props.rb +10 -0
  155. data/productions/examples/sandbox/homer/styles.rb +16 -0
  156. data/productions/examples/sandbox/images/arch.jpg +0 -0
  157. data/productions/examples/sandbox/images/beach.jpg +0 -0
  158. data/productions/examples/sandbox/images/homer.jpg +0 -0
  159. data/productions/examples/sandbox/images/limelight_spotlight.jpg +0 -0
  160. data/productions/examples/sandbox/images/logo.png +0 -0
  161. data/productions/examples/sandbox/images/marilyn.jpg +0 -0
  162. data/productions/examples/sandbox/images/space.png +0 -0
  163. data/productions/examples/sandbox/images_scene/props.rb +36 -0
  164. data/productions/examples/sandbox/images_scene/styles.rb +34 -0
  165. data/productions/examples/sandbox/inputs/players/button_input.rb +48 -0
  166. data/productions/examples/sandbox/inputs/players/check_box_input.rb +40 -0
  167. data/productions/examples/sandbox/inputs/players/combo_box_input.rb +41 -0
  168. data/productions/examples/sandbox/inputs/players/radio_button_input.rb +43 -0
  169. data/productions/examples/sandbox/inputs/players/text_area_input.rb +36 -0
  170. data/productions/examples/sandbox/inputs/players/text_box_input.rb +36 -0
  171. data/productions/examples/sandbox/inputs/props.rb +40 -0
  172. data/productions/examples/sandbox/inputs/styles.rb +39 -0
  173. data/productions/examples/sandbox/kiosk/players/kiosk.rb +39 -0
  174. data/productions/examples/sandbox/kiosk/props.rb +9 -0
  175. data/productions/examples/sandbox/kiosk/styles.rb +37 -0
  176. data/productions/examples/sandbox/players/sandbox.rb +11 -0
  177. data/productions/examples/sandbox/rounded_corners/players/box.rb +11 -0
  178. data/productions/examples/sandbox/rounded_corners/props.rb +22 -0
  179. data/productions/examples/sandbox/rounded_corners/styles.rb +17 -0
  180. data/productions/examples/sandbox/scrolling/players/add_button.rb +19 -0
  181. data/productions/examples/sandbox/scrolling/players/cell.rb +15 -0
  182. data/productions/examples/sandbox/scrolling/props.rb +45 -0
  183. data/productions/examples/sandbox/scrolling/styles.rb +33 -0
  184. data/productions/examples/sandbox/sketching/players/sketchpad.rb +46 -0
  185. data/productions/examples/sandbox/sketching/props.rb +25 -0
  186. data/productions/examples/sandbox/sketching/styles.rb +35 -0
  187. data/productions/examples/sandbox/sounds/bird.au +0 -0
  188. data/productions/examples/sandbox/sounds/cat.au +0 -0
  189. data/productions/examples/sandbox/sounds/cow.au +0 -0
  190. data/productions/examples/sandbox/sounds/dog.au +0 -0
  191. data/productions/examples/sandbox/sounds/donkey.au +0 -0
  192. data/productions/examples/sandbox/sounds/duck.au +0 -0
  193. data/productions/examples/sandbox/sounds/players/clip.rb +10 -0
  194. data/productions/examples/sandbox/sounds/props.rb +10 -0
  195. data/productions/examples/sandbox/sounds/styles.rb +17 -0
  196. data/productions/examples/sandbox/spec/alerts/alerts_spec.rb +16 -0
  197. data/productions/examples/sandbox/stage_handles/players/sizer.rb +35 -0
  198. data/productions/examples/sandbox/stage_handles/props.rb +17 -0
  199. data/productions/examples/sandbox/stage_handles/styles.rb +58 -0
  200. data/productions/examples/sandbox/stages.rb +8 -0
  201. data/productions/examples/sandbox/styles.rb +35 -0
  202. data/productions/examples/sandbox/teaser/players/fader.rb +58 -0
  203. data/productions/examples/sandbox/teaser/props.rb +14 -0
  204. data/productions/examples/sandbox/teaser/styles.rb +21 -0
  205. data/productions/examples/tutorials/tutorial_1/players/sample.rb +11 -0
  206. data/productions/examples/tutorials/tutorial_1/props.rb +9 -0
  207. data/productions/examples/tutorials/tutorial_1/styles.rb +25 -0
  208. data/productions/playbills.lll +1 -0
  209. data/productions/stage_composer/init.rb +10 -0
  210. data/productions/stage_composer/inspector/players/inspector.rb +80 -0
  211. data/productions/stage_composer/inspector/players/prop_row.rb +12 -0
  212. data/productions/stage_composer/inspector/players/prop_tree.rb +33 -0
  213. data/productions/stage_composer/inspector/players/style_table.rb +12 -0
  214. data/productions/stage_composer/inspector/players/style_value.rb +16 -0
  215. data/productions/stage_composer/inspector/props.rb +19 -0
  216. data/productions/stage_composer/inspector/styles.rb +71 -0
  217. data/productions/stage_composer/lib/init.rb +5 -0
  218. data/productions/stage_composer/lib/limelight/composer/controller.rb +51 -0
  219. data/productions/stage_composer/lib/limelight/composer/lethargy.rb +24 -0
  220. data/productions/stage_composer/production.rb +6 -0
  221. data/productions/stage_composer/stages.rb +15 -0
  222. data/productions/startup/images/logo.png +0 -0
  223. data/productions/startup/images/splash.png +0 -0
  224. data/productions/startup/production.rb +52 -0
  225. data/productions/startup/spec/default_scene/default_scene_spec.rb +16 -0
  226. data/productions/startup/spec/spec_helper.rb +8 -0
  227. data/productions/startup/stages.rb +9 -0
  228. data/productions/startup/styles.rb +15 -0
  229. data/productions/startup/welcome/players/browse_button.rb +10 -0
  230. data/productions/startup/welcome/players/download_button.rb +17 -0
  231. data/productions/startup/welcome/players/sandbox_button.rb +11 -0
  232. data/productions/startup/welcome/props.rb +23 -0
  233. data/productions/startup/welcome/styles.rb +103 -0
  234. data/spec/limelight/builtin/players/button_spec.rb +20 -0
  235. data/spec/limelight/builtin/players/check_box_spec.rb +29 -0
  236. data/spec/limelight/builtin/players/combo_box_spec.rb +29 -0
  237. data/spec/limelight/builtin/players/image_spec.rb +43 -0
  238. data/spec/limelight/builtin/players/password_box_spec.rb +27 -0
  239. data/spec/limelight/builtin/players/radio_button_spec.rb +64 -0
  240. data/spec/limelight/builtin/players/stage_mover_spec.rb +36 -0
  241. data/spec/limelight/builtin/players/stage_sizer_spec.rb +40 -0
  242. data/spec/limelight/builtin/players/text_area_spec.rb +27 -0
  243. data/spec/limelight/builtin/players/text_box_spec.rb +27 -0
  244. data/spec/limelight/builtin/utilities_production/spec_helper.rb +7 -0
  245. data/spec/limelight/builtin/utilities_production/utilities_production_spec.rb +146 -0
  246. data/spec/limelight/casting_director_spec.rb +164 -0
  247. data/spec/limelight/client/playbills_spec.rb +79 -0
  248. data/spec/limelight/commands/command_spec.rb +26 -0
  249. data/spec/limelight/commands/create_command_spec.rb +108 -0
  250. data/spec/limelight/commands/freeze_command_spec.rb +143 -0
  251. data/spec/limelight/commands/help_command_spec.rb +42 -0
  252. data/spec/limelight/commands/open_command_spec.rb +52 -0
  253. data/spec/limelight/commands/pack_command_spec.rb +26 -0
  254. data/spec/limelight/commands/unpack_command_spec.rb +47 -0
  255. data/spec/limelight/data_spec.rb +36 -0
  256. data/spec/limelight/dsl/prop_builder_spec.rb +245 -0
  257. data/spec/limelight/dsl/stage_builder_spec.rb +90 -0
  258. data/spec/limelight/dsl/styles_builder_spec.rb +194 -0
  259. data/spec/limelight/file_chooser_spec.rb +64 -0
  260. data/spec/limelight/file_filter_spec.rb +29 -0
  261. data/spec/limelight/file_loader_spec.rb +28 -0
  262. data/spec/limelight/gems_spec.rb +92 -0
  263. data/spec/limelight/java_util_spec.rb +37 -0
  264. data/spec/limelight/main_spec.rb +40 -0
  265. data/spec/limelight/paint_action_spec.rb +30 -0
  266. data/spec/limelight/pen_spec.rb +62 -0
  267. data/spec/limelight/producer_spec.rb +210 -0
  268. data/spec/limelight/production_spec.rb +100 -0
  269. data/spec/limelight/prop_spec.rb +431 -0
  270. data/spec/limelight/scene_spec.rb +173 -0
  271. data/spec/limelight/stage_spec.rb +202 -0
  272. data/spec/limelight/string_spec.rb +38 -0
  273. data/spec/limelight/studio_spec.rb +157 -0
  274. data/spec/limelight/styles_spec.rb +53 -0
  275. data/spec/limelight/templates/production_templater_spec.rb +66 -0
  276. data/spec/limelight/templates/scene_templater_spec.rb +51 -0
  277. data/spec/limelight/templates/templater_logger_spec.rb +41 -0
  278. data/spec/limelight/templates/templater_spec.rb +107 -0
  279. data/spec/limelight/theater_spec.rb +72 -0
  280. data/spec/limelight/util/downloader_spec.rb +92 -0
  281. data/spec/spec_helper.rb +70 -0
  282. metadata +335 -0
@@ -0,0 +1,112 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'limelight/builtin/players'
5
+
6
+ module Limelight
7
+
8
+ # The CastingDirector is responsible for finding Players for Props within a Production.
9
+ # Each Producer has an instance of a CastingDirector
10
+ #
11
+ # Users of Limelight need not be concerned with this class.
12
+ #
13
+ class CastingDirector
14
+
15
+ def initialize(loader)
16
+ @loader = loader
17
+ @known_players = {}
18
+ end
19
+
20
+ def fill_cast(prop)
21
+ raise LimelightException.new("Cannot cast a Prop without a Scene.") if prop.scene.nil?
22
+ cast_default_player(prop)
23
+ cast_additional_players(prop)
24
+ end
25
+
26
+ private ###############################################
27
+
28
+ def cast_default_player(prop)
29
+ return if prop.name.nil? || prop.name.empty?
30
+ cast_player(prop, prop.name)
31
+ end
32
+
33
+ def cast_additional_players(prop)
34
+ return if prop.players.nil? || prop.players.empty?
35
+ player_names = prop.players.split(/[ ,]/)
36
+ player_names.each do |player_name|
37
+ cast_player(prop, player_name)
38
+ end
39
+ end
40
+
41
+ def cast_player(prop, player_name)
42
+ recruiter = Recruiter.new(prop, player_name, @loader)
43
+ prop.include_player(recruiter.player) if recruiter.player_exists?
44
+ end
45
+ end
46
+
47
+ class Recruiter
48
+
49
+ def initialize(prop, player_name, loader)
50
+ @prop = prop
51
+ @cast = prop.scene.cast
52
+ @player_name = player_name
53
+ @module_name = player_name.camalized
54
+ @loader = loader
55
+ end
56
+
57
+ def player
58
+ return @cast.const_get(@module_name)
59
+ end
60
+
61
+ def player_already_exists?
62
+ return @cast.const_defined?(@module_name)
63
+ end
64
+
65
+ def player_exists?
66
+ recruit_player if !player_already_exists?
67
+ return @cast.const_get(@module_name) != :does_not_exist
68
+ end
69
+
70
+ def recruit_player
71
+ recruit_custom_player
72
+ recruit_builtin_player if !player_already_exists?
73
+ @cast.const_set(@module_name, :does_not_exist) if !player_already_exists?
74
+ end
75
+
76
+ def recruit_custom_player
77
+ player_filename = locate_player
78
+ load_player(player_filename) if player_filename
79
+ end
80
+
81
+ def recruit_builtin_player
82
+ begin
83
+ return if !Limelight::Builtin::Players.const_defined?(@module_name)
84
+ @cast.const_set(@module_name, Limelight::Builtin::Players.const_get(@module_name))
85
+ rescue NameError
86
+ end
87
+ end
88
+
89
+ private ###############################################
90
+
91
+ def locate_player
92
+ player_filename = File.join(@prop.scene.path.to_s, "players", "#{@player_name}.rb")
93
+ if !@loader.exists?(player_filename)
94
+ if @prop.scene.production && @prop.scene.path != @prop.scene.production.path
95
+ player_filename = File.join(@prop.scene.production.path.to_s, "players", "#{@player_name}.rb")
96
+ return nil if !@loader.exists?(player_filename)
97
+ else
98
+ return nil
99
+ end
100
+ end
101
+
102
+ return player_filename
103
+ end
104
+
105
+ def load_player(player_filename)
106
+ src = IO.read(@loader.path_to(player_filename))
107
+ @cast.module_eval(src, player_filename)
108
+ end
109
+
110
+ end
111
+
112
+ end
@@ -0,0 +1,86 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'rexml/document'
5
+ require 'uri'
6
+ require 'net/http'
7
+
8
+ module Limelight
9
+ module Client
10
+
11
+ class Playbills
12
+
13
+ def self.from_xml(xml, uri=nil)
14
+ playbills = []
15
+ doc = REXML::Document.new(xml)
16
+ doc.root.each_element do |playbill_element|
17
+ playbills << Playbill.from_element(playbill_element, uri)
18
+ end
19
+ return playbills
20
+ end
21
+
22
+ def self.from_url(url)
23
+ uri = URI.parse(url)
24
+ response = Net::HTTP.get_response(uri)
25
+ return from_xml(response.body, uri)
26
+ end
27
+
28
+ end
29
+
30
+ class Playbill
31
+
32
+ def self.from_element(element, uri=nil)
33
+ playbill = Playbill.new(uri)
34
+ playbill.populate_from_element(element)
35
+ return playbill
36
+ end
37
+
38
+ def populate_from_element(element)
39
+ element.each_element do |element|
40
+ name = element.name.gsub("-", "_")
41
+ setter_sym = "#{name}=".to_sym
42
+ self.send(setter_sym, coerce_value(element))
43
+ end
44
+ end
45
+
46
+ attr_accessor :author, :created_at, :description, :id, :name, :size, :title, :updated_at, :version, :llp_path, :thumbnail_path
47
+ attr_reader :uri
48
+
49
+ def initialize(uri=nil)
50
+ @uri = uri
51
+ end
52
+
53
+ def thumbnail
54
+ return pull(thumbnail_path)
55
+ end
56
+
57
+ def llp
58
+ return pull(llp_path)
59
+ end
60
+
61
+ private #############################################
62
+
63
+ def coerce_value(element)
64
+ value = element.text
65
+ type_attribute = element.attribute("type")
66
+ return value if type_attribute.nil?
67
+ case type_attribute.value
68
+ when "datetime"
69
+ value = DateTime.parse(value)
70
+ when "integer"
71
+ value = value.to_i
72
+ end
73
+ return value
74
+ end
75
+
76
+ def pull(path)
77
+ new_uri = uri.dup
78
+ new_uri.path = path
79
+ response = Net::HTTP.get_response(new_uri)
80
+ return response.body
81
+ end
82
+
83
+ end
84
+
85
+ end
86
+ end
@@ -0,0 +1,168 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'optparse'
5
+
6
+ module Limelight
7
+ module Commands
8
+
9
+ LISTING = {}
10
+
11
+ class << self
12
+
13
+ def [](name) #:nodoc:
14
+ name = "help" if name.to_s.empty?
15
+ if LISTING[name].nil?
16
+ load_command(name)
17
+ end
18
+
19
+ return LISTING[name]
20
+ end
21
+
22
+ def load_command(name)
23
+ begin
24
+ name = name.gsub('-', '')
25
+ require "limelight/commands/#{name}_command"
26
+ rescue LoadError => e
27
+ end
28
+ end
29
+
30
+ def output=(value) #:nodoc:
31
+ @output = value
32
+ end
33
+
34
+ def output #:nodoc:
35
+ return @output || $stdout
36
+ end
37
+
38
+ end
39
+
40
+ # The base class for all limelight commands. The following is a list of them all.
41
+ #
42
+ # Usage: limelight <command> [options] [params]
43
+ # commands:
44
+ # create Creates the directories and files for a production and/or scene.
45
+ # freeze freeze a gem into a production.
46
+ # open Open a limelight production.
47
+ # pack Pack a limelight production into a .llp file.
48
+ #
49
+ class Command
50
+
51
+ class << self
52
+
53
+ attr_accessor :alias
54
+
55
+ # Sets the alias for the derivative command and installs it in the command listing. All derivative much
56
+ # call this method exactly once.
57
+ #
58
+ def install_as(name)
59
+ raise "Command already installed: #{name}." if LISTING[name]
60
+ self.alias = name
61
+ LISTING[name] = self
62
+ end
63
+
64
+ # Abstract class level methof that returns a string description of the command. Derivatives should
65
+ # override this class level method.
66
+ #
67
+ def description
68
+ return "Default Command description"
69
+ end
70
+
71
+ end
72
+
73
+ # Flag. The backtrace on parse errors will be printed if true.
74
+ #
75
+ attr_accessor :print_backtrace
76
+
77
+ # Runs the command. This is TemplateMethod. It will first parse the arguments, then require files, and finally
78
+ # process the command. Derivative should not override this method.
79
+ #
80
+ def run(args)
81
+ parse(args)
82
+ do_requires
83
+ begin
84
+ process if !@has_parse_error
85
+ rescue SystemExit
86
+ #okay
87
+ end
88
+ end
89
+
90
+ # Parse the arguments. All options will be parsed first, then parse_remainder will be called on
91
+ # remaining args. Derivative should not override this method.
92
+ #
93
+ def parse(args)
94
+ begin
95
+ remainder = options_spec.parse(args)
96
+ parse_remainder(remainder)
97
+ rescue SystemExit => e
98
+ raise e
99
+ rescue Exception => e
100
+ @has_parse_error = true
101
+ parse_error e
102
+ end
103
+ end
104
+
105
+ protected ###########################################
106
+
107
+ def puts(*args) #:nodoc:
108
+ Commands.output.puts(*args)
109
+ end
110
+
111
+ # Prints an exception that occurs while parsing the arguments. The usages summary will follow.
112
+ #
113
+ def parse_error(exception = nil)
114
+ if exception
115
+ puts ""
116
+ puts "!!! #{exception}"
117
+ puts exception.backtrace if @print_backtrace
118
+ end
119
+ usage
120
+ exit -1
121
+ end
122
+
123
+ # Prints the usage summary for a command.
124
+ #
125
+ def usage
126
+ puts ""
127
+ puts "Usage: limelight #{self.class.alias} #{parameter_description}"
128
+ puts " #{self.class.description}"
129
+ puts " options:"
130
+ puts options_spec.summarize
131
+ end
132
+
133
+ # Retreives the OptionParser instance for this command. It will create it if it doesn't exist.
134
+ #
135
+ def options_spec
136
+ if @options_spec.nil?
137
+ @options_spec = OptionParser.new
138
+ @options_spec.on("-h", "--help", "Prints this usage summary.") { usage; exit 0 }
139
+ build_options(@options_spec)
140
+ end
141
+ return @options_spec
142
+ end
143
+
144
+ # Abstract method to require any files needed for processing the command. Derivative should override this
145
+ # method if they need to require any files.
146
+ #
147
+ def do_requires
148
+ #override me
149
+ end
150
+
151
+ # Abstract method to define the command line options in the OptionParser. Derivative should override
152
+ # this method if they offer command line options
153
+ #
154
+ def build_options(spec)
155
+ #override me
156
+ end
157
+
158
+ # Abstract method to parse command line paramters. Parameter are those command line arguments listed after
159
+ # the options. Derivatives should override this method they take command line paramters.
160
+ #
161
+ def parse_remainder(args)
162
+ #override me
163
+ end
164
+
165
+ end
166
+
167
+ end
168
+ end
@@ -0,0 +1,98 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'limelight/commands/command'
5
+
6
+ module Limelight
7
+ module Commands
8
+
9
+ # See the following usages summary
10
+ #
11
+ # Usage: limelight create [options] <production|scene> <path>
12
+ # Creates the directories and files for a production and/or scene.
13
+ # options:
14
+ # -h, --help Prints this usage summary.
15
+ # -s, --scene=<name> Name of scene when creating a production. Defaults to 'default_scene'.
16
+ # -p, --production_path=<path> Path of production to contain scene. Defaults to '.'.
17
+ # -S, --spec_path=<path> Path to spec directory, relative to <production_path>. Defaults to 'spec'.
18
+ #
19
+ # Assume you wanted to create a new production named "love_story" containing two scenes, "midnight_romance" and
20
+ # "happily_ever_after". The following commands would created all the needed files.
21
+ #
22
+ # $ jruby -S limelight create -s midnight_romance production love_story
23
+ # $ jruby -S limelight create -p love_story scene happily_ever_after
24
+ #
25
+ class CreateCommand < Command
26
+
27
+ install_as "create"
28
+
29
+ def self.description #:nodoc:
30
+ return "Creates the directories and files for a production and/or scene."
31
+ end
32
+
33
+ attr_reader :template_type, :scene_name, :production_path, :spec_path #:nodoc:
34
+
35
+ protected ###########################################
36
+
37
+ def initialize #:nodoc:
38
+ @scene_name = "default_scene"
39
+ @production_path = "."
40
+ end
41
+
42
+ def process #:nodoc:
43
+ create_method = "create_#{@template_type}".to_s
44
+ self.send create_method
45
+ end
46
+
47
+ def parameter_description #:nodoc:
48
+ return "[options] <production|scene> <path>"
49
+ end
50
+
51
+ def parse_remainder(args) #:nodoc:
52
+ @template_type = args.shift
53
+ raise "Missing template type" if @template_type.nil?
54
+ raise "Unknown template type: #{@template_type}" if !["production", "scene"].include?(@template_type)
55
+ self.send "parse_#{@template_type}".to_sym, args
56
+ @spec_path = File.join(@production_path, "spec") unless @spec_path
57
+ end
58
+
59
+ def do_requires #:nodoc:
60
+ require 'limelight/templates/production_templater'
61
+ require 'limelight/templates/scene_templater'
62
+ end
63
+
64
+ def build_options(spec) #:nodoc:
65
+ spec.on("-s <name>", "--scene=<name>", "Name of scene when creating a production. Defaults to 'default_scene'.") { |value| @scene_name = value}
66
+ spec.on("-p <path>", "--production_path=<path>", "Path of production to contain scene. Defaults to '.'.") { |value| @production_path = value}
67
+ spec.on("-S <path>", "--spec_path=<path>", "Path to spec directory, relative to <production_path>. Defaults to 'spec'.") { |value| @spec_path = value}
68
+ end
69
+
70
+ private #############################################
71
+
72
+ def parse_production(args)
73
+ @production_path = args.shift
74
+ raise "Missing production path parameter" if @production_path.nil?
75
+ end
76
+
77
+ def parse_scene(args)
78
+ @scene_name = args.shift
79
+ raise "Missing scene name/path parameter" if @scene_name.nil?
80
+ end
81
+
82
+ def create_production
83
+ Templates::ProductionTemplater.new(options_hash).generate
84
+ Templates::SceneTemplater.new(options_hash).generate
85
+ end
86
+
87
+ def create_scene
88
+ Templates::SceneTemplater.new(options_hash).generate
89
+ end
90
+
91
+ def options_hash
92
+ return {:production_path => @production_path, :scene_path => @scene_name, :spec_path => @spec_path}
93
+ end
94
+
95
+ end
96
+
97
+ end
98
+ end