corundum 0.0.10 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
data/lib/corundum.rb CHANGED
@@ -11,7 +11,8 @@ module Corundum
11
11
  settings(
12
12
  :gemspec => nil,
13
13
  :gemspec_path => nil,
14
- :finished_dir => "corundum",
14
+ :corundum_dir => "corundum",
15
+ :finished_dir => nil,
15
16
  :package_dir => "pkg",
16
17
  :doc_dir => "rubydoc",
17
18
  :browser => Corundum.user_preferences["browser"],
@@ -38,6 +39,7 @@ module Corundum
38
39
  def resolve_configuration
39
40
  load_gemspec
40
41
 
42
+ self.finished_dir ||= File::join(corundum_dir, "finished")
41
43
  @finished_files.build ||= File::join( package_dir, "#{gemspec.full_name}.gem")
42
44
 
43
45
  @finished_files.qa ||= File::join( finished_dir, "qa_#{gemspec.version}")
@@ -15,10 +15,10 @@ module Corundum
15
15
  @loaded ||= Hash.new{|h,k| h[k] = @valise.find(k).contents}
16
16
  end
17
17
 
18
- attr_reader :loaded
18
+ attr_reader :loaded, :valise
19
19
 
20
20
  def register_search_path(from_file)
21
- directory = File::dirname(from_file)
21
+ directory = File::expand_path("../.corundum", from_file)
22
22
  @valise.prepend_search_root(Valise::SearchRoot.new(directory))
23
23
  loaded.clear
24
24
  end
@@ -0,0 +1,28 @@
1
+ <html>
2
+ <head>
3
+ </head>
4
+ <body>
5
+ <div class="gem-details">
6
+ <h1><%= gemspec.name %></h1>
7
+ <h2><%= gemspec.summary %></h2>
8
+ <h2>(current version: <%= gemspec.version %>)</h2>
9
+ <p><%= gemspec.description.gsub(/\n\s*\n/, "</p><p>") %></p>
10
+ </div>
11
+ <div class="documentation-list">
12
+ <p>Documentation is in a few sections:</p>
13
+ <ul>
14
+ <% documenters.each_pair do |path, doccer| %>
15
+ <li><a href="<%= doccer.entry_link %>"><%= doccer.title%></a></li>
16
+ <% end %>
17
+ </ul>
18
+ </div>
19
+ <div class="credits">
20
+ <dl>
21
+ <% gemspec.authors.zip(gemspec.email).each do |author, email| %>
22
+ <dt><%= author %></dt>
23
+ <dd><%= email %></dd>
24
+ <% end %>
25
+ </dl>
26
+ </div>
27
+ </body>
28
+ </html>
@@ -0,0 +1,69 @@
1
+ require 'corundum/tasklib'
2
+
3
+ module Corundum
4
+ class DocumentationTask < TaskLib
5
+ setting :title
6
+ setting :browser
7
+ setting :gemspec
8
+
9
+ setting :corundum_dir
10
+ setting :docs_root
11
+
12
+ setting :target_dir
13
+ setting :sub_dir
14
+
15
+ setting :entry_file, "index.html"
16
+
17
+ #The path from the project root to the entry file
18
+ #Resolves if unset to target_dir + entry_file
19
+ setting :entry_path
20
+
21
+ #The URL path from this documentation root
22
+ #Resolves if unset to sub_dir + entry_file
23
+ setting :entry_link
24
+
25
+
26
+ def self.title(name)
27
+ setting :title, name
28
+ end
29
+
30
+ def default_configuration(toolkit)
31
+ toolkit.copy_settings_to(self)
32
+ end
33
+
34
+ def resolve_configuration
35
+ if unset?(docs_root)
36
+ self.docs_root = File::join(corundum_dir, "docs")
37
+ end
38
+
39
+ if unset?(target_dir)
40
+ self.target_dir = File::join(docs_root, sub_dir)
41
+ else
42
+ self.sub_dir = target_dir.sub(/^#{docs_root}\//,"")
43
+ end
44
+
45
+ if unset?(entry_path)
46
+ self.entry_path = File::join(target_dir, entry_file)
47
+ end
48
+
49
+ if unset?(entry_link)
50
+ self.entry_link = File::join(sub_dir, entry_file)
51
+ end
52
+ end
53
+
54
+ def entry_point(under = nil)
55
+ File::join(under || target_dir, entry_file)
56
+ end
57
+
58
+ def define
59
+ directory target_dir
60
+
61
+ in_namespace do
62
+ desc "Open up a browser to view your documentation"
63
+ BrowserTask.new(self) do |t|
64
+ t.index_html = entry_point
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,2 @@
1
+ require 'corundum/documentation/assembly'
2
+ require 'corundum/documentation/yardoc'
@@ -0,0 +1,56 @@
1
+ require 'corundum/documentation-task'
2
+ require 'mattock/template-host'
3
+
4
+ module Corundum
5
+ class DocumentationAssembly < DocumentationTask
6
+ include Mattock::TemplateHost
7
+
8
+ title 'Assembled Documentation'
9
+
10
+ setting :sub_dir, "assembled"
11
+ setting :documenters, []
12
+ setting :extra_data, {}
13
+
14
+ def default_configuration(toolkit, *documenters)
15
+ super(toolkit)
16
+ self.documenters = documenters
17
+ self.valise = Corundum::configuration_store.valise
18
+ end
19
+
20
+ def resolve_configuration
21
+ super
22
+ self.documenters = documenters.each_with_object({}) do |doccer, hash|
23
+ hash[File::join(target_dir, doccer.sub_dir)] = doccer
24
+ end
25
+ end
26
+
27
+
28
+ def define
29
+ in_namespace do
30
+ subdir_regex = %r{^#{File::expand_path(target_dir)}}
31
+
32
+ documenters.each_pair do |subdir, doccer|
33
+ file subdir => [target_dir, doccer.entry_point] do
34
+ if subdir_regex =~ File::expand_path(doccer.target_dir)
35
+ fail "Documentation being rendered to #{doccer.target_dir}, inside of #{target_dir}"
36
+ end
37
+
38
+ FileUtils.rm_rf(subdir)
39
+ FileUtils.mv(doccer.target_dir, subdir)
40
+ end
41
+ end
42
+
43
+ #Colision of doc groups
44
+ task :collect => documenters.keys
45
+
46
+ desc "Generate various documentation and collect it in one place"
47
+ file entry_point => [target_dir, :collect] do
48
+ File::open(entry_point, "w") do |file|
49
+ file.write(render("doc_assembly/index.html.erb"))
50
+ end
51
+ end
52
+ end
53
+ super
54
+ end
55
+ end
56
+ end
@@ -1,46 +1,18 @@
1
- require 'corundum/tasklib'
1
+ require 'corundum/documentation-task'
2
2
  require 'yard'
3
3
 
4
4
  module Corundum
5
- class DocumentationTask < TaskLib
6
- setting :entry_point
7
- setting :target_dir
8
- setting :browser
9
-
10
- def default_configuration(toolkit)
11
- self.browser = toolkit.browser
12
- end
13
-
14
- def resolve_configuration
15
- self.entry_point ||= File::join(target_dir, "index.html")
16
- end
17
-
18
- def define
19
- directory target_dir
20
-
21
- in_namespace do
22
- desc "Open up a browser to view your documentation"
23
- BrowserTask.new(self) do |t|
24
- t.index_html = entry_point
25
- end
26
- end
27
-
28
- desc "Generate documentation based on code using YARD"
29
- task root_task => entry_point
30
- end
31
- end
32
-
33
5
  class YARDoc < DocumentationTask
6
+ title "YARD API documentation"
34
7
  default_namespace :yardoc
35
8
 
36
9
  setting :gemspec
37
- setting :options, nil
38
- setting :entry_point, nil
39
10
 
40
- setting(:target_dir, "yardoc")
41
- setting(:readme, nil)
42
- setting(:files, nested(:code => [], :docs => []))
43
- setting(:extra_files, [])
11
+ settings(:options => nil,
12
+ :readme => nil,
13
+ :sub_dir => "yardoc",
14
+ :files => nested(:code => [], :docs => []),
15
+ :extra_files => [] )
44
16
 
45
17
  def document_inputs
46
18
  FileList["README*"] + files.code + files.docs + extra_files
@@ -55,12 +27,13 @@ module Corundum
55
27
 
56
28
  def resolve_configuration
57
29
  self.options ||= gemspec.rdoc_options
58
- self.options += [ "--output-dir", target_dir]
59
30
  self.options += [ "--readme", readme ] if readme
60
31
  self.options += files.code
61
32
  unless files.docs.empty? and extra_files.empty?
62
33
  self.options += [ "-" ] + files.docs + extra_files
63
34
  end
35
+ super
36
+ self.options += [ "--output-dir", target_dir]
64
37
  end
65
38
 
66
39
  def define
@@ -0,0 +1,78 @@
1
+ require 'rbconfig'
2
+ require 'mattock/command-task'
3
+
4
+ module Corundum
5
+ class RSpecTask < Mattock::CommandTask
6
+ setting :ruby_command, Mattock::CommandLine.new(RbConfig.ruby) do |cmd|
7
+ if /^1\.8/ =~ RUBY_VERSION
8
+ cmd.options << "-S"
9
+ end
10
+ end
11
+
12
+ setting :runner_command
13
+
14
+ required_fields :pattern, :ruby_opts, :rspec_configs, :rspec_opts,
15
+ :warning, :rspec_path, :rspec_opts, :failure_message, :files_to_run,
16
+ :file_dependencies
17
+
18
+ def default_configuration(rspec)
19
+ super
20
+ rspec.copy_settings_to(self)
21
+ end
22
+
23
+ def resolve_configuration
24
+ self.rspec_configs = rspec_opts
25
+ self.rspec_path = %x"which #{rspec_path}".chomp
26
+
27
+ ruby_command.options << ruby_opts if ruby_opts
28
+ ruby_command.options << "-w" if warning
29
+
30
+ self.runner_command = Mattock::CommandLine.new(rspec_path) do |cmd|
31
+ cmd.options << rspec_opts
32
+ cmd.options << files_to_run
33
+ end
34
+
35
+ self.command = Mattock::WrappingChain.new do |cmd|
36
+ cmd.add ruby_command
37
+ cmd.add runner_command
38
+ end
39
+
40
+ super
41
+
42
+ if task_args.last.is_a? Hash
43
+ key = task_args.last.keys.first
44
+ task_args.last[key] = [*task_args.last[key]] + file_dependencies
45
+ else
46
+ key = task_args.pop
47
+ task_args << { key => file_dependencies }
48
+ end
49
+ end
50
+ end
51
+
52
+ class RSpecReportTask < RSpecTask
53
+ setting :target_dir
54
+ setting :doc_file, "index.html"
55
+ setting :doc_path
56
+
57
+ def timestamp
58
+ if File.exist?(doc_path)
59
+ File.mtime(doc_path.to_s)
60
+ else
61
+ Rake::EARLY
62
+ end
63
+ end
64
+
65
+ def out_of_date?(stamp)
66
+ @prerequisites.any? { |n| application[n, @scope].timestamp > stamp}
67
+ end
68
+
69
+ def needed?
70
+ ! File.exist?(doc_path) || out_of_date?(timestamp)
71
+ end
72
+
73
+ def default_configuration(rspec)
74
+ super
75
+ self.doc_path = File::join(target_dir, doc_file)
76
+ end
77
+ end
78
+ end
@@ -1,59 +1,13 @@
1
- require 'corundum/tasklib'
2
- require 'rspec/core'
3
- require 'mattock/command-task'
4
- require 'rbconfig'
1
+ require 'corundum/documentation-task'
2
+ require 'corundum/rspec-task'
5
3
 
6
4
  module Corundum
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
- end
13
-
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
- super
21
- self.pattern = rspec.pattern
22
- self.ruby_opts = rspec.ruby_opts
23
- self.rspec_configs = rspec.rspec_configs
24
- self.rspec_opts = rspec.rspec_opts
25
- self.warning = rspec.warning
26
- self.rspec_path = rspec.rspec_path
27
- self.rspec_opts = rspec.rspec_opts
28
- self.failure_message = rspec.failure_message
29
- self.files_to_run = rspec.files_to_run
30
- end
31
-
32
- def resolve_configuration
33
- self.rspec_configs = rspec_opts
34
- self.rspec_path = %x"which #{rspec_path}".chomp
35
-
36
- ruby_command.options << ruby_opts if ruby_opts
37
- ruby_command.options << "-w" if warning
38
-
39
- self.runner_command = Mattock::CommandLine.new(rspec_path) do |cmd|
40
- cmd.options << rspec_opts
41
- cmd.options << files_to_run
42
- end
43
-
44
- self.command = Mattock::WrappingChain.new do |cmd|
45
- cmd.add ruby_command
46
- cmd.add runner_command
47
- end
48
- super
49
- end
50
- end
51
-
52
-
53
- class RSpec < TaskLib
5
+ class RSpec < DocumentationTask
54
6
  default_namespace :rspec
7
+ title "RSpec run output"
55
8
 
56
9
  settings(
10
+ :sub_dir => "rspec",
57
11
  :pattern => './spec{,/*/**}/*_spec.rb',
58
12
  :rspec_configs => nil,
59
13
  :rspec_opts => nil,
@@ -66,10 +20,10 @@ module Corundum
66
20
  :files_to_run => "spec"
67
21
  )
68
22
 
69
- required_fields :gemspec_path, :qa_finished_path
23
+ required_fields :gemspec_path, :qa_finished_path, :file_lists, :file_dependencies
70
24
 
71
25
  def default_configuration(toolkit)
72
- self.gemspec_path = toolkit.gemspec_path
26
+ super
73
27
  self.qa_finished_path = toolkit.finished_files.qa
74
28
  end
75
29
 
@@ -78,25 +32,25 @@ module Corundum
78
32
  self.rspec_configs = rspec_opts
79
33
  self.rspec_opts = []
80
34
  self.rspec_path = %x"which #{rspec_path}".chomp
35
+ self.file_dependencies = file_lists.code + file_lists.test + file_lists.project
36
+ super
81
37
  end
82
38
 
83
39
  def define
40
+ super
84
41
  in_namespace do
85
42
  desc "Always run every spec"
86
- RSpecTask.new(self) do |t|
87
- t.task_name = :all
88
- end
43
+ RSpecTask.new(self, :all)
89
44
 
90
45
  desc "Generate specifications documentation"
91
- RSpecTask.new(self) do |t|
92
- t.task_name = :doc
93
- t.rspec_opts = %w{-o /dev/null -f d -o doc/Specifications}
46
+ RSpecReportTask.new(self, :doc) do |t|
47
+ t.rspec_opts = %w{-o /dev/null -f h -o} + [t.doc_path]
94
48
  t.failure_message = "Failed generating specification docs"
95
49
  end
50
+ file entry_path => :doc
96
51
 
97
52
  desc "Run only failing examples listed in last_run"
98
- RSpecTask.new(self) do |t|
99
- t.task_name = :quick
53
+ RSpecTask.new(self, :quick) do |t|
100
54
  examples = []
101
55
  begin
102
56
  File.open("last_run", "r") do |fail_list|