bones 2.1.1 → 2.2.0
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 +12 -0
- data/Manifest.txt +22 -11
- data/README.rdoc +34 -10
- data/Rakefile +2 -2
- data/bin/bones +1 -1
- data/bones.gemspec +40 -0
- data/data/{History.txt.erb → History.txt.bns} +0 -0
- data/data/{README.txt.erb → README.txt.bns} +0 -0
- data/data/{Rakefile.erb → Rakefile.bns} +5 -1
- data/data/bin/{NAME.erb → NAME.bns} +0 -0
- data/data/lib/NAME.rb.bns +49 -0
- data/data/spec/{NAME_spec.rb.erb → NAME_spec.rb.bns} +0 -0
- data/data/spec/{spec_helper.rb.erb → spec_helper.rb.bns} +0 -0
- data/lib/bones.rb +3 -1
- data/lib/bones/app.rb +92 -0
- data/lib/bones/app/command.rb +130 -0
- data/lib/bones/app/create_command.rb +87 -0
- data/lib/bones/app/file_manager.rb +176 -0
- data/lib/bones/app/freeze_command.rb +72 -0
- data/lib/bones/app/info_command.rb +58 -0
- data/lib/bones/app/unfreeze_command.rb +53 -0
- data/lib/bones/app/update_command.rb +47 -0
- data/lib/bones/tasks/gem.rake +11 -2
- data/spec/bones/app/file_manager_spec.rb +150 -0
- data/spec/bones/app_spec.rb +97 -0
- data/spec/data/data/NAME/NAME.rb.bns +5 -0
- data/spec/data/data/README.txt.bns +48 -0
- data/spec/data/data/Rakefile.bns +30 -0
- data/{data/lib/NAME.rb.erb → spec/data/data/lib/NAME.rb.bns} +0 -0
- data/spec/spec_helper.rb +22 -0
- data/tasks/gem.rake +11 -2
- metadata +24 -14
- data/lib/bones/main.rb +0 -380
- data/spec/bones/main_spec.rb +0 -157
- data/spec/data/data/README.txt +0 -0
- data/spec/data/data/Rakefile +0 -0
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== 2.2.0 / 2009-01-01
|
2
|
+
|
3
|
+
* 4 minor enhancements
|
4
|
+
- projects can be instantiated from git or svn repositories
|
5
|
+
- added a task to generate a project gemspec for use on github [Sandro Turriate]
|
6
|
+
- Mr Bones erb translation is now applied to files with a
|
7
|
+
'.bns' extension instead of an '.erb' extension
|
8
|
+
- refactored the main bones application
|
9
|
+
* 1 bugfix
|
10
|
+
- Mr Bones tasks are only added to the gemspec when a package
|
11
|
+
is being built
|
12
|
+
|
1
13
|
== 2.1.1 / 2008-12-15
|
2
14
|
|
3
15
|
* 1 minor enhancement
|
data/Manifest.txt
CHANGED
@@ -3,19 +3,27 @@ Manifest.txt
|
|
3
3
|
README.rdoc
|
4
4
|
Rakefile
|
5
5
|
bin/bones
|
6
|
-
|
6
|
+
bones.gemspec
|
7
|
+
data/History.txt.bns
|
7
8
|
data/Manifest.txt
|
8
|
-
data/README.txt.
|
9
|
-
data/Rakefile.
|
10
|
-
data/bin/NAME.
|
11
|
-
data/lib/NAME.rb.
|
12
|
-
data/spec/NAME_spec.rb.
|
13
|
-
data/spec/spec_helper.rb.
|
9
|
+
data/README.txt.bns
|
10
|
+
data/Rakefile.bns
|
11
|
+
data/bin/NAME.bns
|
12
|
+
data/lib/NAME.rb.bns
|
13
|
+
data/spec/NAME_spec.rb.bns
|
14
|
+
data/spec/spec_helper.rb.bns
|
14
15
|
data/test/test_NAME.rb
|
15
16
|
lib/bones.rb
|
16
17
|
lib/bones/annotation_extractor.rb
|
18
|
+
lib/bones/app.rb
|
19
|
+
lib/bones/app/command.rb
|
20
|
+
lib/bones/app/create_command.rb
|
21
|
+
lib/bones/app/file_manager.rb
|
22
|
+
lib/bones/app/freeze_command.rb
|
23
|
+
lib/bones/app/info_command.rb
|
24
|
+
lib/bones/app/unfreeze_command.rb
|
25
|
+
lib/bones/app/update_command.rb
|
17
26
|
lib/bones/debug.rb
|
18
|
-
lib/bones/main.rb
|
19
27
|
lib/bones/smtp_tls.rb
|
20
28
|
lib/bones/tasks/ann.rake
|
21
29
|
lib/bones/tasks/bones.rake
|
@@ -30,10 +38,13 @@ lib/bones/tasks/setup.rb
|
|
30
38
|
lib/bones/tasks/spec.rake
|
31
39
|
lib/bones/tasks/svn.rake
|
32
40
|
lib/bones/tasks/test.rake
|
33
|
-
spec/bones/
|
41
|
+
spec/bones/app/file_manager_spec.rb
|
42
|
+
spec/bones/app_spec.rb
|
34
43
|
spec/bones_spec.rb
|
35
|
-
spec/data/data/
|
36
|
-
spec/data/data/
|
44
|
+
spec/data/data/NAME/NAME.rb.bns
|
45
|
+
spec/data/data/README.txt.bns
|
46
|
+
spec/data/data/Rakefile.bns
|
47
|
+
spec/data/data/lib/NAME.rb.bns
|
37
48
|
spec/data/foo/README.txt
|
38
49
|
spec/data/foo/Rakefile
|
39
50
|
spec/spec_helper.rb
|
data/README.rdoc
CHANGED
@@ -60,6 +60,7 @@ Mr Bones provides the following rake tasks:
|
|
60
60
|
gem:reinstall # Reinstall the gem
|
61
61
|
gem:release # Package and upload to RubyForge
|
62
62
|
gem:repackage # Force a rebuild of the package files
|
63
|
+
gem:spec # Write the gemspec
|
63
64
|
gem:uninstall # Uninstall the gem
|
64
65
|
git:create_tag # Create a new tag in the Git repository
|
65
66
|
git:show_tags # Show tags from the Git repository
|
@@ -86,7 +87,7 @@ directory. Add your own tasks there when you need more functionality.
|
|
86
87
|
|
87
88
|
To create a new "Get Fuzzy" project:
|
88
89
|
|
89
|
-
bones get_fuzzy
|
90
|
+
bones create get_fuzzy
|
90
91
|
|
91
92
|
If you ever get confused about what Mr Bones can do:
|
92
93
|
|
@@ -182,7 +183,7 @@ copied to the ".mrbones" directory in your home directory. From there, the
|
|
182
183
|
skeleton can be modified however you like (add new files and tasks, add new
|
183
184
|
directories, etc).
|
184
185
|
|
185
|
-
bones
|
186
|
+
bones freeze
|
186
187
|
|
187
188
|
Typical uses of this feature would be to fill in user specific data like the
|
188
189
|
author, e-mail address, etc. You can also add more default code to the skeleton
|
@@ -191,11 +192,11 @@ project or your own ".rake" task files.
|
|
191
192
|
You can have multiple skeletons with different names. Your projects can be
|
192
193
|
instantiated from any of these skeletons. Just supply a name when freezing:
|
193
194
|
|
194
|
-
bones
|
195
|
+
bones freeze foo
|
195
196
|
|
196
197
|
You can instantiate a project from the "foo" skeleton:
|
197
198
|
|
198
|
-
bones --skeleton foo get_fuzzy
|
199
|
+
bones create --skeleton foo get_fuzzy
|
199
200
|
|
200
201
|
The default skeleton name is "data". If no skeleton name is provided, then this
|
201
202
|
is the skeleton that will be used.
|
@@ -207,21 +208,44 @@ Unfreezing a skeleton will remove your customized project skeleton from the
|
|
207
208
|
instead. A copy of your custom skeleton is stored in an archive directory of
|
208
209
|
the ".mrbones" directory before it is removed.
|
209
210
|
|
210
|
-
bones
|
211
|
+
bones unfreeze
|
211
212
|
|
212
213
|
You can unfreeze named skeletons, too:
|
213
214
|
|
214
|
-
bones
|
215
|
+
bones unfreeze foo
|
216
|
+
|
217
|
+
==== Repository Skeletons
|
218
|
+
|
219
|
+
You can instantiate a new project from a git or svn repository. For example,
|
220
|
+
if you would like to use the "bort" rails template from github, you can type
|
221
|
+
in the following:
|
222
|
+
|
223
|
+
bones create --repository git://github.com/fudgestudios/bort.git foo
|
224
|
+
|
225
|
+
Typing in the full path to the repository each time is tedious. You can
|
226
|
+
create an alias by freezing the repository and giving it an easy to remember
|
227
|
+
name.
|
228
|
+
|
229
|
+
bones freeze --repository git://github.com/fudgestudios/bort.git bort
|
230
|
+
|
231
|
+
This does not checkout a copy of the repository; it give us an easy to use
|
232
|
+
alias when we want to create a new proejct based on the repository. The
|
233
|
+
following command will use our new alias to instantiate a new project called
|
234
|
+
"foo":
|
235
|
+
|
236
|
+
bones create --skeleton bort foo
|
237
|
+
|
238
|
+
If the repository contains '.bns' files they will be filtered through the
|
239
|
+
ERb templating system. All the custom modifications described in the next
|
240
|
+
section apply to repository based skeletons as well.
|
215
241
|
|
216
242
|
==== Custom Modifications
|
217
243
|
|
218
244
|
Mr Bones will perform a limited set of substitutions on the files in the
|
219
245
|
skeleton when it generates a new project. ERB is used to insert the project
|
220
246
|
name and the derived class name into template files. The file must end in an
|
221
|
-
".
|
222
|
-
stripped from the file during project generation.
|
223
|
-
should have two suffixes -- the ".erb" suffix that will be stripped, and the
|
224
|
-
suffix you want the resulting project file to have.
|
247
|
+
".bns" suffix for ERB substitutions to take place. The ".bns" suffix is
|
248
|
+
stripped from the file during project generation.
|
225
249
|
|
226
250
|
Only two values can be substituted into files using ERB -- the project name and
|
227
251
|
the derived class name.
|
data/Rakefile
CHANGED
@@ -9,7 +9,7 @@ PROJ.authors = 'Tim Pease'
|
|
9
9
|
PROJ.email = 'tim.pease@gmail.com'
|
10
10
|
PROJ.url = 'http://codeforpeople.rubyforge.org/bones'
|
11
11
|
PROJ.version = Bones::VERSION
|
12
|
-
PROJ.release_name = '
|
12
|
+
PROJ.release_name = 'Distal Phalanges'
|
13
13
|
PROJ.ruby_opts = %w[-W0]
|
14
14
|
PROJ.readme_file = 'README.rdoc'
|
15
15
|
|
@@ -35,7 +35,7 @@ PROJ.ann.paragraphs = %w[install synopsis features requirements]
|
|
35
35
|
PROJ.ann.text = <<-ANN
|
36
36
|
== FUN FACT
|
37
37
|
|
38
|
-
|
38
|
+
"Tom Sawyer" was the first novel written on a typewriter.
|
39
39
|
|
40
40
|
== POST SCRIPT
|
41
41
|
|
data/bin/bones
CHANGED
data/bones.gemspec
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{bones}
|
5
|
+
s.version = "2.2.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Tim Pease"]
|
9
|
+
s.date = %q{2009-01-01}
|
10
|
+
s.default_executable = %q{bones}
|
11
|
+
s.description = %q{Mr Bones is a handy tool that builds a skeleton for your new Ruby projects. The skeleton contains some starter code and a collection of rake tasks to ease the management and deployment of your source code. Mr Bones is not viral -- all the code your project needs is included in the skeleton (no gem dependency required).}
|
12
|
+
s.email = %q{tim.pease@gmail.com}
|
13
|
+
s.executables = ["bones"]
|
14
|
+
s.extra_rdoc_files = ["History.txt", "README.rdoc", "bin/bones", "lib/bones/tasks/ann.rake", "lib/bones/tasks/bones.rake", "lib/bones/tasks/gem.rake", "lib/bones/tasks/git.rake", "lib/bones/tasks/manifest.rake", "lib/bones/tasks/notes.rake", "lib/bones/tasks/post_load.rake", "lib/bones/tasks/rdoc.rake", "lib/bones/tasks/rubyforge.rake", "lib/bones/tasks/spec.rake", "lib/bones/tasks/svn.rake", "lib/bones/tasks/test.rake", "spec/data/data/README.txt", "spec/data/foo/README.txt"]
|
15
|
+
s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "bin/bones", "data/History.txt.bns", "data/Manifest.txt", "data/README.txt.bns", "data/Rakefile.bns", "data/bin/NAME.bns", "data/lib/NAME.rb.bns", "data/spec/NAME_spec.rb.bns", "data/spec/spec_helper.rb.bns", "data/test/test_NAME.rb", "lib/bones.rb", "lib/bones/annotation_extractor.rb", "lib/bones/debug.rb", "lib/bones/main.rb", "lib/bones/smtp_tls.rb", "lib/bones/tasks/ann.rake", "lib/bones/tasks/bones.rake", "lib/bones/tasks/gem.rake", "lib/bones/tasks/git.rake", "lib/bones/tasks/manifest.rake", "lib/bones/tasks/notes.rake", "lib/bones/tasks/post_load.rake", "lib/bones/tasks/rdoc.rake", "lib/bones/tasks/rubyforge.rake", "lib/bones/tasks/setup.rb", "lib/bones/tasks/spec.rake", "lib/bones/tasks/svn.rake", "lib/bones/tasks/test.rake", "spec/bones/main_spec.rb", "spec/bones_spec.rb", "spec/data/data/README.txt", "spec/data/data/Rakefile", "spec/data/foo/README.txt", "spec/data/foo/Rakefile", "spec/spec_helper.rb"]
|
16
|
+
s.has_rdoc = true
|
17
|
+
s.homepage = %q{http://codeforpeople.rubyforge.org/bones}
|
18
|
+
s.post_install_message = %q{--------------------------
|
19
|
+
Keep rattlin' dem bones!
|
20
|
+
--------------------------
|
21
|
+
}
|
22
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
s.rubyforge_project = %q{codeforpeople}
|
25
|
+
s.rubygems_version = %q{1.3.1}
|
26
|
+
s.summary = %q{Mr Bones is a handy tool that builds a skeleton for your new Ruby projects}
|
27
|
+
|
28
|
+
if s.respond_to? :specification_version then
|
29
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
30
|
+
s.specification_version = 2
|
31
|
+
|
32
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
33
|
+
s.add_runtime_dependency(%q<rake>, [">= 0.8.3"])
|
34
|
+
else
|
35
|
+
s.add_dependency(%q<rake>, [">= 0.8.3"])
|
36
|
+
end
|
37
|
+
else
|
38
|
+
s.add_dependency(%q<rake>, [">= 0.8.3"])
|
39
|
+
end
|
40
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module <%= classname %>
|
3
|
+
|
4
|
+
# :stopdoc:
|
5
|
+
VERSION = '1.0.0'
|
6
|
+
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
7
|
+
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
8
|
+
# :startdoc:
|
9
|
+
|
10
|
+
# Returns the version string for the library.
|
11
|
+
#
|
12
|
+
def self.version
|
13
|
+
VERSION
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns the library path for the module. If any arguments are given,
|
17
|
+
# they will be joined to the end of the libray path using
|
18
|
+
# <tt>File.join</tt>.
|
19
|
+
#
|
20
|
+
def self.libpath( *args )
|
21
|
+
args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns the lpath for the module. If any arguments are given,
|
25
|
+
# they will be joined to the end of the path using
|
26
|
+
# <tt>File.join</tt>.
|
27
|
+
#
|
28
|
+
def self.path( *args )
|
29
|
+
args.empty? ? PATH : ::File.join(PATH, args.flatten)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Utility method used to rquire all files ending in .rb that lie in the
|
33
|
+
# directory below this file that has the same name as the filename passed
|
34
|
+
# in. Optionally, a specific _directory_ name can be passed in such that
|
35
|
+
# the _filename_ does not have to be equivalent to the directory.
|
36
|
+
#
|
37
|
+
def self.require_all_libs_relative_to( fname, dir = nil )
|
38
|
+
dir ||= ::File.basename(fname, '.*')
|
39
|
+
search_me = ::File.expand_path(
|
40
|
+
::File.join(::File.dirname(fname), dir, '**', '*.rb'))
|
41
|
+
|
42
|
+
Dir.glob(search_me).sort.each {|rb| require rb}
|
43
|
+
end
|
44
|
+
|
45
|
+
end # module <%= classname %>
|
46
|
+
|
47
|
+
<%= classname %>.require_all_libs_relative_to(__FILE__)
|
48
|
+
|
49
|
+
# EOF
|
File without changes
|
File without changes
|
data/lib/bones.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
module Bones
|
3
3
|
|
4
4
|
# :stopdoc:
|
5
|
-
VERSION = '2.
|
5
|
+
VERSION = '2.2.0'
|
6
6
|
PATH = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
7
7
|
WIN32 = %r/win32/ =~ RUBY_PLATFORM
|
8
8
|
DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
|
@@ -32,6 +32,8 @@ module Bones
|
|
32
32
|
Dir.glob(search_me).sort.each {|rb| require rb}
|
33
33
|
end
|
34
34
|
|
35
|
+
# call-seq:
|
36
|
+
# Bones.setup
|
35
37
|
#
|
36
38
|
#
|
37
39
|
def self.setup
|
data/lib/bones/app.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
|
2
|
+
require 'fileutils'
|
3
|
+
require 'optparse'
|
4
|
+
require 'erb'
|
5
|
+
|
6
|
+
module Bones
|
7
|
+
class App
|
8
|
+
|
9
|
+
# Create a new instance of App, and run the +bones+ application given
|
10
|
+
# the command line _args_.
|
11
|
+
#
|
12
|
+
def self.run( args )
|
13
|
+
self.new.run args
|
14
|
+
end
|
15
|
+
|
16
|
+
# Create a new main instance using _io_ for standard output and _err_ for
|
17
|
+
# error messages.
|
18
|
+
#
|
19
|
+
def initialize( out = STDOUT, err = STDERR )
|
20
|
+
@out = out
|
21
|
+
@err = err
|
22
|
+
end
|
23
|
+
|
24
|
+
# Parse the desired user command and run that command object.
|
25
|
+
#
|
26
|
+
def run( args )
|
27
|
+
cmd_str = args.shift
|
28
|
+
cmd = case cmd_str
|
29
|
+
when 'create'; CreateCommand.new(@out, @err)
|
30
|
+
when 'update'; UpdateCommand.new(@out, @err)
|
31
|
+
when 'freeze'; FreezeCommand.new(@out, @err)
|
32
|
+
when 'unfreeze'; UnfreezeCommand.new(@out, @err)
|
33
|
+
when 'info'; InfoCommand.new(@out, @err)
|
34
|
+
when nil, '-h', '--help'
|
35
|
+
help
|
36
|
+
when '-v', '--version'
|
37
|
+
@out.puts "Mr Bones #{::Bones::VERSION}"
|
38
|
+
nil
|
39
|
+
else
|
40
|
+
raise "Unknown command #{cmd_str.inspect}"
|
41
|
+
end
|
42
|
+
|
43
|
+
cmd.run args if cmd
|
44
|
+
|
45
|
+
rescue StandardError => err
|
46
|
+
@err.puts "ERROR: While executing bones ... (#{err.class})"
|
47
|
+
@err.puts " #{err.to_s}"
|
48
|
+
exit 1
|
49
|
+
end
|
50
|
+
|
51
|
+
# Show the toplevel Mr Bones help message.
|
52
|
+
#
|
53
|
+
def help
|
54
|
+
@out.puts <<-MSG
|
55
|
+
|
56
|
+
Mr Bones is a handy tool that builds a skeleton for your new Ruby
|
57
|
+
projects. The skeleton contains some starter code and a collection of
|
58
|
+
rake tasks to ease the management and deployment of your source code.
|
59
|
+
|
60
|
+
Usage:
|
61
|
+
bones -h/--help
|
62
|
+
bones -v/--version
|
63
|
+
bones command [options] [arguments]
|
64
|
+
|
65
|
+
Examples:
|
66
|
+
bones create new_project
|
67
|
+
bones freeze -r git://github.com/fudgestudios/bort.git bort
|
68
|
+
bones create -s bort new_rails_project
|
69
|
+
|
70
|
+
Commands:
|
71
|
+
bones create create a new project from a skeleton
|
72
|
+
bones update copy Mr Bones tasks to a project
|
73
|
+
bones freeze create a new skeleton in ~/.mrbones/
|
74
|
+
bones unfreeze remove a skeleton from ~/.mrbones/
|
75
|
+
bones info show information about available skeletons
|
76
|
+
|
77
|
+
Further Help:
|
78
|
+
Each command has a '--help' option that will provide detailed
|
79
|
+
information for that command.
|
80
|
+
|
81
|
+
http://codeforpeople.rubyforge.org/bones/
|
82
|
+
|
83
|
+
MSG
|
84
|
+
nil
|
85
|
+
end
|
86
|
+
|
87
|
+
end # class App
|
88
|
+
end # module Bones
|
89
|
+
|
90
|
+
Bones.require_all_libs_relative_to(__FILE__)
|
91
|
+
|
92
|
+
# EOF
|
@@ -0,0 +1,130 @@
|
|
1
|
+
|
2
|
+
module Bones
|
3
|
+
class App
|
4
|
+
|
5
|
+
class Command
|
6
|
+
|
7
|
+
attr_reader :options
|
8
|
+
|
9
|
+
def initialize( out = STDOUT, err = STDERR )
|
10
|
+
@out = out
|
11
|
+
@err = err
|
12
|
+
@options = {
|
13
|
+
:skeleton_dir => File.join(mrbones_dir, 'data'),
|
14
|
+
:with_tasks => false,
|
15
|
+
:verbose => false,
|
16
|
+
:name => nil,
|
17
|
+
:output_dir => nil
|
18
|
+
}
|
19
|
+
@options[:skeleton_dir] = ::Bones.path('data') unless test(?d, skeleton_dir)
|
20
|
+
end
|
21
|
+
|
22
|
+
def run( args )
|
23
|
+
raise NotImplementedError
|
24
|
+
end
|
25
|
+
|
26
|
+
# The output directory where files will be written.
|
27
|
+
#
|
28
|
+
def output_dir
|
29
|
+
options[:output_dir]
|
30
|
+
end
|
31
|
+
|
32
|
+
# The directory where the project skeleton is located.
|
33
|
+
#
|
34
|
+
def skeleton_dir
|
35
|
+
options[:skeleton_dir]
|
36
|
+
end
|
37
|
+
|
38
|
+
# The project name from the command line.
|
39
|
+
#
|
40
|
+
def name
|
41
|
+
options[:name]
|
42
|
+
end
|
43
|
+
|
44
|
+
# A git or svn repository URL from the command line.
|
45
|
+
#
|
46
|
+
def repository
|
47
|
+
return options[:repository] if options.has_key? :repository
|
48
|
+
return IO.read(skeleton_dir).strip if skeleton_dir and test(?f, skeleton_dir)
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns +true+ if we are going to copy the Mr Bones tasks into the
|
53
|
+
# destination directory. Normally this will return +false+.
|
54
|
+
#
|
55
|
+
def with_tasks?
|
56
|
+
options[:with_tasks]
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
#
|
61
|
+
def copy_tasks( to )
|
62
|
+
fm = FileManager.new(
|
63
|
+
:source => ::Bones.path(%w[lib bones tasks]),
|
64
|
+
:destination => to,
|
65
|
+
:stdout => @out,
|
66
|
+
:stderr => @err,
|
67
|
+
:verbose => verbose?
|
68
|
+
)
|
69
|
+
fm.archive_destination
|
70
|
+
fm.copy
|
71
|
+
end
|
72
|
+
|
73
|
+
# Returns +true+ if the user has requested verbose messages.
|
74
|
+
#
|
75
|
+
def verbose?
|
76
|
+
options[:verbose]
|
77
|
+
end
|
78
|
+
|
79
|
+
# Returns the .bones resource directory in the user's home directory.
|
80
|
+
#
|
81
|
+
def mrbones_dir
|
82
|
+
return @mrbones_dir if defined? @mrbones_dir
|
83
|
+
|
84
|
+
path = (::Bones::WIN32 ? ENV['HOMEPATH'].tr("\\", "/") : ENV['HOME'])
|
85
|
+
path = File.join(path, '.mrbones')
|
86
|
+
@mrbones_dir = File.expand_path(path)
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
#
|
91
|
+
def standard_options
|
92
|
+
{
|
93
|
+
:verbose => ['-v', '--verbose', 'enable verbose output',
|
94
|
+
lambda {
|
95
|
+
options[:verbose] = true
|
96
|
+
}],
|
97
|
+
:directory => ['-d', '--directory DIRECTORY', String,
|
98
|
+
'project directory to create', '(defaults to project_name)',
|
99
|
+
lambda { |value|
|
100
|
+
options[:output_dir] = value
|
101
|
+
}],
|
102
|
+
:skeleton => ['-s', '--skeleton NAME', String,
|
103
|
+
'project skeleton to use',
|
104
|
+
lambda { |value|
|
105
|
+
path = File.join(mrbones_dir, value)
|
106
|
+
if test(?e, path)
|
107
|
+
options[:skeleton_dir] = path
|
108
|
+
elsif test(?e, value)
|
109
|
+
options[:skeleton_dir] = value
|
110
|
+
else
|
111
|
+
raise ArgumentError, "Unknown skeleton '#{value}'"
|
112
|
+
end
|
113
|
+
}],
|
114
|
+
:with_tasks => ['--with-tasks', 'copy rake tasks to the project folder',
|
115
|
+
lambda {
|
116
|
+
options[:with_tasks] = true
|
117
|
+
}],
|
118
|
+
:repository => ['-r', '--repository URL', String,
|
119
|
+
'svn or git repository path',
|
120
|
+
lambda { |value|
|
121
|
+
options[:repository] = value
|
122
|
+
}]
|
123
|
+
}
|
124
|
+
end
|
125
|
+
|
126
|
+
end # class Command
|
127
|
+
end # class App
|
128
|
+
end # module Bones
|
129
|
+
|
130
|
+
# EOF
|