limelight 0.2.1-java → 0.3.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/ll.bat +1 -1
- data/lib/i4jruntime.jar +0 -0
- data/lib/junit-4.4.jar +0 -0
- data/lib/limelight.jar +0 -0
- data/lib/limelight/animation.rb +3 -3
- data/lib/limelight/builtin/players.rb +2 -1
- data/lib/limelight/builtin/players/combo_box.rb +8 -2
- data/lib/limelight/builtin/players/image.rb +47 -0
- data/lib/limelight/builtin/styles.rb +1 -1
- data/lib/limelight/casting_director.rb +70 -39
- data/lib/limelight/commands/command.rb +150 -0
- data/lib/limelight/commands/create_command.rb +79 -0
- data/lib/limelight/commands/freeze_command.rb +113 -0
- data/lib/limelight/commands/open_command.rb +49 -0
- data/lib/limelight/commands/pack_command.rb +45 -0
- data/lib/limelight/dsl/build_exception.rb +51 -0
- data/lib/limelight/dsl/menu_bar.rb +71 -0
- data/lib/limelight/dsl/production_builder.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 +134 -0
- data/lib/limelight/file_loader.rb +46 -0
- data/lib/limelight/gems.rb +45 -0
- data/lib/limelight/java_couplings.rb +7 -2
- data/lib/limelight/java_util.rb +2 -15
- data/lib/limelight/main.rb +7 -5
- data/lib/limelight/producer.rb +87 -66
- data/lib/limelight/production.rb +42 -4
- data/lib/limelight/prop.rb +84 -70
- data/lib/limelight/scene.rb +75 -20
- data/lib/limelight/specs/spec_helper.rb +58 -0
- data/lib/limelight/stage.rb +11 -6
- data/lib/limelight/string.rb +35 -0
- data/lib/limelight/studio.rb +29 -0
- data/lib/limelight/templates/production_templater.rb +42 -0
- data/lib/limelight/templates/scene_templater.rb +41 -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 +9 -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/templater.rb +128 -0
- data/lib/limelight/templates/templater_logger.rb +36 -0
- data/lib/limelight/theater.rb +21 -7
- data/lib/limelight/util.rb +22 -6
- data/lib/limelight/version.rb +2 -2
- data/productions/examples/8thlight.com/styles.rb +1 -1
- data/productions/examples/langstons_ant/html_javascript/ant.html +1 -1
- data/productions/examples/langstons_ant/init.rb +1 -0
- data/productions/examples/langstons_ant/players/log.rb +2 -2
- data/productions/examples/langstons_ant/players/world.rb +0 -26
- data/productions/examples/sandbox.llp +0 -0
- data/productions/examples/sandbox/click_me/players/chromaton.rb +10 -4
- data/productions/examples/sandbox/floaters/players/floater.rb +4 -2
- data/productions/examples/sandbox/gradients/players/spinner.rb +5 -1
- data/productions/examples/sandbox/gradients/players/teaser.rb +2 -2
- data/productions/examples/sandbox/gradients/players/wave.rb +2 -2
- data/productions/examples/sandbox/gradients/players/waves.rb +2 -2
- data/productions/examples/sandbox/header.rb +1 -0
- data/productions/examples/sandbox/images/logo.png +0 -0
- data/productions/examples/sandbox/images_scene/props.rb +25 -0
- data/productions/examples/sandbox/images_scene/styles.rb +30 -0
- data/productions/examples/sandbox/inputs/styles.rb +1 -1
- data/productions/examples/sandbox/scrolling/props.rb +12 -12
- data/productions/examples/sandbox/teaser/players/fader.rb +2 -8
- data/productions/stage_composer/inspector/styles.rb +2 -2
- data/productions/startup/styles.rb +2 -2
- data/spec/builtin/players/button_spec.rb +0 -1
- data/spec/builtin/players/image_spec.rb +41 -0
- data/spec/casting_director_spec.rb +114 -44
- data/spec/commands/command_spec.rb +18 -0
- data/spec/commands/create_command_spec.rb +74 -0
- data/spec/commands/freeze_command_spec.rb +59 -0
- data/spec/commands/open_command_spec.rb +30 -0
- data/spec/commands/pack_command_spec.rb +23 -0
- data/spec/dsl/production_builder_spec.rb +46 -0
- data/spec/{prop_builder_spec.rb → dsl/prop_builder_spec.rb} +80 -24
- data/spec/{stage_builder_spec.rb → dsl/stage_builder_spec.rb} +4 -4
- data/spec/{styles_builder_spec.rb → dsl/styles_builder_spec.rb} +6 -6
- data/spec/{loaders/file_loader_spec.rb → file_loader_spec.rb} +4 -4
- data/spec/gems_spec.rb +83 -0
- data/spec/java_util_spec.rb +1 -17
- data/spec/main_spec.rb +17 -0
- data/spec/producer_spec.rb +89 -79
- data/spec/production_spec.rb +28 -3
- data/spec/prop_spec.rb +82 -16
- data/spec/scene_spec.rb +73 -3
- data/spec/spec_helper.rb +37 -1
- data/spec/stage_spec.rb +10 -1
- data/spec/string_spec.rb +35 -0
- data/spec/studio_spec.rb +14 -0
- data/spec/styles_spec.rb +14 -0
- data/spec/templates/production_templater_spec.rb +44 -0
- data/spec/templates/scene_templater_spec.rb +25 -0
- data/spec/templates/templater_logger_spec.rb +38 -0
- data/spec/templates/templater_spec.rb +104 -0
- data/spec/theater_spec.rb +12 -21
- metadata +75 -23
- data/bin/icons/splash.png +0 -0
- data/lib/limelight/build_exception.rb +0 -48
- data/lib/limelight/commands.rb +0 -52
- data/lib/limelight/loaders/file_scene_loader.rb +0 -49
- data/lib/limelight/menu_bar.rb +0 -68
- data/lib/limelight/production_builder.rb +0 -66
- data/lib/limelight/prop_builder.rb +0 -119
- data/lib/limelight/stage_builder.rb +0 -103
- data/lib/limelight/styles_builder.rb +0 -131
- data/spec/commands_spec.rb +0 -34
- data/spec/production_builder_spec.rb +0 -48
data/bin/ll.bat
CHANGED
data/lib/i4jruntime.jar
ADDED
|
Binary file
|
data/lib/junit-4.4.jar
ADDED
|
Binary file
|
data/lib/limelight.jar
CHANGED
|
Binary file
|
data/lib/limelight/animation.rb
CHANGED
|
@@ -9,7 +9,7 @@ module Limelight
|
|
|
9
9
|
# Although, this object does not update the screen, it provides a means to perform sequential updates in evenly
|
|
10
10
|
# spaced time frames.
|
|
11
11
|
#
|
|
12
|
-
class Animation < Limelight::
|
|
12
|
+
class Animation < Limelight::Background::Animation
|
|
13
13
|
|
|
14
14
|
# A Prop and block are required to construct an Animation. Options may include :name (string), :updates_per_second
|
|
15
15
|
# (int defaults to 60)
|
|
@@ -23,10 +23,10 @@ module Limelight
|
|
|
23
23
|
@block = block
|
|
24
24
|
name = options[:name] || "#{prop.to_s} animation"
|
|
25
25
|
updates_per_second = options[:updates_per_second] || 60
|
|
26
|
-
super(
|
|
26
|
+
super(updates_per_second)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
def
|
|
29
|
+
def doUpdate #:nodoc:
|
|
30
30
|
@block.call
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -9,4 +9,5 @@ require 'limelight/builtin/players/text_area'
|
|
|
9
9
|
require 'limelight/builtin/players/text_box'
|
|
10
10
|
require 'limelight/builtin/players/combo_box_popup_list_item'
|
|
11
11
|
require 'limelight/builtin/players/combo_box_popup_list'
|
|
12
|
-
require 'limelight/builtin/players/curtains'
|
|
12
|
+
require 'limelight/builtin/players/curtains'
|
|
13
|
+
require 'limelight/builtin/players/image'
|
|
@@ -29,10 +29,16 @@ module Limelight
|
|
|
29
29
|
combo_box = Limelight::UI::Model::Inputs::ComboBoxPanel.new
|
|
30
30
|
prop.panel.add(combo_box)
|
|
31
31
|
prop.combo_box = combo_box.combo_box
|
|
32
|
+
prop.clear
|
|
32
33
|
end
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
attr_accessor :combo_box #:nodoc:
|
|
37
|
+
attr_reader :choices
|
|
38
|
+
|
|
39
|
+
def clear #:nodoc:
|
|
40
|
+
@choices = []
|
|
41
|
+
end
|
|
36
42
|
|
|
37
43
|
# Sets the choices listed in the combo_box. The value parameter should an Array or a String that
|
|
38
44
|
# can be evalulated into an Array. All choices in a combo_box are strings.
|
|
@@ -43,7 +49,7 @@ module Limelight
|
|
|
43
49
|
def choices=(value)
|
|
44
50
|
value = eval(value) if value.is_a? String
|
|
45
51
|
raise "Invalid choices type: #{value.class}. Choices have to be an array." if !value.is_a?(Array)
|
|
46
|
-
@
|
|
52
|
+
@choices = value
|
|
47
53
|
combo_box.remove_all_items
|
|
48
54
|
value.each { |choice| combo_box.add_item(choice) }
|
|
49
55
|
end
|
|
@@ -69,7 +75,7 @@ module Limelight
|
|
|
69
75
|
popup_style.y = panel.absolute_location.y.to_s
|
|
70
76
|
popup_style.width = panel.width.to_s
|
|
71
77
|
|
|
72
|
-
@
|
|
78
|
+
@choices.each do |value|
|
|
73
79
|
popup_list.add(Limelight::Prop.new(:name => "limelight_builtin_players_combo_box_popup_list_item", :text => value, :players => "combo_box_popup_list_item", :combo_box => self))
|
|
74
80
|
end
|
|
75
81
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Limelight
|
|
2
|
+
module Builtin
|
|
3
|
+
module Players
|
|
4
|
+
|
|
5
|
+
module Image
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
def extended(prop) #:nodoc:
|
|
10
|
+
image_panel = Limelight::UI::Model::ImagePanel.new
|
|
11
|
+
prop.panel.add(image_panel)
|
|
12
|
+
prop.image_panel = image_panel
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
attr_accessor :image_panel #:nodoc:
|
|
18
|
+
|
|
19
|
+
def image=(path)
|
|
20
|
+
image_panel.image_file = path
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def image
|
|
24
|
+
return image_panel.image_file
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def rotation=(value)
|
|
28
|
+
image_panel.rotation = value.to_f
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def rotation
|
|
32
|
+
return image_panel.rotation
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def scaled=(value)
|
|
36
|
+
image_panel.scaled = value
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def scaled?
|
|
40
|
+
return image_panel.scaled
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -11,70 +11,101 @@ module Limelight
|
|
|
11
11
|
# Users of Limelight need not be concerned with this class.
|
|
12
12
|
#
|
|
13
13
|
class CastingDirector
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
def initialize(loader)
|
|
16
16
|
@loader = loader
|
|
17
17
|
@known_players = {}
|
|
18
18
|
end
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
def fill_cast(prop)
|
|
21
|
+
raise LimelightException.new("Cannot cast a Prop without a Scene.") if prop.scene.nil?
|
|
21
22
|
cast_default_player(prop)
|
|
22
23
|
cast_additional_players(prop)
|
|
23
24
|
end
|
|
24
|
-
|
|
25
|
+
|
|
25
26
|
private ###############################################
|
|
26
|
-
|
|
27
|
+
|
|
27
28
|
def cast_default_player(prop)
|
|
28
29
|
return if prop.name.nil? || prop.name.empty?
|
|
29
|
-
|
|
30
|
+
cast_player(prop, prop.name)
|
|
30
31
|
end
|
|
31
|
-
|
|
32
|
+
|
|
32
33
|
def cast_additional_players(prop)
|
|
33
34
|
return if prop.players.nil? || prop.players.empty?
|
|
34
35
|
player_names = prop.players.split(/[ ,]/)
|
|
35
36
|
player_names.each do |player_name|
|
|
36
|
-
|
|
37
|
+
cast_player(prop, player_name)
|
|
37
38
|
end
|
|
38
39
|
end
|
|
39
|
-
|
|
40
|
-
def
|
|
41
|
-
|
|
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)
|
|
42
63
|
end
|
|
43
|
-
|
|
44
|
-
def player_exists?
|
|
45
|
-
|
|
46
|
-
return @
|
|
64
|
+
|
|
65
|
+
def player_exists?
|
|
66
|
+
recruit_player if !player_already_exists?
|
|
67
|
+
return @cast.const_get(@module_name) != :does_not_exist
|
|
47
68
|
end
|
|
48
|
-
|
|
49
|
-
def
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
@
|
|
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?
|
|
53
74
|
end
|
|
54
|
-
|
|
55
|
-
def
|
|
56
|
-
player_filename =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
Kernel.load @loader.path_to(player_filename)
|
|
60
|
-
|
|
61
|
-
module_name = player_name.camalized
|
|
62
|
-
return if !Object.const_defined?(module_name)
|
|
63
|
-
|
|
64
|
-
mod = Object.const_get(module_name)
|
|
65
|
-
@known_players[player_name] = mod
|
|
75
|
+
|
|
76
|
+
def recruit_custom_player
|
|
77
|
+
player_filename = locate_player
|
|
78
|
+
load_player(player_filename) if player_filename
|
|
66
79
|
end
|
|
67
|
-
|
|
68
|
-
def
|
|
80
|
+
|
|
81
|
+
def recruit_builtin_player
|
|
69
82
|
begin
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
mod = Limelight::Builtin::Players.const_get(module_name)
|
|
73
|
-
@known_players[player_name] = mod
|
|
83
|
+
return if !Limelight::Builtin::Players.const_defined?(@module_name)
|
|
84
|
+
@cast.const_set(@module_name, Limelight::Builtin::Players.const_get(@module_name))
|
|
74
85
|
rescue NameError
|
|
75
86
|
end
|
|
76
87
|
end
|
|
77
|
-
|
|
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
|
+
return player_filename
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def load_player(player_filename)
|
|
105
|
+
src = IO.read(@loader.path_to(player_filename))
|
|
106
|
+
@cast.module_eval(src, player_filename)
|
|
107
|
+
end
|
|
108
|
+
|
|
78
109
|
end
|
|
79
|
-
|
|
110
|
+
|
|
80
111
|
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module Limelight
|
|
4
|
+
module Commands
|
|
5
|
+
|
|
6
|
+
LISTING = {}
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
|
|
10
|
+
def [](name)
|
|
11
|
+
load_listing if !@listing_loaded
|
|
12
|
+
return LISTING[name]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def load_listing
|
|
16
|
+
Dir.entries(File.dirname(__FILE__)).each do |file|
|
|
17
|
+
if file != "." && file != ".."
|
|
18
|
+
require "limelight/commands/#{file.gsub('.rb', '')}"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
@listing_loaded = true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# The base class for all limelight commands. The following is a list of them all.
|
|
27
|
+
#
|
|
28
|
+
# Usage: limelight <command> [options] [params]
|
|
29
|
+
# commands:
|
|
30
|
+
# create Creates the directories and files for a production and/or scene.
|
|
31
|
+
# freeze freeze a gem into a production.
|
|
32
|
+
# open Open a limelight production.
|
|
33
|
+
# pack Pack a limelight production into a .llp file.
|
|
34
|
+
#
|
|
35
|
+
class Command
|
|
36
|
+
|
|
37
|
+
class << self
|
|
38
|
+
|
|
39
|
+
attr_accessor :alias
|
|
40
|
+
|
|
41
|
+
# Sets the alias for the derivative command and installs it in the command listing. All derivative much
|
|
42
|
+
# call this method exactly once.
|
|
43
|
+
#
|
|
44
|
+
def install_as(name)
|
|
45
|
+
raise "Command already installed: #{name}." if LISTING[name]
|
|
46
|
+
self.alias = name
|
|
47
|
+
LISTING[name] = self
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Abstract class level methof that returns a string description of the command. Derivatives should
|
|
51
|
+
# override this class level method.
|
|
52
|
+
#
|
|
53
|
+
def description
|
|
54
|
+
return "Default Command description"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Flag. The backtrace on parse errors will be printed if true.
|
|
60
|
+
#
|
|
61
|
+
attr_accessor :print_backtrace
|
|
62
|
+
|
|
63
|
+
# Runs the command. This is TemplateMethod. It will first parse the arguments, then require files, and finally
|
|
64
|
+
# process the command. Derivative should not override this method.
|
|
65
|
+
#
|
|
66
|
+
def run(args)
|
|
67
|
+
parse(args)
|
|
68
|
+
do_requires
|
|
69
|
+
begin
|
|
70
|
+
process if !@has_parse_error
|
|
71
|
+
rescue SystemExit
|
|
72
|
+
#okay
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Parse the arguments. All options will be parsed first, then parse_remainder will be called on
|
|
77
|
+
# remaining args. Derivative should not override this method.
|
|
78
|
+
#
|
|
79
|
+
def parse(args)
|
|
80
|
+
begin
|
|
81
|
+
remainder = options_spec.parse(args)
|
|
82
|
+
parse_remainder(remainder)
|
|
83
|
+
rescue SystemExit => e
|
|
84
|
+
raise e
|
|
85
|
+
rescue Exception => e
|
|
86
|
+
@has_parse_error = true
|
|
87
|
+
parse_error e
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
protected ###########################################
|
|
92
|
+
|
|
93
|
+
# Prints an exception that occurs while parsing the arguments. The usages summary will follow.
|
|
94
|
+
#
|
|
95
|
+
def parse_error(exception = nil)
|
|
96
|
+
if exception
|
|
97
|
+
puts ""
|
|
98
|
+
puts "!!! #{exception}"
|
|
99
|
+
puts exception.backtrace if @print_backtrace
|
|
100
|
+
end
|
|
101
|
+
usage
|
|
102
|
+
exit -1
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Prints the usage summary for a command.
|
|
106
|
+
#
|
|
107
|
+
def usage
|
|
108
|
+
puts ""
|
|
109
|
+
puts "Usage: limelight #{self.class.alias} #{parameter_description}"
|
|
110
|
+
puts " #{self.class.description}"
|
|
111
|
+
puts " options:"
|
|
112
|
+
puts options_spec.summarize
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Retreives the OptionParser instance for this command. It will create it if it doesn't exist.
|
|
116
|
+
#
|
|
117
|
+
def options_spec
|
|
118
|
+
if @options_spec.nil?
|
|
119
|
+
@options_spec = OptionParser.new
|
|
120
|
+
@options_spec.on("-h", "--help", "Prints this usage summary.") { usage; exit 0 }
|
|
121
|
+
build_options(@options_spec)
|
|
122
|
+
end
|
|
123
|
+
return @options_spec
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Abstract method to require any files needed for processing the command. Derivative should override this
|
|
127
|
+
# method if they need to require any files.
|
|
128
|
+
#
|
|
129
|
+
def do_requires
|
|
130
|
+
#override me
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Abstract method to define the command line options in the OptionParser. Derivative should override
|
|
134
|
+
# this method if they offer command line options
|
|
135
|
+
#
|
|
136
|
+
def build_options(spec)
|
|
137
|
+
#override me
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Abstract method to parse command line paramters. Parameter are those command line arguments listed after
|
|
141
|
+
# the options. Derivatives should override this method they take command line paramters.
|
|
142
|
+
#
|
|
143
|
+
def parse_remainder(args)
|
|
144
|
+
#override me
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'limelight/commands/command'
|
|
2
|
+
|
|
3
|
+
module Limelight
|
|
4
|
+
module Commands
|
|
5
|
+
|
|
6
|
+
# See the following usages summary
|
|
7
|
+
#
|
|
8
|
+
# Usage: limelight create [options] <production|scene> <path>
|
|
9
|
+
# Creates the directories and files for a production and/or scene.
|
|
10
|
+
# options:
|
|
11
|
+
# -h, --help Prints this usage summary.
|
|
12
|
+
# -s, --scene=<name> Name of scene when creating a production. Defaults to 'default_scene'.
|
|
13
|
+
#
|
|
14
|
+
# Assume you wanted to create a new production named "love_story" containing two scenes, "midnight_romance" and
|
|
15
|
+
# "happily_ever_after". The following commands would created all the needed files.
|
|
16
|
+
#
|
|
17
|
+
# $ jruby -S limelight create -s midnight_romance production love_story
|
|
18
|
+
# $ jruby -S limelight create scene love_story/happily_ever_after
|
|
19
|
+
#
|
|
20
|
+
class CreateCommand < Command
|
|
21
|
+
|
|
22
|
+
install_as "create"
|
|
23
|
+
|
|
24
|
+
def self.description #:nodoc:
|
|
25
|
+
return "Creates the directories and files for a production and/or scene."
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
protected ###########################################
|
|
29
|
+
|
|
30
|
+
attr_reader :template_type, :path, :default_scene_name #:nodoc:
|
|
31
|
+
|
|
32
|
+
def initialize #:nodoc:
|
|
33
|
+
@default_scene_name = "default_scene"
|
|
34
|
+
@actions = {}
|
|
35
|
+
@actions["production"] = :create_production
|
|
36
|
+
@actions["scene"] = :create_scene
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def process #:nodoc:
|
|
40
|
+
action = @actions[@template_type]
|
|
41
|
+
self.send action
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def parameter_description #:nodoc:
|
|
45
|
+
return "[options] <production|scene> <path>"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def parse_remainder(args) #:nodoc:
|
|
49
|
+
@template_type = args.shift
|
|
50
|
+
raise "Missing template type" if @template_type.nil?
|
|
51
|
+
raise "Unknown template type: #{@template_type}" if @actions[@template_type].nil?
|
|
52
|
+
@path = args.shift
|
|
53
|
+
raise "Missing path parameter" if @path.nil?
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def do_requires #:nodoc:
|
|
57
|
+
require 'limelight/templates/production_templater'
|
|
58
|
+
require 'limelight/templates/scene_templater'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def build_options(spec) #:nodoc:
|
|
62
|
+
spec.on("-s <name>", "--scene=<name>", "Name of scene when creating a production. Defaults to 'default_scene'.") { |value| @default_scene_name = value}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private #############################################
|
|
66
|
+
|
|
67
|
+
def create_production
|
|
68
|
+
Templates::ProductionTemplater.new(@path, @default_scene_name).generate
|
|
69
|
+
Templates::SceneTemplater.new("#{@path}/#{@default_scene_name}").generate
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def create_scene
|
|
73
|
+
Templates::SceneTemplater.new(@path).generate
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|