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.
@@ -1,21 +1,15 @@
1
1
  require 'corundum/tasklib'
2
2
 
3
-
4
3
  #Big XXX: this totally isn't done. It's some notes against ever wanting to
5
4
  #publish announcements to rubyforge ever again
6
5
 
7
6
  module Corundum
8
7
  class Publishing < TaskLib
9
- def default_namespace
10
- :rubyforge
11
- end
8
+ default_namespace :rubyforge
12
9
 
13
- def default_configuration(toolkit)
14
- setting(:ns, ns)
15
- setting(:rubyforge, nested(:package_id => nil, :group_id => nil, :release_name => nil))
16
- setting(:package_dir, nil)
17
- setting(:gemspec, nil)
18
- end
10
+ setting(:rubyforge, nested(:package_id => nil, :group_id => nil, :release_name => nil))
11
+ setting(:package_dir, nil)
12
+ setting(:gemspec, nil)
19
13
 
20
14
  def define
21
15
  desc "Publish the gem and its documentation to Rubyforge and Gemcutter"
@@ -1,33 +1,45 @@
1
1
  require 'corundum/tasklib'
2
+ require 'corundum/browser-task'
2
3
 
3
4
  module Corundum
4
- class SimpleCov < TaskLib
5
- def default_namespace
6
- :coverage
5
+ class RSpecReportTask < RSpecTask
6
+ def command_task
7
+ @command_task ||= file task_name do
8
+ decorated(command).must_succeed!
9
+ end
7
10
  end
11
+ end
12
+
13
+ class SimpleCov < TaskLib
14
+ default_namespace :coverage
15
+
16
+ setting(:test_lib)
17
+ setting(:browser)
18
+ setting(:code_files)
19
+ setting(:all_files)
20
+
21
+ setting(:report_path, nil)
22
+ setting(:config_path, nil)
23
+
24
+ setting(:report_dir, "doc/coverage")
25
+ setting(:config_file, ".simplecov")
26
+ setting(:filters, ["./spec"])
27
+ setting(:threshold, 80)
28
+ setting(:groups, {})
29
+ setting(:coverage_filter, proc do |path|
30
+ /\.rb$/ =~ path
31
+ end)
8
32
 
9
33
  def default_configuration(toolkit, testlib)
10
- setting(:test_lib, testlib)
11
- setting(:browser, toolkit.browser)
12
- setting(:report_dir, "doc/coverage")
13
- setting(:report_path, nil)
14
- setting(:config_file, ".simplecov")
15
- setting(:config_path, nil)
16
- setting(:filters, ["./spec"])
17
-
18
- setting(:coverage_filter, proc do |path|
19
- /\.rb$/ =~ path
20
- end)
21
-
22
- setting(:threshold, 80)
23
- setting(:groups, {})
24
- setting(:code_files, toolkit.files.code)
25
- setting(:all_files, toolkit.file_lists.project + toolkit.file_lists.code + toolkit.file_lists.test)
34
+ self.test_lib = testlib
35
+ self.browser = toolkit.browser
36
+ self.code_files = toolkit.files.code
37
+ self.all_files = toolkit.file_lists.project + toolkit.file_lists.code + toolkit.file_lists.test
26
38
  end
27
39
 
28
40
  def resolve_configuration
29
- @config_path ||= File::expand_path(config_file, Rake::original_dir)
30
- @report_path ||= File::join(report_dir, "index.html")
41
+ self.config_path ||= File::expand_path(config_file, Rake::original_dir)
42
+ self.report_path ||= File::join(report_dir, "index.html")
31
43
  end
32
44
 
33
45
  def filter_lines
@@ -59,27 +71,27 @@ module Corundum
59
71
 
60
72
  task :example_config do
61
73
  $stderr.puts "Try this in #{config_path}"
74
+ $stderr.puts "(You can just do #$0 > #{config_path})"
62
75
  $stderr.puts
63
76
  puts config_file_contents
64
77
  end
65
78
 
66
79
  task :config_exists do
67
- File::exists?(File::join(Rake::original_dir, ".simplecov")) or fail "No .simplecov"
80
+ File::exists?(File::join(Rake::original_dir, ".simplecov")) or fail "No .simplecov (try: rake #{self[:example_config]})"
68
81
  end
