Sha256: be88a671b5b6988b9b0b71d5592138bfeb71a00887a4e06c3a8fa152e3fb2527

Contents?: true

Size: 1.02 KB

Versions: 2

Compression:

Stored size: 1.02 KB

Contents

module ActiveRecord
  module ActsAs
    module ReflectionsWithActsAs
      def _reflections
        super.reverse_merge(acting_as_model._reflections)
      end
    end

    module ClassMethods
      def self.included(module_)
        module_.prepend ReflectionsWithActsAs
      end

      def validators_on(*args)
        super + acting_as_model.validators_on(*args)
      end

      def actables
        acting_as_model.where(actable_id: select(:id))
      end

      def respond_to_missing?(method, include_private = false)
        acting_as_model.methods_callable_by_submodel.include?(method) || super
      end

      ruby2_keywords def method_missing(method, *args, &block)
        if acting_as_model.methods_callable_by_submodel.include?(method)
          result = acting_as_model.public_send(method, *args, &block)
          if result.is_a?(ActiveRecord::Relation)
            all.joins(acting_as_name.to_sym).merge(result)
          else
            result
          end
        else
          super
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
active_record-acts_as-5.1.0 lib/active_record/acts_as/class_methods.rb
active_record-acts_as-5.0.3 lib/active_record/acts_as/class_methods.rb