derailed-ziya 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +0 -0
- data/Manifest.txt +405 -0
- data/README.txt +232 -0
- data/Rakefile +44 -0
- data/bin/ziyafy +53 -0
- data/charts/AC_RunActiveContent.js +292 -0
- data/charts/charts.swf +0 -0
- data/charts/charts_library/ar3d.swf +0 -0
- data/charts/charts_library/arno.swf +0 -0
- data/charts/charts_library/ars3.swf +0 -0
- data/charts/charts_library/arst.swf +0 -0
- data/charts/charts_library/brfl.swf +0 -0
- data/charts/charts_library/brno.swf +0 -0
- data/charts/charts_library/brst.swf +0 -0
- data/charts/charts_library/buno.swf +0 -0
- data/charts/charts_library/cl3d.swf +0 -0
- data/charts/charts_library/clfl.swf +0 -0
- data/charts/charts_library/clno.swf +0 -0
- data/charts/charts_library/clp3.swf +0 -0
- data/charts/charts_library/cls3.swf +0 -0
- data/charts/charts_library/clst.swf +0 -0
- data/charts/charts_library/cnno.swf +0 -0
- data/charts/charts_library/dono.swf +0 -0
- data/charts/charts_library/lnno.swf +0 -0
- data/charts/charts_library/mxno.swf +0 -0
- data/charts/charts_library/pi3d.swf +0 -0
- data/charts/charts_library/pino.swf +0 -0
- data/charts/charts_library/pono.swf +0 -0
- data/charts/charts_library/scno.swf +0 -0
- data/charts/full_screen.swf +0 -0
- data/charts/scripts/output_jpg.php +23 -0
- data/charts/sliders/black.swf +0 -0
- data/charts/sliders/preview_handle_1.swf +0 -0
- data/charts/sliders/preview_handle_2.swf +0 -0
- data/gauges/designs/circle.yml +18 -0
- data/gauges/designs/signal.yml +14 -0
- data/gauges/designs/thermo.yml +119 -0
- data/gauges/designs/title.yml +11 -0
- data/gauges/gauge.swf +0 -0
- data/lib/ziya/charts/area.rb +18 -0
- data/lib/ziya/charts/area_threed.rb +16 -0
- data/lib/ziya/charts/bar.rb +16 -0
- data/lib/ziya/charts/base.rb +510 -0
- data/lib/ziya/charts/bubble.rb +18 -0
- data/lib/ziya/charts/candle_stick.rb +16 -0
- data/lib/ziya/charts/column.rb +16 -0
- data/lib/ziya/charts/column_threed.rb +16 -0
- data/lib/ziya/charts/donut.rb +18 -0
- data/lib/ziya/charts/floating_bar.rb +16 -0
- data/lib/ziya/charts/floating_column.rb +16 -0
- data/lib/ziya/charts/line.rb +16 -0
- data/lib/ziya/charts/mixed.rb +16 -0
- data/lib/ziya/charts/parallel_threed_column.rb +16 -0
- data/lib/ziya/charts/pie.rb +16 -0
- data/lib/ziya/charts/pie_threed.rb +16 -0
- data/lib/ziya/charts/polar.rb +16 -0
- data/lib/ziya/charts/scatter.rb +16 -0
- data/lib/ziya/charts/stacked_area.rb +16 -0
- data/lib/ziya/charts/stacked_bar.rb +16 -0
- data/lib/ziya/charts/stacked_column.rb +16 -0
- data/lib/ziya/charts/stacked_threed_area.rb +16 -0
- data/lib/ziya/charts/stacked_threed_column.rb +16 -0
- data/lib/ziya/components/area.rb +17 -0
- data/lib/ziya/components/axis_category.rb +17 -0
- data/lib/ziya/components/axis_ticks.rb +35 -0
- data/lib/ziya/components/axis_value.rb +16 -0
- data/lib/ziya/components/base.rb +142 -0
- data/lib/ziya/components/bevel.rb +15 -0
- data/lib/ziya/components/blur.rb +13 -0
- data/lib/ziya/components/chart_border.rb +14 -0
- data/lib/ziya/components/chart_grid_h.rb +26 -0
- data/lib/ziya/components/chart_grid_v.rb +27 -0
- data/lib/ziya/components/chart_guide.rb +16 -0
- data/lib/ziya/components/chart_label.rb +16 -0
- data/lib/ziya/components/chart_pref.rb +22 -0
- data/lib/ziya/components/chart_rect.rb +37 -0
- data/lib/ziya/components/chart_transition.rb +25 -0
- data/lib/ziya/components/circle.rb +16 -0
- data/lib/ziya/components/context_menu.rb +15 -0
- data/lib/ziya/components/draw.rb +47 -0
- data/lib/ziya/components/draw_base.rb +10 -0
- data/lib/ziya/components/filter.rb +26 -0
- data/lib/ziya/components/glow.rb +14 -0
- data/lib/ziya/components/image.rb +17 -0
- data/lib/ziya/components/legend.rb +18 -0
- data/lib/ziya/components/line.rb +16 -0
- data/lib/ziya/components/link.rb +29 -0
- data/lib/ziya/components/link_data.rb +18 -0
- data/lib/ziya/components/rect.rb +18 -0
- data/lib/ziya/components/scroll.rb +26 -0
- data/lib/ziya/components/series.rb +16 -0
- data/lib/ziya/components/series_color.rb +35 -0
- data/lib/ziya/components/series_explode.rb +38 -0
- data/lib/ziya/components/shadow.rb +14 -0
- data/lib/ziya/components/text.rb +17 -0
- data/lib/ziya/components/update.rb +19 -0
- data/lib/ziya/gauges/base.rb +172 -0
- data/lib/ziya/gauges/radial.rb +18 -0
- data/lib/ziya/gauges/signal.rb +138 -0
- data/lib/ziya/gauges/support/area.rb +13 -0
- data/lib/ziya/gauges/support/base.rb +33 -0
- data/lib/ziya/gauges/support/circle.rb +14 -0
- data/lib/ziya/gauges/support/design.rb +5 -0
- data/lib/ziya/gauges/support/image.rb +12 -0
- data/lib/ziya/gauges/support/line.rb +12 -0
- data/lib/ziya/gauges/support/link.rb +24 -0
- data/lib/ziya/gauges/support/move.rb +15 -0
- data/lib/ziya/gauges/support/point.rb +12 -0
- data/lib/ziya/gauges/support/polygon.rb +13 -0
- data/lib/ziya/gauges/support/radial_base.rb +21 -0
- data/lib/ziya/gauges/support/radial_numbers.rb +41 -0
- data/lib/ziya/gauges/support/radial_ticks.rb +29 -0
- data/lib/ziya/gauges/support/rect.rb +14 -0
- data/lib/ziya/gauges/support/rotate.rb +15 -0
- data/lib/ziya/gauges/support/scale.rb +15 -0
- data/lib/ziya/gauges/support/text.rb +21 -0
- data/lib/ziya/gauges/support/update.rb +12 -0
- data/lib/ziya/gauges/thermo.rb +121 -0
- data/lib/ziya/helpers/base_helper.rb +70 -0
- data/lib/ziya/utils/logger.rb +125 -0
- data/lib/ziya/utils/text.rb +39 -0
- data/lib/ziya/version.rb +15 -0
- data/lib/ziya/ziya_helper.rb +374 -0
- data/lib/ziya.rb +112 -0
- data/spec/charts/base_spec.rb +134 -0
- data/spec/charts/chart_type_spec.rb +63 -0
- data/spec/components/area_spec.rb +67 -0
- data/spec/components/draw_spec.rb +32 -0
- data/spec/components/filter_spec.rb +27 -0
- data/spec/components/link_spec.rb +22 -0
- data/spec/components/series.rb +18 -0
- data/spec/components/series_color_spec.rb +39 -0
- data/spec/components/series_explode.rb +39 -0
- data/spec/components/series_explode_spec.rb +39 -0
- data/spec/designs/circle.yml +7 -0
- data/spec/designs/crapping_out.yml +8 -0
- data/spec/designs/gauge_1.yml +43 -0
- data/spec/designs/gauge_2.yml +11 -0
- data/spec/designs/gauge_no_name.yml +43 -0
- data/spec/designs/gauge_raw.yml +5 -0
- data/spec/designs/thermo.yml +13 -0
- data/spec/gauges/base_spec.rb +90 -0
- data/spec/gauges/signal_spec.rb +36 -0
- data/spec/gauges/support/area_spec.rb +40 -0
- data/spec/gauges/support/circle_spec.rb +78 -0
- data/spec/gauges/support/image_spec.rb +35 -0
- data/spec/gauges/support/line_spec.rb +34 -0
- data/spec/gauges/support/link_spec.rb +35 -0
- data/spec/gauges/support/move_spec.rb +45 -0
- data/spec/gauges/support/polygon_spec.rb +36 -0
- data/spec/gauges/support/radial_numbers_spec.rb +35 -0
- data/spec/gauges/support/radial_ticks_spec.rb +30 -0
- data/spec/gauges/support/rotate_spec.rb +45 -0
- data/spec/gauges/support/scale_spec.rb +46 -0
- data/spec/gauges/support/text_spec.rb +40 -0
- data/spec/gauges/thermo_spec.rb +49 -0
- data/spec/helpers/base_helper_spec.rb +36 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/test_helpers/gauge_2_helper.rb +17 -0
- data/spec/themes/default/fred.yml +6 -0
- data/spec/themes/default/line_chart.yml +6 -0
- data/spec/utils/logger_spec.rb +55 -0
- data/spec/utils/text_spec.rb +33 -0
- data/spec/ziya_helper_spec.rb +117 -0
- data/spec/ziya_spec.rb +19 -0
- data/tasks/ann.rake +76 -0
- data/tasks/annotations.rake +22 -0
- data/tasks/doc.rake +48 -0
- data/tasks/gem.rake +110 -0
- data/tasks/manifest.rake +49 -0
- data/tasks/post_load.rake +26 -0
- data/tasks/rubyforge.rake +57 -0
- data/tasks/setup.rb +227 -0
- data/tasks/spec.rake +61 -0
- data/tasks/svn.rake +44 -0
- data/tasks/test.rake +38 -0
- metadata +468 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. spec_helper]))
|
2
|
+
|
3
|
+
describe Ziya::Gauges::Thermo do
|
4
|
+
describe "#initialize" do
|
5
|
+
before( :each ) do
|
6
|
+
@gauge = Ziya::Gauges::Thermo.new( "test_license", "override" )
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should create a gauge with the correct license" do
|
10
|
+
@gauge.license.should == "test_license"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should create a gauge with the correct id" do
|
14
|
+
@gauge.design_id.should == "override"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#to_xml" do
|
19
|
+
it "should produce the correct xml for the std gauge" do
|
20
|
+
buff = Ziya::Gauges::Thermo.new( "test_license" ).to_xml
|
21
|
+
buff.scan( /<license/ ).size.should == 1
|
22
|
+
buff.scan( /<circle/ ).size.should == 6
|
23
|
+
buff.scan( /<line/ ).size.should == 13
|
24
|
+
buff.scan( /<rect/ ).size.should == 4
|
25
|
+
buff.scan( /x1=\"(.*?\d+)\"/ ).should == [["30"], ["30"], ["30"], ["30"], ["30"], ["30"], ["30"], ["80"], ["80"], ["80"], ["80"], ["80"], ["80"]]
|
26
|
+
buff.scan( /y1=\"(.*?\d+)\"/ ).should == [["155.0"], ["138.0"], ["121.0"], ["104.0"], ["87.0"], ["70.0"], ["53.0"], ["153"], ["133"], ["113"], ["93"], ["73"], ["53"]]
|
27
|
+
buff.scan( /x2=\"(.*?\d+)\"/ ).should == [["38"], ["38"], ["38"], ["38"], ["38"], ["38"], ["38"], ["88"], ["88"], ["88"], ["88"], ["88"], ["88"]]
|
28
|
+
buff.scan( /y2=\"(.*?\d+)\"/ ).should == [["155.0"], ["138.0"], ["121.0"], ["104.0"], ["87.0"], ["70.0"], ["53.0"], ["153"], ["133"], ["113"], ["93"], ["73"], ["53"]]
|
29
|
+
buff.scan( /x=\"(.*?\d+)\"/ ).should == [["-130"], ["40"], ["60"], ["60"], ["60"], ["55"], ["20"], ["20"], ["85"], ["60"], ["44"], ["44"], ["10"], ["10"], ["10"], ["10"], ["10"], ["10"], ["10"], ["88"], ["88"], ["88"], ["88"], ["88"], ["88"], ["999"]]
|
30
|
+
# buff.scan( /y=\"(.*?\d+)\"/ ).should == [["290"], ["40"], ["210"], ["210"], ["210"], ["210"], ["20"], ["25"], ["25"], ["10"], ["153"], ["52"], ["152"], ["147.0"], ["130.0"], ["113.0"], ["96.0"], ["79.0"], ["62.0"], ["45.0"], ["145"], ["125"], ["105"], ["85"], ["65"], ["45"], ["999"]]
|
31
|
+
end
|
32
|
+
|
33
|
+
it "user can override due point" do
|
34
|
+
gauge = Ziya::Gauges::Thermo.new( "test_license" )
|
35
|
+
gauge.set_preferences( :due_point => 100 )
|
36
|
+
buff = gauge.to_xml
|
37
|
+
buff.scan( /end_scale=\"(.*?\d+)\"/ ).should == [["80"]]
|
38
|
+
end
|
39
|
+
|
40
|
+
it "user can override thermo color" do
|
41
|
+
gauge = Ziya::Gauges::Thermo.new( "test_license" )
|
42
|
+
gauge.set_preferences( :gauge_color => "00FF00" )
|
43
|
+
buff = gauge.to_xml
|
44
|
+
buff.scan( /end_scale=\"(.*?\d+)\"/ ).should == [["20"]]
|
45
|
+
buff.scan( /color=\"(\w+)\"/ ).uniq.should == [["ffffff"], ["00FF00"], ["ffff00"], ["cccccc"], ["aaaaaa"], ["880000"]]
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. spec_helper]))
|
2
|
+
|
3
|
+
describe Ziya::Helpers::BaseHelper do
|
4
|
+
|
5
|
+
it "should generate the correct chart path" do
|
6
|
+
chart_url( "http://test.me.com/blee" ).should ==
|
7
|
+
"/charts/charts.swf?library_path=/charts/charts_library&xml_source=http%3A%2F%2Ftest.me.com%2Fblee"
|
8
|
+
chart_url( "http://test.me.com/blee", "/blees" ).should ==
|
9
|
+
"/blees/charts.swf?library_path=/blees/charts_library&xml_source=http%3A%2F%2Ftest.me.com%2Fblee"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should generate the correct yaml class name" do
|
13
|
+
component( "fred" ).should == "fred: !ruby/object:Ziya::Components::Fred"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should generate the correct yaml clqss name for alias" do
|
17
|
+
comp( "fred" ).should == "fred: !ruby/object:Ziya::Components::Fred"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should generate the correct yaml drawing class name" do
|
21
|
+
drawing( "fred" ).should == "!ruby/object:Ziya::Components::Fred"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should generate the correct yaml chart class name" do
|
25
|
+
chart( "fred" ).should == "--- !ruby/object:Ziya::Charts::Fred"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should generate the correct yaml for a gauge" do
|
29
|
+
gauge( "fred" ).should == "--- !ruby/object:Ziya::Gauges::Fred\ncomponents: !omap"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should generate the correct yaml for a dial" do
|
33
|
+
dial( :circle, :blee ).should == "- :blee: !ruby/object:Ziya::Gauges::Support::Circle"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'builder'
|
3
|
+
require 'spec'
|
4
|
+
require File.join( File.dirname(__FILE__), %w[.. lib ziya] )
|
5
|
+
|
6
|
+
# Init ZiYa...
|
7
|
+
Ziya.initialize( :log_level => :debug,
|
8
|
+
:themes_dir => File.join( File.dirname(__FILE__), %w[themes] ),
|
9
|
+
:designs_dir => File.join( File.dirname(__FILE__), %w[designs] ),
|
10
|
+
:helpers_dir => File.join( File.dirname(__FILE__), %w[test_helpers] ) )
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Ziya::Gauge2Helper
|
2
|
+
def colorize
|
3
|
+
"ff00ff"
|
4
|
+
end
|
5
|
+
|
6
|
+
# creates a red circle start at coords x,y radius r
|
7
|
+
def make_circle( x, y, radius )
|
8
|
+
circle = Ziya::Gauges::Support::Circle.new(
|
9
|
+
:x => x,
|
10
|
+
:y => y,
|
11
|
+
:radius => radius,
|
12
|
+
:start => 0,
|
13
|
+
:end => 360,
|
14
|
+
:fill_color => "ff0000" )
|
15
|
+
circle.to_comp_yaml( :circle_2, 2 )
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. spec_helper]))
|
2
|
+
require 'stringio'
|
3
|
+
require "ziya/utils/logger"
|
4
|
+
|
5
|
+
describe Ziya::Logger do
|
6
|
+
it "raises an error if the email addresses passed in is empty" do
|
7
|
+
lambda { Ziya::Logger.new( { :email_alerts_to => [] } ) }.should raise_error( Ziya::Logger::ConfigurationError )
|
8
|
+
end
|
9
|
+
|
10
|
+
it "configures an email appender if :email_alerts is set" do
|
11
|
+
l = Ziya::Logger.new( { :logger_name => "Test2", :email_alerts_to => "fernand@invalid.address", :email_alert_level => :off })
|
12
|
+
l.email_appender.should_not == nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it "does not configure an email appender if :email_alerts is not set" do
|
16
|
+
l = Ziya::Logger.new( { :logger_name => "Test3" })
|
17
|
+
lambda { l.email_appender }.should raise_error( Ziya::Logger::ConfigurationError )
|
18
|
+
end
|
19
|
+
|
20
|
+
it "raises an error if an invalid object is passed in for the :log_file" do
|
21
|
+
lambda { l = Ziya::Logger.new( { :log_file => Object.new } ) }.should raise_error( Ziya::Logger::ConfigurationError )
|
22
|
+
end
|
23
|
+
|
24
|
+
it "logs to an IO stream if given" do
|
25
|
+
io = StringIO.new
|
26
|
+
l = Ziya::Logger.new( { :log_file => io, :logger_name => "Test4" })
|
27
|
+
l.info "This is a test io message"
|
28
|
+
io.string.split("\n").should have(1).item
|
29
|
+
io.string.should =~ /This is a test io message/
|
30
|
+
io.string.should =~ /INFO/
|
31
|
+
end
|
32
|
+
|
33
|
+
it "logs to a file if given a file name to log to" do
|
34
|
+
log_file = "/tmp/Ziya_logger_test.log"
|
35
|
+
FileUtils.rm( log_file ) if File.exists?( log_file )
|
36
|
+
l = Ziya::Logger.new({ :log_file => log_file, :logger_name => "Test5" })
|
37
|
+
l.info "This is a test log file message"
|
38
|
+
|
39
|
+
log_lines = IO.readlines(log_file)
|
40
|
+
|
41
|
+
log_lines.should have(1).items
|
42
|
+
log_lines.first.should =~ /This is a test log file message/
|
43
|
+
log_lines.first.should =~ /INFO/
|
44
|
+
end
|
45
|
+
|
46
|
+
it "creates a logger from another logger" do
|
47
|
+
io = StringIO.new
|
48
|
+
l = Ziya::Logger.new( { :log_file => io, :logger_name => ::Ziya})
|
49
|
+
child_l = l.for(Ziya)
|
50
|
+
|
51
|
+
child_l.info "This is a child log message"
|
52
|
+
io.string.should =~ /This is a child log message/
|
53
|
+
io.string.should =~ /INFO/
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. spec_helper]))
|
2
|
+
|
3
|
+
describe Ziya::Utils::Text do
|
4
|
+
describe "camelize" do
|
5
|
+
it "should camelize a plain string correctly" do
|
6
|
+
camelize( "fred" ).should == "Fred"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "shoud camelize a class name correctly" do
|
10
|
+
camelize( "hello_world" ).should == "HelloWorld"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should camelize a namespace class file correctly" do
|
14
|
+
camelize( "/blee/fred/hello_world" ).should == "::Blee::Fred::HelloWorld"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "underscore" do
|
19
|
+
it "should underscore a plain string" do
|
20
|
+
underscore( "fred" ).should == "fred"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should underscore a camel cased string" do
|
24
|
+
underscore( "HelloWorld" ).should == "hello_world"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "classify" do
|
29
|
+
it "should classify an attribute correctly" do
|
30
|
+
classify( "fred.blee_duh" ).should == "BleeDuh"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[spec_helper]))
|
2
|
+
|
3
|
+
describe Ziya::Helper do
|
4
|
+
before( :all ) do
|
5
|
+
@url = "/fred/blee/duh"
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "ziya_gauge" do
|
9
|
+
it "should generate the correct html with the default options" do
|
10
|
+
ziya_gauge( @url ).should == " <object codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,45,0\" classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" id=\"ziya_gauge\" height=\"200\" width=\"200\">\n <param name=\"scale\" value=\"noscale\">\n <param name=\"align\" value=\"middle\"> \n <param name=\"bgcolor\" value=\"#FFFFFF\">\n <param name=\"wmode\" value=\"transparent\"> \n <param name=\"movie\" value=\"/gauges/gauge.swf?xml_source=/fred/blee/duh\">\n <param name=\"menu\" value=\"true\">\n <param name=\"allowFullScreen\" value=\"true\">\n <param name=\"allowScriptAccess\" value=\"sameDomain\"> \n <param name=\"quality\" value=\"high\">\n <param name=\"play\" value=\"true\"> \n <param name=\"devicefont\" value=\"false\">\n <embed scale=\"noscale\"\n allowfullscreen=\"true\" \n allowscriptaccess=\"sameDomain\" \n bgcolor=\"#FFFFFF\" \n devicefont=\"false\" \n src=\"/gauges/gauge.swf?xml_source=/fred/blee/duh\" \n menu=\"true\" \n name=\"ziya_gauge\" \n play=\"true\" \n pluginspage=\"http://www.macromedia.com/go/getflashplayer\" \n quality=\"high\" \n salign=\"\" \n src=\"/gauges/gauge.swf?xml_source=/fred/blee/duh\" \n type=\"application/x-shockwave-flash\" \n wmode=\"transparent\" \n salign=\"\" \n height=\"200\" \n width=\"200\">\n </object> \n"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should set the wmode to opaque if bg_color is set" do
|
14
|
+
html = ziya_gauge( @url, :bgcolor => "ffffff" )
|
15
|
+
html.index (/name=\"wmode\" value=\"opaque\"/).should_not be_nil
|
16
|
+
html.index (/wmode=\"opaque\"/).should_not be_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should handle the size has widthxheight" do
|
20
|
+
html = ziya_gauge( @url, :size => "100x200" )
|
21
|
+
html.index (/width=\"100\"/).should_not be_nil
|
22
|
+
html.index (/height=\"200\"/).should_not be_nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "ziya_chart" do
|
27
|
+
it "should generate the correct embed tag with the default options" do
|
28
|
+
ziya_chart( @url, :tag_type => "embed" ).should == " <object codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,45,0\" classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" id=\"ziya_chart\" height=\"300\" width=\"400\">\n <param name=\"scale\" value=\"noscale\">\n <param name=\"salign\" value=\"tl\"> \n <param name=\"bgcolor\" value=\"#FFFFFF\">\n <param name=\"wmode\" value=\"transparent\"> \n <param name=\"movie\" value=\"/charts/charts.swf\"> \n <param name=\"FlashVars\" value=\"library_path=/charts/charts_library&xml_source=%2Ffred%2Fblee%2Fduh&chart_id=ziya_chart\">\n <param name=\"menu\" value=\"true\">\n <param name=\"allowFullScreen\" value=\"true\">\n <param name=\"allowScriptAccess\" value=\"sameDomain\"> \n <param name=\"quality\" value=\"high\">\n <param name=\"play\" value=\"true\"> \n <param name=\"devicefont\" value=\"false\">\n <embed scale=\"noscale\" \n allowfullscreen=\"true\" \n allowscriptaccess=\"sameDomain\" \n bgcolor=\"#FFFFFF\" \n devicefont=\"false\" \n flashvars=\"library_path=/charts/charts_library&xml_source=%2Ffred%2Fblee%2Fduh\" \n menu=\"true\" \n name=\"ziya_chart\" \n play=\"true\" \n pluginspage=\"http://www.macromedia.com/go/getflashplayer\" \n quality=\"high\" \n salign=\"tl\" \n src=\"/charts/charts.swf\" \n type=\"application/x-shockwave-flash\" \n wmode=\"transparent\" \n align=\"l\" \n height=\"300\" \n width=\"400\"/> \n </object> \n"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should generate the correct object tag with the default options" do
|
32
|
+
ziya_chart( @url, :tag_type => "object" ).should == " <object codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,45,0\" classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" id=\"ziya_chart\" height=\"300\" width=\"400\">\n <param name=\"scale\" value=\"noscale\">\n <param name=\"salign\" value=\"tl\"> \n <param name=\"bgcolor\" value=\"#FFFFFF\">\n <param name=\"wmode\" value=\"transparent\"> \n <param name=\"movie\" value=\"/charts/charts.swf\"> \n <param name=\"FlashVars\" value=\"library_path=/charts/charts_library&xml_source=%2Ffred%2Fblee%2Fduh&chart_id=ziya_chart\">\n <param name=\"menu\" value=\"true\">\n <param name=\"allowFullScreen\" value=\"true\">\n <param name=\"allowScriptAccess\" value=\"sameDomain\"> \n <param name=\"quality\" value=\"high\">\n <param name=\"play\" value=\"true\"> \n <param name=\"devicefont\" value=\"false\">\n <embed scale=\"noscale\" \n allowfullscreen=\"true\" \n allowscriptaccess=\"sameDomain\" \n bgcolor=\"#FFFFFF\" \n devicefont=\"false\" \n flashvars=\"library_path=/charts/charts_library&xml_source=%2Ffred%2Fblee%2Fduh\" \n menu=\"true\" \n name=\"ziya_chart\" \n play=\"true\" \n pluginspage=\"http://www.macromedia.com/go/getflashplayer\" \n quality=\"high\" \n salign=\"tl\" \n src=\"/charts/charts.swf\" \n type=\"application/x-shockwave-flash\" \n wmode=\"transparent\" \n align=\"l\" \n height=\"300\" \n width=\"400\"/> \n </object> \n"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should generate the correct js tag" do
|
36
|
+
ziya_javascript_include_tag.should == " <script language=\"javascript\" type=\"text/javascript\">\n AC_FL_RunContent = 0;\n DetectFlashVer = 0;\n </script>\n <script src=\"/charts/AC_RunActiveContent.js\" language=\"javascript\"></script>\n <script language=\"javascript\" type=\"text/javascript\">\n var requiredMajorVersion = 9;\n var requiredMinorVersion = 0;\n var requiredRevision = 45;\n </script>\n"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should generate the correct js based chart tag" do
|
40
|
+
ziya_chart_js( @url ).should == " <script language=\"javascript\" type=\"text/javascript\">\n if (AC_FL_RunContent == 0 || DetectFlashVer == 0) {\n alert( \"This page requires AC_RunActiveContent.js.\" );\n } \n else {\n var hasRightVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);\n if( hasRightVersion ) { \n AC_FL_RunContent(\n 'codebase' , 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,45,0',\n 'width' , '400',\n 'height' , '300',\n 'scale' , 'noscale',\n 'salign' , 'tl',\n 'bgcolor' , '000000',\n 'wmode' , 'opaque',\n 'movie' , '/charts/charts',\n 'src' , '/charts/charts',\n 'FlashVars' , 'library_path=/charts/charts_library&xml_source=%2Ffred%2Fblee%2Fduh', \n 'id' , 'ziya_chart',\n 'name' , 'ziya_chart',\n 'menu' , 'true',\n 'allowFullScreen' , 'true',\n 'allowScriptAccess','sameDomain',\n 'quality' , 'high',\n 'align' , 'l',\n 'pluginspage' , 'http://www.macromedia.com/go/getflashplayer',\n 'play' , 'true',\n 'devicefont' , 'false'\n ); \n } \n else { \n var alternateContent = 'This content requires the Adobe Flash Player. '\n + '<u><a href=http://www.macromedia.com/go/getflash/>Get Flash</a></u>.';\n document.write(alternateContent); \n }\n }\n </script>\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should set the wmode to opaque if bg_color is set" do
|
44
|
+
html = ziya_chart( @url, :bgcolor => "ffffff" )
|
45
|
+
# html.index (/name=\"wmode\" value=\"opaque\"/).should_not be_nil
|
46
|
+
# html.index (/'wmode'\s+,\s'opaque'/).should_not be_nil
|
47
|
+
html.index( /wmode=\"opaque\"/ ).should_not be_nil
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should handle the size has widthxheight" do
|
51
|
+
html = ziya_chart( @url, :size => "100x200" )
|
52
|
+
html.index( /width=\"100\"/ ).should_not be_nil
|
53
|
+
html.index( /height=\"200\"/ ).should_not be_nil
|
54
|
+
# html.index (/'width'\s+,\s'100'/).should_not be_nil
|
55
|
+
# html.index (/'height'\s+,\s'200'/).should_not be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "escape_url" do
|
60
|
+
it "should escape a plain url correctly" do
|
61
|
+
escape_url( "/fred/blee/duh" ).should == "%2Ffred%2Fblee%2Fduh"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should escape a url with args correctly" do
|
65
|
+
escape_url( "/fred?blee=hello world&bobo=10" ).should == "%2Ffred%3Fblee%3Dhello+world%26bobo%3D10"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "setup_mode" do
|
70
|
+
before( :each ) do
|
71
|
+
@options = { :bgcolor => "#000000" }
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should set the wmode to opaque if a color is given" do
|
75
|
+
setup_wmode( @options )
|
76
|
+
@options[:wmode].should == "opaque"
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should set the wmode to transparent and color to white if a color is not given" do
|
80
|
+
@options.delete(:bgcolor )
|
81
|
+
setup_wmode( @options )
|
82
|
+
@options[:wmode].should == "transparent"
|
83
|
+
@options[:bgcolor].should == "#FFFFFF"
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should not set the wmode is user specified it" do
|
87
|
+
@options.delete(:bgcolor )
|
88
|
+
@options[:wmode] = 'transparent'
|
89
|
+
setup_wmode( @options )
|
90
|
+
@options[:wmode].should == "transparent"
|
91
|
+
@options[:bgcolor].should == "#FFFFFF"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "content_tag" do
|
96
|
+
it "should output an html tag correctly" do
|
97
|
+
content_tag( :div, content_tag( :h1, "Hello" ) ).should == "<div><h1>Hello</h1></div>"
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should use leverage block to generate a tag" do
|
101
|
+
content_tag( :div, :class => "fred", :id => "duh" ) do
|
102
|
+
content_tag( :h2, "World" )
|
103
|
+
end.should == "<div class=\"fred\" id=\"duh\"><h2>World</h2></div>"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "tag_options" do
|
108
|
+
it "should correctly escape tag options" do
|
109
|
+
tag_options( {:blee => "<blee>", :fred => 10 }, true ).should == " blee=\"<blee>\" fred=\"10\""
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should leave tag options unescaped" do
|
113
|
+
tag_options( {:blee => "<blee>", :fred => 10 }, false ).should == " blee=\"<blee>\" fred=\"10\""
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
data/spec/ziya_spec.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[spec_helper]))
|
2
|
+
|
3
|
+
describe Ziya do
|
4
|
+
before( :all ) do
|
5
|
+
@root = ::File.expand_path( ::File.join(::File.dirname(__FILE__), ".." ) )
|
6
|
+
end
|
7
|
+
|
8
|
+
it "is versioned" do
|
9
|
+
::Ziya::Version.version.should =~ /\d+\.\d+\.\d+/
|
10
|
+
end
|
11
|
+
|
12
|
+
it "generates a correct path relative to root" do
|
13
|
+
::Ziya.path( "ziya.rb" ).should == ::File.join( @root, "ziya.rb" )
|
14
|
+
end
|
15
|
+
|
16
|
+
it "generates a correct path relative to lib" do
|
17
|
+
::Ziya.libpath(%w[ ziya utils.rb]).should == ::File.join( @root, "lib", "ziya", "utils.rb" )
|
18
|
+
end
|
19
|
+
end
|
data/tasks/ann.rake
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'bones/smtp_tls'
|
5
|
+
rescue LoadError
|
6
|
+
require 'net/smtp'
|
7
|
+
end
|
8
|
+
require 'time'
|
9
|
+
|
10
|
+
namespace :ann do
|
11
|
+
|
12
|
+
file PROJ.ann_file do
|
13
|
+
puts "Generating #{PROJ.ann_file}"
|
14
|
+
File.open(PROJ.ann_file,'w') do |fd|
|
15
|
+
fd.puts("#{PROJ.name} version #{PROJ.version}")
|
16
|
+
fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
|
17
|
+
fd.puts(" #{PROJ.url}") if PROJ.url
|
18
|
+
fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
|
19
|
+
fd.puts
|
20
|
+
fd.puts("== DESCRIPTION")
|
21
|
+
fd.puts
|
22
|
+
fd.puts(PROJ.description)
|
23
|
+
fd.puts
|
24
|
+
fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
|
25
|
+
fd.puts
|
26
|
+
PROJ.ann_paragraphs.each do |p|
|
27
|
+
fd.puts "== #{p.upcase}"
|
28
|
+
fd.puts
|
29
|
+
fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
|
30
|
+
fd.puts
|
31
|
+
end
|
32
|
+
fd.puts PROJ.ann_text if PROJ.ann_text
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Create an announcement file"
|
37
|
+
task :announcement => PROJ.ann_file
|
38
|
+
|
39
|
+
desc "Send an email announcement"
|
40
|
+
task :email => PROJ.ann_file do
|
41
|
+
from = PROJ.ann_email[:from] || PROJ.email
|
42
|
+
to = Array(PROJ.ann_email[:to])
|
43
|
+
|
44
|
+
### build a mail header for RFC 822
|
45
|
+
rfc822msg = "From: #{from}\n"
|
46
|
+
rfc822msg << "To: #{to.join(',')}\n"
|
47
|
+
rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
|
48
|
+
rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
|
49
|
+
rfc822msg << "\n"
|
50
|
+
rfc822msg << "Date: #{Time.new.rfc822}\n"
|
51
|
+
rfc822msg << "Message-Id: "
|
52
|
+
rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{PROJ.ann_email[:domain]}>\n\n"
|
53
|
+
rfc822msg << File.read(PROJ.ann_file)
|
54
|
+
|
55
|
+
params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
|
56
|
+
PROJ.ann_email[key]
|
57
|
+
end
|
58
|
+
|
59
|
+
params[3] = PROJ.email if params[3].nil?
|
60
|
+
|
61
|
+
if params[4].nil?
|
62
|
+
STDOUT.write "Please enter your e-mail password (#{params[3]}): "
|
63
|
+
params[4] = STDIN.gets.chomp
|
64
|
+
end
|
65
|
+
|
66
|
+
### send email
|
67
|
+
Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
|
68
|
+
end
|
69
|
+
end # namespace :ann
|
70
|
+
|
71
|
+
desc 'Alias to ann:announcement'
|
72
|
+
task :ann => 'ann:announcement'
|
73
|
+
|
74
|
+
CLOBBER << PROJ.ann_file
|
75
|
+
|
76
|
+
# EOF
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
if HAVE_BONES
|
4
|
+
|
5
|
+
desc "Enumerate all annotations"
|
6
|
+
task :notes do
|
7
|
+
Bones::AnnotationExtractor.enumerate(
|
8
|
+
PROJ, PROJ.annotation_tags.join('|'), :tag => true)
|
9
|
+
end
|
10
|
+
|
11
|
+
namespace :notes do
|
12
|
+
PROJ.annotation_tags.each do |tag|
|
13
|
+
desc "Enumerate all #{tag} annotations"
|
14
|
+
task tag.downcase.to_sym do
|
15
|
+
Bones::AnnotationExtractor.enumerate(PROJ, tag)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end # if HAVE_BONES
|
21
|
+
|
22
|
+
# EOF
|
data/tasks/doc.rake
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
namespace :doc do
|
6
|
+
|
7
|
+
desc 'Generate RDoc documentation'
|
8
|
+
Rake::RDocTask.new do |rd|
|
9
|
+
rd.main = PROJ.rdoc_main
|
10
|
+
rd.rdoc_dir = PROJ.rdoc_dir
|
11
|
+
|
12
|
+
incl = Regexp.new(PROJ.rdoc_include.join('|'))
|
13
|
+
excl = Regexp.new(PROJ.rdoc_exclude.join('|'))
|
14
|
+
files = PROJ.files.find_all do |fn|
|
15
|
+
case fn
|
16
|
+
when excl; false
|
17
|
+
when incl; true
|
18
|
+
else false end
|
19
|
+
end
|
20
|
+
rd.rdoc_files.push(*files)
|
21
|
+
|
22
|
+
title = "#{PROJ.name}-#{PROJ.version} Documentation"
|
23
|
+
title = "#{PROJ.rubyforge_name}'s " + title if PROJ.rubyforge_name != title
|
24
|
+
|
25
|
+
rd.options << "-t #{title}"
|
26
|
+
rd.options.concat(PROJ.rdoc_opts)
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'Generate ri locally for testing'
|
30
|
+
task :ri => :clobber_ri do
|
31
|
+
sh "#{RDOC} --ri -o ri ."
|
32
|
+
end
|
33
|
+
|
34
|
+
task :clobber_ri do
|
35
|
+
rm_r 'ri' rescue nil
|
36
|
+
end
|
37
|
+
|
38
|
+
end # namespace :doc
|
39
|
+
|
40
|
+
desc 'Alias to doc:rdoc'
|
41
|
+
task :doc => 'doc:rdoc'
|
42
|
+
|
43
|
+
desc 'Remove all build products'
|
44
|
+
task :clobber => %w(doc:clobber_rdoc doc:clobber_ri)
|
45
|
+
|
46
|
+
remove_desc_for_task %w(doc:clobber_rdoc)
|
47
|
+
|
48
|
+
# EOF
|
data/tasks/gem.rake
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
|
5
|
+
namespace :gem do
|
6
|
+
|
7
|
+
PROJ.spec = Gem::Specification.new do |s|
|
8
|
+
s.name = PROJ.name
|
9
|
+
s.version = PROJ.version
|
10
|
+
s.summary = PROJ.summary
|
11
|
+
s.authors = Array(PROJ.authors)
|
12
|
+
s.email = PROJ.email
|
13
|
+
s.homepage = Array(PROJ.url).first
|
14
|
+
s.rubyforge_project = PROJ.rubyforge_name
|
15
|
+
s.post_install_message = PROJ.post_install_message
|
16
|
+
|
17
|
+
s.description = PROJ.description
|
18
|
+
|
19
|
+
PROJ.dependencies.each do |dep|
|
20
|
+
s.add_dependency(*dep)
|
21
|
+
end
|
22
|
+
|
23
|
+
s.files = PROJ.files
|
24
|
+
s.executables = PROJ.executables.map {|fn| File.basename(fn)}
|
25
|
+
s.extensions = PROJ.files.grep %r/extconf\.rb$/
|
26
|
+
|
27
|
+
s.bindir = 'bin'
|
28
|
+
dirs = Dir["{#{PROJ.libs.join(',')}}"]
|
29
|
+
s.require_paths = dirs unless dirs.empty?
|
30
|
+
|
31
|
+
incl = Regexp.new(PROJ.rdoc_include.join('|'))
|
32
|
+
excl = PROJ.rdoc_exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
|
33
|
+
excl = Regexp.new(excl.join('|'))
|
34
|
+
rdoc_files = PROJ.files.find_all do |fn|
|
35
|
+
case fn
|
36
|
+
when excl; false
|
37
|
+
when incl; true
|
38
|
+
else false end
|
39
|
+
end
|
40
|
+
s.rdoc_options = PROJ.rdoc_opts + ['--main', PROJ.rdoc_main]
|
41
|
+
s.extra_rdoc_files = rdoc_files
|
42
|
+
s.has_rdoc = true
|
43
|
+
|
44
|
+
if test ?f, PROJ.test_file
|
45
|
+
s.test_file = PROJ.test_file
|
46
|
+
else
|
47
|
+
s.test_files = PROJ.tests.to_a
|
48
|
+
end
|
49
|
+
|
50
|
+
# Do any extra stuff the user wants
|
51
|
+
# spec_extras.each do |msg, val|
|
52
|
+
# case val
|
53
|
+
# when Proc
|
54
|
+
# val.call(s.send(msg))
|
55
|
+
# else
|
56
|
+
# s.send "#{msg}=", val
|
57
|
+
# end
|
58
|
+
# end
|
59
|
+
end
|
60
|
+
|
61
|
+
desc 'Show information about the gem'
|
62
|
+
task :debug do
|
63
|
+
puts PROJ.spec.to_ruby
|
64
|
+
end
|
65
|
+
|
66
|
+
pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
|
67
|
+
pkg.need_tar = PROJ.need_tar
|
68
|
+
pkg.need_zip = PROJ.need_zip
|
69
|
+
pkg.package_files += PROJ.spec.files
|
70
|
+
end
|
71
|
+
Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
|
72
|
+
|
73
|
+
gem_file = if PROJ.spec.platform == Gem::Platform::RUBY
|
74
|
+
"#{pkg.package_name}.gem"
|
75
|
+
else
|
76
|
+
"#{pkg.package_name}-#{PROJ.spec.platform}.gem"
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "Build the gem file #{gem_file}"
|
80
|
+
task :package => "#{pkg.package_dir}/#{gem_file}"
|
81
|
+
|
82
|
+
file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.spec.files do
|
83
|
+
when_writing("Creating GEM") {
|
84
|
+
Gem::Builder.new(PROJ.spec).build
|
85
|
+
verbose(true) {
|
86
|
+
mv gem_file, "#{pkg.package_dir}/#{gem_file}"
|
87
|
+
}
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
desc 'Install the gem'
|
92
|
+
task :install => [:clobber, :package] do
|
93
|
+
sh "#{SUDO} #{GEM} install pkg/#{PROJ.spec.full_name} --no-rdoc --no-ri"
|
94
|
+
end
|
95
|
+
|
96
|
+
desc 'Uninstall the gem'
|
97
|
+
task :uninstall do
|
98
|
+
sh "#{SUDO} #{GEM} uninstall -v '#{PROJ.version}' -x #{PROJ.name}"
|
99
|
+
end
|
100
|
+
|
101
|
+
end # namespace :gem
|
102
|
+
|
103
|
+
desc 'Alias to gem:package'
|
104
|
+
task :gem => 'gem:package'
|
105
|
+
|
106
|
+
task :clobber => 'gem:clobber_package'
|
107
|
+
|
108
|
+
remove_desc_for_task %w(gem:clobber_package)
|
109
|
+
|
110
|
+
# EOF
|