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.
- data/bin/icons/icon.ico +0 -0
- data/bin/icons/icon_48.gif +0 -0
- data/bin/icons/limelight.icns +0 -0
- data/bin/limelight +5 -0
- data/bin/ll +10 -0
- data/bin/ll.bat +5 -0
- data/lib/init.rb +16 -0
- data/lib/limelight.jar +0 -0
- data/lib/limelight/animation.rb +41 -0
- data/lib/limelight/builtin/players.rb +16 -0
- data/lib/limelight/builtin/players/button.rb +39 -0
- data/lib/limelight/builtin/players/check_box.rb +50 -0
- data/lib/limelight/builtin/players/combo_box.rb +89 -0
- data/lib/limelight/builtin/players/combo_box_popup_list.rb +19 -0
- data/lib/limelight/builtin/players/combo_box_popup_list_item.rb +21 -0
- data/lib/limelight/builtin/players/curtains.rb +23 -0
- data/lib/limelight/builtin/players/image.rb +54 -0
- data/lib/limelight/builtin/players/password_box.rb +34 -0
- data/lib/limelight/builtin/players/radio_button.rb +65 -0
- data/lib/limelight/builtin/players/stage_mover.rb +31 -0
- data/lib/limelight/builtin/players/stage_sizer.rb +34 -0
- data/lib/limelight/builtin/players/text_area.rb +34 -0
- data/lib/limelight/builtin/players/text_box.rb +34 -0
- data/lib/limelight/builtin/styles.rb +35 -0
- data/lib/limelight/builtin/utilities_production/alert/players/alert.rb +11 -0
- data/lib/limelight/builtin/utilities_production/alert/props.rb +8 -0
- data/lib/limelight/builtin/utilities_production/alert/styles.rb +14 -0
- data/lib/limelight/builtin/utilities_production/incompatible_version/props.rb +20 -0
- data/lib/limelight/builtin/utilities_production/incompatible_version/styles.rb +12 -0
- data/lib/limelight/builtin/utilities_production/production.rb +62 -0
- data/lib/limelight/builtin/utilities_production/stages.rb +12 -0
- data/lib/limelight/builtin/utilities_production/styles.rb +53 -0
- data/lib/limelight/button_group_cache.rb +11 -0
- data/lib/limelight/casting_director.rb +112 -0
- data/lib/limelight/client/playbills.rb +86 -0
- data/lib/limelight/commands/command.rb +168 -0
- data/lib/limelight/commands/create_command.rb +98 -0
- data/lib/limelight/commands/freeze_command.rb +131 -0
- data/lib/limelight/commands/help_command.rb +61 -0
- data/lib/limelight/commands/open_command.rb +60 -0
- data/lib/limelight/commands/pack_command.rb +45 -0
- data/lib/limelight/commands/unpack_command.rb +44 -0
- data/lib/limelight/commands/version_command.rb +31 -0
- data/lib/limelight/data.rb +37 -0
- data/lib/limelight/dsl/build_exception.rb +55 -0
- data/lib/limelight/dsl/menu_bar.rb +71 -0
- data/lib/limelight/dsl/prop_builder.rb +155 -0
- data/lib/limelight/dsl/stage_builder.rb +105 -0
- data/lib/limelight/dsl/styles_builder.rb +157 -0
- data/lib/limelight/file_chooser.rb +68 -0
- data/lib/limelight/file_filter.rb +33 -0
- data/lib/limelight/file_loader.rb +46 -0
- data/lib/limelight/gems.rb +51 -0
- data/lib/limelight/java_couplings.rb +66 -0
- data/lib/limelight/java_util.rb +49 -0
- data/lib/limelight/limelight_exception.rb +24 -0
- data/lib/limelight/main.rb +108 -0
- data/lib/limelight/paint_action.rb +27 -0
- data/lib/limelight/pen.rb +83 -0
- data/lib/limelight/producer.rb +179 -0
- data/lib/limelight/production.rb +169 -0
- data/lib/limelight/prop.rb +367 -0
- data/lib/limelight/scene.rb +151 -0
- data/lib/limelight/specs/spec_helper.rb +87 -0
- data/lib/limelight/specs/test_scene_opener.rb +60 -0
- data/lib/limelight/stage.rb +292 -0
- data/lib/limelight/string.rb +38 -0
- data/lib/limelight/studio.rb +185 -0
- data/lib/limelight/styles.rb +347 -0
- data/lib/limelight/templates/production_templater.rb +49 -0
- data/lib/limelight/templates/scene_templater.rb +47 -0
- data/lib/limelight/templates/sources/freezing/limelight_init.rb.template +5 -0
- data/lib/limelight/templates/sources/production/init.rb.template +15 -0
- data/lib/limelight/templates/sources/production/production.rb.template +49 -0
- data/lib/limelight/templates/sources/production/spec/spec_helper.rb.template +12 -0
- data/lib/limelight/templates/sources/production/stages.rb.template +17 -0
- data/lib/limelight/templates/sources/production/styles.rb.template +12 -0
- data/lib/limelight/templates/sources/scene/props.rb.template +6 -0
- data/lib/limelight/templates/sources/scene/styles.rb.template +18 -0
- data/lib/limelight/templates/sources/scene_spec/scene_spec.rb.template +13 -0
- data/lib/limelight/templates/templater.rb +131 -0
- data/lib/limelight/templates/templater_logger.rb +39 -0
- data/lib/limelight/theater.rb +77 -0
- data/lib/limelight/util.rb +65 -0
- data/lib/limelight/util/downloader.rb +115 -0
- data/lib/limelight/version.rb +20 -0
- data/productions/examples/8thlight.com/about/about.txt +24 -0
- data/productions/examples/8thlight.com/about/props.rb +11 -0
- data/productions/examples/8thlight.com/about/styles.rb +2 -0
- data/productions/examples/8thlight.com/footer.rb +6 -0
- data/productions/examples/8thlight.com/home/props.rb +28 -0
- data/productions/examples/8thlight.com/home/styles.rb +2 -0
- data/productions/examples/8thlight.com/images/anvil.jpg +0 -0
- data/productions/examples/8thlight.com/images/bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/botticelli.jpg +0 -0
- data/productions/examples/8thlight.com/images/button_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/canvas_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/footer_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/header.jpg +0 -0
- data/productions/examples/8thlight.com/images/moses.jpg +0 -0
- data/productions/examples/8thlight.com/images/statemachine_thumbnail.png +0 -0
- data/productions/examples/8thlight.com/images/thumbnail_book.jpg +0 -0
- data/productions/examples/8thlight.com/menu.rb +11 -0
- data/productions/examples/8thlight.com/services/props.rb +11 -0
- data/productions/examples/8thlight.com/services/services.txt +8 -0
- data/productions/examples/8thlight.com/services/styles.rb +2 -0
- data/productions/examples/8thlight.com/stages.rb +8 -0
- data/productions/examples/8thlight.com/styles.rb +210 -0
- data/productions/examples/calculator/players/button.rb +24 -0
- data/productions/examples/calculator/players/calculator.rb +15 -0
- data/productions/examples/calculator/players/calculator_model.rb +13 -0
- data/productions/examples/calculator/props.rb +23 -0
- data/productions/examples/calculator/styles.rb +36 -0
- data/productions/examples/langstons_ant/html_javascript/ant.css +39 -0
- data/productions/examples/langstons_ant/html_javascript/ant.html +22 -0
- data/productions/examples/langstons_ant/html_javascript/ant.js +23 -0
- data/productions/examples/langstons_ant/init.rb +4 -0
- data/productions/examples/langstons_ant/players/ant.rb +103 -0
- data/productions/examples/langstons_ant/players/log.rb +29 -0
- data/productions/examples/langstons_ant/players/start_stop_button.rb +37 -0
- data/productions/examples/langstons_ant/players/world.rb +35 -0
- data/productions/examples/langstons_ant/props.rb +22 -0
- data/productions/examples/langstons_ant/styles.rb +104 -0
- data/productions/examples/sandbox/alerts/incompatible_production/default_scene/props.rb +10 -0
- data/productions/examples/sandbox/alerts/incompatible_production/default_scene/styles.rb +32 -0
- data/productions/examples/sandbox/alerts/incompatible_production/production.rb +52 -0
- data/productions/examples/sandbox/alerts/incompatible_production/spec/default_scene/default_scene_spec.rb +16 -0
- data/productions/examples/sandbox/alerts/incompatible_production/spec/spec_helper.rb +8 -0
- data/productions/examples/sandbox/alerts/incompatible_production/stages.rb +20 -0
- data/productions/examples/sandbox/alerts/incompatible_production/styles.rb +15 -0
- data/productions/examples/sandbox/alerts/players/alerts.rb +17 -0
- data/productions/examples/sandbox/alerts/props.rb +10 -0
- data/productions/examples/sandbox/alerts/styles.rb +46 -0
- data/productions/examples/sandbox/background_images/props.rb +22 -0
- data/productions/examples/sandbox/background_images/styles.rb +40 -0
- data/productions/examples/sandbox/click_me/players/chromaton.rb +52 -0
- data/productions/examples/sandbox/click_me/props.rb +8 -0
- data/productions/examples/sandbox/click_me/styles.rb +11 -0
- data/productions/examples/sandbox/floaters/players/floater.rb +108 -0
- data/productions/examples/sandbox/floaters/players/surface.rb +21 -0
- data/productions/examples/sandbox/floaters/props.rb +10 -0
- data/productions/examples/sandbox/floaters/styles.rb +24 -0
- data/productions/examples/sandbox/frameing/players/sandbox.rb +17 -0
- data/productions/examples/sandbox/frameing/props.rb +35 -0
- data/productions/examples/sandbox/frameing/styles.rb +45 -0
- data/productions/examples/sandbox/gradients/players/spinner.rb +20 -0
- data/productions/examples/sandbox/gradients/players/teaser.rb +19 -0
- data/productions/examples/sandbox/gradients/players/wave.rb +19 -0
- data/productions/examples/sandbox/gradients/players/waves.rb +19 -0
- data/productions/examples/sandbox/gradients/props.rb +13 -0
- data/productions/examples/sandbox/gradients/styles.rb +47 -0
- data/productions/examples/sandbox/header.rb +22 -0
- data/productions/examples/sandbox/homer/players/homer.rb +24 -0
- data/productions/examples/sandbox/homer/props.rb +10 -0
- data/productions/examples/sandbox/homer/styles.rb +16 -0
- data/productions/examples/sandbox/images/arch.jpg +0 -0
- data/productions/examples/sandbox/images/beach.jpg +0 -0
- data/productions/examples/sandbox/images/homer.jpg +0 -0
- data/productions/examples/sandbox/images/limelight_spotlight.jpg +0 -0
- data/productions/examples/sandbox/images/logo.png +0 -0
- data/productions/examples/sandbox/images/marilyn.jpg +0 -0
- data/productions/examples/sandbox/images/space.png +0 -0
- data/productions/examples/sandbox/images_scene/props.rb +36 -0
- data/productions/examples/sandbox/images_scene/styles.rb +34 -0
- data/productions/examples/sandbox/inputs/players/button_input.rb +48 -0
- data/productions/examples/sandbox/inputs/players/check_box_input.rb +40 -0
- data/productions/examples/sandbox/inputs/players/combo_box_input.rb +41 -0
- data/productions/examples/sandbox/inputs/players/radio_button_input.rb +43 -0
- data/productions/examples/sandbox/inputs/players/text_area_input.rb +36 -0
- data/productions/examples/sandbox/inputs/players/text_box_input.rb +36 -0
- data/productions/examples/sandbox/inputs/props.rb +40 -0
- data/productions/examples/sandbox/inputs/styles.rb +39 -0
- data/productions/examples/sandbox/kiosk/players/kiosk.rb +39 -0
- data/productions/examples/sandbox/kiosk/props.rb +9 -0
- data/productions/examples/sandbox/kiosk/styles.rb +37 -0
- data/productions/examples/sandbox/players/sandbox.rb +11 -0
- data/productions/examples/sandbox/rounded_corners/players/box.rb +11 -0
- data/productions/examples/sandbox/rounded_corners/props.rb +22 -0
- data/productions/examples/sandbox/rounded_corners/styles.rb +17 -0
- data/productions/examples/sandbox/scrolling/players/add_button.rb +19 -0
- data/productions/examples/sandbox/scrolling/players/cell.rb +15 -0
- data/productions/examples/sandbox/scrolling/props.rb +45 -0
- data/productions/examples/sandbox/scrolling/styles.rb +33 -0
- data/productions/examples/sandbox/sketching/players/sketchpad.rb +46 -0
- data/productions/examples/sandbox/sketching/props.rb +25 -0
- data/productions/examples/sandbox/sketching/styles.rb +35 -0
- data/productions/examples/sandbox/sounds/bird.au +0 -0
- data/productions/examples/sandbox/sounds/cat.au +0 -0
- data/productions/examples/sandbox/sounds/cow.au +0 -0
- data/productions/examples/sandbox/sounds/dog.au +0 -0
- data/productions/examples/sandbox/sounds/donkey.au +0 -0
- data/productions/examples/sandbox/sounds/duck.au +0 -0
- data/productions/examples/sandbox/sounds/players/clip.rb +10 -0
- data/productions/examples/sandbox/sounds/props.rb +10 -0
- data/productions/examples/sandbox/sounds/styles.rb +17 -0
- data/productions/examples/sandbox/spec/alerts/alerts_spec.rb +16 -0
- data/productions/examples/sandbox/stage_handles/players/sizer.rb +35 -0
- data/productions/examples/sandbox/stage_handles/props.rb +17 -0
- data/productions/examples/sandbox/stage_handles/styles.rb +58 -0
- data/productions/examples/sandbox/stages.rb +8 -0
- data/productions/examples/sandbox/styles.rb +35 -0
- data/productions/examples/sandbox/teaser/players/fader.rb +58 -0
- data/productions/examples/sandbox/teaser/props.rb +14 -0
- data/productions/examples/sandbox/teaser/styles.rb +21 -0
- data/productions/examples/tutorials/tutorial_1/players/sample.rb +11 -0
- data/productions/examples/tutorials/tutorial_1/props.rb +9 -0
- data/productions/examples/tutorials/tutorial_1/styles.rb +25 -0
- data/productions/playbills.lll +1 -0
- data/productions/stage_composer/init.rb +10 -0
- data/productions/stage_composer/inspector/players/inspector.rb +80 -0
- data/productions/stage_composer/inspector/players/prop_row.rb +12 -0
- data/productions/stage_composer/inspector/players/prop_tree.rb +33 -0
- data/productions/stage_composer/inspector/players/style_table.rb +12 -0
- data/productions/stage_composer/inspector/players/style_value.rb +16 -0
- data/productions/stage_composer/inspector/props.rb +19 -0
- data/productions/stage_composer/inspector/styles.rb +71 -0
- data/productions/stage_composer/lib/init.rb +5 -0
- data/productions/stage_composer/lib/limelight/composer/controller.rb +51 -0
- data/productions/stage_composer/lib/limelight/composer/lethargy.rb +24 -0
- data/productions/stage_composer/production.rb +6 -0
- data/productions/stage_composer/stages.rb +15 -0
- data/productions/startup/images/logo.png +0 -0
- data/productions/startup/images/splash.png +0 -0
- data/productions/startup/production.rb +52 -0
- data/productions/startup/spec/default_scene/default_scene_spec.rb +16 -0
- data/productions/startup/spec/spec_helper.rb +8 -0
- data/productions/startup/stages.rb +9 -0
- data/productions/startup/styles.rb +15 -0
- data/productions/startup/welcome/players/browse_button.rb +10 -0
- data/productions/startup/welcome/players/download_button.rb +17 -0
- data/productions/startup/welcome/players/sandbox_button.rb +11 -0
- data/productions/startup/welcome/props.rb +23 -0
- data/productions/startup/welcome/styles.rb +103 -0
- data/spec/limelight/builtin/players/button_spec.rb +20 -0
- data/spec/limelight/builtin/players/check_box_spec.rb +29 -0
- data/spec/limelight/builtin/players/combo_box_spec.rb +29 -0
- data/spec/limelight/builtin/players/image_spec.rb +43 -0
- data/spec/limelight/builtin/players/password_box_spec.rb +27 -0
- data/spec/limelight/builtin/players/radio_button_spec.rb +64 -0
- data/spec/limelight/builtin/players/stage_mover_spec.rb +36 -0
- data/spec/limelight/builtin/players/stage_sizer_spec.rb +40 -0
- data/spec/limelight/builtin/players/text_area_spec.rb +27 -0
- data/spec/limelight/builtin/players/text_box_spec.rb +27 -0
- data/spec/limelight/builtin/utilities_production/spec_helper.rb +7 -0
- data/spec/limelight/builtin/utilities_production/utilities_production_spec.rb +146 -0
- data/spec/limelight/casting_director_spec.rb +164 -0
- data/spec/limelight/client/playbills_spec.rb +79 -0
- data/spec/limelight/commands/command_spec.rb +26 -0
- data/spec/limelight/commands/create_command_spec.rb +108 -0
- data/spec/limelight/commands/freeze_command_spec.rb +143 -0
- data/spec/limelight/commands/help_command_spec.rb +42 -0
- data/spec/limelight/commands/open_command_spec.rb +52 -0
- data/spec/limelight/commands/pack_command_spec.rb +26 -0
- data/spec/limelight/commands/unpack_command_spec.rb +47 -0
- data/spec/limelight/data_spec.rb +36 -0
- data/spec/limelight/dsl/prop_builder_spec.rb +245 -0
- data/spec/limelight/dsl/stage_builder_spec.rb +90 -0
- data/spec/limelight/dsl/styles_builder_spec.rb +194 -0
- data/spec/limelight/file_chooser_spec.rb +64 -0
- data/spec/limelight/file_filter_spec.rb +29 -0
- data/spec/limelight/file_loader_spec.rb +28 -0
- data/spec/limelight/gems_spec.rb +92 -0
- data/spec/limelight/java_util_spec.rb +37 -0
- data/spec/limelight/main_spec.rb +40 -0
- data/spec/limelight/paint_action_spec.rb +30 -0
- data/spec/limelight/pen_spec.rb +62 -0
- data/spec/limelight/producer_spec.rb +210 -0
- data/spec/limelight/production_spec.rb +100 -0
- data/spec/limelight/prop_spec.rb +431 -0
- data/spec/limelight/scene_spec.rb +173 -0
- data/spec/limelight/stage_spec.rb +202 -0
- data/spec/limelight/string_spec.rb +38 -0
- data/spec/limelight/studio_spec.rb +157 -0
- data/spec/limelight/styles_spec.rb +53 -0
- data/spec/limelight/templates/production_templater_spec.rb +66 -0
- data/spec/limelight/templates/scene_templater_spec.rb +51 -0
- data/spec/limelight/templates/templater_logger_spec.rb +41 -0
- data/spec/limelight/templates/templater_spec.rb +107 -0
- data/spec/limelight/theater_spec.rb +72 -0
- data/spec/limelight/util/downloader_spec.rb +92 -0
- data/spec/spec_helper.rb +70 -0
- 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
|