69
82
 
70
83
  directory File::dirname(report_path)
71
- file report_path => all_files do
72
- options = @test_lib.custom_options do |options|
73
- options.rspec_opts += %w{-r simplecov}
74
- end
75
- sh @test_lib.full_command(options)
84
+ RSpecReportTask.new(@test_lib) do |t|
85
+ t.task_name = report_path
86
+ t.rspec_opts += %w{-r simplecov}
76
87
  end
88
+ file report_path => all_files
77
89
 
78
90
  task :generate_report => [:preflight, report_path]
79
91
 
80
92
  desc "View coverage in browser"
81
- task :view => report_path do
82
- sh "#{browser} #{report_path}"
93
+ BrowserTask.new(self) do |t|
94
+ t.index_html = report_path
83
95
  end
84
96
 
85
97
  task :verify_coverage => :generate_report do
@@ -1,57 +1,7 @@
1
- require 'ostruct'
2
- require 'rake/tasklib'
3
- require 'corundum/configurable'
1
+ require 'mattock/tasklib'
4
2
 
5
3
  module Corundum
6
- class TaskLib < Rake::TaskLib
7
- include Configurable
8
-
9
- def default_configuration(*tasklibs)
10
- end
11
-
12
- def resolve_configuration
13
- end
14
-
15
- def in_namespace(*tasknames)
16
- if tasknames.empty?
17
- if block_given?
18
- if @namespace_name.nil?
19
- yield
20
- else
21
- namespace @namespace_name do
22
- yield
23
- end
24
- end
25
- end
26
- else
27
- tasknames.map do |taskname|
28
- [@namespace_name, taskname].compact.join(":")
29
- end
30
- end
31
- end
32
-
33
- def root_task
34
- @namespace_name || :default
35
- end
36
-
37
- def default_namespace
38
- nil
39
- end
40
-
41
- def [](taskname)
42
- in_namespace(taskname).first
43
- end
44
-
45
- def initialize(*tasklibs)
46
- setting(:namespace_name, default_namespace)
47
-
48
- default_configuration(*tasklibs)
49
-
50
- yield self if block_given?
51
-
52
- resolve_configuration
53
-
54
- define
55
- end
4
+ #TODO Add functionality or refactor away
5
+ class TaskLib < Mattock::TaskLib
56
6
  end
57
7
  end
@@ -1,3 +1,4 @@
1
+ require 'corundum'
1
2
  require 'corundum/rspec'
2
3
  require 'corundum/simplecov'
3
4
  require 'corundum/gemspec_sanity'
@@ -7,3 +8,4 @@ require 'corundum/email'
7
8
  require 'corundum/version_control/monotone'
8
9
  require 'corundum/version_control/git'
9
10
  require 'corundum/yardoc'
11
+ require 'corundum/github-pages'
@@ -2,15 +2,15 @@ require 'corundum/tasklib'
2
2
 
3
3
  module Corundum
4
4
  class VersionControl < TaskLib
5
- def default_namespace
6
- :version_control
7
- end
5
+ default_namespace :version_control
6
+
7
+ required_fields(:gemspec, :build_finished_file, :gemspec_files, :tag)
8
8
 
9
9
  def default_configuration(toolkit)
10
- setting(:gemspec, toolkit.gemspec)
11
- setting(:build_finished_file, toolkit.finished_files.build)
12
- setting(:gemspec_files, toolkit.files.code + toolkit.files.test)
13
- setting(:tag, toolkit.gemspec.version.to_s)
10
+ self.gemspec = toolkit.gemspec
11
+ self.build_finished_file = toolkit.finished_files.build
12
+ self.gemspec_files = toolkit.files.code + toolkit.files.test
13
+ self.tag = toolkit.gemspec.version.to_s
14
14
  end
15
15
 
16
16
  def define
@@ -2,35 +2,29 @@ require 'corundum/version_control'
2
2
 
3
3
  module Corundum
4
4
  class Git < VersionControl
5
- def default_configuration(*args)
6
- super
7
- setting(:branch, nil)
8
- end
5
+ setting(:branch, nil)
9
6
 
10
7
  def resolve_configuration
