class MigrationSignature::MigrationFile
Constants
- MIGRATION_SIG_PREFIX
Attributes
path[R]
Public Class Methods
new(path_or_version)
click to toggle source
# File lib/migration_signature/migration_file.rb, line 22 def initialize(path_or_version) @path = self.class.resolve_full_name(path_or_version) end
resolve_full_name(path_or_version)
click to toggle source
# File lib/migration_signature/migration_file.rb, line 7 def self.resolve_full_name(path_or_version) path = if path_or_version =~ /^\d+$/ Dir["#{MigrationSignature.config.migration_dir}/#{path_or_version}*"] .first else File.expand_path(path_or_version) end return path if path && File.exist?(path) bad_basename = path ? path.split('/').last : path_or_version raise("Could not find migration #{bad_basename}") end
Public Instance Methods
basename()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 53 def basename File.basename(path) end
ignore?()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 26 def ignore? MigrationSignature.config.ignore?(@path) end
update_signature!()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 30 def update_signature! new_lines = lines.dup unless signature? new_lines.unshift("\n") # add blank line between magic comments and content if !new_lines[1].empty? && !new_lines[1].start_with?('#') new_lines.unshift("\n") end end new_lines[signature_line_number || 0] = new_source_signature_line write_to_file(new_lines) end
validate_signature!()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 44 def validate_signature! return true if valid_signature? raise MigrationSignature::InvalidSignatureError, 'Missing or invalid migration signature in migration: ' \ "#{basename}. Please re-run your migration to receive an " \ 'updated signature.' end
Private Instance Methods
lines()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 86 def lines @lines ||= File.read(path).lines end
new_source_signature_line()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 70 def new_source_signature_line "#{MIGRATION_SIG_PREFIX}#{source_signature}\n" end
signature?()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 78 def signature? signature_line_number && signature_line_number > -1 end
signature_line_number()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 82 def signature_line_number lines.index { |l| l.start_with?(MIGRATION_SIG_PREFIX) } end
source_signature()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 74 def source_signature Digest::MD5.hexdigest(Parser::CurrentRuby.parse(lines.join).inspect) end
valid_signature?()
click to toggle source
# File lib/migration_signature/migration_file.rb, line 61 def valid_signature? return false unless signature? comment_signature = lines[signature_line_number] .sub(MIGRATION_SIG_PREFIX, '') .strip comment_signature == source_signature end
write_to_file(new_lines)
click to toggle source
# File lib/migration_signature/migration_file.rb, line 90 def write_to_file(new_lines) File.write(path, new_lines.join) remove_instance_variable(:@lines) if defined?(@lines) true end