Class: MigrationBundler::Util

Inherits:
Object
  • Object
show all
Defined in:
lib/migration_bundler/util.rb

Class Method Summary collapse

Class Method Details

.camelize(term, uppercase_first_letter = true) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/migration_bundler/util.rb', line 32

def camelize(term, uppercase_first_letter = true)
  string = term.to_s
  string = string.sub(/^[a-z\d]*/) { $&.capitalize }
  string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }
  string.gsub!('/', '::')
  string
end

.database_named(name) ⇒ Object

Raises:

  • (ArgumentError)


40
41
42
43
44
45
# File 'lib/migration_bundler/util.rb', line 40

def database_named(name)
  raise ArgumentError, "Database name cannot be nil." if name.nil?
  require "migration_bundler/databases/#{name}_database"
  klass_name = "MigrationBundler::Databases::#{Util.camelize(name)}Database"
  Object.const_get(klass_name)
end

.migration_named(name, timestamp = migration_timestamp) ⇒ Object



8
9
10
# File 'lib/migration_bundler/util.rb', line 8

def migration_named(name, timestamp = migration_timestamp)
  migration_name = [timestamp, Thor::Util.snake_case(name)].join('_')
end

.migration_timestampObject



4
5
6
# File 'lib/migration_bundler/util.rb', line 4

def migration_timestamp
  Time.now.strftime('%Y%m%d%H%M%S%3N').to_i
end

.migration_version_from_path(path) ⇒ Object



16
17
18
# File 'lib/migration_bundler/util.rb', line 16

def migration_version_from_path(path)
  path.match(/(\d{17})_/)[1].to_i
end

.migration_versions_from_paths(paths) ⇒ Object



20
21
22
# File 'lib/migration_bundler/util.rb', line 20

def migration_versions_from_paths(paths)
  paths.map { |path| migration_version_from_path(path) }
end

.migrations_by_version(paths) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/migration_bundler/util.rb', line 24

def migrations_by_version(paths)
  paths.inject({}) do |hash, path|
    version = migration_version_from_path(path)
    hash[version] = path
    hash
  end
end

.strip_leading_whitespace(string) ⇒ Object



12
13
14
# File 'lib/migration_bundler/util.rb', line 12

def strip_leading_whitespace(string)
  string.gsub(/^\s+/, '')
end

.target_classes_named(*names) ⇒ Object

Raises:

  • (ArgumentError)


47
48
49
50
51
52
53
54
55
56
# File 'lib/migration_bundler/util.rb', line 47

def target_classes_named(*names)
  raise ArgumentError, "Database name cannot be nil." if names.nil?
  names.flatten.map do |name|
    require "migration_bundler/targets/#{name}/#{name}_target"
    klass_name = "MigrationBundler::Targets::#{Util.camelize(name)}Target"
    Object.const_get(klass_name).tap do |klass|
      yield klass if block_given?
    end
  end
end

.unique_tag_for_version(version) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/migration_bundler/util.rb', line 58

def unique_tag_for_version(version)
  revision = nil
  tag = nil
  begin
    tag = [version, revision].compact.join('.')
    existing_tag = `git tag -l #{tag}`
    break if existing_tag == ""
    revision = revision.to_i + 1
  end while true
  tag
end