Class: Mygen::Generator
- Inherits:
-
Object
show all
- Includes:
- Naming
- Defined in:
- lib/mygen/generator.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Naming
#camel_case, #cc_name, #d_name, #dash_case, #method_name, #no_case, #s_name, #snake_case
Constructor Details
Returns a new instance of Generator.
9
10
11
|
# File 'lib/mygen/generator.rb', line 9
def initialize
@template_source_dir = File.join(ENV['HOME'], ".mygen", "plugins", generator_name, "templates")
end
|
Instance Attribute Details
#dest_dir ⇒ Object
Returns the value of attribute dest_dir.
7
8
9
|
# File 'lib/mygen/generator.rb', line 7
def dest_dir
@dest_dir
end
|
#dry_run ⇒ Object
Returns the value of attribute dry_run.
7
8
9
|
# File 'lib/mygen/generator.rb', line 7
def dry_run
@dry_run
end
|
#name ⇒ Object
Returns the value of attribute name.
7
8
9
|
# File 'lib/mygen/generator.rb', line 7
def name
@name
end
|
#options ⇒ Object
Returns the value of attribute options.
7
8
9
|
# File 'lib/mygen/generator.rb', line 7
def options
@options
end
|
#template_source_dir ⇒ Object
Returns the value of attribute template_source_dir.
7
8
9
|
# File 'lib/mygen/generator.rb', line 7
def template_source_dir
@template_source_dir
end
|
Class Method Details
.descendants ⇒ Object
13
14
15
|
# File 'lib/mygen/generator.rb', line 13
def self.descendants
ObjectSpace.each_object(Class).select { |klass| klass < self }
end
|
Instance Method Details
#description ⇒ Object
17
18
19
|
# File 'lib/mygen/generator.rb', line 17
def description
"Plugin has no description"
end
|
#file_destination(file, bindings) ⇒ Object
113
114
115
116
117
|
# File 'lib/mygen/generator.rb', line 113
def file_destination(file, bindings)
new_file = file.gsub(template_source_dir, '')
replaced_filename(new_file, bindings)
end
|
#fileutils ⇒ Object
25
26
27
|
# File 'lib/mygen/generator.rb', line 25
def fileutils
dry_run ? FileUtils::DryRun : FileUtils::Verbose
end
|
#generator_name ⇒ Object
21
22
23
|
# File 'lib/mygen/generator.rb', line 21
def generator_name
snake_case(self.class.name)
end
|
#internal_template_files ⇒ Object
37
38
39
|
# File 'lib/mygen/generator.rb', line 37
def internal_template_files
template_files(internal_template_source_dir)
end
|
#internal_template_source_dir ⇒ Object
41
42
43
|
# File 'lib/mygen/generator.rb', line 41
def internal_template_source_dir
File.join(Mygen.root, "templates", generator_name)
end
|
#make_template_tree(internal = false) ⇒ Object
52
53
54
55
56
|
# File 'lib/mygen/generator.rb', line 52
def make_template_tree(internal = false)
@template_source_dir = internal_template_source_dir if internal
fileutils.rm_rf(dest_dir) if File.exist?(dest_dir)
fileutils.cp_r(template_source_dir, dest_dir)
end
|
#make_template_tree_in_current_dir ⇒ Object
45
46
47
48
49
50
|
# File 'lib/mygen/generator.rb', line 45
def make_template_tree_in_current_dir
fileutils.mkdir_p(dest_dir) unless File.exist?(dest_dir)
files = Dir.glob(File.join(template_source_dir, "/*"))
puts "files: #{files}"
fileutils.cp_r(files, dest_dir)
end
|
#move_file_in_place(src, dest) ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/mygen/generator.rb', line 92
def move_file_in_place(src, dest)
sf = File.absolute_path(src)
df = File.absolute_path(dest)
file_exist = File.exist?(df)
fileutils.mv(sf, df) if sf != df && !file_exist
if file_exist && sf != df
Dir.glob(File.join(sf, "/*")).each do |f|
next if f == sf
file = f.sub(sf, '')
fileutils.mv(f, File.join(df, file))
end
fileutils.rm_rf(sf)
end
end
|
#parent_dirs_dont_exist?(path) ⇒ Boolean
80
81
82
83
84
|
# File 'lib/mygen/generator.rb', line 80
def parent_dirs_dont_exist?(path)
parent_dir = File.expand_path("..", path)
return false if path.include?('__')
return !File.exist?(path)
end
|
#parse(file, bindings) ⇒ Object
86
87
88
89
90
|
# File 'lib/mygen/generator.rb', line 86
def parse(file, bindings)
erb = ERB.new(File.read(file))
result = erb.result bindings
File.open(file, "w") { |f| f.write(result) }
end
|
#parse_and_place_file(file, dest, bindings) ⇒ Object
108
109
110
111
|
# File 'lib/mygen/generator.rb', line 108
def parse_and_place_file(file, dest, bindings)
erb = ERB.new(File.read(file))
erb.result bindings
end
|
#parse_templates(bindings) ⇒ Object
rename directories that should be filtered, from __name files should be from the destination, so no dirs needs to be filtered and only files need to be processed.
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/mygen/generator.rb', line 62
def parse_templates(bindings)
template_dirs(File.join(dest_dir)).each do |dir|
dest = file_destination(dir, bindings)
parent_dir = File.expand_path("..", dest)
fileutils.mkdir_p(parent_dir) if parent_dirs_dont_exist?(dest)
move_file_in_place(dir, dest)
end
template_files(File.join(dest_dir)).each do |file|
dest = file_destination(file, bindings)
if file.end_with? 'erb'
parse(file, bindings)
end
move_file_in_place(file, dest)
end
end
|
#template_dirs(path = template_source_dir) ⇒ Object
33
34
35
|
# File 'lib/mygen/generator.rb', line 33
def template_dirs(path = template_source_dir)
Dir.glob(File.join(path, "**/*")).select { |f| File.directory? f }
end
|
#template_files(path = template_source_dir) ⇒ Object
29
30
31
|
# File 'lib/mygen/generator.rb', line 29
def template_files(path = template_source_dir)
Dir.glob(File.join(path, "**/*")).select { |f| File.file? f }
end
|