lib/pg_trigger/generator.rb in rails-pg_trigger-0.1.1 vs lib/pg_trigger/generator.rb in rails-pg_trigger-0.1.2
- old
+ new
@@ -41,13 +41,13 @@
end
def generate_output
@output = ""
header
- up(:up)
+ add_direction(:up)
@output << "\n"
- up(:down)
+ add_direction(:down)
footer
end
private
@@ -56,48 +56,55 @@
@output << "# This migration was auto-generated via `rake db:triggers:migration'.\n\n"
@output << "class #{migration_name} < ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]\n"
end
- def up(dir)
+ def add_direction(dir)
res = IndentedString.new(size: 2, initial_indent: true)
res << "def #{dir}\n"
res.indent!
- create = ->(t) do
- add_command("create_trigger", t) do |s|
- if t.create_function?
- s += t.create_function_sql
- s.newline
- end
- s += t.create_trigger_sql
- end
- end
+ blocks = []
- drop = ->(t) do
- add_command("drop_trigger", t) do |s|
- s += t.drop_trigger_sql
- s.newline
- if t.create_function?
- s += t.drop_function_sql
- end
- end
+ if dir == :up
+ blocks.concat @plan.removed_triggers.map { |t| drop_trigger_command(t) }
+ blocks.concat @plan.new_triggers.map { |t| create_trigger_command(t) }
+ else
+ blocks.concat @plan.new_triggers.map { |t| drop_trigger_command(t) }
+ blocks.concat @plan.removed_triggers.map { |t| create_trigger_command(t) }
end
- blocks = @plan.new_triggers.map { |t| (dir == :up ? create : drop).call(t) }
- blocks.concat @plan.removed_triggers.map { |t| (dir == :up ? drop : create).call(t) }
-
res += blocks.join("\n")
res.outdent!
res << "end\n"
@output << res.to_s
end
def footer
@output << "end\n"
end
- def add_command(cmd, t)
+ def create_trigger_command(t)
+ make_command("create_trigger", t) do |s|
+ if t.create_function?
+ s += t.create_function_sql
+ s.newline
+ end
+ s += t.create_trigger_sql
+ end
+ end
+
+ def drop_trigger_command(t)
+ make_command("drop_trigger", t) do |s|
+ s += t.drop_trigger_sql
+ s.newline
+ if t.create_function?
+ s += t.drop_function_sql
+ end
+ end
+ end
+
+ def make_command(cmd, t)
res = IndentedString.new(size: 0)
res << %{#{cmd} "#{t.name}", <<~SQL\n}
res.indent!
yield res
res.outdent!