class 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
Does nothing for all commands except Create.
# File lib/rubigen/commands.rb, line 52 def class_collisions(*class_names) end
# File lib/rubigen/commands.rb, line 45 def dependency(generator_name, args, runtime_options = {}) logger.dependency(generator_name) do self.class.new(instance(generator_name, args, full_options(runtime_options))).invoke! end end
Replay action manifest. RewindBase subclass rewinds manifest.
# File lib/rubigen/commands.rb, line 40 def invoke! manifest.replay(self) after_generate end
Does nothing for all commands except Create.
# File lib/rubigen/commands.rb, line 56 def readme(*args) end
Does nothing for all commands except Create.
# File lib/rubigen/commands.rb, line 60 def write_manifest end
Protected Instance Methods
# File lib/rubigen/commands.rb, line 83 def current_migration_number Dir.glob("#{RAILS_ROOT}/#{@migration_directory}/[0-9]*_*.rb").inject(0) do |max, file_path| n = File.basename(file_path).split('_', 2).first.to_i if n > max then n else max end end end
# File lib/rubigen/commands.rb, line 98 def existing_migrations(file_name) Dir.glob("#{@migration_directory}/[0-9]*_*.rb").grep(/[0-9]+_#{file_name}.rb$/) end
Given the content of a file and a snippet, finds the snippet within the file and returns its position as the line number in the file. Returns nil if no match was found.
Both file and snippets are given as array of strings, each string being a line. The match ignores indentation changes.
# File lib/rubigen/commands.rb, line 70 def find_content_match(file, snippet) snippet = snippet.map(&:strip) file.each_with_index do |line, idx| if line.strip == snippet.first matched = snippet.each_with_index.all? do |snippet_line, offset| file[offset + idx].strip == snippet_line end return idx if matched end end nil end
# File lib/rubigen/commands.rb, line 114 def gsub_file(relative_destination, regexp, *args, &block) path = destination_path(relative_destination) content = File.read(path).gsub(regexp, *args, &block) File.open(path, 'wb') { |file| file.write(content) } end
# File lib/rubigen/commands.rb, line 94 def migration_directory(relative_path) directory(@migration_directory = relative_path) end
# File lib/rubigen/commands.rb, line 102 def migration_exists?(file_name) not existing_migrations(file_name).empty? end
# File lib/rubigen/commands.rb, line 90 def next_migration_number current_migration_number + 1 end
# File lib/rubigen/commands.rb, line 106 def next_migration_string(padding = 3) if ActiveRecord::Base.timestamped_migrations Time.now.utc.strftime("%Y%m%d%H%M%S") else "%.#{padding}d" % next_migration_number end end