# File lib/bones/app/command.rb, line 202
202: def self.inherited( other )
203: other.extend ClassMethods
204: end
# File lib/bones/app/command.rb, line 12
12: def initialize( opts = {} )
13: @stdout = opts[:stdout] || $stdout
14: @stderr = opts[:stderr] || $stderr
15:
16: @config = {
17: :skeleton_dir => File.join(mrbones_dir, DEFAULT_SKELETON),
18: :verbose => false,
19: :name => nil,
20: :output_dir => nil
21: }
22: @config[:skeleton_dir] = ::Bones.path(DEFAULT_SKELETON) unless test(dd, skeleton_dir)
23: end
# File lib/bones/app/command.rb, line 134
134: def self.standard_options
135: @standard_options ||= {
136: :verbose => ['-v', '--verbose', 'Enable verbose output.',
137: lambda { config[:verbose] = true }],
138:
139: :directory => ['-d', '--directory DIRECTORY', String,
140: 'Project directory to create.', '(defaults to project_name)',
141: lambda { |value| config[:output_dir] = value }],
142:
143: :skeleton => ['-s', '--skeleton NAME', String,
144: 'Project skeleton to use.',
145: lambda { |value|
146: path = File.join(mrbones_dir, value)
147: if test(ee, value)
148: config[:skeleton_dir] = value
149: elsif test(ee, path)
150: config[:skeleton_dir] = path
151: else
152: raise ArgumentError, "Unknown skeleton '#{value}'."
153: end
154: }],
155:
156: :repository => ['-r', '--repository URL', String,
157: 'svn or git repository path.',
158: lambda { |value| config[:repository] = value }]
159: }
160: end
Run a block of code in the given directory.
# File lib/bones/app/command.rb, line 72
72: def in_directory( dir )
73: pwd = File.expand_path(FileUtils.pwd)
74: FileUtils.cd dir
75: yield
76: ensure
77: FileUtils.cd pwd
78: end
Returns the ’.mrbones’ resource directory in the user’s home directory.
# File lib/bones/app/command.rb, line 63
63: def mrbones_dir
64: return @mrbones_dir if defined? @mrbones_dir
65:
66: path = File.join(::Bones::HOME, '.mrbones')
67: @mrbones_dir = File.expand_path(path)
68: end
The project name from the command line.
# File lib/bones/app/command.rb, line 43
43: def name
44: @config[:name]
45: end
The output directory where files will be written.
# File lib/bones/app/command.rb, line 31
31: def output_dir
32: @config[:output_dir]
33: end
# File lib/bones/app/command.rb, line 88
88: def parse( args )
89: opts = OptionParser.new
90:
91: opts.banner = 'NAME'
92: opts.separator " bones v#{::Bones.version}"
93: opts.separator ''
94:
95: if self.class.synopsis
96: opts.separator 'SYNOPSIS'
97: self.class.synopsis.split("\n").each { |line| opts.separator " #{line.strip}" }
98: opts.separator ''
99: end
100:
101: if self.class.description
102: opts.separator 'DESCRIPTION'
103: self.class.description.split("\n").each { |line| opts.separator " #{line.strip}" }
104: opts.separator ''
105: end
106:
107: if self.class.options and not self.class.options.empty?
108: opts.separator 'PARAMETERS'
109: self.class.options.each { |option|
110: case option
111: when Array
112: option << method(option.pop) if option.last =~ /^__/
113: opts.on(*option)
114: when String
115: opts.separator(" #{option.strip}")
116: else opts.separator('') end
117: }
118: opts.separator ''
119: end
120:
121: opts.separator ' Common Options:'
122: opts.on_tail( '-h', '--help', 'show this message' ) {
123: stdout.puts opts
124: exit
125: }
126: opts.on_tail ''
127:
128: opts.parse! args
129: return opts
130: end
A git or svn repository URL from the command line.
# File lib/bones/app/command.rb, line 49
49: def repository
50: return @config[:repository] if @config.has_key? :repository
51: return IO.read(skeleton_dir).strip if skeleton_dir and test(ff, skeleton_dir)
52: nil
53: end
# File lib/bones/app/command.rb, line 25
25: def run( args )
26: raise NotImplementedError
27: end
The directory where the project skeleton is located.
# File lib/bones/app/command.rb, line 37
37: def skeleton_dir
38: @config[:skeleton_dir]
39: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.