corundum 0.0.6 → 0.0.7
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/README.md +56 -0
- data/doc/Specifications +1 -1
- data/doc/coverage/index.html +2451 -1997
- data/lib/corundum.rb +20 -29
- data/lib/corundum/browser-task.rb +21 -0
- data/lib/corundum/email.rb +11 -9
- data/lib/corundum/gem_building.rb +6 -3
- data/lib/corundum/gemcutter.rb +14 -10
- data/lib/corundum/gemspec_sanity.rb +11 -5
- data/lib/corundum/github-pages.rb +147 -0
- data/lib/corundum/rspec.rb +68 -82
- data/lib/corundum/rubyforge.rb +4 -10
- data/lib/corundum/simplecov.rb +41 -29
- data/lib/corundum/tasklib.rb +3 -53
- data/lib/corundum/tasklibs.rb +2 -0
- data/lib/corundum/version_control.rb +7 -7
- data/lib/corundum/version_control/git.rb +23 -29
- data/lib/corundum/version_control/monotone.rb +7 -15
- data/lib/corundum/yardoc.rb +36 -15
- data/spec/smoking_spec.rb +0 -2
- data/spec_help/file-sandbox.rb +10 -10
- metadata +39 -26
- data/doc/README +0 -2
- data/lib/corundum/configurable.rb +0 -54
- data/spec/bogus_spec.rb +0 -3
data/lib/corundum.rb
CHANGED
@@ -7,35 +7,26 @@ module Corundum
|
|
7
7
|
extend Rake::DSL
|
8
8
|
|
9
9
|
class Toolkit < TaskLib
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
:
|
22
|
-
:
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
:test => FileList['test/**/*.rb','spec/**/*.rb','features/**/*.rb'],
|
31
|
-
:docs => FileList['doc/**/*.rb'],
|
32
|
-
:project => FileList['Rakefile'],
|
33
|
-
:all => nil),
|
34
|
-
:rubyforge => nested().nil_fields(:group_id, :package_id,
|
35
|
-
:release_name, :home_page, :project_page),
|
36
|
-
:doc_dir => "rubydoc"
|
37
|
-
)
|
38
|
-
end
|
10
|
+
settings(
|
11
|
+
:gemspec => nil,
|
12
|
+
:gemspec_path => nil,
|
13
|
+
:finished_dir => "corundum",
|
14
|
+
:package_dir => "pkg",
|
15
|
+
:doc_dir => "rubydoc",
|
16
|
+
:browser => "chromium",
|
17
|
+
:finished_files => nested.nil_fields(:build, :qa, :package, :release, :press),
|
18
|
+
:files => nested.nil_fields(:code, :test, :docs),
|
19
|
+
:rubyforge => nested.nil_fields(:group_id, :package_id, :release_name, :home_page, :project_page),
|
20
|
+
:email => nested(
|
21
|
+
:servers => [ nested({ :server => "ruby-lang.org", :helo => "gmail.com" }) ],
|
22
|
+
:announce_to_email => "ruby-talk@ruby-lang.org"
|
23
|
+
),
|
24
|
+
:file_lists => nested(:code => FileList['lib/**/*.rb'],
|
25
|
+
:test => FileList['test/**/*.rb','spec/**/*.rb','features/**/*.rb'],
|
26
|
+
:docs => FileList['doc/**/*.rb'],
|
27
|
+
:project => FileList['Rakefile'],
|
28
|
+
:all => nil)
|
29
|
+
)
|
39
30
|
|
40
31
|
def load_gemspec
|
41
32
|
@gemspec_path ||= guess_gemspec
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'mattock/command-task'
|
2
|
+
|
3
|
+
module Corundum
|
4
|
+
class BrowserTask < Mattock::CommandTask
|
5
|
+
setting(:browser, "chromium")
|
6
|
+
setting(:index_html)
|
7
|
+
setting(:task_name, "view")
|
8
|
+
|
9
|
+
def default_configuration(parent)
|
10
|
+
self.browser = parent.browser
|
11
|
+
end
|
12
|
+
|
13
|
+
def task_args
|
14
|
+
[{task_name => index_html}]
|
15
|
+
end
|
16
|
+
|
17
|
+
def resolve_configuration
|
18
|
+
self.command = Mattock::CommandLine.new(browser, index_html)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/corundum/email.rb
CHANGED
@@ -2,17 +2,19 @@ require 'corundum/tasklib'
|
|
2
2
|
|
3
3
|
module Corundum
|
4
4
|
class Email < TaskLib
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
default_namespace :email
|
6
|
+
|
7
|
+
setting(:rubyforge)
|
8
|
+
setting(:email_servers, [])
|
9
|
+
setting(:gemspec)
|
10
|
+
setting(:announce_to_email, nil)
|
11
|
+
setting(:urls, nested.required_fields(:home_page, :project_page))
|
8
12
|
|
9
13
|
def default_configuration(toolkit)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
setting(:urls, nested(:home_page => toolkit.gemspec.homepage,
|
15
|
-
:project_page => toolkit.rubyforge.project_page))
|
14
|
+
self.rubyforge = toolkit.rubyforge
|
15
|
+
self.gemspec = toolkit.gemspec
|
16
|
+
self.urls.home_page = toolkit.gemspec.homepage
|
17
|
+
self.urls.project_page = toolkit.rubyforge.project_page
|
16
18
|
end
|
17
19
|
|
18
20
|
def announcement
|
@@ -2,10 +2,13 @@ require 'corundum/tasklib'
|
|
2
2
|
|
3
3
|
module Corundum
|
4
4
|
class GemBuilding < TaskLib
|
5
|
+
setting(:gemspec)
|
6
|
+
setting(:qa_finished_file)
|
7
|
+
setting(:package_dir, "pkg")
|
8
|
+
|
5
9
|
def default_configuration(toolkit)
|
6
|
-
|
7
|
-
|
8
|
-
setting(:package_dir, "pkg")
|
10
|
+
self.gemspec = toolkit.gemspec
|
11
|
+
self.qa_finished_file = toolkit.finished_files.qa
|
9
12
|
end
|
10
13
|
|
11
14
|
def define
|
data/lib/corundum/gemcutter.rb
CHANGED
@@ -2,21 +2,25 @@ require 'corundum/tasklib'
|
|
2
2
|
|
3
3
|
module Corundum
|
4
4
|
class GemCutter < TaskLib
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
default_namespace :gemcutter
|
6
|
+
|
7
|
+
setting(:gem_path, nil)
|
8
|
+
setting(:build)
|
9
|
+
setting(:gemspec)
|
10
|
+
setting(:build_finished_path)
|
11
|
+
setting(:gem_name)
|
12
|
+
setting(:package_dir)
|
8
13
|
|
9
14
|
def default_configuration(toolkit, build)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
setting(:package_dir, build.package_dir)
|
15
|
+
self.build = build
|
16
|
+
self.gemspec = toolkit.gemspec
|
17
|
+
self.build_finished_path = toolkit.finished_files.build
|
18
|
+
self.gem_name = toolkit.gemspec.full_name
|
19
|
+
self.package_dir = build.package_dir
|
16
20
|
end
|
17
21
|
|
18
22
|
def resolve_configuration
|
19
|
-
|
23
|
+
self.gem_path ||= File::join(package_dir, gemspec.file_name)
|
20
24
|
end
|
21
25
|
|
22
26
|
module CommandTweaks
|
@@ -2,16 +2,22 @@ require 'corundum/tasklib'
|
|
2
2
|
|
3
3
|
module Corundum
|
4
4
|
class GemspecSanity < TaskLib
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
default_namespace :gemspec_sanity
|
6
|
+
|
7
|
+
setting(:gemspec)
|
8
8
|
|
9
9
|
def default_configuration(toolkit)
|
10
|
-
|
10
|
+
self.gemspec = toolkit.gemspec
|
11
11
|
end
|
12
12
|
|
13
13
|
def define
|
14
14
|
in_namespace do
|
15
|
+
task :has_files do
|
16
|
+
if gemspec.files.nil? or gemspec.files.empty?
|
17
|
+
fail "No files mentioned in gemspec - do you intend an empty gem?"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
15
21
|
task :files_exist do
|
16
22
|
missing = gemspec.files.find_all do |path|
|
17
23
|
not File::exists?(path)
|
@@ -21,7 +27,7 @@ module Corundum
|
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
24
|
-
task :preflight => in_namespace(:files_exist)
|
30
|
+
task :preflight => in_namespace(:files_exist, :has_files)
|
25
31
|
end
|
26
32
|
end
|
27
33
|
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'corundum/tasklib'
|
2
|
+
require 'mattock/task'
|
3
|
+
|
4
|
+
module Corundum
|
5
|
+
class GitTask < Mattock::CommandTask
|
6
|
+
setting(:subcommand)
|
7
|
+
setting(:arguments, [])
|
8
|
+
|
9
|
+
def command
|
10
|
+
Mattock::CommandLine.new("git", "--no-pager") do |cmd|
|
11
|
+
cmd.options << subcommand
|
12
|
+
arguments.each do |arg|
|
13
|
+
cmd.options += [*arg]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class InDirCommandTask < Mattock::CommandTask
|
20
|
+
setting :target_dir
|
21
|
+
|
22
|
+
def default_configuration(parent)
|
23
|
+
parent.copy_settings_to(self)
|
24
|
+
end
|
25
|
+
|
26
|
+
def needed?
|
27
|
+
FileUtils.cd target_dir do
|
28
|
+
super
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def action
|
33
|
+
FileUtils.cd target_dir do
|
34
|
+
super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class GithubPages < TaskLib
|
40
|
+
default_namespace :publish_docs
|
41
|
+
|
42
|
+
setting(:target_dir, "gh-pages")
|
43
|
+
setting(:source_dir)
|
44
|
+
|
45
|
+
nil_fields :repo_dir
|
46
|
+
|
47
|
+
def branch
|
48
|
+
"gh-pages"
|
49
|
+
end
|
50
|
+
|
51
|
+
def default_configuration(doc_gen)
|
52
|
+
self.source_dir = doc_gen.target_dir
|
53
|
+
end
|
54
|
+
|
55
|
+
def resolve_configuration
|
56
|
+
self.repo_dir ||= File::join(target_dir, ".git")
|
57
|
+
end
|
58
|
+
|
59
|
+
def git_command(*args)
|
60
|
+
Mattock::CommandLine.new("git", "--no-pager") do |cmd|
|
61
|
+
args.each do |arg|
|
62
|
+
cmd.options += [*arg]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def git(*args)
|
68
|
+
result = git_command(*args).run
|
69
|
+
result.must_succeed!
|
70
|
+
result.stdout.lines.to_a
|
71
|
+
end
|
72
|
+
|
73
|
+
$verbose = true
|
74
|
+
|
75
|
+
def define
|
76
|
+
in_namespace do
|
77
|
+
InDirCommandTask.new(self) do |t|
|
78
|
+
t.task_name = :on_branch
|
79
|
+
t.verify_command = Mattock::PipelineChain.new do |chain|
|
80
|
+
chain.add git_command(%w{branch})
|
81
|
+
chain.add Mattock::CommandLine.new("grep", "-q", "'^[*] #{branch}'")
|
82
|
+
end
|
83
|
+
t.command = Mattock::PrereqChain.new do |chain|
|
84
|
+
chain.add git_command("checkout", branch)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
file repo_dir do
|
89
|
+
fail "Refusing to clobber existing #{target_dir}" if File.exists?(target_dir)
|
90
|
+
|
91
|
+
url = git("config", "--get", "remote.origin.url").first
|
92
|
+
|
93
|
+
git("clone", url.chomp, "-b", branch, target_dir)
|
94
|
+
Mattock::CommandLine.new("rm", File::join(repo_dir, "hooks", "*")).must_succeed!
|
95
|
+
end
|
96
|
+
|
97
|
+
task :pull => [repo_dir, :on_branch] do
|
98
|
+
FileUtils.cd target_dir do
|
99
|
+
git("pull")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
InDirCommandTask.new(self) do |t|
|
104
|
+
t.task_name = :setup
|
105
|
+
t.verify_command = Mattock::PipelineChain.new do |chain|
|
106
|
+
chain.add git_command(%w{branch -r})
|
107
|
+
chain.add Mattock::CommandLine.new("grep", "-q", branch)
|
108
|
+
end
|
109
|
+
t.command = Mattock::PrereqChain.new do |cmd|
|
110
|
+
cmd.add git_command("checkout", "-b", branch)
|
111
|
+
cmd.add Mattock::CommandLine.new("rm -rf *")
|
112
|
+
cmd.add git_command(%w{commit -a -m} + ["'Creating pages'"])
|
113
|
+
cmd.add git_command("push", "origin", branch)
|
114
|
+
cmd.add git_command("branch", "--set-upstream", branch, "origin/" + branch)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
task :setup => repo_dir
|
118
|
+
|
119
|
+
task :pre_publish => [repo_dir, :setup, :pull]
|
120
|
+
|
121
|
+
task :clobber_target => :on_branch do
|
122
|
+
Mattock::CommandLine.new(*%w{rm -rf}) do |cmd|
|
123
|
+
cmd.options << target_dir + "/*"
|
124
|
+
end.must_succeed!
|
125
|
+
end
|
126
|
+
|
127
|
+
task :assemble_docs => [:pre_publish, :clobber_target] do
|
128
|
+
Mattock::CommandLine.new(*%w{cp -a}) do |cmd|
|
129
|
+
cmd.options << source_dir + "/*"
|
130
|
+
cmd.options << target_dir
|
131
|
+
end.must_succeed!
|
132
|
+
end
|
133
|
+
|
134
|
+
task :publish => [:assemble_docs, :on_branch] do
|
135
|
+
FileUtils.cd target_dir do
|
136
|
+
git("add", ".")
|
137
|
+
git("commit", "-m", "'Corundum auto-publish'")
|
138
|
+
git("push", "origin", branch)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
desc "Push documentation files to Github Pages"
|
144
|
+
task root_task => self[:publish]
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
data/lib/corundum/rspec.rb
CHANGED
@@ -1,114 +1,100 @@
|
|
1
1
|
require 'corundum/tasklib'
|
2
2
|
require 'rspec/core'
|
3
|
+
require 'mattock/command-task'
|
4
|
+
require 'rbconfig'
|
3
5
|
|
4
6
|
module Corundum
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
def default_namespace
|
11
|
-
:rspec
|
7
|
+
class RSpecTask < Mattock::CommandTask
|
8
|
+
setting :ruby_command, Mattock::CommandLine.new(RbConfig.ruby) do |cmd|
|
9
|
+
if /^1\.8/ =~ RUBY_VERSION
|
10
|
+
cmd.options << "-S"
|
11
|
+
end
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
setting(:gemspec_path, toolkit.gemspec_path)
|
31
|
-
setting(:qa_finished_path, toolkit.finished_files.qa)
|
14
|
+
setting :runner_command
|
15
|
+
|
16
|
+
required_fields :pattern, :ruby_opts, :rspec_configs, :rspec_opts,
|
17
|
+
:warning, :rspec_path, :rspec_opts, :failure_message, :files_to_run
|
18
|
+
|
19
|
+
def default_configuration(rspec)
|
20
|
+
self.pattern = rspec.pattern
|
21
|
+
self.ruby_opts = rspec.ruby_opts
|
22
|
+
self.rspec_configs = rspec.rspec_configs
|
23
|
+
self.rspec_opts = rspec.rspec_opts
|
24
|
+
self.warning = rspec.warning
|
25
|
+
self.rspec_path = rspec.rspec_path
|
26
|
+
self.rspec_opts = rspec.rspec_opts
|
27
|
+
self.failure_message = rspec.failure_message
|
28
|
+
self.files_to_run = rspec.files_to_run
|
32
29
|
end
|
33
30
|
|
34
31
|
def resolve_configuration
|
35
|
-
|
36
|
-
|
37
|
-
@task_options.rspec_opts = []
|
38
|
-
@task_options.rspec_path = %x"which #{task_options.rspec_path}".chomp
|
39
|
-
end
|
32
|
+
self.rspec_configs = rspec_opts
|
33
|
+
self.rspec_path = %x"which #{rspec_path}".chomp
|
40
34
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
cmd_parts << "-w" if options.warning
|
48
|
-
if /^1\.8/ =~ RUBY_VERSION
|
49
|
-
cmd_parts << "-S"
|
35
|
+
ruby_command.options << ruby_opts if ruby_opts
|
36
|
+
ruby_command.options << "-w" if warning
|
37
|
+
|
38
|
+
self.runner_command = Mattock::CommandLine.new(rspec_path) do |cmd|
|
39
|
+
cmd.options << rspec_opts
|
40
|
+
cmd.options << files_to_run
|
50
41
|
end
|
51
|
-
return cmd_parts
|
52
|
-
end
|
53
42
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
cmd_parts << options.files_to_run
|
59
|
-
return cmd_parts
|
43
|
+
self.command = Mattock::WrappingChain.new do |cmd|
|
44
|
+
cmd.add ruby_command
|
45
|
+
cmd.add runner_command
|
46
|
+
end
|
60
47
|
end
|
48
|
+
end
|
61
49
|
|
62
|
-
def full_command(options)
|
63
|
-
cmd_parts = ruby_command(options) + runner_command(options)
|
64
|
-
return cmd_parts.flatten.compact.reject{|part| part.nil? or part.empty?}.join(" ")
|
65
|
-
end
|
66
50
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
51
|
+
class RSpec < TaskLib
|
52
|
+
default_namespace :rspec
|
53
|
+
|
54
|
+
settings(
|
55
|
+
:pattern => './spec{,/*/**}/*_spec.rb',
|
56
|
+
:rspec_configs => nil,
|
57
|
+
:rspec_opts => nil,
|
58
|
+
:warning => false,
|
59
|
+
:verbose => true,
|
60
|
+
:ruby_opts => [],
|
61
|
+
:rspec_path => 'rspec',
|
62
|
+
:rspec_opts => %w{--format documentation --out last_run --color --format documentation},
|
63
|
+
:failure_message => "Spec examples failed.",
|
64
|
+
:files_to_run => "spec"
|
65
|
+
)
|
66
|
+
|
67
|
+
required_fields :gemspec_path, :qa_finished_path
|
68
|
+
|
69
|
+
def default_configuration(toolkit)
|
70
|
+
self.gemspec_path = toolkit.gemspec_path
|
71
|
+
self.qa_finished_path = toolkit.finished_files.qa
|
71
72
|
end
|
72
73
|
|
73
|
-
def
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
end
|
79
|
-
task name do
|
80
|
-
RakeFileUtils.send(:verbose, verbose) do
|
81
|
-
if options.files_to_run.empty?
|
82
|
-
puts "No examples matching #{options.pattern} could be found"
|
83
|
-
else
|
84
|
-
begin
|
85
|
-
cmd = full_command(options)
|
86
|
-
puts cmd if options.verbose
|
87
|
-
success = system(cmd)
|
88
|
-
rescue Object => ex
|
89
|
-
p ex
|
90
|
-
puts options.failure_message if options.failure_message
|
91
|
-
end
|
92
|
-
raise("ruby #{cmd} failed") if options.fail_on_error unless success
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
74
|
+
def resolve_configuration
|
75
|
+
#XXX Que?
|
76
|
+
self.rspec_configs = rspec_opts
|
77
|
+
self.rspec_opts = []
|
78
|
+
self.rspec_path = %x"which #{rspec_path}".chomp
|
96
79
|
end
|
97
80
|
|
98
81
|
def define
|
99
82
|
in_namespace do
|
100
83
|
desc "Always run every spec"
|
101
|
-
|
84
|
+
RSpecTask.new(self) do |t|
|
85
|
+
t.task_name = :all
|
86
|
+
end
|
102
87
|
|
103
88
|
desc "Generate specifications documentation"
|
104
|
-
|
89
|
+
RSpecTask.new(self) do |t|
|
90
|
+
t.task_name = :doc
|
105
91
|
t.rspec_opts = %w{-o /dev/null -f d -o doc/Specifications}
|
106
92
|
t.failure_message = "Failed generating specification docs"
|
107
|
-
t.verbose = false
|
108
93
|
end
|
109
94
|
|
110
95
|
desc "Run only failing examples listed in last_run"
|
111
|
-
|
96
|
+
RSpecTask.new(self) do |t|
|
97
|
+
t.task_name = :quick
|
112
98
|
examples = []
|
113
99
|
begin
|
114
100
|
File.open("last_run", "r") do |fail_list|
|