autumn 3.1.8
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/AUTHORS +11 -0
- data/CHANGELOG +567 -0
- data/MANIFEST +110 -0
- data/README +1114 -0
- data/README.textile +1153 -0
- data/Rakefile +75 -0
- data/autumn.gemspec +44 -0
- data/bin/autumn +11 -0
- data/lib/autumn.rb +8 -0
- data/lib/autumn/authentication.rb +238 -0
- data/lib/autumn/channel_leaf.rb +107 -0
- data/lib/autumn/coder.rb +166 -0
- data/lib/autumn/console_boot.rb +10 -0
- data/lib/autumn/ctcp.rb +250 -0
- data/lib/autumn/daemon.rb +207 -0
- data/lib/autumn/datamapper_hacks.rb +290 -0
- data/lib/autumn/foliater.rb +231 -0
- data/lib/autumn/formatting.rb +236 -0
- data/lib/autumn/generator.rb +231 -0
- data/lib/autumn/genesis.rb +190 -0
- data/lib/autumn/inheritable_attributes.rb +162 -0
- data/lib/autumn/leaf.rb +738 -0
- data/lib/autumn/log_facade.rb +49 -0
- data/lib/autumn/misc.rb +87 -0
- data/lib/autumn/resources/daemons/Anothernet.yml +3 -0
- data/lib/autumn/resources/daemons/AustHex.yml +29 -0
- data/lib/autumn/resources/daemons/Bahamut.yml +67 -0
- data/lib/autumn/resources/daemons/Dancer.yml +3 -0
- data/lib/autumn/resources/daemons/GameSurge.yml +3 -0
- data/lib/autumn/resources/daemons/IRCnet.yml +3 -0
- data/lib/autumn/resources/daemons/Ithildin.yml +7 -0
- data/lib/autumn/resources/daemons/KineIRCd.yml +56 -0
- data/lib/autumn/resources/daemons/PTlink.yml +6 -0
- data/lib/autumn/resources/daemons/QuakeNet.yml +20 -0
- data/lib/autumn/resources/daemons/RFC1459.yml +158 -0
- data/lib/autumn/resources/daemons/RFC2811.yml +16 -0
- data/lib/autumn/resources/daemons/RFC2812.yml +36 -0
- data/lib/autumn/resources/daemons/RatBox.yml +25 -0
- data/lib/autumn/resources/daemons/Ultimate.yml +24 -0
- data/lib/autumn/resources/daemons/Undernet.yml +6 -0
- data/lib/autumn/resources/daemons/Unreal.yml +110 -0
- data/lib/autumn/resources/daemons/_Other.yml +7 -0
- data/lib/autumn/resources/daemons/aircd.yml +33 -0
- data/lib/autumn/resources/daemons/bdq-ircd.yml +3 -0
- data/lib/autumn/resources/daemons/hybrid.yml +38 -0
- data/lib/autumn/resources/daemons/ircu.yml +67 -0
- data/lib/autumn/resources/daemons/tr-ircd.yml +8 -0
- data/lib/autumn/script.rb +74 -0
- data/lib/autumn/speciator.rb +165 -0
- data/lib/autumn/stem.rb +919 -0
- data/lib/autumn/stem_facade.rb +176 -0
- data/lib/autumn/tool/bin.rb +301 -0
- data/lib/autumn/tool/create.rb +48 -0
- data/lib/autumn/tool/project_creator.rb +110 -0
- data/lib/autumn/version.rb +3 -0
- data/lib/skel/Rakefile +163 -0
- data/lib/skel/config/global.yml +2 -0
- data/lib/skel/config/seasons/testing/database.yml +4 -0
- data/lib/skel/config/seasons/testing/leaves.yml +9 -0
- data/lib/skel/config/seasons/testing/season.yml +2 -0
- data/lib/skel/config/seasons/testing/stems.yml +10 -0
- data/lib/skel/leaves/administrator/README +20 -0
- data/lib/skel/leaves/administrator/controller.rb +67 -0
- data/lib/skel/leaves/administrator/views/autumn.txt.erb +1 -0
- data/lib/skel/leaves/administrator/views/reload.txt.erb +11 -0
- data/lib/skel/leaves/insulter/README +17 -0
- data/lib/skel/leaves/insulter/controller.rb +65 -0
- data/lib/skel/leaves/insulter/views/about.txt.erb +1 -0
- data/lib/skel/leaves/insulter/views/help.txt.erb +1 -0
- data/lib/skel/leaves/insulter/views/insult.txt.erb +1 -0
- data/lib/skel/leaves/scorekeeper/README +34 -0
- data/lib/skel/leaves/scorekeeper/config.yml +2 -0
- data/lib/skel/leaves/scorekeeper/controller.rb +104 -0
- data/lib/skel/leaves/scorekeeper/helpers/general.rb +64 -0
- data/lib/skel/leaves/scorekeeper/models/channel.rb +12 -0
- data/lib/skel/leaves/scorekeeper/models/person.rb +14 -0
- data/lib/skel/leaves/scorekeeper/models/pseudonym.rb +11 -0
- data/lib/skel/leaves/scorekeeper/models/score.rb +14 -0
- data/lib/skel/leaves/scorekeeper/tasks/stats.rake +17 -0
- data/lib/skel/leaves/scorekeeper/views/about.txt.erb +1 -0
- data/lib/skel/leaves/scorekeeper/views/change.txt.erb +5 -0
- data/lib/skel/leaves/scorekeeper/views/history.txt.erb +11 -0
- data/lib/skel/leaves/scorekeeper/views/points.txt.erb +5 -0
- data/lib/skel/leaves/scorekeeper/views/usage.txt.erb +1 -0
- data/lib/skel/log/README +1 -0
- data/lib/skel/script/console +28 -0
- data/lib/skel/script/destroy +48 -0
- data/lib/skel/script/generate +48 -0
- data/lib/skel/shared/README +1 -0
- data/lib/skel/tmp/README +1 -0
- data/spec/authentication_spec.rb +328 -0
- data/spec/channel_leaf_spec.rb +142 -0
- data/spec/coder_spec.rb +146 -0
- data/spec/ctcp_spec.rb +222 -0
- data/spec/daemon_spec.rb +202 -0
- data/spec/datamapper_hacks_spec.rb +164 -0
- data/tasks/authors.rake +30 -0
- data/tasks/changelog.rake +18 -0
- data/tasks/copyright.rake +21 -0
- data/tasks/doc.rake +7 -0
- data/tasks/gem.rake +23 -0
- data/tasks/gem_installer.rake +76 -0
- data/tasks/install_dependencies.rake +6 -0
- data/tasks/manifest.rake +4 -0
- data/tasks/rcov.rake +23 -0
- data/tasks/release.rake +52 -0
- data/tasks/reversion.rake +8 -0
- data/tasks/setup.rake +24 -0
- data/tasks/spec.rake +7 -0
- data/tasks/yard.rake +4 -0
- metadata +188 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'facets/symbol'
|
|
3
|
+
require 'dm-core'
|
|
4
|
+
|
|
5
|
+
require 'autumn/misc'
|
|
6
|
+
require 'autumn/datamapper_hacks'
|
|
7
|
+
|
|
8
|
+
describe DataMapper::Resource do
|
|
9
|
+
describe "within a module" do
|
|
10
|
+
before :each do
|
|
11
|
+
module Blog
|
|
12
|
+
class Post
|
|
13
|
+
include DataMapper::Resource
|
|
14
|
+
property :id, Integer, :serial => true
|
|
15
|
+
has n, :categories, :through => Resource
|
|
16
|
+
has 1, :content
|
|
17
|
+
belongs_to :author
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Content
|
|
21
|
+
include DataMapper::Resource
|
|
22
|
+
property :id, Integer, :serial => true
|
|
23
|
+
belongs_to :post
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class Author
|
|
27
|
+
include DataMapper::Resource
|
|
28
|
+
property :id, Integer, :serial => true
|
|
29
|
+
has n, :posts
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class Category
|
|
33
|
+
include DataMapper::Resource
|
|
34
|
+
property :id, Integer, :serial => true
|
|
35
|
+
has n, :posts, :through => Resource
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def class_name(relationship)
|
|
41
|
+
relationship.options.fetch(:class_name, Extlib::Inflection.classify(relationship.name))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should include the module name in the class name in one-to-many associations" do
|
|
45
|
+
class_name(Blog::Author.relationships[:posts]).should eql("Blog::Post")
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should include the module name in the class name in one-to-one associations" do
|
|
49
|
+
class_name(Blog::Post.relationships[:content]).should eql("Blog::Content")
|
|
50
|
+
class_name(Blog::Content.relationships[:post]).should eql("Blog::Post")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should include the module name in the class name in many-to-one associations" do
|
|
54
|
+
class_name(Blog::Post.relationships[:author]).should eql("Blog::Author")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should not include the module name in the class name in many-to-many associations" do
|
|
58
|
+
class_name(Blog::Post.relationships[:categories]).should eql("CategoryPost")
|
|
59
|
+
class_name(Blog::Category.relationships[:posts]).should eql("CategoryPost")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should define a many-to-many DataMapper resource in the module" do
|
|
63
|
+
Blog.constants.should include("CategoryPost")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
after :each do
|
|
67
|
+
Object.send :remove_const, :Blog
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe "with a a many_to_many relationship" do
|
|
72
|
+
before :each do
|
|
73
|
+
class Post
|
|
74
|
+
include DataMapper::Resource
|
|
75
|
+
property :id, Integer, :serial => true
|
|
76
|
+
has n, :categories, :through => Resource
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class Category
|
|
80
|
+
include DataMapper::Resource
|
|
81
|
+
property :id, Integer, :serial => true
|
|
82
|
+
has n, :posts, :through => Resource
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should define a join model" do
|
|
87
|
+
Object.constants.should include("CategoryPost")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it " ... with appropriate relationships" do
|
|
91
|
+
CategoryPost.many_to_one_relationships.collect(&:name).to_set.should == [ :category, :post ].to_set
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
after :each do
|
|
95
|
+
[ :Post, :Category, :CategoryPost ].each { |const| Object.send(:remove_const, const) }
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe "scoped to a repository other than its default" do
|
|
100
|
+
before :each do
|
|
101
|
+
DataMapper.setup(:other, "sqlite3::memory:")
|
|
102
|
+
repository(:other) do
|
|
103
|
+
class Post
|
|
104
|
+
include DataMapper::Resource
|
|
105
|
+
property :id, Integer, :serial => true
|
|
106
|
+
has n, :categories, :through => Resource
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
class Category
|
|
110
|
+
include DataMapper::Resource
|
|
111
|
+
property :id, Integer, :serial => true
|
|
112
|
+
has n, :posts, :through => Resource
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should use the scoped repository for the near_relationship method" do
|
|
118
|
+
Post.relationships(:other)[:categories].near_relationship.should be_nil
|
|
119
|
+
repository(:other) { Post.relationships(:other)[:categories].near_relationship.should_not be_nil }
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should use the scoped repository for the remote_relationship method" do
|
|
123
|
+
Post.relationships(:other)[:categories].remote_relationship.should be_nil
|
|
124
|
+
repository(:other) { Post.relationships(:other)[:categories].remote_relationship.should_not be_nil }
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "should use the given repository for the properties_with_subclasses method" do
|
|
128
|
+
CategoryPost.properties_with_subclasses(:default).should be_empty
|
|
129
|
+
CategoryPost.properties_with_subclasses(:other).should_not be_empty
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
after :each do
|
|
133
|
+
[ :Post, :Category, :CategoryPost ].each { |const| Object.send(:remove_const, const) }
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
describe DataMapper::Repository do
|
|
139
|
+
before :each do
|
|
140
|
+
GC.start
|
|
141
|
+
repository(:other) do
|
|
142
|
+
class Post
|
|
143
|
+
include DataMapper::Resource
|
|
144
|
+
property :id, Integer, :serial => true
|
|
145
|
+
has n, :categories, :through => Resource
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
class Category
|
|
149
|
+
include DataMapper::Resource
|
|
150
|
+
property :id, Integer, :serial => true
|
|
151
|
+
has n, :posts, :through => Resource
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "should define a models method that returns all models defined for this repository" do
|
|
157
|
+
repository(:other).models.should include(Post, Category)
|
|
158
|
+
repository(:default).models.should_not include(Post, Category)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
after :each do
|
|
162
|
+
[ :Post, :Category, :CategoryPost ].each { |const| Object.send(:remove_const, const) }
|
|
163
|
+
end
|
|
164
|
+
end
|
data/tasks/authors.rake
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Once git has a fix for the glibc in handling .mailmap and another fix for
|
|
2
|
+
# allowing empty mail address to be mapped in .mailmap we won't have to handle
|
|
3
|
+
# them manually.
|
|
4
|
+
|
|
5
|
+
desc 'Update AUTHORS'
|
|
6
|
+
task :authors do
|
|
7
|
+
authors = Hash.new(0)
|
|
8
|
+
|
|
9
|
+
`git shortlog -nse`.scan(/(\d+)\s(.+)\s<(.*)>$/) do |count, name, email|
|
|
10
|
+
case name
|
|
11
|
+
when "bougyman"
|
|
12
|
+
name, email = "TJ Vanderpoel", "bougy.man@gmail.com"
|
|
13
|
+
when /riscfuture/i
|
|
14
|
+
name, email = "Tim Morgan", "riscfuture@gmail.com"
|
|
15
|
+
when "Michael Fellinger m.fellinger@gmail.com"
|
|
16
|
+
name, email = "Michael Fellinger", "m.fellinger@gmail.com"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
authors[[name, email]] += count.to_i
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
File.open('AUTHORS', 'w+') do |io|
|
|
23
|
+
io.puts "Following persons have contributed to #{GEMSPEC.name}."
|
|
24
|
+
io.puts '(Sorted by number of submitted patches, then alphabetically)'
|
|
25
|
+
io.puts ''
|
|
26
|
+
authors.sort_by{|(n,e),c| [-c, n.downcase] }.each do |(name, email), count|
|
|
27
|
+
io.puts("%6d %s <%s>" % [count, name, email])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
desc 'update changelog'
|
|
2
|
+
task :changelog do
|
|
3
|
+
File.open('CHANGELOG', 'w+') do |changelog|
|
|
4
|
+
`git log -z --abbrev-commit`.split("\0").each do |commit|
|
|
5
|
+
next if commit =~ /^Merge: \d*/
|
|
6
|
+
ref, author, time, _, title, _, message = commit.split("\n", 7)
|
|
7
|
+
ref = ref[/commit ([0-9a-f]+)/, 1]
|
|
8
|
+
author = author[/Author: (.*)/, 1].strip
|
|
9
|
+
time = Time.parse(time[/Date: (.*)/, 1]).utc
|
|
10
|
+
title.strip!
|
|
11
|
+
|
|
12
|
+
changelog.puts "[#{ref} | #{time}] #{author}"
|
|
13
|
+
changelog.puts '', " * #{title}"
|
|
14
|
+
changelog.puts '', message.rstrip if message
|
|
15
|
+
changelog.puts
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
desc "add copyright to all .rb files in the distribution"
|
|
2
|
+
task :copyright do
|
|
3
|
+
ignore = File.readlines('doc/LEGAL').
|
|
4
|
+
select{|line| line.strip!; File.exist?(line)}.
|
|
5
|
+
map{|file| File.expand_path(file)}
|
|
6
|
+
|
|
7
|
+
puts "adding copyright to files that don't have it currently"
|
|
8
|
+
puts PROJECT_COPYRIGHT
|
|
9
|
+
puts
|
|
10
|
+
|
|
11
|
+
Dir['{lib,test}/**/*{.rb}'].each do |file|
|
|
12
|
+
file = File.expand_path(file)
|
|
13
|
+
next if ignore.include? file
|
|
14
|
+
lines = File.readlines(file).map{|l| l.chomp}
|
|
15
|
+
unless lines.first(PROJECT_COPYRIGHT.size) == PROJECT_COPYRIGHT
|
|
16
|
+
puts "#{file} seems to need attention, first 4 lines:"
|
|
17
|
+
puts lines[0..3]
|
|
18
|
+
puts
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/tasks/doc.rake
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
namespace :doc do
|
|
2
|
+
desc "Generate API documentation for Autumn"
|
|
3
|
+
task :api => :environment do
|
|
4
|
+
FileUtils.remove_dir 'doc/api' if File.directory? 'doc/api'
|
|
5
|
+
system "rdoc --main README --title 'Autumn API Documentation' -o doc/api --line-numbers --inline-source lib README"
|
|
6
|
+
end
|
|
7
|
+
end
|
data/tasks/gem.rake
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'rake/gempackagetask'
|
|
2
|
+
|
|
3
|
+
desc "make a gemspec"
|
|
4
|
+
task :gemspec => [:manifest, :changelog, :authors] do
|
|
5
|
+
gemspec_file = "#{GEMSPEC.name}.gemspec"
|
|
6
|
+
File.open(gemspec_file, 'w+'){|gs| gs.puts(GEMSPEC.to_ruby) }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
desc "package and install from gemspec"
|
|
10
|
+
task :install => [:gemspec] do
|
|
11
|
+
sh "gem build #{GEMSPEC.name}.gemspec"
|
|
12
|
+
sh "gem install #{GEMSPEC.name}-#{GEMSPEC.version}.gem"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc "uninstall the gem"
|
|
16
|
+
task :uninstall => [:clean] do
|
|
17
|
+
sh %{gem uninstall -x #{GEMSPEC.name}}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Rake::GemPackageTask.new(GEMSPEC) do |p|
|
|
21
|
+
p.need_tar = true
|
|
22
|
+
p.need_zip = true
|
|
23
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
task :gem_installer do
|
|
2
|
+
class GemInstaller
|
|
3
|
+
def initialize(options = {}, &block)
|
|
4
|
+
@gems = []
|
|
5
|
+
@options = options
|
|
6
|
+
|
|
7
|
+
run(&block)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def run(&block)
|
|
11
|
+
instance_eval(&block) if block_given?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def gem(name, version = nil, options = {})
|
|
15
|
+
if version.respond_to?(:merge!)
|
|
16
|
+
options = version
|
|
17
|
+
else
|
|
18
|
+
options[:version] = version
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
@gems << [name, options]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def setup_gemspec(gemspec)
|
|
25
|
+
gemspec.dependencies.each do |dependency|
|
|
26
|
+
dependency.version_requirements.as_list.each do |version|
|
|
27
|
+
gem(dependency.name, version)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
setup
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def setup
|
|
35
|
+
require 'rubygems'
|
|
36
|
+
require 'rubygems/dependency_installer'
|
|
37
|
+
|
|
38
|
+
@gems.each do |name, options|
|
|
39
|
+
setup_gem(name, options)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def setup_gem(name, options, try_install = true)
|
|
44
|
+
print "activating #{name} ... "
|
|
45
|
+
Gem.activate(name, *[options[:version]].compact)
|
|
46
|
+
require(options[:lib] || name)
|
|
47
|
+
puts "success."
|
|
48
|
+
rescue LoadError => error
|
|
49
|
+
puts error
|
|
50
|
+
install_gem(name, options) if try_install
|
|
51
|
+
setup_gem(name, options, try_install = false)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def install_gem(name, options)
|
|
55
|
+
installer = Gem::DependencyInstaller.new(options)
|
|
56
|
+
|
|
57
|
+
temp_argv(options[:extconf]) do
|
|
58
|
+
print "Installing #{name} ... "
|
|
59
|
+
installer.install(name, options[:version])
|
|
60
|
+
puts "done."
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def temp_argv(extconf)
|
|
65
|
+
if extconf ||= @options[:extconf]
|
|
66
|
+
old_argv = ARGV.clone
|
|
67
|
+
ARGV.replace(extconf.split(' '))
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
yield
|
|
71
|
+
|
|
72
|
+
ensure
|
|
73
|
+
ARGV.replace(old_argv) if extconf
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
data/tasks/manifest.rake
ADDED
data/tasks/rcov.rake
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
desc 'code coverage'
|
|
2
|
+
task :rcov => :clean do
|
|
3
|
+
specs = PROJECT_SPECS
|
|
4
|
+
|
|
5
|
+
ignore = %w[ gem rack bacon innate hpricot nagoro/lib/nagoro ]
|
|
6
|
+
|
|
7
|
+
if RUBY_VERSION >= '1.8.7'
|
|
8
|
+
ignore << 'begin_with' << 'end_with'
|
|
9
|
+
end
|
|
10
|
+
if RUBY_VERSION < '1.9'
|
|
11
|
+
ignore << 'fiber'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
ignored = ignore.join(',')
|
|
15
|
+
|
|
16
|
+
cmd = "rcov --aggregate coverage.data --sort coverage -t --%s -x '#{ignored}' %s"
|
|
17
|
+
|
|
18
|
+
while spec = specs.shift
|
|
19
|
+
puts '', "Gather coverage for #{spec} ..."
|
|
20
|
+
html = specs.empty? ? 'html' : 'no-html'
|
|
21
|
+
sh(cmd % [html, spec])
|
|
22
|
+
end
|
|
23
|
+
end
|
data/tasks/release.rake
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
namespace :release do
|
|
2
|
+
task :all => [:release_github, :release_rubyforge]
|
|
3
|
+
|
|
4
|
+
desc 'Display instructions to release on github'
|
|
5
|
+
task :github => [:reversion, :gemspec] do
|
|
6
|
+
name, version = GEMSPEC.name, GEMSPEC.version
|
|
7
|
+
|
|
8
|
+
puts <<INSTRUCTIONS
|
|
9
|
+
First add the relevant files:
|
|
10
|
+
|
|
11
|
+
git add AUTHORS MANIFEST CHANGELOG #{name}.gemspec lib/#{name}/version.rb
|
|
12
|
+
|
|
13
|
+
Then commit them, tag the commit, and push:
|
|
14
|
+
|
|
15
|
+
git commit -m 'Version #{version}'
|
|
16
|
+
git tag -a -m '#{version}' '#{version}'
|
|
17
|
+
git push
|
|
18
|
+
|
|
19
|
+
INSTRUCTIONS
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# TODO: Not tested
|
|
24
|
+
desc 'Display instructions to release on rubyforge'
|
|
25
|
+
task :rubyforge => [:reversion, :gemspec, :package] do
|
|
26
|
+
name, version = GEMSPEC.name, GEMSPEC.version
|
|
27
|
+
|
|
28
|
+
puts <<INSTRUCTIONS
|
|
29
|
+
To publish to rubyforge do following:
|
|
30
|
+
|
|
31
|
+
rubyforge login
|
|
32
|
+
rubyforge add_release #{name} #{name} '#{version}' pkg/#{name}-#{version}.gem
|
|
33
|
+
|
|
34
|
+
After you have done these steps, see:
|
|
35
|
+
|
|
36
|
+
rake release:rubyforge_archives
|
|
37
|
+
|
|
38
|
+
INSTRUCTIONS
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc 'Display instructions to add archives after release:rubyforge'
|
|
42
|
+
task :rubyforge_archives do
|
|
43
|
+
name, version = GEMSPEC.name, GEMSPEC.version
|
|
44
|
+
puts "Adding archives for distro packagers is:", ""
|
|
45
|
+
|
|
46
|
+
Dir["pkg/#{name}-#{version}.{tgz,zip}"].each do |file|
|
|
47
|
+
puts "rubyforge add_file #{name} #{name} '#{version}' '#{file}'"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
puts
|
|
51
|
+
end
|
|
52
|
+
end
|