Class: RailsEngineToolkit::Actions::DeleteEngineMigration

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_engine_toolkit/actions/delete_engine_migration.rb

Instance Method Summary collapse

Constructor Details

#initialize(argv, stdin:, stdout:, root:, stderr: nil) ⇒ DeleteEngineMigration

Returns a new instance of DeleteEngineMigration.



6
7
8
9
10
11
12
13
14
# File 'lib/rails_engine_toolkit/actions/delete_engine_migration.rb', line 6

def initialize(argv, stdin:, stdout:, root:, stderr: nil)
  @engine_name = argv[0]
  @pattern = argv[1]
  @stdin = stdin
  @stdout = stdout
  @stderr = stderr
  @root = Pathname(root)
  @project = Project.new(@root)
end

Instance Method Details

#callObject

Raises:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/rails_engine_toolkit/actions/delete_engine_migration.rb', line 16

def call
  @project.validate_root!
  validate_args!

  migrations_dir = @project.engine_path(@engine_name).join('db/migrate')
  raise ValidationError, "Migrations path does not exist: #{migrations_dir}" unless migrations_dir.directory?

  matches = migrations_dir.glob("*#{@pattern}*.rb").sort
  raise ValidationError, "No migrations found matching '#{@pattern}'." if matches.empty?

  confirmed = Utils.ask(
    "Type '#{@engine_name}' to confirm deletion",
    input: @stdin,
    output: @stdout
  )
  raise ValidationError, 'Operation aborted.' unless confirmed == @engine_name

  matches.each(&:delete)
  UpdateEngineReadme.new([@engine_name], stdin: @stdin, stdout: @stdout, stderr: nil, root: @root).call
  @stdout.puts("Deleted #{matches.size} migration(s)")
end