module KakurenboPuti::ActiveRecordBase::Initializers
Public Class Methods
create_callbacks(target_class)
click to toggle source
Create callbacks. @param [Class] target_class Class of target.
# File lib/kakurenbo_puti/active_record_base.rb, line 21 def self.create_callbacks(target_class) target_class.class_eval do define_model_callbacks :restore define_model_callbacks :soft_destroy end end
create_column_name_accessors(target_class, column)
click to toggle source
Create attribute_accessors of column_name. @param [Class] target_class Class of target. @param [Symbol] column Name of column.
# File lib/kakurenbo_puti/active_record_base.rb, line 31 def self.create_column_name_accessors(target_class, column) target_class.class_eval do define_singleton_method(:soft_delete_column) { column } delegate :soft_delete_column, to: :class end end
create_scopes(target_class, dependent_associations)
click to toggle source
Create scopes. @param [Class] target_class Class of target. @param [Array<Symbol>] dependent_associations Names of dependency association.
# File lib/kakurenbo_puti/active_record_base.rb, line 41 def self.create_scopes(target_class, dependent_associations) target_class.class_eval do scope :only_soft_destroyed, -> { where.not(id: without_soft_destroyed.select(:id)) } scope :without_soft_destroyed, (lambda do dependent_associations.inject(where(soft_delete_column => nil)) do |relation, name| association = relation.klass.reflect_on_all_associations.find{|a| a.name == name } raise 'dependent association is usable only in `belongs_to`.' unless association.belongs_to? parent_relation = association.klass.all if association.klass.method_defined?(:soft_delete_column) parent_relation = parent_relation.without_soft_destroyed end relation.where(association.foreign_key => parent_relation.select(:id)) end end) end end