aboutsummaryrefslogtreecommitdiffstats
path: root/config/initializers
diff options
context:
space:
mode:
authorRhenium <rhenium@rhe.jp>2014-01-17 20:58:07 +0900
committerRhenium <rhenium@rhe.jp>2014-01-17 21:00:01 +0900
commite1f1602ef0153dbee997c9fcef6ef6f8c8291cc5 (patch)
treece56fbda7b0699fa01c750a77474a719a54face8 /config/initializers
parentad42e7d84080040ae026aa6e23044626e4f7404d (diff)
downloadaclog-e1f1602ef0153dbee997c9fcef6ef6f8c8291cc5.tar.gz
fix config/initializers/active_record_insert_ignore.rb: call validations, callbacks, transactions...
Diffstat (limited to 'config/initializers')
-rw-r--r--config/initializers/active_record_insert_ignore.rb68
1 files changed, 67 insertions, 1 deletions
diff --git a/config/initializers/active_record_insert_ignore.rb b/config/initializers/active_record_insert_ignore.rb
index ac9eeca..c6df9be 100644
--- a/config/initializers/active_record_insert_ignore.rb
+++ b/config/initializers/active_record_insert_ignore.rb
@@ -55,6 +55,7 @@ module Arel
end
end
+# insert_ignore
module ActiveRecord
# activerecord/lib/active_record/relation.rb
class Relation
@@ -102,13 +103,78 @@ module ActiveRecord
binds)
end
end
+end
+
+# save!
+module ActiveRecord
+ # activerecord/lib/active_record/transactions.rb
+ module Transactions
+ def save_ignore!(*)
+ with_transaction_returning_status { super }
+ end
+ end
+
+ # activerecord/lib/active_record/attribute_methods/dirty.rb
+ module AttributeMethods
+ module Dirty
+ def save_ignore!(*)
+ super.tap do
+ @previously_changed = changes
+ @changed_attributes.clear
+ end
+ end
+ end
+ end
+
+ # activerecord/lib/active_record/validations.rb
+ module Validations
+ def save_ignore!(options={})
+ perform_validations(options) ? super : raise(RecordInvalid.new(self))
+ end
+ end
- # from activerecord/lib/active_record/persistence.rb
+ # activerecord/lib/active_record/persistence.rb
module Persistence
def save_ignore!(*)
create_ignore_or_update || raise(RecordNotSaved)
end
+ end
+end
+
+# create_ignore_or_update / create_record_ignore
+module ActiveRecord
+ # activerecord/lib/active_record/callbacks.rb
+ module Callbacks
+ private
+ def create_ignore_or_update
+ run_callbacks(:save) { super }
+ end
+
+ def create_record_ignore
+ run_callbacks(:create) { super }
+ end
+ end
+
+ # activerecord/lib/active_record/timestamp.rb
+ module Timestamps
+ private
+ def create_record_ignore
+ if self.record_timestamps
+ current_time = current_time_from_proper_timezone
+
+ all_timestamp_attributes.each do |column|
+ if respond_to?(column) && respond_to?("#{column}=") && self.send(column).nil?
+ write_attribute(column.to_s, current_time)
+ end
+ end
+ end
+
+ super
+ end
+ end
+ # activerecord/lib/active_record/persistence.rb
+ module Persistence
private
def create_ignore_or_update
raise ReadOnlyRecord if readonly?