diff --git a/lib/oaken.rb b/lib/oaken.rb index 0aadbb0..73aa2f1 100644 --- a/lib/oaken.rb +++ b/lib/oaken.rb @@ -47,6 +47,10 @@ def load_onto(seeds) end end + def self.transaction(&block) + ActiveRecord::Base.transaction(&block) + end + def self.prepare(&block) store_path.rmtree if ENV["OAKEN_RESET"] Seeds.instance_eval(&block) diff --git a/lib/oaken/entry.rb b/lib/oaken/entry.rb index 46fb5e4..c557ba8 100644 --- a/lib/oaken/entry.rb +++ b/lib/oaken/entry.rb @@ -34,6 +34,12 @@ def load_onto(seeds) end end + def transaction(&block) + super do + Oaken.transaction(&block) + end + end + def replay? checksum == @computed_checksum end diff --git a/lib/oaken/stored/active_record.rb b/lib/oaken/stored/active_record.rb index 6a798ab..ceca455 100644 --- a/lib/oaken/stored/active_record.rb +++ b/lib/oaken/stored/active_record.rb @@ -2,6 +2,7 @@ class Oaken::Stored::ActiveRecord < Struct.new(:type, :key) def initialize(type, key = nil) super(type, key || Oaken.inflector.tableize(type.name)) end + delegate :transaction, to: :type # For multi-db setups to help open a transaction on secondary connections. delegate :find, :insert_all, to: :type def create(reader = nil, **attributes)