ziya 1.0.0
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/History.txt +4 -0
- data/Manifest.txt +127 -0
- data/README.txt +137 -0
- data/Rakefile +45 -0
- data/bin/ziyafy +51 -0
- data/charts/charts.swf +0 -0
- data/charts/charts_library/arno.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/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/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/themes/commando/bar_chart.yml +9 -0
- data/charts/themes/commando/base_chart.yml +65 -0
- data/charts/themes/commando/column_chart.yml +13 -0
- data/charts/themes/commando/column_threed_chart.yml +25 -0
- data/charts/themes/commando/parallel_threed_column_chart.yml +17 -0
- data/charts/themes/commando/pie_chart.yml +22 -0
- data/charts/themes/commando/pie_threed_chart.yml +28 -0
- data/charts/themes/commando/polar_chart.yml +11 -0
- data/charts/themes/commando/stacked_bar_chart.yml +9 -0
- data/charts/themes/commando/stacked_column_chart.yml +14 -0
- data/charts/themes/commando/stacked_threed_column_chart.yml +17 -0
- data/charts/themes/default/bar_chart.yml +3 -0
- data/charts/themes/default/base_chart.yml +67 -0
- data/charts/themes/default/column_chart.yml +13 -0
- data/charts/themes/default/column_threed_chart.yml +25 -0
- data/charts/themes/default/parallel_threed_column_chart.yml +17 -0
- data/charts/themes/default/pie_chart.yml +29 -0
- data/charts/themes/default/pie_threed_chart.yml +28 -0
- data/charts/themes/default/polar_chart.yml +12 -0
- data/charts/themes/default/stacked_bar_chart.yml +3 -0
- data/charts/themes/default/stacked_column_chart.yml +14 -0
- data/charts/themes/default/stacked_threed_column_chart.yml +17 -0
- data/charts/themes/default/test.yml +4 -0
- data/lib/ziya.rb +100 -0
- data/lib/ziya/charts/area.rb +13 -0
- data/lib/ziya/charts/bar.rb +11 -0
- data/lib/ziya/charts/base.rb +435 -0
- data/lib/ziya/charts/candle_stick.rb +11 -0
- data/lib/ziya/charts/column.rb +11 -0
- data/lib/ziya/charts/column_threed.rb +11 -0
- data/lib/ziya/charts/floating_bar.rb +11 -0
- data/lib/ziya/charts/floating_column.rb +11 -0
- data/lib/ziya/charts/line.rb +11 -0
- data/lib/ziya/charts/mixed.rb +11 -0
- data/lib/ziya/charts/parallel_threed_column.rb +11 -0
- data/lib/ziya/charts/pie.rb +11 -0
- data/lib/ziya/charts/pie_threed.rb +11 -0
- data/lib/ziya/charts/polar.rb +11 -0
- data/lib/ziya/charts/scatter.rb +11 -0
- data/lib/ziya/charts/stacked_area.rb +11 -0
- data/lib/ziya/charts/stacked_bar.rb +11 -0
- data/lib/ziya/charts/stacked_column.rb +11 -0
- data/lib/ziya/charts/stacked_threed_column.rb +11 -0
- data/lib/ziya/components/area.rb +14 -0
- data/lib/ziya/components/axis_category.rb +69 -0
- data/lib/ziya/components/axis_ticks.rb +37 -0
- data/lib/ziya/components/axis_value.rb +59 -0
- data/lib/ziya/components/base.rb +100 -0
- data/lib/ziya/components/chart_border.rb +33 -0
- data/lib/ziya/components/chart_grid_h.rb +28 -0
- data/lib/ziya/components/chart_grid_v.rb +28 -0
- data/lib/ziya/components/chart_pref.rb +22 -0
- data/lib/ziya/components/chart_rect.rb +36 -0
- data/lib/ziya/components/chart_transition.rb +26 -0
- data/lib/ziya/components/chart_value.rb +71 -0
- data/lib/ziya/components/circle.rb +13 -0
- data/lib/ziya/components/draw.rb +45 -0
- data/lib/ziya/components/image.rb +13 -0
- data/lib/ziya/components/legend_label.rb +18 -0
- data/lib/ziya/components/legend_rect.rb +19 -0
- data/lib/ziya/components/legend_transition.rb +18 -0
- data/lib/ziya/components/line.rb +12 -0
- data/lib/ziya/components/link.rb +29 -0
- data/lib/ziya/components/link_data.rb +19 -0
- data/lib/ziya/components/live_update.rb +21 -0
- data/lib/ziya/components/rect.rb +13 -0
- data/lib/ziya/components/series_color.rb +35 -0
- data/lib/ziya/components/series_explode.rb +38 -0
- data/lib/ziya/components/series_gap.rb +18 -0
- data/lib/ziya/components/series_switch.rb +25 -0
- data/lib/ziya/components/text.rb +13 -0
- data/lib/ziya/helpers/base_helper.rb +37 -0
- data/lib/ziya/utils/logger.rb +125 -0
- data/lib/ziya/utils/text.rb +33 -0
- data/lib/ziya/version.rb +15 -0
- data/lib/ziya/ziya_helper.rb +147 -0
- data/spec/charts/base_spec.rb +120 -0
- data/spec/charts/chart_type_spec.rb +42 -0
- data/spec/components/area_spec.rb +60 -0
- data/spec/components/draw_spec.rb +33 -0
- data/spec/components/link_spec.rb +23 -0
- data/spec/components/series_color_spec.rb +40 -0
- data/spec/components/series_explode_spec.rb +40 -0
- data/spec/components/series_switch_spec.rb +19 -0
- data/spec/helpers/base_helper_spec.rb +22 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/themes/default/fred.yml +6 -0
- data/spec/themes/default/line_chart.yml +6 -0
- data/spec/utils/logger_spec.rb +57 -0
- data/spec/utils/text_spec.rb +34 -0
- data/spec/ziya_helper_spec.rb +40 -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 +190 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
# require File.join(File.dirname(__FILE__), %w[.. spec_helper])
|
|
3
|
+
|
|
4
|
+
describe Ziya::Utils::Text do
|
|
5
|
+
describe "camelize" do
|
|
6
|
+
it "should camelize a plain string correctly" do
|
|
7
|
+
camelize( "fred" ).should == "Fred"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "shoud camelize a class name correctly" do
|
|
11
|
+
camelize( "hello_world" ).should == "HelloWorld"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should camelize a namespace class file correctly" do
|
|
15
|
+
camelize( "/blee/fred/hello_world" ).should == "::Blee::Fred::HelloWorld"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "underscore" do
|
|
20
|
+
it "should underscore a plain string" do
|
|
21
|
+
underscore( "fred" ).should == "fred"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should underscore a camel cased string" do
|
|
25
|
+
underscore( "HelloWorld" ).should == "hello_world"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe "classify" do
|
|
30
|
+
it "should classify an attribute correctly" do
|
|
31
|
+
classify( "fred.blee_duh" ).should == "BleeDuh"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
# require File.join(File.dirname(__FILE__), %w[spec_helper])
|
|
3
|
+
|
|
4
|
+
describe Ziya::Helper do
|
|
5
|
+
|
|
6
|
+
describe "ziya_chart" do
|
|
7
|
+
before( :each ) do
|
|
8
|
+
@url = "/fred/blee/duh"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should generate the correct html with the default options" do
|
|
12
|
+
ziya_chart( @url, :cache => true ).should == "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0\" data=\"/charts/charts.swf?library_path=/charts/charts_library&xml_source=%2Ffred%2Fblee%2Fduh&stage_width=400&stage_height=300\" height=\"300\" id=\"ziya_chart\" stage_height=\"300\" stage_width=\"400\" style=\"\" width=\"400\"><param name=\"movie\" value=\"/charts/charts.swf?library_path=/charts/charts_library&xml_source=%2Ffred%2Fblee%2Fduh&stage_width=400&stage_height=300\"><param name=\"quality\" value=\"high\"><embed bgcolor=\"#FFFFFF\" height=\"300\" name=\"ziya_chart\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" quality=\"high\" src=\"/charts/charts.swf?library_path=/charts/charts_library&xml_source=%2Ffred%2Fblee%2Fduh&stage_width=400&stage_height=300\" swLiveConnect=\"true\" type=\"application/x-shockwave-flash\" width=\"400\" wmode=\"transparent\"></embed><param name=\"bgcolor\" value=\"#FFFFFF\"><param name=\"wmode\" value=\"transparent\"></object>"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should set the wmode to opaque if bg_color is set" do
|
|
16
|
+
html = ziya_chart( @url, :bgcolor => "ffffff" )
|
|
17
|
+
html.index (/name=\"wmode\" value=\"opaque\"/).should_not be_nil
|
|
18
|
+
html.index (/wmode=\"opaque\"/).should_not be_nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should handle the size has widthxheight" do
|
|
22
|
+
html = ziya_chart( @url, :size => "100x200" )
|
|
23
|
+
html.index (/width=\"100\"/).should_not be_nil
|
|
24
|
+
html.index (/height=\"200\"/).should_not be_nil
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "content_tag" do
|
|
29
|
+
it "should output an html tag correctly" do
|
|
30
|
+
content_tag( :div, content_tag( :h1, "Hello" ) ).should == "<div><h1>Hello</h1></div>"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should use leverage block to generate a tag" do
|
|
34
|
+
content_tag( :div, :class => "fred", :id => "duh" ) do
|
|
35
|
+
content_tag( :h2, "World" )
|
|
36
|
+
end.should == "<div class=\"fred\" id=\"duh\"><h2>World</h2></div>"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
data/spec/ziya_spec.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "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}"
|
|
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
|
data/tasks/manifest.rake
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# $Id$
|
|
2
|
+
|
|
3
|
+
require 'find'
|
|
4
|
+
|
|
5
|
+
namespace :manifest do
|
|
6
|
+
|
|
7
|
+
desc 'Verify the manifest'
|
|
8
|
+
task :check do
|
|
9
|
+
fn = PROJ.manifest_file + '.tmp'
|
|
10
|
+
files = manifest_files
|
|
11
|
+
|
|
12
|
+
File.open(fn, 'w') {|fp| fp.puts files}
|
|
13
|
+
lines = %x(#{DIFF} -du #{PROJ.manifest_file} #{fn}).split("\n")
|
|
14
|
+
if HAVE_FACETS_ANSICODE and ENV.has_key?('TERM')
|
|
15
|
+
lines.map! do |line|
|
|
16
|
+
case line
|
|
17
|
+
when %r/^(-{3}|\+{3})/; nil
|
|
18
|
+
when %r/^@/; Console::ANSICode.blue line
|
|
19
|
+
when %r/^\+/; Console::ANSICode.green line
|
|
20
|
+
when %r/^\-/; Console::ANSICode.red line
|
|
21
|
+
else line end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
puts lines.compact
|
|
25
|
+
rm fn rescue nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
desc 'Create a new manifest'
|
|
29
|
+
task :create do
|
|
30
|
+
files = manifest_files
|
|
31
|
+
unless test(?f, PROJ.manifest_file)
|
|
32
|
+
files << PROJ.manifest_file
|
|
33
|
+
files.sort!
|
|
34
|
+
end
|
|
35
|
+
File.open(PROJ.manifest_file, 'w') {|fp| fp.puts files}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
task :assert do
|
|
39
|
+
files = manifest_files
|
|
40
|
+
manifest = File.read(PROJ.manifest_file).split($/)
|
|
41
|
+
raise "ERROR: #{PROJ.manifest_file} is out of date" unless files == manifest
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end # namespace :manifest
|
|
45
|
+
|
|
46
|
+
desc 'Alias to manifest:check'
|
|
47
|
+
task :manifest => 'manifest:check'
|
|
48
|
+
|
|
49
|
+
# EOF
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# $Id$
|
|
2
|
+
|
|
3
|
+
# This file does not define any rake tasks. It is used to load some project
|
|
4
|
+
# settings if they are not defined by the user.
|
|
5
|
+
|
|
6
|
+
PROJ.rdoc_exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
|
|
7
|
+
PROJ.exclude << "^#{Regexp.escape(PROJ.ann_file)}$"
|
|
8
|
+
|
|
9
|
+
PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
|
|
10
|
+
|
|
11
|
+
PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
|
|
12
|
+
|
|
13
|
+
PROJ.summary ||= PROJ.description.split('.').first
|
|
14
|
+
|
|
15
|
+
PROJ.files ||=
|
|
16
|
+
if test(?f, PROJ.manifest_file)
|
|
17
|
+
files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
|
|
18
|
+
files.delete ''
|
|
19
|
+
files
|
|
20
|
+
else [] end
|
|
21
|
+
|
|
22
|
+
PROJ.executables ||= PROJ.files.find_all {|fn| fn =~ %r/^bin/}
|
|
23
|
+
|
|
24
|
+
PROJ.rdoc_main ||= PROJ.readme_file
|
|
25
|
+
|
|
26
|
+
# EOF
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# $Id$
|
|
2
|
+
|
|
3
|
+
if PROJ.rubyforge_name && HAVE_RUBYFORGE
|
|
4
|
+
|
|
5
|
+
require 'rubyforge'
|
|
6
|
+
require 'rake/contrib/sshpublisher'
|
|
7
|
+
|
|
8
|
+
namespace :gem do
|
|
9
|
+
desc 'Package and upload to RubyForge'
|
|
10
|
+
task :release => [:clobber, :package] do |t|
|
|
11
|
+
v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
|
|
12
|
+
abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
|
|
13
|
+
pkg = "pkg/#{PROJ.spec.full_name}"
|
|
14
|
+
|
|
15
|
+
if $DEBUG then
|
|
16
|
+
puts "release_id = rf.add_release #{PROJ.rubyforge_name.inspect}, #{PROJ.name.inspect}, #{PROJ.version.inspect}, \"#{pkg}.tgz\""
|
|
17
|
+
puts "rf.add_file #{PROJ.rubyforge_name.inspect}, #{PROJ.name.inspect}, release_id, \"#{pkg}.gem\""
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
rf = RubyForge.new
|
|
21
|
+
puts 'Logging in'
|
|
22
|
+
rf.login
|
|
23
|
+
|
|
24
|
+
c = rf.userconfig
|
|
25
|
+
c['release_notes'] = PROJ.description if PROJ.description
|
|
26
|
+
c['release_changes'] = PROJ.changes if PROJ.changes
|
|
27
|
+
c['preformatted'] = true
|
|
28
|
+
|
|
29
|
+
files = [(PROJ.need_tar ? "#{pkg}.tgz" : nil),
|
|
30
|
+
(PROJ.need_zip ? "#{pkg}.zip" : nil),
|
|
31
|
+
"#{pkg}.gem"].compact
|
|
32
|
+
|
|
33
|
+
puts "Releasing #{PROJ.name} v. #{PROJ.version}"
|
|
34
|
+
rf.add_release PROJ.rubyforge_name, PROJ.name, PROJ.version, *files
|
|
35
|
+
end
|
|
36
|
+
end # namespace :gem
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
namespace :doc do
|
|
40
|
+
desc "Publish RDoc to RubyForge"
|
|
41
|
+
task :release => %w(doc:clobber_rdoc doc:rdoc) do
|
|
42
|
+
config = YAML.load(
|
|
43
|
+
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
host = "#{config['username']}@rubyforge.org"
|
|
47
|
+
remote_dir = "/var/www/gforge-projects/#{PROJ.rubyforge_name}/"
|
|
48
|
+
remote_dir << PROJ.rdoc_remote_dir if PROJ.rdoc_remote_dir
|
|
49
|
+
local_dir = PROJ.rdoc_dir
|
|
50
|
+
|
|
51
|
+
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
|
52
|
+
end
|
|
53
|
+
end # namespace :doc
|
|
54
|
+
|
|
55
|
+
end # if HAVE_RUBYFORGE
|
|
56
|
+
|
|
57
|
+
# EOF
|