limelight 0.5.2-java → 0.5.4-java
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/limelight.jar +0 -0
- data/lib/limelight/commands/command.rb +1 -1
- data/lib/limelight/commands/open_command.rb +3 -3
- data/lib/limelight/limelight_init.rb +1 -1
- data/lib/limelight/producer.rb +22 -9
- data/lib/limelight/production.rb +8 -1
- data/lib/limelight/specs/spec_helper.rb +51 -2
- data/lib/limelight/specs/test_scene_opener.rb +1 -1
- data/lib/limelight/stage.rb +1 -1
- data/lib/limelight/templates/sources/scene_spec/scene_spec.rb.template +1 -1
- data/lib/limelight/theater.rb +15 -8
- data/lib/limelight/version.rb +1 -1
- data/spec/limelight/commands/open_command_spec.rb +1 -1
- data/spec/limelight/producer_spec.rb +19 -2
- data/spec/limelight/production_spec.rb +6 -1
- metadata +3 -4
- data/spec/limelight/styles_spec.rb +0 -53
data/lib/limelight.jar
CHANGED
Binary file
|
@@ -12,7 +12,7 @@ module Limelight
|
|
12
12
|
# Open a limelight production.
|
13
13
|
# options:
|
14
14
|
# -h, --help Prints this usage summary.
|
15
|
-
# -d, --drb_port=<port> Publish
|
15
|
+
# -d, --drb_port=<port> Publish productions using DRb starting with specified port.
|
16
16
|
#
|
17
17
|
class OpenCommand < Command
|
18
18
|
|
@@ -42,7 +42,7 @@ module Limelight
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def build_options(spec) #:nodoc:
|
45
|
-
spec.on("-d <port>", "--drb_port=<port>", "Publish
|
45
|
+
spec.on("-d <port>", "--drb_port=<port>", "Publish productions using DRb starting with specified port.") { |value| @drb_port = value }
|
46
46
|
end
|
47
47
|
|
48
48
|
def parse_remainder(args)
|
@@ -50,7 +50,7 @@ module Limelight
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def process
|
53
|
-
Context.instance.studio.
|
53
|
+
Context.instance.studio.publish_productions_on_drb(@drb_port.to_i) if @drb_port
|
54
54
|
Context.instance.studio.open(@production_path)
|
55
55
|
end
|
56
56
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
3
3
|
|
4
4
|
$LIMELIGHT_LIB = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
5
|
-
|
5
|
+
$:.unshift $LIMELIGHT_LIB unless $:.include?($LIMELIGHT_LIB)
|
6
6
|
$LIMELIGHT_HOME = File.expand_path(File.join($LIMELIGHT_LIB, ".."))
|
7
7
|
|
8
8
|
if Java::java.lang.System.getProperty("limelight.home").nil?
|
data/lib/limelight/producer.rb
CHANGED
@@ -13,11 +13,13 @@ require 'limelight/production'
|
|
13
13
|
require 'limelight/gems'
|
14
14
|
require 'limelight/util/downloader'
|
15
15
|
require 'limelight/version'
|
16
|
+
require 'drb'
|
16
17
|
|
17
18
|
module Limelight
|
18
19
|
|
19
20
|
# A Producer has the hefty responsibility of producing Productions. Given a directory, it will load the neccessary
|
20
|
-
# files and create all the neccessary objects to bring a Production to life.
|
21
|
+
# files and create all the neccessary objects to bring a Production to life. A producer will produce only
|
22
|
+
# one production.
|
21
23
|
#
|
22
24
|
# For directory structures, see Limelight::Main
|
23
25
|
#
|
@@ -47,7 +49,7 @@ module Limelight
|
|
47
49
|
end
|
48
50
|
end
|
49
51
|
|
50
|
-
attr_reader :theater, :production
|
52
|
+
attr_reader :theater, :production, :drb_service
|
51
53
|
attr_writer :builtin_styles
|
52
54
|
|
53
55
|
# A Production name, or root directory, must be provided. If not Theater is provided, one will be created.
|
@@ -174,16 +176,17 @@ module Limelight
|
|
174
176
|
# to keep the production aware of it's status. The Studio will also be informed of the closure. If no
|
175
177
|
# production remain opened, then the Limelight runtine will exit.
|
176
178
|
#
|
177
|
-
def close
|
178
|
-
return if production.closed?
|
179
|
-
production.closed = true
|
179
|
+
def close
|
180
|
+
return if @production.closed?
|
181
|
+
@production.closed = true
|
180
182
|
return Thread.new do
|
181
183
|
begin
|
182
184
|
Thread.pass
|
183
|
-
production.production_closing
|
184
|
-
production.theater.close
|
185
|
-
production.production_closed
|
186
|
-
|
185
|
+
@production.production_closing
|
186
|
+
@production.theater.close
|
187
|
+
@production.production_closed
|
188
|
+
@drb_service.stop_service if @drb_service
|
189
|
+
Context.instance.studio.production_closed(@production)
|
187
190
|
rescue StandardError => e
|
188
191
|
puts e
|
189
192
|
puts e.backtrace
|
@@ -191,6 +194,16 @@ module Limelight
|
|
191
194
|
end
|
192
195
|
end
|
193
196
|
|
197
|
+
# Publish the production, using DRb, on the specified port. This is useful for testing or remotely controling
|
198
|
+
# your production. Publilshing productions on DRb is typically accomplished by using the --drb_port option
|
199
|
+
# of the open command. eg.
|
200
|
+
#
|
201
|
+
# jruby -S limelight open --drb_port=9000 my_production
|
202
|
+
#
|
203
|
+
def publish_production_on_drb(port)
|
204
|
+
@drb_service = DRb.start_service("druby://localhost:#{port}", @production)
|
205
|
+
end
|
206
|
+
|
194
207
|
def establish_production #:nodoc:
|
195
208
|
@production.producer = self
|
196
209
|
@production.theater = @theater
|
data/lib/limelight/production.rb
CHANGED
@@ -150,7 +150,14 @@ module Limelight
|
|
150
150
|
# The production will actually delegate to it's producer and the producer will close the production down.
|
151
151
|
#
|
152
152
|
def close
|
153
|
-
@producer.close
|
153
|
+
@producer.close
|
154
|
+
end
|
155
|
+
|
156
|
+
# Publish this production using DRb on the specified port. The production will delegate to its producer to
|
157
|
+
# actually do the publishing.
|
158
|
+
#
|
159
|
+
def publish_on_drb(port)
|
160
|
+
@producer.publish_production_on_drb(port)
|
154
161
|
end
|
155
162
|
|
156
163
|
# Called when the last stage in this production's theater is closed. If the allow_close? returns true
|
@@ -9,12 +9,59 @@ require 'limelight/string'
|
|
9
9
|
require 'limelight/specs/test_scene_opener'
|
10
10
|
|
11
11
|
module Limelight
|
12
|
+
|
13
|
+
# Limelight comes with builtin assistance for testing your productions with rspec.
|
14
|
+
# See Limelight::Specs::SpecHelper
|
15
|
+
#
|
12
16
|
module Specs
|
13
17
|
|
14
18
|
class << self
|
15
19
|
attr_accessor :producer
|
16
20
|
end
|
17
|
-
|
21
|
+
|
22
|
+
# Limelight comes with builtin assistance for testing your productions with rspec. To get started, add the following
|
23
|
+
# to your describe block...
|
24
|
+
#
|
25
|
+
# uses_limelight :scene => "my_scene"
|
26
|
+
#
|
27
|
+
# This will add before(:each) blocks that will setup your production and load your scene before each test.
|
28
|
+
# It also provides some accessors to common objects like the scene and production. Afterwards, you can
|
29
|
+
# write tests that look like this.
|
30
|
+
#
|
31
|
+
# it "should do something with the scene" do
|
32
|
+
# scene.name.should == "my_scene"
|
33
|
+
# scene.find("title").text.should == "This is the Title"
|
34
|
+
# production.theater["default_stage"].current_scene.should be(scene)
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# There are several other options you can supply with 'uses_limelight':
|
38
|
+
#
|
39
|
+
# :hidden - (true or false) Defaults to true, but if you turn it off, the scene will pop open on your screen. This
|
40
|
+
# can be really nifty at times and really annoying at other time.
|
41
|
+
#
|
42
|
+
# :stage - The name of the stage you want the scene to be loaded on. The theater's default stage will be used by
|
43
|
+
# default.
|
44
|
+
#
|
45
|
+
# :scene_name - To be used instead of the :scene option. This will create an empty scene in your production with
|
46
|
+
# the specified name.
|
47
|
+
#
|
48
|
+
# :scene_path - To be used in conjunction with :scene_name. This will cause the empty scene to be loaded with
|
49
|
+
# the specified path. Styles and Players associated with the path will be applied to the created scene.
|
50
|
+
#
|
51
|
+
# The 'uses_limelight' methods also accepts block using the Limelight::DSL::PropBuilder DSL. This is convenient for building a
|
52
|
+
# simple prop structure sufficient to test the desired behavior. Here's an example:
|
53
|
+
#
|
54
|
+
# describe "my scene" do
|
55
|
+
# uses_limelight :scene_name => "some_name", :scene_path => "my_scene_path" do
|
56
|
+
# clicky :id => "clicky", :text => "click me", :on_mouse_clicked => "self.text = 'Hey! You clicked me!'"
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# it "should change text on clicky when clicked" do
|
60
|
+
# scene.find("clicky").mouse_clicked(nil)
|
61
|
+
# clicky.text.should == "Hey! You clicked me!"
|
62
|
+
# end
|
63
|
+
# end
|
64
|
+
#
|
18
65
|
module SpecHelper
|
19
66
|
def scene
|
20
67
|
if !@scene
|
@@ -26,10 +73,12 @@ module Limelight
|
|
26
73
|
end
|
27
74
|
end
|
28
75
|
|
29
|
-
module Spec
|
76
|
+
module Spec #:nodoc:
|
30
77
|
module Example
|
31
78
|
class ExampleGroup
|
32
79
|
|
80
|
+
# Deprecated
|
81
|
+
#
|
33
82
|
def self.uses_scene(scene_name, options = {})
|
34
83
|
uses_limelight({:scene => scene_name}.merge(options))
|
35
84
|
end
|
data/lib/limelight/stage.rb
CHANGED
@@ -310,7 +310,7 @@ module Limelight
|
|
310
310
|
# Invoked when the stage has lost status as the active stage. Only 1 stage my have focus at a time.
|
311
311
|
# System hook that should NOT be called by you.
|
312
312
|
#
|
313
|
-
def deactivated(e)
|
313
|
+
def deactivated(e)
|
314
314
|
@theater.stage_deactivated(self)
|
315
315
|
end
|
316
316
|
|
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
2
|
|
3
3
|
describe "!-SCENE_TITLE-!" do
|
4
4
|
|
5
|
-
|
5
|
+
uses_limelight :scene => "!-SCENE_NAME-!", :hidden => true
|
6
6
|
|
7
7
|
it "should have default text" do
|
8
8
|
scene.children.size.should == 1
|
data/lib/limelight/theater.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
3
3
|
|
4
4
|
require 'limelight/limelight_exception'
|
5
|
+
require 'thread'
|
5
6
|
|
6
7
|
module Limelight
|
7
8
|
|
@@ -18,12 +19,13 @@ module Limelight
|
|
18
19
|
def initialize(production)
|
19
20
|
@production = production
|
20
21
|
@stages = {}
|
22
|
+
@mutex = Mutex.new
|
21
23
|
end
|
22
24
|
|
23
25
|
# Returns an Array of Stages that belong to this Theater.
|
24
26
|
#
|
25
27
|
def stages
|
26
|
-
return @stages.values
|
28
|
+
return @mutex.synchronize { @stages.values }
|
27
29
|
end
|
28
30
|
|
29
31
|
# Returns true if the theater has at least one stage
|
@@ -35,7 +37,7 @@ module Limelight
|
|
35
37
|
# Returns the Stage with the spcified name, nil if none exist with the specified name.
|
36
38
|
#
|
37
39
|
def [](stage_name)
|
38
|
-
return @stages[stage_name]
|
40
|
+
return @mutex.synchronize { @stages[stage_name] }
|
39
41
|
end
|
40
42
|
|
41
43
|
# Adds a Stage to the Theater. Raises an exception is the name of the Stage is duplicated.
|
@@ -43,7 +45,7 @@ module Limelight
|
|
43
45
|
def add_stage(name, options = {})
|
44
46
|
raise LimelightException.new("Duplicate stage name: '#{name}'") if @stages[name]
|
45
47
|
stage = build_stage(name, options)
|
46
|
-
@stages[name] = stage
|
48
|
+
@mutex.synchronize { @stages[name] = stage }
|
47
49
|
return stage
|
48
50
|
end
|
49
51
|
|
@@ -65,9 +67,9 @@ module Limelight
|
|
65
67
|
# Removes the stage from this theater.
|
66
68
|
#
|
67
69
|
def stage_closed(stage)
|
68
|
-
@stages.delete(stage.name)
|
70
|
+
@mutex.synchronize { @stages.delete(stage.name) }
|
69
71
|
@active_stage = nil if @active_stage == stage
|
70
|
-
@production.theater_empty! if
|
72
|
+
@production.theater_empty! if !any_stages? || !any_visible_stages?
|
71
73
|
end
|
72
74
|
|
73
75
|
# If no Stages are added, the Theater will provide a default Stage named "Limelight".
|
@@ -80,8 +82,9 @@ module Limelight
|
|
80
82
|
# Close this theater. All stages in this theater will be closed and the active_stage will be nil'ed.
|
81
83
|
#
|
82
84
|
def close
|
83
|
-
@
|
84
|
-
|
85
|
+
stages_to_close = @mutex.synchronize { @stages.values.dup }
|
86
|
+
stages_to_close.each { |stage| stage.close }
|
87
|
+
@mutex.synchronize { @stages.clear }
|
85
88
|
@active_stage = nil
|
86
89
|
end
|
87
90
|
|
@@ -93,8 +96,12 @@ module Limelight
|
|
93
96
|
|
94
97
|
private ###############################################
|
95
98
|
|
99
|
+
def any_stages?
|
100
|
+
return @mutex.synchronize { @stages.empty? }
|
101
|
+
end
|
102
|
+
|
96
103
|
def any_visible_stages?
|
97
|
-
return @stages.values.any? { |s| s.visible? }
|
104
|
+
return @mutex.synchronize { @stages.values.any? { |s| s.visible? } }
|
98
105
|
end
|
99
106
|
|
100
107
|
end
|
data/lib/limelight/version.rb
CHANGED
@@ -44,7 +44,7 @@ describe Limelight::Commands::OpenCommand do
|
|
44
44
|
|
45
45
|
it "should start the studio on drb" do
|
46
46
|
Limelight::Main.should_receive(:initialize_context)
|
47
|
-
@studio.should_receive(:
|
47
|
+
@studio.should_receive(:publish_productions_on_drb).with(1234)
|
48
48
|
@studio.should_receive(:open).with("some_prod")
|
49
49
|
|
50
50
|
@command.run ["-d", "1234", "some_prod"]
|
@@ -215,15 +215,32 @@ describe Limelight::Producer do
|
|
215
215
|
|
216
216
|
it "should close a production" do
|
217
217
|
theater = mock("theater")
|
218
|
-
production =
|
218
|
+
production = @producer.production
|
219
|
+
production.theater = theater
|
219
220
|
production.should_receive(:closed=).with(true)
|
220
221
|
production.should_receive(:production_closing)
|
221
222
|
theater.should_receive(:close)
|
222
223
|
production.should_receive(:production_closed)
|
223
224
|
Limelight::Context.instance.studio.should_receive(:production_closed).with(production)
|
224
225
|
|
225
|
-
close_thread = @producer.close
|
226
|
+
close_thread = @producer.close
|
226
227
|
close_thread.join()
|
227
228
|
end
|
229
|
+
|
230
|
+
it "should publish a production on drb" do
|
231
|
+
service = mock("service")
|
232
|
+
DRb.should_receive(:start_service).with("druby://localhost:9000", @producer.production).and_return(service)
|
233
|
+
|
234
|
+
@producer.publish_production_on_drb(9000)
|
235
|
+
end
|
236
|
+
|
237
|
+
it "should stop the drb service when closing the production" do
|
238
|
+
service = mock("service")
|
239
|
+
DRb.stub!(:start_service).with("druby://localhost:9000", @producer.production).and_return(service)
|
240
|
+
@producer.publish_production_on_drb(9000)
|
241
|
+
|
242
|
+
service.should_receive(:stop_service)
|
243
|
+
@producer.close.join
|
244
|
+
end
|
228
245
|
|
229
246
|
end
|
@@ -58,11 +58,16 @@ describe Limelight::Production, "Instance methods" do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should tell producer to do the closing" do
|
61
|
-
@producer.should_receive(:close)
|
61
|
+
@producer.should_receive(:close)
|
62
62
|
|
63
63
|
@production.close
|
64
64
|
end
|
65
65
|
|
66
|
+
it "should publish on drb" do
|
67
|
+
@producer.should_receive(:publish_production_on_drb).with(9000)
|
68
|
+
@production.publish_on_drb(9000)
|
69
|
+
end
|
70
|
+
|
66
71
|
it "should handle empty theater" do
|
67
72
|
@production.should_receive(:allow_close?).at_least(1).and_return(true)
|
68
73
|
@production.should_receive(:close)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: limelight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Micah Martin, 8th Light
|
@@ -9,7 +9,7 @@ autorequire: init
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-01 01:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -159,7 +159,6 @@ files:
|
|
159
159
|
- spec/limelight/scene_spec.rb
|
160
160
|
- spec/limelight/stage_spec.rb
|
161
161
|
- spec/limelight/string_spec.rb
|
162
|
-
- spec/limelight/styles_spec.rb
|
163
162
|
- spec/limelight/templates/production_templater_spec.rb
|
164
163
|
- spec/limelight/templates/scene_templater_spec.rb
|
165
164
|
- spec/limelight/templates/templater_logger_spec.rb
|
@@ -414,6 +413,6 @@ rubyforge_project: limelight
|
|
414
413
|
rubygems_version: 1.3.1
|
415
414
|
signing_key:
|
416
415
|
specification_version: 2
|
417
|
-
summary: Limelight-0.5.
|
416
|
+
summary: Limelight-0.5.4 - Limelight http://limelight.8thlight.com
|
418
417
|
test_files: []
|
419
418
|
|
@@ -1,53 +0,0 @@
|
|
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 File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
5
|
-
require 'limelight/styles'
|
6
|
-
|
7
|
-
describe Limelight::Styles do
|
8
|
-
|
9
|
-
def const_format(name)
|
10
|
-
return name.gsub(" ", "")
|
11
|
-
end
|
12
|
-
|
13
|
-
def method_format(name)
|
14
|
-
return name.downcase.gsub(" ", "_")
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should have all the styles" do
|
18
|
-
Limelight::Styles::Style::STYLE_LIST.each do |descriptor|
|
19
|
-
const_name = const_format(descriptor.name)
|
20
|
-
Limelight::Styles.const_get(const_name)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# it "should generate code" do
|
25
|
-
# Limelight::Styles::Style::STYLE_LIST.each do |descriptor|
|
26
|
-
# const_name = const_format(descriptor.name)
|
27
|
-
# method_name = method_format(descriptor.name)
|
28
|
-
# spaces = 40 - const_name.length
|
29
|
-
# puts "# Specifies the #{descriptor.name} of a prop."
|
30
|
-
# puts "#"
|
31
|
-
# puts "# style.#{method_name} = <value>"
|
32
|
-
# puts "#"
|
33
|
-
# puts "#{const_name} #{'' * spaces} = Limelight::Styles::Style::STYLE_LIST.get(#{descriptor.index})"
|
34
|
-
# puts ""
|
35
|
-
# end
|
36
|
-
# end
|
37
|
-
|
38
|
-
# it "should generate code" do
|
39
|
-
# Limelight::Styles::Style::STYLE_LIST.each do |descriptor|
|
40
|
-
# const_name = const_format(descriptor.name)
|
41
|
-
# method_name = method_format(descriptor.name)
|
42
|
-
# spaces = 40 - const_name.length
|
43
|
-
# puts "<tr>"
|
44
|
-
# puts "\t<td>'''#{method_name}'''</td>"
|
45
|
-
# puts "\t<td></td>"
|
46
|
-
# puts "\t<td>#{descriptor.defaultValue}</td>"
|
47
|
-
# puts "\t<td></td>"
|
48
|
-
# puts "</tr>"
|
49
|
-
# end
|
50
|
-
# end
|
51
|
-
|
52
|
-
|
53
|
-
end
|