Parent

RubiGen::Commands::Base

Generator commands delegate RubiGen::Base and implement a standard set of actions. Their behavior is defined by the way they respond to these actions: Create brings life; Destroy brings death; List passively observes.

Commands are invoked by replaying (or rewinding) the generator’s manifest of actions. See RubiGen::Manifest and RubiGen::Base#manifest method that generator subclasses are required to override.

Commands allows generators to “plug in” invocation behavior, which corresponds to the GoF Strategy pattern.

Public Instance Methods

class_collisions(*class_names) click to toggle source

Does nothing for all commands except Create.

    # File lib/rubigen/commands.rb, line 52
52:       def class_collisions(*class_names)
53:       end
dependency(generator_name, args, runtime_options = {}) click to toggle source
    # File lib/rubigen/commands.rb, line 45
45:       def dependency(generator_name, args, runtime_options = {})
46:         logger.dependency(generator_name) do
47:           self.class.new(instance(generator_name, args, full_options(runtime_options))).invoke!
48:         end
49:       end
invoke!() click to toggle source

Replay action manifest. RewindBase subclass rewinds manifest.

    # File lib/rubigen/commands.rb, line 40
40:       def invoke!
41:         manifest.replay(self)
42:         after_generate
43:       end
readme(*args) click to toggle source

Does nothing for all commands except Create.

    # File lib/rubigen/commands.rb, line 56
56:       def readme(*args)
57:       end
write_manifest() click to toggle source

Does nothing for all commands except Create.

    # File lib/rubigen/commands.rb, line 60
60:       def write_manifest
61:       end

Protected Instance Methods

current_migration_number() click to toggle source
    # File lib/rubigen/commands.rb, line 64
64:         def current_migration_number
65:           Dir.glob("#{RAILS_ROOT}/#{@migration_directory}/[0-9]*_*.rb").inject(0) do |max, file_path|
66:             n = File.basename(file_path).split('_', 2).first.to_i
67:             if n > max then n else max end
68:           end
69:         end
existing_migrations(file_name) click to toggle source
    # File lib/rubigen/commands.rb, line 79
79:         def existing_migrations(file_name)
80:           Dir.glob("#{@migration_directory}/[0-9]*_*.rb").grep(/[0-9]+_#{file_name}.rb$/)
81:         end
gsub_file(relative_destination, regexp, *args, &block) click to toggle source
    # File lib/rubigen/commands.rb, line 95
95:         def gsub_file(relative_destination, regexp, *args, &block)
96:           path = destination_path(relative_destination)
97:           content = File.read(path).gsub(regexp, *args, &block)
98:           File.open(path, 'wb') { |file| file.write(content) }
99:         end
migration_directory(relative_path) click to toggle source
    # File lib/rubigen/commands.rb, line 75
75:         def migration_directory(relative_path)
76:           directory(@migration_directory = relative_path)
77:         end
migration_exists?(file_name) click to toggle source
    # File lib/rubigen/commands.rb, line 83
83:         def migration_exists?(file_name)
84:           not existing_migrations(file_name).empty?
85:         end
next_migration_number() click to toggle source
    # File lib/rubigen/commands.rb, line 71
71:         def next_migration_number
72:           current_migration_number + 1
73:         end
next_migration_string(padding = 3) click to toggle source
    # File lib/rubigen/commands.rb, line 87
87:         def next_migration_string(padding = 3)
88:           if ActiveRecord::Base.timestamped_migrations
89:             Time.now.utc.strftime("%Y%m%d%H%M%S")
90:           else
91:             "%.#{padding}d" % next_migration_number
92:           end
93:         end

Private Instance Methods

diff_cmd() click to toggle source
     # File lib/rubigen/commands.rb, line 142
142:         def diff_cmd
143:           ENV['RAILS_DIFF'] || 'diff -u'
144:         end
force_file_collision?(destination, src, dst, file_options = {}, &block) click to toggle source

Ask the user interactively whether to force collision.

     # File lib/rubigen/commands.rb, line 103
103:         def force_file_collision?(destination, src, dst, file_options = {}, &block)
104:           stdout.print "overwrite #{destination}? (enter \"h\" for help) [Ynaiqd] "
105:           stdout.flush
106:           case $stdin.gets.chomp
107:             when /\Ad\z/
108:               Tempfile.open(File.basename(destination), File.dirname(dst)) do |temp|
109:                 temp.write render_file(src, file_options, &block)
110:                 temp.rewind
111:                 stdout.puts `#{diff_cmd} #{dst} #{temp.path}`
112:               end
113:               stdout.puts "retrying"
114:               raise 'retry diff'
115:             when /\Aa\z/
116:               stdout.puts "forcing #{spec.name}"
117:               options[:collision] = :force
118:             when /\Ai\z/
119:               stdout.puts "ignoring #{spec.name}"
120:               options[:collision] = :skip
121:             when /\Aq\z/
122:               stdout.puts "aborting #{spec.name}"
123:               raise SystemExit
124:             when /\An\z/ then :skip
125:             when /\Ay\z/ then :force
126:             else
127:               stdout.puts               Y - yes, overwrite              n - no, do not overwrite              a - all, overwrite this and all others              i - ignore, skip any conflicts              q - quit, abort              d - diff, show the differences between the old and the new              h - help, show this help.gsub(/^              /, '')
128:               raise 'retry'
129:           end
130:         rescue
131:           retry
132:         end
render_template_part(template_options) click to toggle source
     # File lib/rubigen/commands.rb, line 146
146:         def render_template_part(template_options)
147:           # Getting Sandbox to evaluate part template in it
148:           part_binding = template_options[:sandbox].call.sandbox_binding
149:           part_rel_path = template_options[:insert]
150:           part_path = source_path(part_rel_path)
151: 
152:           # Render inner template within Sandbox binding
153:           rendered_part = ERB.new(File.readlines(part_path).join, nil, '-').result(part_binding)
154:           begin_mark = template_part_mark(template_options[:begin_mark], template_options[:mark_id])
155:           end_mark = template_part_mark(template_options[:end_mark], template_options[:mark_id])
156:           begin_mark + rendered_part + end_mark
157:         end
template_part_mark(name, id) click to toggle source
     # File lib/rubigen/commands.rb, line 159
159:         def template_part_mark(name, id)
160:           "<!--[#{name}:#{id}]-->\n"
161:         end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.