darthapo-cumulus 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|