Class: Roda::Project::Bin::Generators::Migration

Inherits:
Roda::Project::Bin::Generator show all
Defined in:
lib/roda/project/bin/generators/migration.rb,
lib/roda/project/bin/generators/migration/code_builder.rb,
lib/roda/project/bin/generators/migration/field_parser.rb,
lib/roda/project/bin/generators/migration/action_detector.rb

Defined Under Namespace

Classes: ActionDetector, CodeBuilder, FieldParser

Instance Attribute Summary

Attributes inherited from Generator

#pastel

Instance Method Summary collapse

Methods inherited from Roda::Project::Bin::Generator

#templates_root

Methods inherited from Generator

#initialize

Methods included from Helpers::Ids

#api_id, #fullstack_id, #id_to_string, #minimal_id, #minitest_id, #mysql_id, #postgresql_id, #rspec_id, #sqlite_id

Methods included from Helpers::Template

#cp_dir, #cp_file, #ensure_and_get_path, #erb_cp_dir, #erb_cp_file, #templates_root

Constructor Details

This class inherits a constructor from Roda::Project::Generator

Instance Method Details

#callObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/roda/project/bin/generators/migration.rb', line 8

def call
  if migration_name.nil? || migration_name.empty?
    puts "Usage: bin/roda g migration your_migration_name"
    exit 1
  end

  puts "* creating migration"
  FileUtils.mkdir_p(migrations_path) unless File.directory?(migrations_path)

  existing_migrations = Dir.glob(File.join(migrations_path, "*.rb"))
  max_number = existing_migrations.map do |file|
    File.basename(file).match(/^(\d+)/)&.captures&.first.to_i
  end.max || 0
  next_number = (max_number + 1).to_s.rjust(3, "0")

  formatted_name = underscore(migration_name)
  filename = File.join(migrations_path, "#{next_number}_#{formatted_name}.rb")

  detection = ActionDetector.new(migration_name, args: field_args).detect
  fields = FieldParser.new(field_args).parse
  content = CodeBuilder.new(detection: detection, fields: fields).build

  File.write(filename, content)

  puts_create_message(filename)
end

#field_argsObject



43
44
45
# File 'lib/roda/project/bin/generators/migration.rb', line 43

def field_args
  @field_args ||= @args[1..] || []
end

#migration_nameObject



39
40
41
# File 'lib/roda/project/bin/generators/migration.rb', line 39

def migration_name
  @migration_name ||= @args[0]
end

#migrations_pathObject



35
36
37
# File 'lib/roda/project/bin/generators/migration.rb', line 35

def migrations_path
  "db/migrations"
end