darthapo-cumulus 0.0.1
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/History.txt +4 -0
- data/Manifest.txt +45 -0
- data/PostInstall.txt +2 -0
- data/README.rdoc +56 -0
- data/Rakefile +39 -0
- data/bin/cumulus +11 -0
- data/bin/cumulus-gen +11 -0
- data/cumulus.gemspec +55 -0
- data/lib/cumulus.rb +29 -0
- data/lib/cumulus/builder.rb +121 -0
- data/lib/cumulus/cli.rb +64 -0
- data/lib/cumulus/hash_db.rb +137 -0
- data/lib/cumulus/resources.rb +46 -0
- data/lib/cumulus/resources/attachment.rb +35 -0
- data/lib/cumulus/resources/base_resource.rb +105 -0
- data/lib/cumulus/resources/content.rb +50 -0
- data/lib/cumulus/resources/layout.rb +29 -0
- data/lib/cumulus/resources/skin.rb +7 -0
- data/lib/cumulus/resources/template.rb +35 -0
- data/lib/cumulus/scanner.rb +65 -0
- data/lib/support/trollop.rb +694 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/test/fixtures/my_site/Rakefile +27 -0
- data/test/fixtures/my_site/config/content.yml +3 -0
- data/test/fixtures/my_site/config/publishing.yml +0 -0
- data/test/fixtures/my_site/config/site.yml +3 -0
- data/test/fixtures/my_site/content/articles/about/index.html +14 -0
- data/test/fixtures/my_site/content/articles/about/test.rb +11 -0
- data/test/fixtures/my_site/content/posts/001-hello-world/index.html +20 -0
- data/test/fixtures/my_site/output/articles/about/index.html +31 -0
- data/test/fixtures/my_site/output/articles/about/test.rb +11 -0
- data/test/fixtures/my_site/output/posts/001-hello-world/index.html +40 -0
- data/test/fixtures/my_site/skin/styles/screen.css +3 -0
- data/test/fixtures/my_site/skin/templates/layouts/main.html +21 -0
- data/test/fixtures/my_site/skin/templates/objects/article.html +7 -0
- data/test/fixtures/my_site/skin/templates/objects/article.summary.html +7 -0
- data/test/fixtures/my_site/skin/templates/objects/post.html +10 -0
- data/test/fixtures/my_site/skin/templates/objects/post.summary.html +7 -0
- data/test/test_helper.rb +5 -0
- data/test/unit/cumulus_cli_test.rb +22 -0
- data/test/unit/cumulus_test.rb +15 -0
- data/test/unit/hash_db_test.rb +29 -0
- metadata +167 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
History.txt
|
|
2
|
+
Manifest.txt
|
|
3
|
+
PostInstall.txt
|
|
4
|
+
README.rdoc
|
|
5
|
+
Rakefile
|
|
6
|
+
bin/cumulus
|
|
7
|
+
bin/cumulus-gen
|
|
8
|
+
cumulus.gemspec
|
|
9
|
+
lib/cumulus.rb
|
|
10
|
+
lib/cumulus/builder.rb
|
|
11
|
+
lib/cumulus/cli.rb
|
|
12
|
+
lib/cumulus/hash_db.rb
|
|
13
|
+
lib/cumulus/resources.rb
|
|
14
|
+
lib/cumulus/resources/attachment.rb
|
|
15
|
+
lib/cumulus/resources/base_resource.rb
|
|
16
|
+
lib/cumulus/resources/content.rb
|
|
17
|
+
lib/cumulus/resources/layout.rb
|
|
18
|
+
lib/cumulus/resources/skin.rb
|
|
19
|
+
lib/cumulus/resources/template.rb
|
|
20
|
+
lib/cumulus/scanner.rb
|
|
21
|
+
lib/support/trollop.rb
|
|
22
|
+
script/console
|
|
23
|
+
script/destroy
|
|
24
|
+
script/generate
|
|
25
|
+
test/fixtures/my_site/Rakefile
|
|
26
|
+
test/fixtures/my_site/config/content.yml
|
|
27
|
+
test/fixtures/my_site/config/publishing.yml
|
|
28
|
+
test/fixtures/my_site/config/site.yml
|
|
29
|
+
test/fixtures/my_site/content/articles/about/index.html
|
|
30
|
+
test/fixtures/my_site/content/articles/about/test.rb
|
|
31
|
+
test/fixtures/my_site/content/posts/001-hello-world/index.html
|
|
32
|
+
test/fixtures/my_site/output/articles/about/index.html
|
|
33
|
+
test/fixtures/my_site/output/articles/about/test.rb
|
|
34
|
+
test/fixtures/my_site/output/posts/001-hello-world/index.html
|
|
35
|
+
test/fixtures/my_site/skin/styles/screen.css
|
|
36
|
+
test/fixtures/my_site/skin/templates/layouts/home.html
|
|
37
|
+
test/fixtures/my_site/skin/templates/layouts/main.html
|
|
38
|
+
test/fixtures/my_site/skin/templates/objects/article.html
|
|
39
|
+
test/fixtures/my_site/skin/templates/objects/article.summary.html
|
|
40
|
+
test/fixtures/my_site/skin/templates/objects/post.html
|
|
41
|
+
test/fixtures/my_site/skin/templates/objects/post.summary.html
|
|
42
|
+
test/test_helper.rb
|
|
43
|
+
test/unit/cumulus_cli_test.rb
|
|
44
|
+
test/unit/cumulus_test.rb
|
|
45
|
+
test/unit/hash_db_test.rb
|
data/PostInstall.txt
ADDED
data/README.rdoc
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
= Cumulus
|
|
2
|
+
|
|
3
|
+
http://github.com/darthapo/cumulus
|
|
4
|
+
|
|
5
|
+
== DESCRIPTION:
|
|
6
|
+
|
|
7
|
+
**Non Functional / Still in Planning Stage**
|
|
8
|
+
|
|
9
|
+
Here's the high-level (brain dump):
|
|
10
|
+
|
|
11
|
+
* Site content is organized in collections
|
|
12
|
+
* Collections are serialized
|
|
13
|
+
* Each have support for next, previous, first, last, etc
|
|
14
|
+
* The content files are HTML
|
|
15
|
+
* Templates are object based (each content type can be rendered with their own templates)
|
|
16
|
+
* Templates are HTML with interspersed Liquid markup
|
|
17
|
+
* All meta data is described using HTML meta tags
|
|
18
|
+
* You custom meta data tags in a content objects
|
|
19
|
+
* You can specify 'prototype' content objects in a collection with a _proto folder in the collection
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
== REQUIREMENTS:
|
|
23
|
+
|
|
24
|
+
* hpricot >= 0.6
|
|
25
|
+
* liquid >= 1.9
|
|
26
|
+
* rake >= 0.8
|
|
27
|
+
|
|
28
|
+
== INSTALL:
|
|
29
|
+
|
|
30
|
+
gem sources -a http://gems.github.com
|
|
31
|
+
sudo gem install darthapo-cumulus
|
|
32
|
+
|
|
33
|
+
== LICENSE:
|
|
34
|
+
|
|
35
|
+
(The MIT License)
|
|
36
|
+
|
|
37
|
+
Copyright (c) 2008 M@ McCray.
|
|
38
|
+
|
|
39
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
40
|
+
a copy of this software and associated documentation files (the
|
|
41
|
+
'Software'), to deal in the Software without restriction, including
|
|
42
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
43
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
44
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
45
|
+
the following conditions:
|
|
46
|
+
|
|
47
|
+
The above copyright notice and this permission notice shall be
|
|
48
|
+
included in all copies or substantial portions of the Software.
|
|
49
|
+
|
|
50
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
51
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
52
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
53
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
54
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
55
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
56
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
%w[rubygems rake rake/clean rake/testtask fileutils newgem rubigen shoulda/tasks].each { |f| require f }
|
|
2
|
+
require File.dirname(__FILE__) + '/lib/cumulus'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# Generate all the Rake tasks
|
|
6
|
+
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
|
7
|
+
$hoe = Hoe.new('cumulus', Cumulus::VERSION) do |p|
|
|
8
|
+
p.developer('M@ McCray', 'darthapo@gmail.com')
|
|
9
|
+
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
|
10
|
+
p.post_install_message = 'PostInstall.txt'
|
|
11
|
+
p.rubyforge_name = p.name
|
|
12
|
+
p.extra_deps = [
|
|
13
|
+
['hpricot','>= 0.6'],
|
|
14
|
+
['liquid', '>= 1.9'],
|
|
15
|
+
['rake', '>= 0.8']
|
|
16
|
+
]
|
|
17
|
+
p.extra_dev_deps = [
|
|
18
|
+
['newgem', ">= #{::Newgem::VERSION}"],
|
|
19
|
+
['shoulda', ">= 2.0"],
|
|
20
|
+
['activesupport']
|
|
21
|
+
]
|
|
22
|
+
p.test_globs = "test/**/*_test.rb"
|
|
23
|
+
p.clean_globs |= %w[**/.DS_Store tmp *.log]
|
|
24
|
+
path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
|
|
25
|
+
p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
|
|
26
|
+
p.rsync_args = '-av --delete --ignore-errors'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
require 'newgem/tasks' # load /tasks/*.rake
|
|
30
|
+
Dir['tasks/**/*.rake'].each { |t| load t }
|
|
31
|
+
|
|
32
|
+
desc "Test shoulda specs"
|
|
33
|
+
Rake::TestTask.new('shoulda:specs') do |t|
|
|
34
|
+
t.libs << 'lib'
|
|
35
|
+
t.pattern = 'test/**/*_test.rb'
|
|
36
|
+
t.verbose = false
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
#task :default => ['shoulda:specs']
|
data/bin/cumulus
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Created on 2008-12-8.
|
|
4
|
+
# Copyright (c) 2008 M@ McCray. All rights reserved.
|
|
5
|
+
|
|
6
|
+
require File.expand_path(File.dirname(__FILE__) + "/../lib/cumulus")
|
|
7
|
+
|
|
8
|
+
require "cumulus/cli"
|
|
9
|
+
CLI_MODE = :build
|
|
10
|
+
|
|
11
|
+
Cumulus::CLI.execute(STDOUT, ARGV)
|
data/bin/cumulus-gen
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Created on 2008-12-8.
|
|
4
|
+
# Copyright (c) 2008 M@ McCray. All rights reserved.
|
|
5
|
+
|
|
6
|
+
require File.expand_path(File.dirname(__FILE__) + "/../lib/cumulus")
|
|
7
|
+
|
|
8
|
+
require "cumulus/cli"
|
|
9
|
+
CLI_MODE = :gen
|
|
10
|
+
|
|
11
|
+
Cumulus::CLI.execute(STDOUT, ARGV)
|
data/cumulus.gemspec
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.name = %q{cumulus}
|
|
5
|
+
s.version = "0.0.1"
|
|
6
|
+
|
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
|
+
s.authors = ["M@ McCray"]
|
|
9
|
+
s.date = %q{2008-12-09}
|
|
10
|
+
s.description = %q{**Non Functional / Still in Planning Stage** Here's the high-level (brain dump): * Site content is organized in collections * Collections are serialized * Each have support for next, previous, first, last, etc * The content files are HTML * Templates are object based (each content type can be rendered with their own templates) * Templates are HTML with interspersed Liquid markup * All meta data is described using HTML meta tags * You custom meta data tags in a content objects * You can specify 'prototype' content objects in a collection with a _proto folder in the collection}
|
|
11
|
+
s.email = ["darthapo@gmail.com"]
|
|
12
|
+
s.executables = ["cumulus", "cumulus-gen"]
|
|
13
|
+
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc"]
|
|
14
|
+
s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "bin/cumulus", "bin/cumulus-gen", "cumulus.gemspec", "lib/cumulus.rb", "lib/cumulus/builder.rb", "lib/cumulus/cli.rb", "lib/cumulus/hash_db.rb", "lib/cumulus/resources.rb", "lib/cumulus/resources/attachment.rb", "lib/cumulus/resources/base_resource.rb", "lib/cumulus/resources/content.rb", "lib/cumulus/resources/layout.rb", "lib/cumulus/resources/skin.rb", "lib/cumulus/resources/template.rb", "lib/cumulus/scanner.rb", "lib/support/trollop.rb", "script/console", "script/destroy", "script/generate", "test/fixtures/my_site/Rakefile", "test/fixtures/my_site/config/content.yml", "test/fixtures/my_site/config/publishing.yml", "test/fixtures/my_site/config/site.yml", "test/fixtures/my_site/content/articles/about/index.html", "test/fixtures/my_site/content/articles/about/test.rb", "test/fixtures/my_site/content/posts/001-hello-world/index.html", "test/fixtures/my_site/output/articles/about/index.html", "test/fixtures/my_site/output/articles/about/test.rb", "test/fixtures/my_site/output/posts/001-hello-world/index.html", "test/fixtures/my_site/skin/styles/screen.css", "test/fixtures/my_site/skin/templates/layouts/home.html", "test/fixtures/my_site/skin/templates/layouts/main.html", "test/fixtures/my_site/skin/templates/objects/article.html", "test/fixtures/my_site/skin/templates/objects/article.summary.html", "test/fixtures/my_site/skin/templates/objects/post.html", "test/fixtures/my_site/skin/templates/objects/post.summary.html", "test/test_helper.rb", "test/unit/cumulus_cli_test.rb", "test/unit/cumulus_test.rb", "test/unit/hash_db_test.rb"]
|
|
15
|
+
s.has_rdoc = true
|
|
16
|
+
s.homepage = %q{http://github.com/darthapo/cumulus}
|
|
17
|
+
s.post_install_message = %q{PostInstall.txt}
|
|
18
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
|
19
|
+
s.require_paths = ["lib"]
|
|
20
|
+
s.rubyforge_project = %q{cumulus}
|
|
21
|
+
s.rubygems_version = %q{1.3.1}
|
|
22
|
+
s.summary = %q{**Non Functional / Still in Planning Stage** Here's the high-level (brain dump): * Site content is organized in collections * Collections are serialized * Each have support for next, previous, first, last, etc * The content files are HTML * Templates are object based (each content type can be rendered with their own templates) * Templates are HTML with interspersed Liquid markup * All meta data is described using HTML meta tags * You custom meta data tags in a content objects * You can specify 'prototype' content objects in a collection with a _proto folder in the collection}
|
|
23
|
+
s.test_files = ["test/unit/cumulus_cli_test.rb", "test/unit/cumulus_test.rb", "test/unit/hash_db_test.rb"]
|
|
24
|
+
|
|
25
|
+
if s.respond_to? :specification_version then
|
|
26
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
27
|
+
s.specification_version = 2
|
|
28
|
+
|
|
29
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
30
|
+
s.add_runtime_dependency(%q<hpricot>, [">= 0.6"])
|
|
31
|
+
s.add_runtime_dependency(%q<liquid>, [">= 1.9"])
|
|
32
|
+
s.add_runtime_dependency(%q<rake>, [">= 0.8"])
|
|
33
|
+
s.add_development_dependency(%q<newgem>, [">= 1.1.0"])
|
|
34
|
+
s.add_development_dependency(%q<shoulda>, [">= 2.0"])
|
|
35
|
+
s.add_development_dependency(%q<activesupport>, [">= 0"])
|
|
36
|
+
s.add_development_dependency(%q<hoe>, [">= 1.8.0"])
|
|
37
|
+
else
|
|
38
|
+
s.add_dependency(%q<hpricot>, [">= 0.6"])
|
|
39
|
+
s.add_dependency(%q<liquid>, [">= 1.9"])
|
|
40
|
+
s.add_dependency(%q<rake>, [">= 0.8"])
|
|
41
|
+
s.add_dependency(%q<newgem>, [">= 1.1.0"])
|
|
42
|
+
s.add_dependency(%q<shoulda>, [">= 2.0"])
|
|
43
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
|
44
|
+
s.add_dependency(%q<hoe>, [">= 1.8.0"])
|
|
45
|
+
end
|
|
46
|
+
else
|
|
47
|
+
s.add_dependency(%q<hpricot>, [">= 0.6"])
|
|
48
|
+
s.add_dependency(%q<liquid>, [">= 1.9"])
|
|
49
|
+
s.add_dependency(%q<rake>, [">= 0.8"])
|
|
50
|
+
s.add_dependency(%q<newgem>, [">= 1.1.0"])
|
|
51
|
+
s.add_dependency(%q<shoulda>, [">= 2.0"])
|
|
52
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
|
53
|
+
s.add_dependency(%q<hoe>, [">= 1.8.0"])
|
|
54
|
+
end
|
|
55
|
+
end
|
data/lib/cumulus.rb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
2
|
+
|
|
3
|
+
require 'pp'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
require 'liquid'
|
|
6
|
+
require 'active_support'
|
|
7
|
+
|
|
8
|
+
module Cumulus
|
|
9
|
+
|
|
10
|
+
VERSION = '0.0.1'
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
|
|
14
|
+
attr_accessor_with_default :output_dir, 'output'
|
|
15
|
+
attr_accessor_with_default :verbose, false
|
|
16
|
+
attr_accessor_with_default :dry_run, false
|
|
17
|
+
|
|
18
|
+
def config(&block)
|
|
19
|
+
self.instance_eval( &block )
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
require 'cumulus/resources'
|
|
27
|
+
require 'cumulus/scanner'
|
|
28
|
+
require 'cumulus/builder'
|
|
29
|
+
require 'cumulus/renderer'
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# The builder class takes the resources and generates the output
|
|
2
|
+
|
|
3
|
+
require 'liquid/module_ex'
|
|
4
|
+
|
|
5
|
+
class Hash
|
|
6
|
+
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module Cumulus
|
|
10
|
+
|
|
11
|
+
class Builder
|
|
12
|
+
|
|
13
|
+
attr_reader :options
|
|
14
|
+
|
|
15
|
+
def initialize(run_options={})
|
|
16
|
+
@options = {
|
|
17
|
+
:dry_run => false,
|
|
18
|
+
:verbose => false
|
|
19
|
+
}.merge!(run_options)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def execute
|
|
23
|
+
collection_types = {}
|
|
24
|
+
renderer = Cumulus::Renderer.new({})
|
|
25
|
+
|
|
26
|
+
Resources.collections.each do |content|
|
|
27
|
+
#content = content.clone
|
|
28
|
+
# Render content
|
|
29
|
+
output = nil
|
|
30
|
+
renderer.render_body(content)
|
|
31
|
+
template = renderer.template_for( content )
|
|
32
|
+
output = renderer.render(template, content, {'_content' => content})
|
|
33
|
+
|
|
34
|
+
# Render layout around content
|
|
35
|
+
layout = renderer.layout_for(template)
|
|
36
|
+
output = renderer.render(layout, output)
|
|
37
|
+
|
|
38
|
+
# Write to file
|
|
39
|
+
write_file content.output_path, output
|
|
40
|
+
|
|
41
|
+
# Copy attachments
|
|
42
|
+
content.attachments.each do |attachment|
|
|
43
|
+
copy_file attachment.source_path, attachment.output_path
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
collection_types[content.collection_type] ||= []
|
|
47
|
+
collection_types[content.collection_type] << content
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
collection_types.each do |coll, contents|
|
|
51
|
+
# Render the collection indices...
|
|
52
|
+
contents.map {|c| renderer.render_body(c) }
|
|
53
|
+
template = renderer.template_for( contents.first, 'index' )
|
|
54
|
+
source = renderer.render(template, '', {coll => contents, '_contents' => contents})
|
|
55
|
+
|
|
56
|
+
layout = renderer.layout_for(template)
|
|
57
|
+
output = renderer.render(layout, source)
|
|
58
|
+
|
|
59
|
+
write_file File.join(Cumulus.output_dir, coll, 'index.html'), output
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def temporarily_replace(content, value, field=:content)
|
|
66
|
+
old = content.metadata[field]
|
|
67
|
+
content.metadata[field] = value
|
|
68
|
+
yield
|
|
69
|
+
content.metadata[field] = old
|
|
70
|
+
end
|
|
71
|
+
# Use logging?
|
|
72
|
+
def info(msg, alt=nil)
|
|
73
|
+
if options[:verbose]
|
|
74
|
+
puts msg
|
|
75
|
+
else
|
|
76
|
+
puts alt unless alt.nil?
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def error
|
|
81
|
+
puts msg
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def fatal
|
|
85
|
+
puts msg
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# ================
|
|
89
|
+
# = File Helpers =
|
|
90
|
+
# ================
|
|
91
|
+
|
|
92
|
+
def make_dir(path)
|
|
93
|
+
FileUtils.mkdir_p( path )
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def write_file(path, contents)
|
|
97
|
+
make_dir( File.dirname( path ) )
|
|
98
|
+
File.open( path, 'w' ) do |f|
|
|
99
|
+
f.write( contents )
|
|
100
|
+
info(" + #{ path }", '.')
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def copy_file(path, to)
|
|
105
|
+
make_dir( File.dirname( path ) )
|
|
106
|
+
FileUtils.cp_r path, to
|
|
107
|
+
info(" - #{ to }", '.')
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def delete_file(path, force=false)
|
|
111
|
+
if force
|
|
112
|
+
FileUtils.rm_rf( pathto )
|
|
113
|
+
else
|
|
114
|
+
FileUtils.rm_( pathto )
|
|
115
|
+
end
|
|
116
|
+
info(" x #{ path }", '.')
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
data/lib/cumulus/cli.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'support/trollop'
|
|
2
|
+
|
|
3
|
+
# I'm thinking Trollop!
|
|
4
|
+
opts = Trollop::options do
|
|
5
|
+
version "cumulus #{Cumulus::VERSION} (c) 2008 M@ McCray"
|
|
6
|
+
banner <<-EOS
|
|
7
|
+
Usage:
|
|
8
|
+
cumulus#{" <path>" if CLI_MODE == :gen} [options]
|
|
9
|
+
where [options] are:
|
|
10
|
+
EOS
|
|
11
|
+
|
|
12
|
+
opt :verbose, "Generate output, loudly", :default => false
|
|
13
|
+
opt :force, "Force overwrite of all files", :default => false
|
|
14
|
+
opt :dry_run, "Don't write any files", :default => false
|
|
15
|
+
|
|
16
|
+
unless CLI_MODE == :gen
|
|
17
|
+
opt :theme, "Ignore config, render with specified theme", :default => false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# opt :file, "Extra data filename to read in, with a very long option description like this one", :type => String
|
|
21
|
+
# opt :volume, "Volume level", :default => 3.0
|
|
22
|
+
# opt :iters, "Number of iterations", :default => 5
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Trollop::die :volume, "must be non-negative" if opts[:volume] < 0
|
|
26
|
+
# Trollop::die :file, "must exist" unless File.exist?(opts[:file]) if opts[:file]
|
|
27
|
+
|
|
28
|
+
# module Cumulus
|
|
29
|
+
# class CLI
|
|
30
|
+
# def self.execute(stdout, arguments=[])
|
|
31
|
+
#
|
|
32
|
+
# # NOTE: the option -p/--path= is given as an example, and should be replaced in your application.
|
|
33
|
+
#
|
|
34
|
+
# options = {
|
|
35
|
+
# :path => '~'
|
|
36
|
+
# }
|
|
37
|
+
# mandatory_options = %w( )
|
|
38
|
+
#
|
|
39
|
+
# parser = OptionParser.new do |opts|
|
|
40
|
+
# opts.banner = <<-BANNER.gsub(/^ /,'')
|
|
41
|
+
# This application is wonderful because...
|
|
42
|
+
#
|
|
43
|
+
# Usage: #{File.basename($0)} [options]
|
|
44
|
+
#
|
|
45
|
+
# Options are:
|
|
46
|
+
# BANNER
|
|
47
|
+
# opts.separator ""
|
|
48
|
+
# opts.on("-p", "--path=PATH", String,
|
|
49
|
+
# "This is a sample message.",
|
|
50
|
+
# "For multiple lines, add more strings.",
|
|
51
|
+
# "Default: ~") { |arg| options[:path] = arg }
|
|
52
|
+
# opts.on("-h", "--help",
|
|
53
|
+
# "Show this help message.") { stdout.puts opts; exit }
|
|
54
|
+
# opts.parse!(arguments)
|
|
55
|
+
#
|
|
56
|
+
# if mandatory_options && mandatory_options.find { |option| options[option.to_sym].nil? }
|
|
57
|
+
# stdout.puts opts; exit
|
|
58
|
+
# end
|
|
59
|
+
# end
|
|
60
|
+
#
|
|
61
|
+
# path = options[:path]
|
|
62
|
+
# end
|
|
63
|
+
# end
|
|
64
|
+
# end
|