lib/lhm.rb in lhm-1.0.0.rc2 vs lib/lhm.rb in lhm-1.0.0.rc3
- old
+ new
@@ -1,20 +1,42 @@
-#
-# Copyright (c) 2011, SoundCloud Ltd., Rany Keddo, Tobias Bielohlawek, Tobias
-# Schmidt
-#
+# Copyright (c) 2011, SoundCloud Ltd., Rany Keddo, Tobias Bielohlawek, Tobias
+# Schmidt
+require 'active_record'
require 'lhm/table'
require 'lhm/invoker'
-require 'lhm/migration'
+require 'lhm/version'
+# Large hadron migrator - online schema change tool
+#
+# @example
+#
+# Lhm.change_table(:users) do |m|
+# m.add_column(:arbitrary, "INT(12)")
+# m.add_index([:arbitrary, :created_at])
+# m.ddl("alter table %s add column flag tinyint(1)" % m.name)
+# end
+#
module Lhm
- VERSION = "1.0.0.rc2"
+ extend self
- def hadron_change_table(table_name, chunk_options = {}, &block)
+ # Alters a table with the changes described in the block
+ #
+ # @param [String, Symbol] table_name Name of the table
+ # @param [Hash] chunk_options Optional options to alter the chunk behavior
+ # @option chunk_options [Fixnum] :stride
+ # Size of a chunk (defaults to: 40,000)
+ # @option chunk_options [Fixnum] :throttle
+ # Time to wait between chunks in milliseconds (defaults to: 100)
+ # @yield [Migrator] Yielded Migrator object records the changes
+ # @return [Boolean] Returns true if the migration finishs
+ # @raise [Error] Raises Lhm::Error in case of a error and aborts the migration
+ def change_table(table_name, chunk_options = {}, &block)
+ connection = ActiveRecord::Base.connection
origin = Table.parse(table_name, connection)
invoker = Invoker.new(origin, connection)
block.call(invoker.migrator)
invoker.run(chunk_options)
+
+ true
end
end
-