ronin-gen 1.1.1 → 1.2.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +1 -0
- data/.gitignore +1 -0
- data/ChangeLog.md +25 -1
- data/Gemfile +13 -12
- data/README.md +17 -11
- data/Rakefile +13 -2
- data/data/ronin/gen/library/Gemfile.erb +8 -3
- data/data/ronin/gen/library/Rakefile +10 -2
- data/data/ronin/gen/library/gemspec.yml.erb +1 -1
- data/data/ronin/gen/library/name.gemspec.erb +38 -109
- data/gemspec.yml +7 -4
- data/lib/ronin/gen/actions.rb +503 -0
- data/lib/ronin/gen/dir_generator.rb +24 -10
- data/lib/ronin/gen/file_generator.rb +34 -9
- data/lib/ronin/gen/gen.rb +1 -1
- data/lib/ronin/gen/generator.rb +20 -531
- data/lib/ronin/gen/generators/library.rb +1 -1
- data/lib/ronin/gen/generators/repository.rb +3 -1
- data/lib/ronin/gen/version.rb +1 -1
- data/lib/ronin/spec/gen.rb +2 -0
- data/lib/ronin/spec/gen/source_code_generator.rb +22 -0
- data/lib/ronin/ui/cli/commands/gen.rb +60 -11
- data/man/ronin-gen.1.md +40 -0
- data/ronin-gen.gemspec +38 -109
- data/spec/spec_helper.rb +1 -1
- metadata +73 -31
@@ -28,34 +28,48 @@ module Ronin
|
|
28
28
|
#
|
29
29
|
class DirGenerator < Generator
|
30
30
|
|
31
|
-
# The
|
32
|
-
|
33
|
-
:description => 'The destination path'
|
31
|
+
# The directory to generate
|
32
|
+
attr_accessor :path
|
34
33
|
|
35
34
|
#
|
36
|
-
#
|
35
|
+
# Initializes the directory generator.
|
37
36
|
#
|
38
37
|
# @param [String] path
|
39
|
-
# The path
|
38
|
+
# The path to the directory to be generated.
|
40
39
|
#
|
41
40
|
# @param [Hash{Symbol => Object}] options
|
42
41
|
# Additional options for the generator.
|
43
42
|
#
|
44
|
-
# @
|
43
|
+
# @yield [generator]
|
44
|
+
# The given block will be passed the newly created generator.
|
45
|
+
#
|
46
|
+
# @yieldparam [DirGenerator]
|
47
|
+
# The newly created generator.
|
48
|
+
#
|
49
|
+
# @api semipublic
|
50
|
+
#
|
51
|
+
# @since 1.2.0
|
45
52
|
#
|
46
|
-
def
|
47
|
-
|
53
|
+
def initialize(path=nil,options={},&block)
|
54
|
+
@path = path
|
55
|
+
|
56
|
+
super(options,&block)
|
48
57
|
end
|
49
58
|
|
50
59
|
#
|
51
60
|
# Creates the directory and invokes the generator.
|
52
61
|
#
|
53
|
-
# @
|
62
|
+
# @raise [RuntimeError]
|
63
|
+
# {#path} was not set.
|
64
|
+
#
|
65
|
+
# @api public
|
54
66
|
#
|
55
67
|
# @since 1.1.0
|
56
68
|
#
|
57
69
|
def generate!
|
58
|
-
|
70
|
+
unless @path
|
71
|
+
raise("#{self.class}#path was not set")
|
72
|
+
end
|
59
73
|
|
60
74
|
FileUtils.mkdir_p(@path)
|
61
75
|
FileUtils.chdir(@path) { super }
|
@@ -26,23 +26,50 @@ module Ronin
|
|
26
26
|
#
|
27
27
|
class FileGenerator < Generator
|
28
28
|
|
29
|
-
# The
|
30
|
-
|
31
|
-
:description => 'File to generate'
|
29
|
+
# The file to generate
|
30
|
+
attr_accessor :path
|
32
31
|
|
33
32
|
#
|
34
|
-
#
|
33
|
+
# Initializes the file generator.
|
35
34
|
#
|
36
35
|
# @param [String] path
|
37
|
-
# The path
|
36
|
+
# The path to the file to be generated.
|
38
37
|
#
|
39
38
|
# @param [Hash{Symbol => Object}] options
|
40
39
|
# Additional options for the generator.
|
41
40
|
#
|
41
|
+
# @yield [generator]
|
42
|
+
# The given block will be passed the newly created generator.
|
43
|
+
#
|
44
|
+
# @yieldparam [FileGenerator]
|
45
|
+
# The newly created generator.
|
46
|
+
#
|
47
|
+
# @api semipublic
|
48
|
+
#
|
49
|
+
# @since 1.2.0
|
50
|
+
#
|
51
|
+
def initialize(path=nil,options={},&block)
|
52
|
+
@path = path
|
53
|
+
|
54
|
+
super(options,&block)
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# Sets up the generator and calls {#generate}.
|
59
|
+
#
|
60
|
+
# @raise [RuntimeError]
|
61
|
+
# {#path} was not set.
|
62
|
+
#
|
63
|
+
# @since 1.2.0
|
64
|
+
#
|
42
65
|
# @api public
|
43
66
|
#
|
44
|
-
def
|
45
|
-
|
67
|
+
def generate!
|
68
|
+
unless @path
|
69
|
+
raise("#{self.class}#path was not set")
|
70
|
+
end
|
71
|
+
|
72
|
+
super
|
46
73
|
end
|
47
74
|
|
48
75
|
#
|
@@ -53,8 +80,6 @@ module Ronin
|
|
53
80
|
# @api semipublic
|
54
81
|
#
|
55
82
|
def setup
|
56
|
-
require_params :path
|
57
|
-
|
58
83
|
if (self.class.file_extension && File.extname(@path).empty?)
|
59
84
|
@path += ".#{self.class.file_extension}"
|
60
85
|
end
|
data/lib/ronin/gen/gen.rb
CHANGED
@@ -73,7 +73,7 @@ module Ronin
|
|
73
73
|
if @generators.empty?
|
74
74
|
directory = File.join('lib',Generators.namespace_root)
|
75
75
|
|
76
|
-
Installation.each_file_in(directory
|
76
|
+
Installation.each_file_in(directory,'rb') do |path|
|
77
77
|
# strip the tailing '.rb' file extension
|
78
78
|
name = path.chomp('.rb')
|
79
79
|
|
data/lib/ronin/gen/generator.rb
CHANGED
@@ -18,13 +18,11 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'ronin/gen/config'
|
21
|
+
require 'ronin/gen/actions'
|
21
22
|
require 'ronin/support/inflector'
|
22
|
-
require 'ronin/templates/erb'
|
23
|
-
require 'ronin/ui/output'
|
24
23
|
|
25
24
|
require 'parameters'
|
26
25
|
require 'data_paths/finders'
|
27
|
-
require 'fileutils'
|
28
26
|
|
29
27
|
module Ronin
|
30
28
|
module Gen
|
@@ -93,15 +91,11 @@ module Ronin
|
|
93
91
|
|
94
92
|
include Parameters
|
95
93
|
include DataPaths::Finders
|
96
|
-
include
|
97
|
-
include Templates::Erb
|
94
|
+
include Actions
|
98
95
|
|
99
96
|
#
|
100
97
|
# Initializes the generator.
|
101
98
|
#
|
102
|
-
# @param [String] path
|
103
|
-
# The destination path for the generator.
|
104
|
-
#
|
105
99
|
# @param [Hash{Symbol => Object}] options
|
106
100
|
# The options for the generator.
|
107
101
|
#
|
@@ -134,43 +128,16 @@ module Ronin
|
|
134
128
|
# @api semipublic
|
135
129
|
#
|
136
130
|
def self.generator_name
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
|
-
#
|
143
|
-
# The default data directory of the generator.
|
144
|
-
#
|
145
|
-
# @param [String] new_dir
|
146
|
-
# The new data directory.
|
147
|
-
#
|
148
|
-
# @return [String, nil]
|
149
|
-
# The data directory that the generator will search for source files
|
150
|
-
# within.
|
151
|
-
#
|
152
|
-
# @since 1.1.0
|
153
|
-
#
|
154
|
-
# @api semipublic
|
155
|
-
#
|
156
|
-
def self.data_dir(new_dir=nil)
|
157
|
-
if new_dir
|
158
|
-
@data_dir = new_dir
|
159
|
-
else
|
160
|
-
@data_dir ||= if superclass < Generator
|
161
|
-
superclass.data_dir
|
162
|
-
end
|
163
|
-
end
|
131
|
+
@generator_name ||= Support::Inflector.underscore(
|
132
|
+
self.name.sub('Ronin::Gen::Generators::','').gsub('::',':')
|
133
|
+
)
|
164
134
|
end
|
165
135
|
|
166
136
|
#
|
167
137
|
# Invokes the generator.
|
168
138
|
#
|
169
|
-
# @param [Hash] options
|
170
|
-
# Class options to use with the generator.
|
171
|
-
#
|
172
139
|
# @param [Array] arguments
|
173
|
-
#
|
140
|
+
# Arguments for {#initialize}.
|
174
141
|
#
|
175
142
|
# @yield [generator]
|
176
143
|
# The given block will be passed the new generator.
|
@@ -188,8 +155,8 @@ module Ronin
|
|
188
155
|
#
|
189
156
|
# @api public
|
190
157
|
#
|
191
|
-
def self.generate(
|
192
|
-
generator = new(
|
158
|
+
def self.generate(*arguments,&block)
|
159
|
+
generator = new(*arguments,&block)
|
193
160
|
|
194
161
|
generator.generate!
|
195
162
|
return generator
|
@@ -234,473 +201,29 @@ module Ronin
|
|
234
201
|
protected
|
235
202
|
|
236
203
|
#
|
237
|
-
#
|
238
|
-
#
|
239
|
-
# @param [String] command
|
240
|
-
# The command or program to run.
|
241
|
-
#
|
242
|
-
# @param [Array<String>] arguments
|
243
|
-
# Additional arguments to run the program with.
|
244
|
-
#
|
245
|
-
# @since 1.1.0
|
246
|
-
#
|
247
|
-
# @api semipublic
|
248
|
-
#
|
249
|
-
def run(command,*arguments)
|
250
|
-
print_action command, *arguments
|
251
|
-
|
252
|
-
system(command,*arguments)
|
253
|
-
end
|
254
|
-
|
255
|
-
#
|
256
|
-
# Changes the permissions of a files or directories.
|
257
|
-
#
|
258
|
-
# @param [String, Integer] mode
|
259
|
-
# The new permissions for the files or directories.
|
260
|
-
#
|
261
|
-
# @param [Array<String>] paths
|
262
|
-
# The path to the files or directories.
|
263
|
-
#
|
264
|
-
# @since 1.1.0
|
265
|
-
#
|
266
|
-
# @api semipublic
|
267
|
-
#
|
268
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#chmod-instance_method
|
269
|
-
#
|
270
|
-
def chmod(mode,paths)
|
271
|
-
print_action 'chmod', mode.to_s(8), *paths
|
272
|
-
|
273
|
-
super(mode,paths)
|
274
|
-
end
|
275
|
-
|
276
|
-
#
|
277
|
-
# Changes the permissions of files/directories, recursively.
|
278
|
-
#
|
279
|
-
# @param [String, Integer] mode
|
280
|
-
# The new permissions for the files or directories.
|
281
|
-
#
|
282
|
-
# @param [Array<String>] paths
|
283
|
-
# The path to the files or directories.
|
284
|
-
#
|
285
|
-
# @since 1.1.0
|
286
|
-
#
|
287
|
-
# @api semipublic
|
288
|
-
#
|
289
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#chmod_R-instance_method
|
290
|
-
#
|
291
|
-
def chmod_R(mode,paths)
|
292
|
-
print_action 'chmod -R', mode.to_s(8)
|
293
|
-
|
294
|
-
super(mode,paths)
|
295
|
-
end
|
296
|
-
|
297
|
-
#
|
298
|
-
# Changes ownership of files or directories.
|
299
|
-
#
|
300
|
-
# @param [String, nil] user
|
301
|
-
# The new owner of the files or directories.
|
302
|
-
#
|
303
|
-
# @param [String, nil] group
|
304
|
-
# The new group for the files or directories.
|
305
|
-
#
|
306
|
-
# @param [Array<String>] paths
|
307
|
-
# The path to the files or directories.
|
308
|
-
#
|
309
|
-
# @since 1.1.0
|
310
|
-
#
|
311
|
-
# @api semipublic
|
312
|
-
#
|
313
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#chown-instance_method
|
314
|
-
#
|
315
|
-
def chown(user,group,paths)
|
316
|
-
print_action 'chown', "#{user}:#{group}", *paths
|
317
|
-
|
318
|
-
super(user,group,paths)
|
319
|
-
end
|
320
|
-
|
321
|
-
#
|
322
|
-
# Changes ownership of files/directories, recursively.
|
323
|
-
#
|
324
|
-
# @param [String, nil] user
|
325
|
-
# The new owner of the files or directories.
|
326
|
-
#
|
327
|
-
# @param [String, nil] group
|
328
|
-
# The new group for the files or directories.
|
329
|
-
#
|
330
|
-
# @param [Array<String>] paths
|
331
|
-
# The path to the files or directories.
|
332
|
-
#
|
333
|
-
# @since 1.1.0
|
334
|
-
#
|
335
|
-
# @api semipublic
|
336
|
-
#
|
337
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#chown_R-instance_method
|
338
|
-
#
|
339
|
-
def chown_R(user,group,paths)
|
340
|
-
print_action 'chown -R', "#{user}:#{group}", *paths
|
341
|
-
|
342
|
-
super(user,group,paths)
|
343
|
-
end
|
344
|
-
|
345
|
-
#
|
346
|
-
# Copies a data file.
|
347
|
-
#
|
348
|
-
# @param [String] file
|
349
|
-
# The relative path to the data file.
|
350
|
-
#
|
351
|
-
# @param [String] destination
|
352
|
-
# The destination to copy the data file to.
|
353
|
-
#
|
354
|
-
# @since 0.2.0
|
355
|
-
#
|
356
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#cp-instance_method
|
357
|
-
#
|
358
|
-
def cp(file,destination=file)
|
359
|
-
print_action 'cp', destination
|
360
|
-
|
361
|
-
super(data_file(file),destination)
|
362
|
-
end
|
363
|
-
|
364
|
-
#
|
365
|
-
# Copies the contents of all data directories.
|
366
|
-
#
|
367
|
-
# @param [String] directory
|
368
|
-
# The data directories to copy from.
|
369
|
-
#
|
370
|
-
# @param [String, nil] destination
|
371
|
-
# The optional destination directory to copy the files to.
|
372
|
-
#
|
373
|
-
# @param [Hash] config
|
374
|
-
# The optional configuration information.
|
375
|
-
#
|
376
|
-
# @option config [Boolean] :recursive (false)
|
377
|
-
# Recursively copies the contents.
|
378
|
-
#
|
379
|
-
# @since 1.0.0
|
380
|
-
#
|
381
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#cp_r-instance_method
|
382
|
-
#
|
383
|
-
def cp_r(directory,destination=directory)
|
384
|
-
print_action 'cp -r', destination
|
385
|
-
|
386
|
-
data_dirs(directory) do |dir|
|
387
|
-
super(dir,destination)
|
388
|
-
end
|
389
|
-
end
|
390
|
-
|
391
|
-
#
|
392
|
-
# Installs a file.
|
393
|
-
#
|
394
|
-
# @param [String] src
|
395
|
-
# The file to install.
|
396
|
-
#
|
397
|
-
# @param [String] dest
|
398
|
-
# The destination path for the file.
|
399
|
-
#
|
400
|
-
# @param [Hash] options
|
401
|
-
# Additional options.
|
402
|
-
#
|
403
|
-
# @option options [String, Integer] :mode
|
404
|
-
# The permissions of the installed file.
|
405
|
-
#
|
406
|
-
# @since 1.1.0
|
407
|
-
#
|
408
|
-
# @api semipublic
|
409
|
-
#
|
410
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#install-instance_method
|
411
|
-
#
|
412
|
-
def install(src,dest,options={})
|
413
|
-
options = {:mode => options[:mode]} # only pass in :mode
|
414
|
-
|
415
|
-
print_action 'install', src, dest
|
416
|
-
|
417
|
-
super(data_file(src),dest,options)
|
418
|
-
end
|
419
|
-
|
420
|
-
#
|
421
|
-
# Creates a hard link.
|
422
|
-
#
|
423
|
-
# @param [String] src
|
424
|
-
# The path file/directory for the hard link.
|
425
|
-
#
|
426
|
-
# @param [String] dest
|
427
|
-
# The destination file/directory of the hard link.
|
428
|
-
#
|
429
|
-
# @since 1.1.0
|
430
|
-
#
|
431
|
-
# @api semipublic
|
432
|
-
#
|
433
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#ln-instance_method
|
434
|
-
#
|
435
|
-
def ln(src,dest)
|
436
|
-
print_action 'ln', src, dest
|
437
|
-
|
438
|
-
super(src,dest)
|
439
|
-
end
|
440
|
-
|
441
|
-
#
|
442
|
-
# Creates a symbolic link.
|
443
|
-
#
|
444
|
-
# @param [String] src
|
445
|
-
# The path file/directory for the symbolic link.
|
446
|
-
#
|
447
|
-
# @param [String] dest
|
448
|
-
# The destination file/directory of the symbolic link.
|
449
|
-
#
|
450
|
-
# @since 1.1.0
|
451
|
-
#
|
452
|
-
# @api semipublic
|
453
|
-
#
|
454
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#ln_s-instance_method
|
455
|
-
#
|
456
|
-
def ln_s(src,dest)
|
457
|
-
print_action 'ln -s', src, dest
|
458
|
-
|
459
|
-
super(src,dest)
|
460
|
-
end
|
461
|
-
|
462
|
-
#
|
463
|
-
# Forcibly creates a symbolic link.
|
464
|
-
#
|
465
|
-
# @param [String] src
|
466
|
-
# The path file/directory for the symbolic link.
|
467
|
-
#
|
468
|
-
# @param [String] dest
|
469
|
-
# The destination file/directory of the symbolic link.
|
470
|
-
#
|
471
|
-
# @since 1.1.0
|
472
|
-
#
|
473
|
-
# @api semipublic
|
474
|
-
#
|
475
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#ln_sf-instance_method
|
476
|
-
#
|
477
|
-
def ln_sf(src,dest)
|
478
|
-
print_action 'ln -sf', src, dest
|
479
|
-
|
480
|
-
super(src,dest)
|
481
|
-
end
|
482
|
-
|
483
|
-
#
|
484
|
-
# Creates an empty directory.
|
485
|
-
#
|
486
|
-
# @param [String] dir
|
487
|
-
# The relative path of the directory to create.
|
488
|
-
#
|
489
|
-
# @example
|
490
|
-
# mkdir 'sub/dir'
|
491
|
-
#
|
492
|
-
# @since 0.2.0
|
493
|
-
#
|
494
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#mkdir-instance_method
|
495
|
-
#
|
496
|
-
def mkdir(dir)
|
497
|
-
print_action 'mkdir', dir
|
498
|
-
|
499
|
-
super(dir)
|
500
|
-
end
|
501
|
-
|
502
|
-
#
|
503
|
-
# Creates an empty directory.
|
504
|
-
#
|
505
|
-
# @param [String] dir
|
506
|
-
# The relative path of the directory to create.
|
507
|
-
#
|
508
|
-
# @example
|
509
|
-
# mkdir 'sub/dir'
|
510
|
-
#
|
511
|
-
# @since 0.2.0
|
512
|
-
#
|
513
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#mkdir_p-instance_method
|
514
|
-
#
|
515
|
-
def mkdir_p(dir)
|
516
|
-
print_action 'mkdir -p', dir
|
517
|
-
|
518
|
-
super(dir)
|
519
|
-
end
|
520
|
-
|
521
|
-
#
|
522
|
-
# Moves a file or directory.
|
523
|
-
#
|
524
|
-
# @param [String] src
|
525
|
-
# The path to the file or directory.
|
526
|
-
#
|
527
|
-
# @param [String] dest
|
528
|
-
# The new path to move the file or directory to.
|
529
|
-
#
|
530
|
-
# @api semipublic
|
531
|
-
#
|
532
|
-
# @since 1.1.0
|
533
|
-
#
|
534
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#mv-instance_method
|
535
|
-
#
|
536
|
-
def mv(src,dest)
|
537
|
-
print_action 'mv', src, dest
|
538
|
-
|
539
|
-
super(src,dest)
|
540
|
-
end
|
541
|
-
|
542
|
-
#
|
543
|
-
# Removes one or more files.
|
544
|
-
#
|
545
|
-
# @param [Array<String>] paths
|
546
|
-
# The paths of the files and directories to remove.
|
547
|
-
#
|
548
|
-
# @param [Hash] options
|
549
|
-
# Additional options.
|
550
|
-
#
|
551
|
-
# @option options [Boolean] :force
|
552
|
-
# Specifies whether to forcible remove the files.
|
553
|
-
#
|
554
|
-
# @since 1.1.0
|
555
|
-
#
|
556
|
-
# @api semipublic
|
557
|
-
#
|
558
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#rm-instance_method
|
559
|
-
#
|
560
|
-
def rm(paths,options={})
|
561
|
-
options = {:force => options[:force]} # only pass in :force
|
562
|
-
|
563
|
-
print_action 'rm', *paths
|
564
|
-
|
565
|
-
super(paths,options)
|
566
|
-
end
|
567
|
-
|
568
|
-
#
|
569
|
-
# Recursively removes files and directories.
|
570
|
-
#
|
571
|
-
# @param [Array<String>] paths
|
572
|
-
# The paths of the files and directories to remove.
|
573
|
-
#
|
574
|
-
# @param [Hash] options
|
575
|
-
# Additional options.
|
576
|
-
#
|
577
|
-
# @option options [Boolean] :force
|
578
|
-
# Specifies whether to forcible remove the files.
|
579
|
-
#
|
580
|
-
# @since 1.1.0
|
581
|
-
#
|
582
|
-
# @api semipublic
|
583
|
-
#
|
584
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#rm_r-instance_method
|
585
|
-
#
|
586
|
-
def rm_r(paths,options={})
|
587
|
-
options = {:force => options[:force]} # only pass in :force
|
588
|
-
|
589
|
-
print_action 'rm -r', *paths
|
590
|
-
|
591
|
-
super(paths,options)
|
592
|
-
end
|
593
|
-
|
594
|
-
#
|
595
|
-
# Forcibly removes files and directories, recursively.
|
596
|
-
#
|
597
|
-
# @param [Array<String>] paths
|
598
|
-
# The paths of the files and directories to remove.
|
599
|
-
#
|
600
|
-
# @since 1.1.0
|
601
|
-
#
|
602
|
-
# @api semipublic
|
603
|
-
#
|
604
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#rm_rf-instance_method
|
605
|
-
#
|
606
|
-
def rm_rf(paths)
|
607
|
-
print_action 'rm -rf', *paths
|
608
|
-
|
609
|
-
super(paths)
|
610
|
-
end
|
611
|
-
|
612
|
-
#
|
613
|
-
# Removes one or more directories.
|
614
|
-
#
|
615
|
-
# @param [Array<String>] dirs
|
616
|
-
# The paths of the directories.
|
617
|
-
#
|
618
|
-
# @since 1.1.0
|
619
|
-
#
|
620
|
-
# @api semipublic
|
621
|
-
#
|
622
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#rmdir-instance_method
|
623
|
-
#
|
624
|
-
def rmdir(dirs)
|
625
|
-
print_action 'rmdir', *dirs
|
626
|
-
|
627
|
-
super(dirs)
|
628
|
-
end
|
629
|
-
|
630
|
-
#
|
631
|
-
# Touches a file.
|
632
|
-
#
|
633
|
-
# @param [String] destination
|
634
|
-
# The relative path to the file to touch.
|
635
|
-
#
|
636
|
-
# @example
|
637
|
-
# touch 'TODO.txt'
|
638
|
-
#
|
639
|
-
# @since 0.2.0
|
640
|
-
#
|
641
|
-
# @see http://rubydoc.info/stdlib/fileutils/FileUtils#touch-instance_method
|
642
|
-
#
|
643
|
-
def touch(file)
|
644
|
-
print_action 'touch', file
|
645
|
-
|
646
|
-
return super(file)
|
647
|
-
end
|
648
|
-
|
649
|
-
#
|
650
|
-
# Opens a file for writing.
|
651
|
-
#
|
652
|
-
# @param [String] path
|
653
|
-
# The path of the file to write to.
|
204
|
+
# The default data directory of the generator.
|
654
205
|
#
|
655
|
-
# @
|
656
|
-
# The
|
206
|
+
# @param [String] new_dir
|
207
|
+
# The new data directory.
|
657
208
|
#
|
658
|
-
# @
|
659
|
-
# The
|
209
|
+
# @return [String, nil]
|
210
|
+
# The data directory that the generator will search for source files
|
211
|
+
# within.
|
660
212
|
#
|
661
213
|
# @since 1.1.0
|
662
214
|
#
|
663
215
|
# @api semipublic
|
664
216
|
#
|
665
|
-
def
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
#
|
670
|
-
# Renders the ERB template and saves the result.
|
671
|
-
#
|
672
|
-
# @param [String] template_path
|
673
|
-
# The relative path to the template.
|
674
|
-
#
|
675
|
-
# @param [String, nil] destination
|
676
|
-
# The destination to write the result of the rendered template to.
|
677
|
-
#
|
678
|
-
# @return [nil, String]
|
679
|
-
# If destination is `nil`, the result of the rendered template
|
680
|
-
# will be returned.
|
681
|
-
#
|
682
|
-
# @example
|
683
|
-
# template 'Rakefile.erb', 'Rakefile'
|
684
|
-
#
|
685
|
-
# @example
|
686
|
-
# template '_helpers.erb'
|
687
|
-
#
|
688
|
-
# @since 0.2.0
|
689
|
-
#
|
690
|
-
def template(template_path,dest=nil)
|
691
|
-
if dest
|
692
|
-
print_action 'erb', dest
|
693
|
-
|
694
|
-
File.open(dest,'w') do |file|
|
695
|
-
file.write(erb_file(template_path))
|
696
|
-
end
|
217
|
+
def self.data_dir(new_dir=nil)
|
218
|
+
if new_dir
|
219
|
+
@data_dir = new_dir
|
697
220
|
else
|
698
|
-
|
221
|
+
@data_dir ||= if superclass < Generator
|
222
|
+
superclass.data_dir
|
223
|
+
end
|
699
224
|
end
|
700
225
|
end
|
701
226
|
|
702
|
-
private
|
703
|
-
|
704
227
|
#
|
705
228
|
# Joins the path with the Generators {data_dir}.
|
706
229
|
#
|
@@ -790,40 +313,6 @@ module Ronin
|
|
790
313
|
each_data_dir(data_path(directory),&block)
|
791
314
|
end
|
792
315
|
|
793
|
-
# ANSI Bold code
|
794
|
-
BOLD = "\e[1m"
|
795
|
-
|
796
|
-
# ANSI Green code
|
797
|
-
GREEN = "\e[32m"
|
798
|
-
|
799
|
-
# ANSI Clear code
|
800
|
-
CLEAR = "\e[0m"
|
801
|
-
|
802
|
-
#
|
803
|
-
# Prints a file action.
|
804
|
-
#
|
805
|
-
# @param [String] command
|
806
|
-
# The command/options that represents the file action.
|
807
|
-
#
|
808
|
-
# @param [Array<String>] arguments
|
809
|
-
# Additional arguments related to the file action.
|
810
|
-
#
|
811
|
-
# @since 1.1.0
|
812
|
-
#
|
813
|
-
# @api private
|
814
|
-
#
|
815
|
-
def print_action(command,*arguments)
|
816
|
-
unless UI::Output.silent?
|
817
|
-
arguments = arguments.join(' ')
|
818
|
-
|
819
|
-
if $stdout.tty?
|
820
|
-
command = BOLD + GREEN + command + CLEAR
|
821
|
-
end
|
822
|
-
|
823
|
-
puts "\t#{command}\t#{arguments}"
|
824
|
-
end
|
825
|
-
end
|
826
|
-
|
827
316
|
end
|
828
317
|
end
|
829
318
|
end
|