Class: DevSystem::SimpleGenerator
- Inherits:
-
BaseGenerator
show all
- Defined in:
- lib/dev_system/subsystems/generator/generators/simple_generator.rb
Direct Known Subclasses
BoxesGenerator, ControllerGenerator, GemfileGenerator, InstallGenerator, MoveGenerator, NewGenerator, NotFoundGenerator, OverwriteGenerator, RemoveGenerator, SubsystemGenerator, SystemGenerator, UninstallGenerator
Defined Under Namespace
Classes: Mapper, UnitHelper
Instance Attribute Summary
#menv
#menv
Class Method Summary
collapse
Instance Method Summary
collapse
-
#add_unit(unit, class_names, unit_path) ⇒ Object
-
#add_view(unit, view, view_path) ⇒ Object
-
#app_shell ⇒ Object
-
#arg_views ⇒ Object
-
#arg_views_adjacent? ⇒ Boolean
-
#arg_views_eof? ⇒ Boolean
-
#arg_views_nested? ⇒ Boolean
-
#arg_views_none? ⇒ Boolean
-
#before ⇒ Object
-
#before_instance_calls ⇒ Object
-
#copy_examples(controller) ⇒ Object
-
#copy_file(source, target) ⇒ Object
-
#copy_files(from_folder, to_folder) ⇒ Object
-
#create_file(name, template, format) ⇒ Object
-
#create_file_contents(name, contents) ⇒ Object
-
#delete_file(name) ⇒ Object
-
#generate(*args, &block) ⇒ Object
-
#inform ⇒ Object
-
#mapper ⇒ Object
-
#pick_many_units(units) ⇒ Object
-
#puts_line ⇒ Object
-
#read_file(name) ⇒ Object
-
#remove_units(units) ⇒ Object
-
#save ⇒ Object
-
#set_default_views(views) ⇒ Object
-
#update_file(name, contents) ⇒ Object
-
#valid_views ⇒ Object
#action_name, #after, #args, #before_default, #before_input, #call, call, #command, default_args, #default_args, #default_booleans, default_booleans, default_strings, #default_strings, get_generator_signatures, #input_args, input_args, #input_booleans, input_booleans, input_strings, #input_strings, set_default_arg, #set_default_arg, #set_default_boolean, set_default_boolean, #set_default_string, set_default_string, set_input_arg, #set_input_arg, set_input_boolean, #set_input_boolean, set_input_string, #set_input_string
Methods inherited from Generator
get_generator_signatures
#`, `, attr_accessor, attr_reader, attr_writer, #attrs, box, #box, call, color, division, division!, division?, inherited, menv_accessor, menv_reader, menv_writer, on_connected, panel, #panel, plural, require, requirements, sh, #sh, singular, subsystem, subsystem!, subsystem?, subsystem_token, token
Methods inherited from Liza::Unit
_erbs_for, #add, add, cl, #cl, class_methods_defined, const_added, const_missing, constants_defined, define_error, descendants_select, division, erbs_available, erbs_defined, erbs_for, errors, #fetch, fetch, get, #get, instance_methods_defined, log, #log, log?, #log?, #log_array, log_array, log_hash, #log_hash, #log_level, log_level, #log_level?, log_level?, log_levels, #log_levels, #log_render_convert, #log_render_format, #log_render_in, #log_render_out, method_added, methods_defined, namespace, part, raise_error, #raise_error, reload!, #reload!, #render, #render!, #render_stack, renderable_formats_for, renderable_names, section, sections, #set, set, #settings, settings, singleton_method_added, sleep, #sleep, stick, #stick, sticks, #sticks, subclasses_select, subunits, system, #system, system?, test_class, time_diff, #time_diff
Class Method Details
.before_instance_call(method, *args, &block) ⇒ Object
7
8
9
10
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 7
def self.before_instance_call(method, *args, &block)
log :higher, "before_instance_call save #{method}, #{args}, #{block}"
before_instance_calls << [method, args, block]
end
|
.before_instance_calls ⇒ Object
5
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 5
def self.before_instance_calls()= fetch(:before_instance_calls) { [] }
|
.set_default_views(views) ⇒ Object
243
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 243
def self.set_default_views(views) = before_instance_call(:set_default_views, views)
|
Instance Method Details
#add_unit(unit, class_names, unit_path) ⇒ Object
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 262
def add_unit(unit, class_names, unit_path)
raise "unit_path cannot be empty" if unit_path.nil?
@current_unit = unit
@class_names = class_names
@class_name = class_names[0]
unit.sections.each do |section|
@current_section = section
section[:content] = render! section[:render_key], format: :rb
end
unit.views.each do |view|
view[:content] = render! view[:render_key], format: view[:render_format]
end
new_lines = render! :unit, format: :rb
if arg_views_eof? && unit.views.any?
new_lines << "\n__END__\n\n"
unit.views.each do |view|
new_lines << "# view #{view[:name]}.#{view[:format]}.erb\n#{view[:content]}"
end
end
mapper.write_after unit_path, new_lines
end
|
#add_view(unit, view, view_path) ⇒ Object
285
286
287
288
289
290
291
292
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 285
def add_view(unit, view, view_path)
raise "view_path cannot be empty" if view_path.nil?
view[:content] = render! view[:render_key], format: view[:render_format]
new_content = view[:content].dup
new_content.prepend "# view #{view[:name]}.#{view[:format]}.erb\n" if arg_views_adjacent?
mapper.write_after view_path, new_content
end
|
#app_shell ⇒ Object
341
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 341
def app_shell() = @app_shell ||= AppShell.new
|
#arg_views ⇒ Object
249
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 249
def arg_views() = @arg_views ||= command.simple_string(:views)
|
#arg_views_adjacent? ⇒ Boolean
239
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 239
def arg_views_adjacent?() = arg_views == 'adjacent'
|
#arg_views_eof? ⇒ Boolean
237
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 237
def arg_views_eof?() = arg_views == 'eof'
|
#arg_views_nested? ⇒ Boolean
241
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 241
def arg_views_nested?() = arg_views == 'nested'
|
#arg_views_none? ⇒ Boolean
235
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 235
def arg_views_none?() = arg_views == 'none'
|
#before ⇒ Object
12
13
14
15
16
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 12
def before
super
before_instance_calls
end
|
#before_instance_calls ⇒ Object
18
19
20
21
22
23
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 18
def before_instance_calls
self.class.before_instance_calls.each do |method, args, block|
log :higher, "before_instance_call send #{method}, #{args}, #{block}"
send method, *args, &block
end
end
|
#copy_examples(controller) ⇒ Object
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 193
def copy_examples controller
puts
log controller.to_s
singular = controller.singular
sys = controller.system.token
[
Lizarb.gem_dir,
Lizarb.app_dir,
].uniq.each do |dir|
FileShell.directory? "#{dir}/examples/#{singular}" or next
copy_files "#{dir}/examples/#{singular}/app/#{sys}", "#{App.directory}/#{sys}"
end
end
|
#copy_file(source, target) ⇒ Object
227
228
229
230
231
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 227
def copy_file source, target
path = App.root.join target
text = FileShell.read_text source
mapper.write_after path, text
end
|
#copy_files(from_folder, to_folder) ⇒ Object
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 210
def copy_files from_folder, to_folder
from_pattern = "#{from_folder}/**/*"
log "from_pattern = #{from_pattern}"
from_files = Dir[from_pattern]
log "from_files"
log_array from_files
puts
from_files.each do |source|
next if File.directory? source
target = source.sub(from_folder, to_folder)
copy_file source, target
end
end
|
#create_file(name, template, format) ⇒ Object
169
170
171
172
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 169
def create_file name, template, format
contents = render! template, format: format
create_file_contents name, contents
end
|
#create_file_contents(name, contents) ⇒ Object
174
175
176
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 174
def create_file_contents name, contents
update_file name, contents
end
|
#delete_file(name) ⇒ Object
188
189
190
191
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 188
def delete_file name
path = App.root.join name
mapper.delete_after path
end
|
#generate(*args, &block) ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 94
def generate(*args, &block)
args = args.flatten
cmd_menv = Command.panel.forge ["generate", *args]
cmd_menv[:command] = SimpleCommand.new.tap do |cmd|
cmd.instance_variable_set :@menv, cmd_menv
cmd.before
end
gen_menv = panel.forge cmd_menv
gen_menv[:simple_mapper] = mapper
panel.forge_shortcut gen_menv
panel.find gen_menv
panel.find_shortcut gen_menv
panel.forward gen_menv
end
|
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 27
def inform
log :lowest, "informing #{mapper.changes.count} changes"
mapper.changes.each do |fname, data|
mapper.changes.delete fname if data[:before] == data[:after]
end
mapper.changes.each do |fname, data|
puts_line
action = "updating"
action = "creating" if data[:before] == ""
action = "deleting" if data[:after] == ""
diff = {
"+": (data[:after].split("\n") - data[:before].split("\n")).count,
"-": (data[:before].split("\n") - data[:after].split("\n")).count,
}
bit = diff.map { "#{_1}#{_2}" }.join(" ")
relative = Pathname(fname).relative_path_from(App.root)
string = "#{action.ljust 8} | #{"#{bit}".rjust 8} lines | #{relative}"
log :lowest, string
if log_level? :low
puts relative
DifflcsGemShell.log_diff(data[:before].split("\n"), data[:after].split("\n")) if diff.values.sum.positive?
end
end
end
|
#mapper ⇒ Object
110
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 110
def mapper() = menv[:simple_mapper] ||= Mapper.new(self)
|
#pick_many_units(units) ⇒ Object
330
331
332
333
334
335
336
337
338
339
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 330
def pick_many_units(units)
options = units.map do |unit|
[
"#{TypographyShell.color_class unit}",
unit
]
end.to_h
selected = units.count == 1 ? :all : :none
InputShell.multi_select "Pick Multiple Controllers", options, selected: selected
end
|
#puts_line ⇒ Object
343
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 343
def puts_line() = puts "-" * 120
|
#read_file(name) ⇒ Object
178
179
180
181
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 178
def read_file name
path = App.root.join name
mapper.read_after path
end
|
#remove_units(units) ⇒ Object
317
318
319
320
321
322
323
324
325
326
327
328
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 317
def remove_units(units)
units.each do |unit|
unit_path_radical = unit.source_location_radical
unit_path = "#{unit_path_radical}.rb"
mapper.delete_after Pathname unit_path
views = Dir["#{unit_path_radical}*/**/*"]
views.each do |fname|
mapper.delete_after Pathname fname
end
end
end
|
#save ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 58
def save
puts_line
diff = {
"+": mapper.changes.map { _2[:after].split("\n").count }.sum,
"-": mapper.changes.map { _2[:before].split("\n").count }.sum,
}
log "saving #{mapper.changes.count} files changed: #{diff[:"+"]} insertions(+), #{diff[:"-"]} deletions(-)"
choices = mapper.changes.keys.map { [_1, _1] }.to_h
if command.simple_boolean :confirm
answers = choices.keys
else
answers = InputShell.multi_select "Approve all changes?", choices
end
puts_line
diff = {
"+": mapper.changes.map { _2[:after].split("\n").count }.sum,
"-": mapper.changes.map { _2[:before].split("\n").count }.sum,
}
log "saving #{answers.count} files changed: #{diff[:"+"]} insertions(+), #{diff[:"-"]} deletions(-)"
answers.each do |fname|
answer = mapper.changes[fname]
if answer[:after] == ""
FileShell.remove fname, log_level: :higher
else
FileShell.write_text fname, answer[:after], log_level: :higher
end
end
end
|
#set_default_views(views) ⇒ Object
245
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 245
def set_default_views(views) = command.set_default_string(:views, views)
|
#update_file(name, contents) ⇒ Object
183
184
185
186
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 183
def update_file name, contents
path = App.root.join name
mapper.write_after path, contents
end
|
#valid_views ⇒ Object
247
|
# File 'lib/dev_system/subsystems/generator/generators/simple_generator.rb', line 247
def valid_views() = @valid_views ||= %w[none eof adjacent nested]
|