11
8
  @branch ||= guess_branch
12
9
  end
13
10
 
14
-
15
11
  def git_command(*args)
16
- result = ""
17
- pid = nil
18
- command = "git --no-pager #{args.join(" ")}"
19
- puts command if verbose
20
- pipe = IO.popen(command)
21
- pid = pipe.pid
22
- Process::wait(pid)
23
- result = pipe.read
24
- pipe.close
25
- unless $?.exitstatus == 0
26
- fail "Git exited with status #{$?.exitstatus}: \n#{result}"
12
+ Mattock::CommandLine.new("git", "--no-pager") do |cmd|
13
+ args.each do |arg|
14
+ cmd.options += [*arg]
15
+ end
27
16
  end
28
- return result.split("\n")
17
+ end
18
+
19
+ def git(*args)
20
+ result = git_command(*args).run
21
+ result.must_succeed!
22
+ return result.stdout.lines.to_a
29
23
  end
30
24
 
31
25
  def guess_branch
32
26
  puts "Guessing branch - configure Git > branch"
33
- branch = git_command("branch").grep(/^\*/).first.sub(/\*\s*/,"").chomp
27
+ branch = git("branch").grep(/^\*/).first.sub(/\*\s*/,"").chomp
34
28
  puts " Guessed: #{branch}"
35
29
  return branch
36
30
  end
@@ -40,28 +34,28 @@ module Corundum
40
34
 
41
35
  in_namespace do
42
36
  task :on_branch do
43
- current_branch = git_command("branch").grep(/^\*/).first.sub(/\*\s*/,"").chomp
37
+ current_branch = git("branch").grep(/^\*/).first.sub(/\*\s*/,"").chomp
44
38
  unless current_branch == branch
45
39
  fail "Current branch \"#{current_branch}\" is not #{branch}"
46
40
  end
47
41
  end
48
42
 
49
43
  task :not_tagged => :on_branch do
50
- tags = git_command("tag", "-l", tag)
44
+ tags = git("tag", "-l", tag)
51
45
  unless tags.empty?
52
46
  fail "Tag #{tag} already exists in branch #{branch}"
53
47
  end
54
48
  end
55
49
 
56
50
  task :workspace_committed => :on_branch do
57
- diffs = git_command("diff", "--stat", "HEAD")
51
+ diffs = git("diff", "--stat", "HEAD")
58
52
  unless diffs.empty?
59
53
  fail "Workspace not committed:\n #{diffs.join(" \n")}"
60
54
  end
61
55
  end
62
56
 
63
57
  task :gemspec_files_added => :on_branch do
64
- list = git_command(%w{ls-tree -r HEAD})
58
+ list = git(%w{ls-tree -r HEAD})
65
59
  list.map! do |line|
66
60
  line.split(/\s+/)[3]
67
61
  end
@@ -73,29 +67,29 @@ module Corundum
73
67
  end
74
68
 
75
69
  task :is_pulled do
76
- fetch = git_command("fetch", "--dry-run")
70
+ fetch = git("fetch", "--dry-run")
77
71
  unless fetch.empty?
78
72
  fail "Remote branch has unpulled changes"
79
73
  end
80
74
 
81
- remote = git_command("config", "--get", "branch.#{branch}.remote").first
82
- merge = git_command("config", "--get", "branch.#{branch}.merge").first.split("/").last
75
+ remote = git("config", "--get", "branch.#{branch}.remote").first.chomp
76
+ merge = git("config", "--get", "branch.#{branch}.merge").first.split("/").last.chomp
83
77
 
84
- ancestor = git_command("merge-base", branch, "#{remote}/#{merge}").first
78
+ ancestor = git("merge-base", branch, "#{remote}/#{merge}").first.chomp
85
79
  remote_rev = File::read(".git/refs/remotes/#{remote}/#{merge}").chomp
86
80
 
87
81
  unless ancestor == remote_rev
88
- fail "Unmerged changes with remote branch #{remote}/#{merge}"
82
+ fail "Unmerged changes with remote branch #{remote}/#{merge}\n#{ancestor.inspect}\n#{remote_rev.inspect}"
89
83
  end
90
84
  end
91
85
  task :is_checked_in => :is_pulled
92
86
 
