webby 0.9.3-x86-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +206 -0
- data/Manifest.txt +228 -0
- data/README.txt +92 -0
- data/Rakefile +49 -0
- data/bin/webby +41 -0
- data/bin/webby-gen +41 -0
- data/examples/blog/Sitefile +7 -0
- data/examples/blog/tasks/blog.rake +72 -0
- data/examples/blog/templates/atom_feed.erb +40 -0
- data/examples/blog/templates/blog/month.erb +22 -0
- data/examples/blog/templates/blog/post.erb +16 -0
- data/examples/blog/templates/blog/year.erb +22 -0
- data/examples/presentation/Sitefile +10 -0
- data/examples/presentation/content/css/uv/twilight.css +137 -0
- data/examples/presentation/content/presentation/_sample_code.txt +10 -0
- data/examples/presentation/content/presentation/index.txt +63 -0
- data/examples/presentation/content/presentation/s5/blank.gif +0 -0
- data/examples/presentation/content/presentation/s5/bodybg.gif +0 -0
- data/examples/presentation/content/presentation/s5/framing.css +23 -0
- data/examples/presentation/content/presentation/s5/iepngfix.htc +42 -0
- data/examples/presentation/content/presentation/s5/opera.css +7 -0
- data/examples/presentation/content/presentation/s5/outline.css +15 -0
- data/examples/presentation/content/presentation/s5/pretty.css +86 -0
- data/examples/presentation/content/presentation/s5/print.css +25 -0
- data/examples/presentation/content/presentation/s5/s5-core.css +9 -0
- data/examples/presentation/content/presentation/s5/slides.css +3 -0
- data/examples/presentation/content/presentation/s5/slides.js +553 -0
- data/examples/presentation/layouts/presentation.txt +43 -0
- data/examples/presentation/templates/_code_partial.erb +13 -0
- data/examples/presentation/templates/presentation.erb +40 -0
- data/examples/tumblog/Sitefile +9 -0
- data/examples/tumblog/content/css/tumblog.css +308 -0
- data/examples/tumblog/content/images/tumblog/permalink.gif +0 -0
- data/examples/tumblog/content/images/tumblog/rss.gif +0 -0
- data/examples/tumblog/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
- data/examples/tumblog/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
- data/examples/tumblog/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
- data/examples/tumblog/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
- data/examples/tumblog/content/tumblog/200807/up-a-tree/index.txt +13 -0
- data/examples/tumblog/content/tumblog/index.txt +37 -0
- data/examples/tumblog/content/tumblog/rss.txt +37 -0
- data/examples/tumblog/layouts/tumblog/default.txt +44 -0
- data/examples/tumblog/layouts/tumblog/post.txt +15 -0
- data/examples/tumblog/lib/tumblog_helper.rb +32 -0
- data/examples/tumblog/tasks/tumblog.rake +30 -0
- data/examples/tumblog/templates/atom_feed.erb +40 -0
- data/examples/tumblog/templates/tumblog/conversation.erb +12 -0
- data/examples/tumblog/templates/tumblog/link.erb +10 -0
- data/examples/tumblog/templates/tumblog/photo.erb +13 -0
- data/examples/tumblog/templates/tumblog/post.erb +12 -0
- data/examples/tumblog/templates/tumblog/quote.erb +11 -0
- data/examples/webby/Sitefile +19 -0
- data/examples/webby/content/communicate/index.txt +28 -0
- data/examples/webby/content/css/background.gif +0 -0
- data/examples/webby/content/css/blueprint/print.css +76 -0
- data/examples/webby/content/css/blueprint/screen.css +696 -0
- data/examples/webby/content/css/coderay.css +96 -0
- data/examples/webby/content/css/site.css +196 -0
- data/examples/webby/content/css/uv/twilight.css +137 -0
- data/examples/webby/content/index.txt +37 -0
- data/examples/webby/content/learn/index.txt +28 -0
- data/examples/webby/content/reference/index.txt +204 -0
- data/examples/webby/content/release-notes/index.txt +21 -0
- data/examples/webby/content/release-notes/rel-0-9-0/index.txt +74 -0
- data/examples/webby/content/release-notes/rel-0-9-1/index.txt +93 -0
- data/examples/webby/content/release-notes/rel-0-9-2/index.txt +14 -0
- data/examples/webby/content/release-notes/rel-0-9-3/index.txt +49 -0
- data/examples/webby/content/robots.txt +6 -0
- data/examples/webby/content/script/jquery.corner.js +152 -0
- data/examples/webby/content/script/jquery.js +31 -0
- data/examples/webby/content/sitemap.txt +31 -0
- data/examples/webby/content/tips_and_tricks/index.txt +97 -0
- data/examples/webby/content/tutorial/index.txt +135 -0
- data/examples/webby/content/user-manual/index.txt +419 -0
- data/examples/webby/layouts/default.txt +49 -0
- data/examples/webby/templates/page.erb +10 -0
- data/examples/website/Sitefile +7 -0
- data/examples/website/content/css/blueprint/License.txt +21 -0
- data/examples/website/content/css/blueprint/Readme.txt +100 -0
- data/examples/website/content/css/blueprint/compressed/print.css +76 -0
- data/examples/website/content/css/blueprint/compressed/screen.css +696 -0
- data/examples/website/content/css/blueprint/lib/forms.css +45 -0
- data/examples/website/content/css/blueprint/lib/grid.css +193 -0
- data/examples/website/content/css/blueprint/lib/grid.png +0 -0
- data/examples/website/content/css/blueprint/lib/ie.css +30 -0
- data/examples/website/content/css/blueprint/lib/reset.css +39 -0
- data/examples/website/content/css/blueprint/lib/typography.css +116 -0
- data/examples/website/content/css/blueprint/plugins/buttons/Readme +31 -0
- data/examples/website/content/css/blueprint/plugins/buttons/buttons.css +97 -0
- data/examples/website/content/css/blueprint/plugins/buttons/icons/cross.png +0 -0
- data/examples/website/content/css/blueprint/plugins/buttons/icons/key.png +0 -0
- data/examples/website/content/css/blueprint/plugins/buttons/icons/tick.png +0 -0
- data/examples/website/content/css/blueprint/plugins/css-classes/Readme +14 -0
- data/examples/website/content/css/blueprint/plugins/css-classes/css-classes.css +24 -0
- data/examples/website/content/css/blueprint/plugins/fancy-type/Readme +22 -0
- data/examples/website/content/css/blueprint/plugins/fancy-type/fancy-type-compressed.css +5 -0
- data/examples/website/content/css/blueprint/plugins/fancy-type/fancy-type.css +74 -0
- data/examples/website/content/css/blueprint/print.css +68 -0
- data/examples/website/content/css/blueprint/screen.css +22 -0
- data/examples/website/content/css/coderay.css +111 -0
- data/examples/website/content/css/site.css +67 -0
- data/examples/website/content/index.txt +19 -0
- data/examples/website/layouts/default.txt +58 -0
- data/examples/website/lib/breadcrumbs.rb +28 -0
- data/examples/website/templates/_partial.erb +10 -0
- data/examples/website/templates/page.erb +18 -0
- data/lib/webby.rb +221 -0
- data/lib/webby/apps.rb +12 -0
- data/lib/webby/apps/generator.rb +276 -0
- data/lib/webby/apps/main.rb +255 -0
- data/lib/webby/auto_builder.rb +157 -0
- data/lib/webby/builder.rb +180 -0
- data/lib/webby/core_ext/enumerable.rb +11 -0
- data/lib/webby/core_ext/hash.rb +28 -0
- data/lib/webby/core_ext/kernel.rb +26 -0
- data/lib/webby/core_ext/string.rb +163 -0
- data/lib/webby/core_ext/time.rb +9 -0
- data/lib/webby/filters.rb +83 -0
- data/lib/webby/filters/basepath.rb +97 -0
- data/lib/webby/filters/erb.rb +9 -0
- data/lib/webby/filters/haml.rb +18 -0
- data/lib/webby/filters/markdown.rb +16 -0
- data/lib/webby/filters/outline.rb +309 -0
- data/lib/webby/filters/sass.rb +17 -0
- data/lib/webby/filters/slides.rb +56 -0
- data/lib/webby/filters/textile.rb +16 -0
- data/lib/webby/filters/tidy.rb +76 -0
- data/lib/webby/filters/wiki_words.rb +14 -0
- data/lib/webby/helpers.rb +30 -0
- data/lib/webby/helpers/capture_helper.rb +141 -0
- data/lib/webby/helpers/coderay_helper.rb +69 -0
- data/lib/webby/helpers/graphviz_helper.rb +136 -0
- data/lib/webby/helpers/tag_helper.rb +65 -0
- data/lib/webby/helpers/tex_img_helper.rb +133 -0
- data/lib/webby/helpers/ultraviolet_helper.rb +63 -0
- data/lib/webby/helpers/url_helper.rb +241 -0
- data/lib/webby/journal.rb +126 -0
- data/lib/webby/link_validator.rb +152 -0
- data/lib/webby/renderer.rb +386 -0
- data/lib/webby/resources.rb +136 -0
- data/lib/webby/resources/db.rb +251 -0
- data/lib/webby/resources/layout.rb +54 -0
- data/lib/webby/resources/meta_file.rb +211 -0
- data/lib/webby/resources/page.rb +81 -0
- data/lib/webby/resources/partial.rb +85 -0
- data/lib/webby/resources/resource.rb +201 -0
- data/lib/webby/resources/static.rb +36 -0
- data/lib/webby/stelan/mktemp.rb +135 -0
- data/lib/webby/stelan/paginator.rb +165 -0
- data/lib/webby/stelan/spawner.rb +339 -0
- data/lib/webby/tasks/build.rake +27 -0
- data/lib/webby/tasks/create.rake +22 -0
- data/lib/webby/tasks/deploy.rake +22 -0
- data/lib/webby/tasks/growl.rake +16 -0
- data/lib/webby/tasks/validate.rake +19 -0
- data/spec/core_ext/hash_spec.rb +47 -0
- data/spec/core_ext/string_spec.rb +110 -0
- data/spec/core_ext/time_spec.rb +19 -0
- data/spec/data/hooligans/bad_meta_data_1.txt +34 -0
- data/spec/data/hooligans/bad_meta_data_2.txt +34 -0
- data/spec/data/outline/basic.out +81 -0
- data/spec/data/outline/basic.txt +25 -0
- data/spec/data/outline/no_clobber.out +86 -0
- data/spec/data/outline/numbering.out +81 -0
- data/spec/data/outline/numbering_only.out +21 -0
- data/spec/data/outline/toc_range_1.out +66 -0
- data/spec/data/outline/toc_range_2.out +55 -0
- data/spec/data/outline/toc_style.out +81 -0
- data/spec/data/site/Sitefile +9 -0
- data/spec/data/site/content/_partial.txt +10 -0
- data/spec/data/site/content/css/coderay.css +111 -0
- data/spec/data/site/content/css/site.css +67 -0
- data/spec/data/site/content/css/tumblog.css +308 -0
- data/spec/data/site/content/images/tumblog/permalink.gif +0 -0
- data/spec/data/site/content/images/tumblog/rss.gif +0 -0
- data/spec/data/site/content/index.txt +19 -0
- data/spec/data/site/content/photos.txt +21 -0
- data/spec/data/site/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
- data/spec/data/site/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
- data/spec/data/site/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
- data/spec/data/site/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
- data/spec/data/site/content/tumblog/200807/up-a-tree/index.txt +13 -0
- data/spec/data/site/content/tumblog/index.txt +37 -0
- data/spec/data/site/content/tumblog/rss.txt +37 -0
- data/spec/data/site/layouts/default.txt +58 -0
- data/spec/data/site/layouts/tumblog/default.txt +44 -0
- data/spec/data/site/layouts/tumblog/post.txt +15 -0
- data/spec/data/site/lib/breadcrumbs.rb +28 -0
- data/spec/data/site/lib/tumblog_helper.rb +32 -0
- data/spec/data/site/tasks/tumblog.rake +30 -0
- data/spec/data/site/templates/_partial.erb +10 -0
- data/spec/data/site/templates/atom_feed.erb +40 -0
- data/spec/data/site/templates/page.erb +18 -0
- data/spec/data/site/templates/presentation.erb +40 -0
- data/spec/data/site/templates/tumblog/conversation.erb +12 -0
- data/spec/data/site/templates/tumblog/link.erb +10 -0
- data/spec/data/site/templates/tumblog/photo.erb +13 -0
- data/spec/data/site/templates/tumblog/post.erb +12 -0
- data/spec/data/site/templates/tumblog/quote.erb +11 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +51 -0
- data/spec/webby/apps/generator_spec.rb +116 -0
- data/spec/webby/apps/main_spec.rb +88 -0
- data/spec/webby/filters/basepath_spec.rb +167 -0
- data/spec/webby/filters/outline_spec.rb +92 -0
- data/spec/webby/filters/textile_spec.rb +20 -0
- data/spec/webby/helpers/capture_helper_spec.rb +56 -0
- data/spec/webby/renderer_spec.rb +139 -0
- data/spec/webby/resources/db_spec.rb +250 -0
- data/spec/webby/resources/layout_spec.rb +83 -0
- data/spec/webby/resources/meta_file_spec.rb +171 -0
- data/spec/webby/resources/page_spec.rb +111 -0
- data/spec/webby/resources/partial_spec.rb +58 -0
- data/spec/webby/resources/resource_spec.rb +219 -0
- data/spec/webby/resources/static_spec.rb +49 -0
- data/spec/webby/resources_spec.rb +69 -0
- data/tasks/ann.rake +81 -0
- data/tasks/bones.rake +21 -0
- data/tasks/gem.rake +187 -0
- data/tasks/git.rake +41 -0
- data/tasks/manifest.rake +48 -0
- data/tasks/notes.rake +28 -0
- data/tasks/post_load.rake +39 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +268 -0
- data/tasks/spec.rake +55 -0
- data/tasks/website.rake +38 -0
- metadata +365 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
require File.expand_path(
|
3
|
+
File.join(File.dirname(__FILE__), %w[.. .. spec_helper]))
|
4
|
+
|
5
|
+
# -------------------------------------------------------------------------
|
6
|
+
describe Webby::Resources::Static do
|
7
|
+
before :all do
|
8
|
+
@filename = File.join %w[content css coderay.css]
|
9
|
+
@static = Webby::Resources::Static.new(@filename)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'contains no meta-data' do
|
13
|
+
@static._meta_data.should be_empty
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'uses the path remounted to the output directory as the destination' do
|
17
|
+
@static.destination.should == 'output/css/coderay.css'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'returns destination without the output directory as the url' do
|
21
|
+
@static.url.should == '/css/coderay.css'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'reads the contents of the file' do
|
25
|
+
str = @static._read
|
26
|
+
str.split($/).first.should == '.CodeRay {'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'uses the file extension as the extension' do
|
30
|
+
@static.extension.should equal(@static.ext)
|
31
|
+
end
|
32
|
+
|
33
|
+
# -----------------------------------------------------------------------
|
34
|
+
describe '.dirty?' do
|
35
|
+
it 'returns true if the output file is missing' do
|
36
|
+
@static.dirty?.should == true
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'returns false if the output file is present' do
|
40
|
+
dest = @static.destination
|
41
|
+
FileUtils.mkdir_p File.dirname(dest)
|
42
|
+
FileUtils.touch dest
|
43
|
+
@static.dirty?.should == false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end # describe Webby::Resources::Static
|
48
|
+
|
49
|
+
# EOF
|
@@ -0,0 +1,69 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require File.expand_path(
|
4
|
+
File.join(File.dirname(__FILE__), %w[.. spec_helper]))
|
5
|
+
|
6
|
+
# --------------------------------------------------------------------------
|
7
|
+
describe Webby::Resources do
|
8
|
+
before :each do
|
9
|
+
Webby::Resources.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should raise a useful error if there are no layouts" do
|
13
|
+
layouts = mock("Layouts")
|
14
|
+
Webby::Resources.stub!(:layouts).and_return(layouts)
|
15
|
+
layouts.should_receive(:find).and_raise RuntimeError
|
16
|
+
|
17
|
+
lambda do
|
18
|
+
Webby::Resources.find_layout("default")
|
19
|
+
end.should raise_error(Webby::Error, 'could not find layout "default"')
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return the directory name for a file" do
|
23
|
+
Webby::Resources.dirname('content').should == './'
|
24
|
+
Webby::Resources.dirname('layouts').should == './'
|
25
|
+
|
26
|
+
Webby::Resources.dirname('content/index.txt').should == ''
|
27
|
+
Webby::Resources.dirname('layouts/default.txt').should == ''
|
28
|
+
|
29
|
+
Webby::Resources.dirname('content/tumblog/index.txt').should == 'tumblog'
|
30
|
+
Webby::Resources.dirname('layouts/tumblog/post.txt').should == 'tumblog'
|
31
|
+
|
32
|
+
Webby::Resources.dirname('output/tumblog/index.html').should == 'output/tumblog'
|
33
|
+
Webby::Resources.dirname('templates/tumblog/post.erb').should == 'templates/tumblog'
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should normalize the path for a filename" do
|
37
|
+
Webby::Resources.path('content').should == 'content'
|
38
|
+
Webby::Resources.path('/content').should == 'content'
|
39
|
+
Webby::Resources.path('./content').should == 'content'
|
40
|
+
|
41
|
+
Webby::Resources.path('./').should == ''
|
42
|
+
Webby::Resources.path('/').should == ''
|
43
|
+
Webby::Resources.path('').should == ''
|
44
|
+
end
|
45
|
+
|
46
|
+
# ------------------------------------------------------------------------
|
47
|
+
describe "#new" do
|
48
|
+
before :each do
|
49
|
+
layout = Webby::Resources::Layout.
|
50
|
+
new(Webby.datapath %w[site layouts default.txt])
|
51
|
+
Webby::Resources.stub!(:find_layout).and_return(layout)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "creates multiple pages for files with multiple YAML sections" do
|
55
|
+
pages = Webby::Resources.pages
|
56
|
+
|
57
|
+
fn = File.join %w[content photos.txt]
|
58
|
+
Webby::Resources.new(fn)
|
59
|
+
|
60
|
+
ary = pages.find(:all, :in_directory => 'photos')
|
61
|
+
ary.map {|page| page.title}.should == [
|
62
|
+
'First Photo', 'Second Photo', 'Third Photo'
|
63
|
+
]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
# EOF
|
data/tasks/ann.rake
ADDED
@@ -0,0 +1,81 @@
|
|
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
|
+
# A prerequisites task that all other tasks depend upon
|
13
|
+
task :prereqs
|
14
|
+
|
15
|
+
file PROJ.ann.file do
|
16
|
+
ann = PROJ.ann
|
17
|
+
puts "Generating #{ann.file}"
|
18
|
+
File.open(ann.file,'w') do |fd|
|
19
|
+
fd.puts("#{PROJ.name} version #{PROJ.version}")
|
20
|
+
fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
|
21
|
+
fd.puts(" #{PROJ.url}") if PROJ.url.valid?
|
22
|
+
fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
|
23
|
+
fd.puts
|
24
|
+
fd.puts("== DESCRIPTION")
|
25
|
+
fd.puts
|
26
|
+
fd.puts(PROJ.description)
|
27
|
+
fd.puts
|
28
|
+
fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
|
29
|
+
fd.puts
|
30
|
+
ann.paragraphs.each do |p|
|
31
|
+
fd.puts "== #{p.upcase}"
|
32
|
+
fd.puts
|
33
|
+
fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
|
34
|
+
fd.puts
|
35
|
+
end
|
36
|
+
fd.puts ann.text if ann.text
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "Create an announcement file"
|
41
|
+
task :announcement => ['ann:prereqs', PROJ.ann.file]
|
42
|
+
|
43
|
+
desc "Send an email announcement"
|
44
|
+
task :email => ['ann:prereqs', PROJ.ann.file] do
|
45
|
+
ann = PROJ.ann
|
46
|
+
from = ann.email[:from] || PROJ.email
|
47
|
+
to = Array(ann.email[:to])
|
48
|
+
|
49
|
+
### build a mail header for RFC 822
|
50
|
+
rfc822msg = "From: #{from}\n"
|
51
|
+
rfc822msg << "To: #{to.join(',')}\n"
|
52
|
+
rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
|
53
|
+
rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
|
54
|
+
rfc822msg << "\n"
|
55
|
+
rfc822msg << "Date: #{Time.new.rfc822}\n"
|
56
|
+
rfc822msg << "Message-Id: "
|
57
|
+
rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
|
58
|
+
rfc822msg << File.read(ann.file)
|
59
|
+
|
60
|
+
params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
|
61
|
+
ann.email[key]
|
62
|
+
end
|
63
|
+
|
64
|
+
params[3] = PROJ.email if params[3].nil?
|
65
|
+
|
66
|
+
if params[4].nil?
|
67
|
+
STDOUT.write "Please enter your e-mail password (#{params[3]}): "
|
68
|
+
params[4] = STDIN.gets.chomp
|
69
|
+
end
|
70
|
+
|
71
|
+
### send email
|
72
|
+
Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
|
73
|
+
end
|
74
|
+
end # namespace :ann
|
75
|
+
|
76
|
+
desc 'Alias to ann:announcement'
|
77
|
+
task :ann => 'ann:announcement'
|
78
|
+
|
79
|
+
CLOBBER << PROJ.ann.file
|
80
|
+
|
81
|
+
# EOF
|
data/tasks/bones.rake
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
if HAVE_BONES
|
4
|
+
|
5
|
+
namespace :bones do
|
6
|
+
|
7
|
+
desc 'Show the PROJ open struct'
|
8
|
+
task :debug do |t|
|
9
|
+
atr = if t.application.top_level_tasks.length == 2
|
10
|
+
t.application.top_level_tasks.pop
|
11
|
+
end
|
12
|
+
|
13
|
+
if atr then Bones::Debug.show_attr(PROJ, atr)
|
14
|
+
else Bones::Debug.show PROJ end
|
15
|
+
end
|
16
|
+
|
17
|
+
end # namespace :bones
|
18
|
+
|
19
|
+
end # HAVE_BONES
|
20
|
+
|
21
|
+
# EOF
|
data/tasks/gem.rake
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
|
2
|
+
require 'find'
|
3
|
+
require 'rake/packagetask'
|
4
|
+
require 'rubygems/user_interaction'
|
5
|
+
require 'rubygems/builder'
|
6
|
+
|
7
|
+
class Bones::GemPackageTask < Rake::PackageTask
|
8
|
+
# Ruby GEM spec containing the metadata for this package. The
|
9
|
+
# name, version and package_files are automatically determined
|
10
|
+
# from the GEM spec and don't need to be explicitly provided.
|
11
|
+
#
|
12
|
+
attr_accessor :gem_spec
|
13
|
+
|
14
|
+
# Create a GEM Package task library. Automatically define the gem
|
15
|
+
# if a block is given. If no block is supplied, then +define+
|
16
|
+
# needs to be called to define the task.
|
17
|
+
#
|
18
|
+
def initialize(gem_spec)
|
19
|
+
init(gem_spec)
|
20
|
+
yield self if block_given?
|
21
|
+
define if block_given?
|
22
|
+
end
|
23
|
+
|
24
|
+
# Initialization tasks without the "yield self" or define
|
25
|
+
# operations.
|
26
|
+
#
|
27
|
+
def init(gem)
|
28
|
+
super(gem.name, gem.version)
|
29
|
+
@gem_spec = gem
|
30
|
+
@package_files += gem_spec.files if gem_spec.files
|
31
|
+
end
|
32
|
+
|
33
|
+
# Create the Rake tasks and actions specified by this
|
34
|
+
# GemPackageTask. (+define+ is automatically called if a block is
|
35
|
+
# given to +new+).
|
36
|
+
#
|
37
|
+
def define
|
38
|
+
super
|
39
|
+
task :prereqs
|
40
|
+
task :package => ['gem:prereqs', "#{package_dir_path}/#{gem_file}"]
|
41
|
+
file "#{package_dir_path}/#{gem_file}" => [package_dir_path] + package_files do
|
42
|
+
when_writing("Creating GEM") {
|
43
|
+
chdir(package_dir_path) do
|
44
|
+
Gem::Builder.new(gem_spec).build
|
45
|
+
verbose(true) {
|
46
|
+
mv gem_file, "../#{gem_file}"
|
47
|
+
}
|
48
|
+
end
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def gem_file
|
54
|
+
if @gem_spec.platform == Gem::Platform::RUBY
|
55
|
+
"#{package_name}.gem"
|
56
|
+
else
|
57
|
+
"#{package_name}-#{@gem_spec.platform}.gem"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end # class Bones::GemPackageTask
|
61
|
+
|
62
|
+
namespace :gem do
|
63
|
+
|
64
|
+
PROJ.gem._spec = Gem::Specification.new do |s|
|
65
|
+
s.name = PROJ.name
|
66
|
+
s.version = PROJ.version
|
67
|
+
s.summary = PROJ.summary
|
68
|
+
s.authors = Array(PROJ.authors)
|
69
|
+
s.email = PROJ.email
|
70
|
+
s.homepage = Array(PROJ.url).first
|
71
|
+
s.rubyforge_project = PROJ.rubyforge.name
|
72
|
+
|
73
|
+
s.description = PROJ.description
|
74
|
+
|
75
|
+
PROJ.gem.dependencies.each do |dep|
|
76
|
+
s.add_dependency(*dep)
|
77
|
+
end
|
78
|
+
|
79
|
+
s.files = PROJ.gem.files
|
80
|
+
s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
|
81
|
+
s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
|
82
|
+
|
83
|
+
s.bindir = 'bin'
|
84
|
+
dirs = Dir["{#{PROJ.libs.join(',')}}"]
|
85
|
+
s.require_paths = dirs unless dirs.empty?
|
86
|
+
|
87
|
+
incl = Regexp.new(PROJ.rdoc.include.join('|'))
|
88
|
+
excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
|
89
|
+
excl = Regexp.new(excl.join('|'))
|
90
|
+
rdoc_files = PROJ.gem.files.find_all do |fn|
|
91
|
+
case fn
|
92
|
+
when excl; false
|
93
|
+
when incl; true
|
94
|
+
else false end
|
95
|
+
end
|
96
|
+
s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
|
97
|
+
s.extra_rdoc_files = rdoc_files
|
98
|
+
s.has_rdoc = true
|
99
|
+
|
100
|
+
if test ?f, PROJ.test.file
|
101
|
+
s.test_file = PROJ.test.file
|
102
|
+
else
|
103
|
+
s.test_files = PROJ.test.files.to_a
|
104
|
+
end
|
105
|
+
|
106
|
+
# Do any extra stuff the user wants
|
107
|
+
PROJ.gem.extras.each do |msg, val|
|
108
|
+
case val
|
109
|
+
when Proc
|
110
|
+
val.call(s.send(msg))
|
111
|
+
else
|
112
|
+
s.send "#{msg}=", val
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end # Gem::Specification.new
|
116
|
+
|
117
|
+
Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
|
118
|
+
pkg.need_tar = PROJ.gem.need_tar
|
119
|
+
pkg.need_zip = PROJ.gem.need_zip
|
120
|
+
end
|
121
|
+
|
122
|
+
desc 'Show information about the gem'
|
123
|
+
task :debug => 'gem:prereqs' do
|
124
|
+
puts PROJ.gem._spec.to_ruby
|
125
|
+
end
|
126
|
+
|
127
|
+
desc 'Install the gem'
|
128
|
+
task :install => [:clobber, 'gem:package'] do
|
129
|
+
sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
|
130
|
+
|
131
|
+
# use this version of the command for rubygems > 1.0.0
|
132
|
+
#sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
|
133
|
+
end
|
134
|
+
|
135
|
+
desc 'Uninstall the gem'
|
136
|
+
task :uninstall do
|
137
|
+
installed_list = Gem.source_index.find_name(PROJ.name)
|
138
|
+
if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
|
139
|
+
sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
desc 'Reinstall the gem'
|
144
|
+
task :reinstall => [:uninstall, :install]
|
145
|
+
|
146
|
+
desc 'Cleanup the gem'
|
147
|
+
task :cleanup do
|
148
|
+
sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
|
149
|
+
end
|
150
|
+
|
151
|
+
namespace :mswin32 do
|
152
|
+
win32_spec = PROJ.gem._spec.dup
|
153
|
+
win32_spec.platform = 'x86-mswin32'
|
154
|
+
|
155
|
+
pkg = Bones::GemPackageTask.new(win32_spec)
|
156
|
+
class << pkg
|
157
|
+
def package_dir_path() "#{package_dir}/#{package_name}-x86-mswin32"; end
|
158
|
+
end
|
159
|
+
pkg.define
|
160
|
+
|
161
|
+
file "#{pkg.package_dir_path}/#{pkg.gem_file}" => :unix2dos
|
162
|
+
|
163
|
+
task :unix2dos do
|
164
|
+
reject = %w[.gif .jpg .jpeg]
|
165
|
+
Find.find(File.join(pkg.package_dir_path, 'examples')) do |fn|
|
166
|
+
next unless test(?f, fn)
|
167
|
+
next if reject.include?(File.extname(fn))
|
168
|
+
sh %{unix2dos #{fn}}
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end # namespace :mswin32
|
172
|
+
end # namespace :gem
|
173
|
+
|
174
|
+
|
175
|
+
desc 'Alias to gem:package'
|
176
|
+
task :gem => ['gem:package', 'gem:mswin32:package']
|
177
|
+
|
178
|
+
task :clobber => ['gem:clobber_package', 'gem:mswin32:clobber_package']
|
179
|
+
|
180
|
+
%w[
|
181
|
+
gem:clobber_package
|
182
|
+
gem:mswin32:clobber_package
|
183
|
+
gem:mswin32:package
|
184
|
+
gem:mswin32:repackage
|
185
|
+
].each {|name| remove_desc_for_task name}
|
186
|
+
|
187
|
+
# EOF
|
data/tasks/git.rake
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
if HAVE_GIT
|
4
|
+
|
5
|
+
namespace :git do
|
6
|
+
|
7
|
+
# A prerequisites task that all other tasks depend upon
|
8
|
+
task :prereqs
|
9
|
+
|
10
|
+
desc 'Show tags from the Git repository'
|
11
|
+
task :show_tags => 'git:prereqs' do |t|
|
12
|
+
puts %x/git tag/
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Create a new tag in the Git repository'
|
16
|
+
task :create_tag => 'git:prereqs' do |t|
|
17
|
+
v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
|
18
|
+
abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
|
19
|
+
|
20
|
+
tag = "%s-%s" % [PROJ.name, PROJ.version]
|
21
|
+
msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
|
22
|
+
|
23
|
+
puts "Creating Git tag '#{tag}'"
|
24
|
+
unless system "git tag -a -m '#{msg}' #{tag}"
|
25
|
+
abort "Tag creation failed"
|
26
|
+
end
|
27
|
+
|
28
|
+
if %x/git remote/ =~ %r/^origin\s*$/
|
29
|
+
unless system "git push origin #{tag}"
|
30
|
+
abort "Could not push tag to remote Git repository"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end # namespace :git
|
36
|
+
|
37
|
+
task 'gem:release' => 'git:create_tag'
|
38
|
+
|
39
|
+
end # if HAVE_GIT
|
40
|
+
|
41
|
+
# EOF
|