derailed-ziya 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. data/History.txt +0 -0
  2. data/Manifest.txt +405 -0
  3. data/README.txt +232 -0
  4. data/Rakefile +44 -0
  5. data/bin/ziyafy +53 -0
  6. data/charts/AC_RunActiveContent.js +292 -0
  7. data/charts/charts.swf +0 -0
  8. data/charts/charts_library/ar3d.swf +0 -0
  9. data/charts/charts_library/arno.swf +0 -0
  10. data/charts/charts_library/ars3.swf +0 -0
  11. data/charts/charts_library/arst.swf +0 -0
  12. data/charts/charts_library/brfl.swf +0 -0
  13. data/charts/charts_library/brno.swf +0 -0
  14. data/charts/charts_library/brst.swf +0 -0
  15. data/charts/charts_library/buno.swf +0 -0
  16. data/charts/charts_library/cl3d.swf +0 -0
  17. data/charts/charts_library/clfl.swf +0 -0
  18. data/charts/charts_library/clno.swf +0 -0
  19. data/charts/charts_library/clp3.swf +0 -0
  20. data/charts/charts_library/cls3.swf +0 -0
  21. data/charts/charts_library/clst.swf +0 -0
  22. data/charts/charts_library/cnno.swf +0 -0
  23. data/charts/charts_library/dono.swf +0 -0
  24. data/charts/charts_library/lnno.swf +0 -0
  25. data/charts/charts_library/mxno.swf +0 -0
  26. data/charts/charts_library/pi3d.swf +0 -0
  27. data/charts/charts_library/pino.swf +0 -0
  28. data/charts/charts_library/pono.swf +0 -0
  29. data/charts/charts_library/scno.swf +0 -0
  30. data/charts/full_screen.swf +0 -0
  31. data/charts/scripts/output_jpg.php +23 -0
  32. data/charts/sliders/black.swf +0 -0
  33. data/charts/sliders/preview_handle_1.swf +0 -0
  34. data/charts/sliders/preview_handle_2.swf +0 -0
  35. data/gauges/designs/circle.yml +18 -0
  36. data/gauges/designs/signal.yml +14 -0
  37. data/gauges/designs/thermo.yml +119 -0
  38. data/gauges/designs/title.yml +11 -0
  39. data/gauges/gauge.swf +0 -0
  40. data/lib/ziya/charts/area.rb +18 -0
  41. data/lib/ziya/charts/area_threed.rb +16 -0
  42. data/lib/ziya/charts/bar.rb +16 -0
  43. data/lib/ziya/charts/base.rb +510 -0
  44. data/lib/ziya/charts/bubble.rb +18 -0
  45. data/lib/ziya/charts/candle_stick.rb +16 -0
  46. data/lib/ziya/charts/column.rb +16 -0
  47. data/lib/ziya/charts/column_threed.rb +16 -0
  48. data/lib/ziya/charts/donut.rb +18 -0
  49. data/lib/ziya/charts/floating_bar.rb +16 -0
  50. data/lib/ziya/charts/floating_column.rb +16 -0
  51. data/lib/ziya/charts/line.rb +16 -0
  52. data/lib/ziya/charts/mixed.rb +16 -0
  53. data/lib/ziya/charts/parallel_threed_column.rb +16 -0
  54. data/lib/ziya/charts/pie.rb +16 -0
  55. data/lib/ziya/charts/pie_threed.rb +16 -0
  56. data/lib/ziya/charts/polar.rb +16 -0
  57. data/lib/ziya/charts/scatter.rb +16 -0
  58. data/lib/ziya/charts/stacked_area.rb +16 -0
  59. data/lib/ziya/charts/stacked_bar.rb +16 -0
  60. data/lib/ziya/charts/stacked_column.rb +16 -0
  61. data/lib/ziya/charts/stacked_threed_area.rb +16 -0
  62. data/lib/ziya/charts/stacked_threed_column.rb +16 -0
  63. data/lib/ziya/components/area.rb +17 -0
  64. data/lib/ziya/components/axis_category.rb +17 -0
  65. data/lib/ziya/components/axis_ticks.rb +35 -0
  66. data/lib/ziya/components/axis_value.rb +16 -0
  67. data/lib/ziya/components/base.rb +142 -0
  68. data/lib/ziya/components/bevel.rb +15 -0
  69. data/lib/ziya/components/blur.rb +13 -0
  70. data/lib/ziya/components/chart_border.rb +14 -0
  71. data/lib/ziya/components/chart_grid_h.rb +26 -0
  72. data/lib/ziya/components/chart_grid_v.rb +27 -0
  73. data/lib/ziya/components/chart_guide.rb +16 -0
  74. data/lib/ziya/components/chart_label.rb +16 -0
  75. data/lib/ziya/components/chart_pref.rb +22 -0
  76. data/lib/ziya/components/chart_rect.rb +37 -0
  77. data/lib/ziya/components/chart_transition.rb +25 -0
  78. data/lib/ziya/components/circle.rb +16 -0
  79. data/lib/ziya/components/context_menu.rb +15 -0
  80. data/lib/ziya/components/draw.rb +47 -0
  81. data/lib/ziya/components/draw_base.rb +10 -0
  82. data/lib/ziya/components/filter.rb +26 -0
  83. data/lib/ziya/components/glow.rb +14 -0
  84. data/lib/ziya/components/image.rb +17 -0
  85. data/lib/ziya/components/legend.rb +18 -0
  86. data/lib/ziya/components/line.rb +16 -0
  87. data/lib/ziya/components/link.rb +29 -0
  88. data/lib/ziya/components/link_data.rb +18 -0
  89. data/lib/ziya/components/rect.rb +18 -0
  90. data/lib/ziya/components/scroll.rb +26 -0
  91. data/lib/ziya/components/series.rb +16 -0
  92. data/lib/ziya/components/series_color.rb +35 -0
  93. data/lib/ziya/components/series_explode.rb +38 -0
  94. data/lib/ziya/components/shadow.rb +14 -0
  95. data/lib/ziya/components/text.rb +17 -0
  96. data/lib/ziya/components/update.rb +19 -0
  97. data/lib/ziya/gauges/base.rb +172 -0
  98. data/lib/ziya/gauges/radial.rb +18 -0
  99. data/lib/ziya/gauges/signal.rb +138 -0
  100. data/lib/ziya/gauges/support/area.rb +13 -0
  101. data/lib/ziya/gauges/support/base.rb +33 -0
  102. data/lib/ziya/gauges/support/circle.rb +14 -0
  103. data/lib/ziya/gauges/support/design.rb +5 -0
  104. data/lib/ziya/gauges/support/image.rb +12 -0
  105. data/lib/ziya/gauges/support/line.rb +12 -0
  106. data/lib/ziya/gauges/support/link.rb +24 -0
  107. data/lib/ziya/gauges/support/move.rb +15 -0
  108. data/lib/ziya/gauges/support/point.rb +12 -0
  109. data/lib/ziya/gauges/support/polygon.rb +13 -0
  110. data/lib/ziya/gauges/support/radial_base.rb +21 -0
  111. data/lib/ziya/gauges/support/radial_numbers.rb +41 -0
  112. data/lib/ziya/gauges/support/radial_ticks.rb +29 -0
  113. data/lib/ziya/gauges/support/rect.rb +14 -0
  114. data/lib/ziya/gauges/support/rotate.rb +15 -0
  115. data/lib/ziya/gauges/support/scale.rb +15 -0
  116. data/lib/ziya/gauges/support/text.rb +21 -0
  117. data/lib/ziya/gauges/support/update.rb +12 -0
  118. data/lib/ziya/gauges/thermo.rb +121 -0
  119. data/lib/ziya/helpers/base_helper.rb +70 -0
  120. data/lib/ziya/utils/logger.rb +125 -0
  121. data/lib/ziya/utils/text.rb +39 -0
  122. data/lib/ziya/version.rb +15 -0
  123. data/lib/ziya/ziya_helper.rb +374 -0
  124. data/lib/ziya.rb +112 -0
  125. data/spec/charts/base_spec.rb +134 -0
  126. data/spec/charts/chart_type_spec.rb +63 -0
  127. data/spec/components/area_spec.rb +67 -0
  128. data/spec/components/draw_spec.rb +32 -0
  129. data/spec/components/filter_spec.rb +27 -0
  130. data/spec/components/link_spec.rb +22 -0
  131. data/spec/components/series.rb +18 -0
  132. data/spec/components/series_color_spec.rb +39 -0
  133. data/spec/components/series_explode.rb +39 -0
  134. data/spec/components/series_explode_spec.rb +39 -0
  135. data/spec/designs/circle.yml +7 -0
  136. data/spec/designs/crapping_out.yml +8 -0
  137. data/spec/designs/gauge_1.yml +43 -0
  138. data/spec/designs/gauge_2.yml +11 -0
  139. data/spec/designs/gauge_no_name.yml +43 -0
  140. data/spec/designs/gauge_raw.yml +5 -0
  141. data/spec/designs/thermo.yml +13 -0
  142. data/spec/gauges/base_spec.rb +90 -0
  143. data/spec/gauges/signal_spec.rb +36 -0
  144. data/spec/gauges/support/area_spec.rb +40 -0
  145. data/spec/gauges/support/circle_spec.rb +78 -0
  146. data/spec/gauges/support/image_spec.rb +35 -0
  147. data/spec/gauges/support/line_spec.rb +34 -0
  148. data/spec/gauges/support/link_spec.rb +35 -0
  149. data/spec/gauges/support/move_spec.rb +45 -0
  150. data/spec/gauges/support/polygon_spec.rb +36 -0
  151. data/spec/gauges/support/radial_numbers_spec.rb +35 -0
  152. data/spec/gauges/support/radial_ticks_spec.rb +30 -0
  153. data/spec/gauges/support/rotate_spec.rb +45 -0
  154. data/spec/gauges/support/scale_spec.rb +46 -0
  155. data/spec/gauges/support/text_spec.rb +40 -0
  156. data/spec/gauges/thermo_spec.rb +49 -0
  157. data/spec/helpers/base_helper_spec.rb +36 -0
  158. data/spec/spec_helper.rb +10 -0
  159. data/spec/test_helpers/gauge_2_helper.rb +17 -0
  160. data/spec/themes/default/fred.yml +6 -0
  161. data/spec/themes/default/line_chart.yml +6 -0
  162. data/spec/utils/logger_spec.rb +55 -0
  163. data/spec/utils/text_spec.rb +33 -0
  164. data/spec/ziya_helper_spec.rb +117 -0
  165. data/spec/ziya_spec.rb +19 -0
  166. data/tasks/ann.rake +76 -0
  167. data/tasks/annotations.rake +22 -0
  168. data/tasks/doc.rake +48 -0
  169. data/tasks/gem.rake +110 -0
  170. data/tasks/manifest.rake +49 -0
  171. data/tasks/post_load.rake +26 -0
  172. data/tasks/rubyforge.rake +57 -0
  173. data/tasks/setup.rb +227 -0
  174. data/tasks/spec.rake +61 -0
  175. data/tasks/svn.rake +44 -0
  176. data/tasks/test.rake +38 -0
  177. 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
@@ -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,6 @@
1
+ <%= chart :line %>
2
+ <%=component :axis_category %>
3
+ size: 200
4
+ color: ffffff
5
+ bold: false
6
+ alpha: 1
@@ -0,0 +1,6 @@
1
+ <%= chart :line %>
2
+ <%=component :axis_category %>
3
+ size: 10
4
+ color: 000000
5
+ bold: true
6
+ alpha: 100
@@ -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=\"&lt;blee&gt;\" 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