93
87
  task :tag => :on_branch do
94
- git_command("tag", tag)
88
+ git("tag", tag)
95
89
  end
96
90
 
97
91
  task :push => :on_branch do
98
- git_command("push")
92
+ git("push")
99
93
  end
100
94
 
101
95
  task :check_in => [:push]
@@ -3,27 +3,19 @@ require 'strscan'
3
3
 
4
4
  module Corundum
5
5
  class Monotone < VersionControl
6
- def default_configuration(*args)
7
- super
8
- setting(:branch, nil)
9
- end
6
+
7
+ setting(:branch, nil)
10
8
 
11
9
  def resolve_configuration
12
10
  @branch ||= guess_branch
13
11
  end
14
12
 
15
13
  def mtn_automate(cmd, *args)
16
- command = "mtn automate #{cmd} #{args.join(" ")}"
17
- puts command if verbose
18
- pipe = IO.popen(command)
19
- pid = pipe.pid
20
- Process.wait(pid)
21
- result = pipe.read
22
- pipe.close
23
- unless $?.exitstatus == 0
24
- fail "Monotone failed with exit status #{$?.exitstatus}: \n#{result}"
25
- end
26
- return result
14
+ result = Mattock::CommandLine.new("mtn", "automate", cmd) do |cmd|
15
+ cmd.options += args
16
+ end.run
17
+ result.must_succeed!
18
+ result.stdout
27
19
  end
28
20
 
29
21
  def parse_basic_io(string)
@@ -1,33 +1,54 @@
1
1
  require 'corundum/tasklib'
2
- require 'yard/rake/yardoc_task'
2
+ require 'yard'
3
3
 
4
4
  module Corundum
5
5
  class YARDoc < TaskLib
6
- def default_namespace
7
- :documentation
8
- end
6
+ default_namespace :documentation
7
+
8
+ setting :gemspec
9
+ setting :options, nil
10
+ setting :browser
11
+ setting :yardoc_index, nil
12
+
13
+ setting(:target_dir, "yardoc")
14
+ setting(:readme, nil)
15
+ setting(:files, nested(:code => [], :docs => []))
16
+ setting(:extra_files, [])
9
17
 
10
18
  def default_configuration(toolkit)
11
- setting(:gemspec, toolkit.gemspec)
12
- setting(:doc_dir, "rubydoc")
13
- setting(:files, nested(:code => [], :docs => []))
19
+ self.gemspec = toolkit.gemspec
20
+ toolkit.files.copy_settings_to(self.files)
21
+ self.browser = toolkit.browser
22
+ end
23
+
24
+ def resolve_configuration
25
+ self.options ||= gemspec.rdoc_options
26
+ self.options += [ "--output-dir", target_dir]
27
+ self.options += [ "--readme", readme ] if readme
28
+ self.options += files.code
29
+ unless files.docs.empty? and extra_files.empty?
30
+ self.options += [ "-" ] + files.docs + extra_files
31
+ end
32
+ self.yardoc_index ||= File::join(target_dir, "index.html")
14
33
  end
15
34
 
16
35
  def define
17
- directory doc_dir
36
+ directory target_dir
18
37
 
19
38
  in_namespace do
20
- YARD::Rake::YardocTask.new(:docs) do |rd|
21
- rd.options += gemspec.rdoc_options
22
- rd.options += ["--output-dir", doc_dir]
23
- rd.files += files.code
24
- rd.files += files.docs
25
- rd.files += gemspec.extra_rdoc_files
39
+ file yardoc_index =>
40
+ FileList["README*"] + files.code + files.docs + extra_files do
41
+ YARD::CLI::Yardoc.run( *(options) )
42
+ end
43
+
44
+ desc "Open up a browser to view your documentation"
45
+ BrowserTask.new(self) do |t|
46
+ t.index_html = yardoc_index
26
47
  end
27
48
  end
28
49
 
29
50
  desc "Generate documentation based on code using YARD"
30
- task root_task => in_namespace("docs")
51
+ task root_task => yardoc_index
31
52
  end
32
53
  end
33
54
  end
@@ -25,5 +25,3 @@ module Corundum
25
25
  end
26
26
  end
27
27
  end
28
-
29
-