corundum 0.3.9 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2 +0,0 @@
1
- require 'corundum/documentation/assembly'
2
- require 'corundum/documentation/yardoc'
@@ -1,115 +0,0 @@
1
- require 'compass'
2
- require 'corundum/documentation-task'
3
- #require 'mattock/template-host'
4
-
5
- module Corundum
6
- class DocumentationAssembly < DocumentationTask
7
-
8
- title 'Assembled Documentation'
9
-
10
- dir(:assembly_sub, "doc_assembly",
11
- dir(:theme_dir, "theme",
12
- dir(:theme_sass, "sass",
13
- path(:root_stylesheet, "styles"))),
14
- path(:index_source, "index.html"))
15
-
16
- dir(:target, path(:stylesheet, "stylesheet.css"))
17
-
18
- setting :templates
19
-
20
- setting :sub_dir, "assembled"
21
- setting :documenters, []
22
- setting :extra_data, {}
23
- setting :external_docs, {}
24
- setting :css_dir, "stylesheets" #XXX
25
- setting :compass_config, nested(
26
- :http_path => "/",
27
- :line_comments => false,
28
- :preferred_syntax => :scss,
29
- :http_stylesheets_path => nil,
30
- :project_path => nil,
31
- :images_dir => 'images',
32
- )
33
-
34
- def default_configuration(toolkit, *documenters)
35
- super(toolkit)
36
- self.documenters = documenters
37
-
38
- self.compass_config.http_stylesheets_path = css_dir #XXX
39
- end
40
-
41
- def resolve_configuration
42
- super
43
- assembly_sub.absolute_path = assembly_sub.relative_path
44
- target.absolute_path = target_dir
45
-
46
- resolve_paths
47
-
48
- if field_unset?(:templates)
49
- self.templates = Corundum::configuration_store.valise.templates do |mapping|
50
- case mapping
51
- when "sass", "scss"
52
- valise = Corundum::configuration_store.valise
53
- options =
54
- if Compass.respond_to? :sass_engine_options
55
- Compass.sass_engine_options
56
- else
57
- require 'compass/core'
58
- { :load_paths => [Compass::Core.base_directory("stylesheets")] }
59
- end
60
- options[:load_paths] = valise.sub_set("templates").map(&:to_s) + options[:load_paths]
61
- { :template_options => options }
62
- else
63
- nil
64
- end
65
- end
66
- end
67
-
68
- self.compass_config.project_path = templates.find("doc_assembly/theme").full_path
69
-
70
- self.documenters = documenters.each_with_object({}) do |doccer, hash|
71
- hash[File::join(target_dir, doccer.sub_dir)] = doccer
72
- end
73
- if field_unset?(:stylesheet)
74
- self.stylesheet = File::join(target_dir, "stylesheet.css")
75
- end
76
-
77
- end
78
-
79
-
80
- def define
81
- in_namespace do
82
- subdir_regex = %r{^#{File::expand_path(target_dir)}}
83
-
84
- documenters.each_pair do |subdir, doccer|
85
- file subdir => [target_dir, doccer.entry_point] do
86
- if subdir_regex =~ File::expand_path(doccer.target_dir)
87
- fail "Documentation being rendered to #{doccer.target_dir}, inside of #{target_dir}"
88
- end
89
-
90
- FileUtils.rm_rf(subdir)
91
- FileUtils.mv(doccer.target_dir, subdir)
92
- end
93
- end
94
-
95
- #XXX Collision of doc groups
96
- task :collect => documenters.keys
97
-
98
- file stylesheet.abspath => [target.abspath] do |task|
99
- template = templates.find(root_stylesheet.abspath).contents
100
- File::open(task.name, "w") do |file|
101
- file.write(template.render(nil, nil))
102
- end
103
- end
104
-
105
- file entry_point => [stylesheet.abspath, target.abspath, :collect] do |task|
106
- template = templates.find(index_source.abspath).contents
107
- File::open(task.name, "w") do |file|
108
- file.write(template.render(self, {}))
109
- end
110
- end
111
- end
112
- super
113
- end
114
- end
115
- end
@@ -1,70 +0,0 @@
1
- require 'corundum/documentation-task'
2
- require 'yard'
3
-
4
- module Corundum
5
- class YARDoc < DocumentationTask
6
- title "YARD API documentation"
7
- default_namespace :yardoc
8
-
9
- setting :gemspec
10
-
11
- settings(:options => nil,
12
- :readme => nil,
13
- :sub_dir => "yardoc",
14
- :files => nested(:code => [], :docs => []),
15
- :extra_files => [] )
16
-
17
- settings(:server_options => [],
18
- :server => nested(
19
- :port => 8888,
20
- :docroot => "/tmp/yard",
21
- :plugins => [])
22
- )
23
-
24
-
25
- def document_inputs
26
- FileList["README*"] + files.code + files.docs + extra_files
27
- end
28
-
29
- def default_configuration(toolkit)
30
- super
31
- self.gemspec = toolkit.gemspec
32
- toolkit.files.copy_settings_to(self.files)
33
- self.files.docs = []
34
- end
35
-
36
- def resolve_configuration
37
- self.options ||= gemspec.rdoc_options
38
- self.options += [ "--readme", readme ] if readme
39
- self.options += files.code
40
- unless files.docs.empty? and extra_files.empty?
41
- self.options += [ "-" ] + files.docs + extra_files
42
- end
43
- super
44
- self.options += [ "--output-dir", target_dir]
45
-
46
-
47
- self.server_options += ["--reload"]
48
- self.server_options += ["--port", server.port.to_s]
49
- self.server_options += ["--docroot", server.docroot]
50
- self.server.plugins.each do |plugin|
51
- self.server_options += ["--plugin", plugin]
52
- end
53
- end
54
-
55
- def define
56
- in_namespace do
57
- file entry_point => document_inputs do
58
- YARD::CLI::Yardoc.run( *(options) )
59
- end
60
-
61
- desc "Start a live YARD server for editing inline docs"
62
- task :live do
63
- YARD::CLI::Server.run( *(options + server_options) )
64
- end
65
- end
66
-
67
- super
68
- end
69
- end
70
- end
@@ -1,82 +0,0 @@
1
- require 'mattock/tasklib'
2
-
3
- module Corundum
4
- class Email < Mattock::TaskLib
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))
12
-
13
- def default_configuration(toolkit)
14
- super
15
- self.rubyforge = toolkit.rubyforge
16
- self.gemspec = toolkit.gemspec
17
- self.urls.home_page = toolkit.gemspec.homepage
18
- self.urls.project_page = toolkit.rubyforge.project_page
19
- end
20
-
21
- def announcement
22
- changes = ""
23
- begin
24
- File::open("./Changelog", "r") do |changelog|
25
- changes = "Changes:\n\n"
26
- changes += changelog.read
27
- end
28
- rescue Exception
29
- end
30
-
31
- urls = "Project: #{urls.project_page}\n" +
32
- "Homepage: #{urls.home_page}"
33
-
34
- subject = "#{gemspec.name} #{gemspec.version} Released"
35
- title = "#{gemspec.name} version #{gemspec.version} has been released!"
36
- body = "#{gemspec.description}\n\n#{changes}\n\n#{urls}"
37
-
38
- return subject, title, body
39
- end
40
-
41
- def define
42
- desc 'Announce release on email'
43
- task root_task => in_namespace("rubyforge", "email")
44
- in_namespace do
45
- file "email.txt" do |t|
46
- require 'mailfactory'
47
-
48
- subject, title, body= announcement
49
-
50
- mail = MailFactory.new
51
- mail.To = announce_to_email
52
- mail.From = gemspec.email
53
- mail.Subject = "[ANN] " + subject
54
- mail.text = [title, body].join("\n\n")
55
-
56
- File.open(t.name, "w") do |mailfile|
57
- mailfile.write mail.to_s
58
- end
59
- end
60
-
61
- task :email => "email.txt" do
62
- require 'net/smtp'
63
-
64
- email_servers.each do |server_config|
65
- begin
66
- File::open("email.txt", "r") do |email|
67
- Net::SMTP.start(server_config[:server], 25, server_config[:helo], server_config[:username], server_config[:password]) do |smtp|
68
- smtp.data do |mta|
69
- mta.write(email.read)
70
- end
71
- end
72
- end
73
- break
74
- rescue Object => ex
75
- puts ex.message
76
- end
77
- end
78
- end
79
- end
80
- end
81
- end
82
- end
@@ -1,153 +0,0 @@
1
- require 'mattock/tasklib'
2
- require 'mattock/task'
3
-
4
- module Corundum
5
- class GitTask < Mattock::Rake::CommandTask
6
- setting(:subcommand)
7
- setting(:arguments, [])
8
-
9
- def command
10
- cmd("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::Rake::CommandTask
20
- setting :target_dir
21
-
22
- def default_configuration(parent)
23
- super
24
- parent.copy_settings_to(self)
25
- end
26
-
27
- def needed?
28
- return true unless File.directory? target_dir
29
- Dir.chdir target_dir do
30
- super
31
- end
32
- end
33
-
34
- def action(*args)
35
- Dir.chdir target_dir do
36
- super
37
- end
38
- end
39
- end
40
-
41
- class GithubPages < Mattock::CommandTaskLib
42
- default_namespace :publish_docs
43
-
44
- setting(:target_dir, "gh-pages")
45
- setting(:source_dir)
46
- setting(:docs_index)
47
-
48
- nil_fields :repo_dir
49
-
50
- def branch
51
- "gh-pages"
52
- end
53
-
54
- def default_configuration(doc_gen)
55
- super
56
- self.source_dir = doc_gen.target_dir
57
- self.docs_index = doc_gen.entry_point
58
- end
59
-
60
- def resolve_configuration
61
- super
62
- self.repo_dir ||= File::join(target_dir, ".git")
63
- end
64
-
65
- def git_command(*args)
66
- cmd("git", "--no-pager") do |cmd|
67
- args.each do |arg|
68
- cmd.options += [*arg]
69
- end
70
- end
71
- end
72
-
73
- def git(*args)
74
- result = git_command(*args).run
75
- result.must_succeed!
76
- result.stdout.lines.to_a
77
- end
78
-
79
- def define
80
- in_namespace do
81
- file repo_dir do
82
- fail "Refusing to clobber existing #{target_dir}" if File.exists?(target_dir)
83
-
84
- url = git("config", "--get", "remote.origin.url").first
85
- git("clone", url.chomp, target_dir)
86
- end
87
-
88
- InDirCommandTask.define_task(self, :remote_branch => repo_dir) do |t|
89
- t.verify_command = git_command | cmd("grep", "-q", branch)
90
- t.command = git_command("checkout", "-b", branch) &
91
- cmd("rm -rf *") &
92
- git_command(%w{commit -a -m} + ["'Creating pages'"]) &
93
- git_command("push", "origin", branch) &
94
- git_command("branch", "--set-upstream", branch, "origin/" + branch)
95
- end
96
-
97
- InDirCommandTask.define_task(self, :local_branch => :remote_branch) do |t|
98
- t.verify_command = git_command(%w{branch}) | cmd("grep", "-q", "'#{branch}'")
99
- t.command = git_command("checkout", "-b", branch) &
100
- git_command("branch", "--set-upstream", branch, "origin/" + branch) &
101
- cmd("rm", "-f", '.git/index') &
102
- git_command("clean", "-fdx")
103
- end
104
-
105
- InDirCommandTask.define_task(self, :on_branch => [:remote_branch, :local_branch]) do |t|
106
- t.verify_command = git_command(%w{branch}) | cmd("grep", "-q", "'^[*] #{branch}'")
107
- t.command = git_command("checkout", branch)
108
- end
109
-
110
- task :pull => [repo_dir, :on_branch] do
111
- FileUtils.cd target_dir do
112
- git("pull", "-X", "ours")
113
- end
114
- end
115
-
116
- task :cleanup_repo => repo_dir do
117
- cmd("rm", "-f", File::join(repo_dir, "hooks", "*")).must_succeed!
118
- File::open(File::join(repo_dir, ".gitignore"), "w") do |file|
119
- file.write ".sw?"
120
- end
121
- end
122
-
123
- file target_dir => [:on_branch, :cleanup_repo]
124
-
125
- task :pre_publish => [repo_dir, target_dir]
126
-
127
- task :clobber_target => [:on_branch, :pull] do
128
- cmd(*%w{rm -rf}) do |cmd|
129
- cmd.options << target_dir + "/*"
130
- end.must_succeed!
131
- end
132
-
133
- task :assemble_docs => [docs_index, :pre_publish, :clobber_target] do
134
- cmd(*%w{cp -a}) do |cmd|
135
- cmd.options << source_dir + "/*"
136
- cmd.options << target_dir
137
- end.must_succeed!
138
- end
139
-
140
- task :publish => [:assemble_docs, :on_branch] do
141
- FileUtils.cd target_dir do
142
- git("add", ".")
143
- git("commit", "-m", "'Corundum auto-publish'")
144
- git("push", "origin", branch)
145
- end
146
- end
147
- end
148
-
149
- desc "Push documentation files to Github Pages"
150
- task root_task => self[:publish]
151
- end
152
- end
153
- end