Sha256: e49a36668157d776656a62bda8d5dfd33f7d5c39998546a9f1251931493bc127

Contents?: true

Size: 1.46 KB

Versions: 8

Compression:

Stored size: 1.46 KB

Contents

module Mobility
  module Backends
    module ActiveRecord
=begin

Defines query method overrides to handle translated attributes for ActiveRecord
models. For details see backend-specific subclasses.

=end
      class QueryMethods < Module
        # @param [Array<String>] attributes Translated attributes
        def initialize(attributes, _)
          @attributes = attributes

          attributes.each do |attribute|
            define_method :"find_by_#{attribute}" do |value|
              find_by(attribute.to_sym => value)
            end
          end
        end

        # @param [ActiveRecord::Relation] relation Relation being extended
        # @note Only want to define this once, even if multiple QueryMethods
        #   modules are included, so include it here into the singleton class.
        def extended(relation)
          relation.singleton_class.include WhereChainable
        end

        def extract_attributes(opts)
          opts.is_a?(Hash) && (opts.keys.map(&:to_s) & @attributes).presence
        end

        def collapse(value)
          value.is_a?(Array) ? value.uniq : value
        end
      end

      module WhereChainable
        def where(opts = :chain, *rest)
          opts == :chain ? mobility_where_chain.new(spawn) : super
        end

        def mobility_where_chain
          @mobility_where_chain ||= Class.new(::ActiveRecord::QueryMethods::WhereChain)
        end
      end
      private_constant :QueryMethods, :WhereChainable
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
mobility-0.7.6 lib/mobility/backends/active_record/query_methods.rb
mobility-0.7.5 lib/mobility/backends/active_record/query_methods.rb
mobility-0.7.4 lib/mobility/backends/active_record/query_methods.rb
mobility-0.7.3 lib/mobility/backends/active_record/query_methods.rb
mobility-0.7.2 lib/mobility/backends/active_record/query_methods.rb
mobility-0.7.1 lib/mobility/backends/active_record/query_methods.rb
mobility-0.7.0 lib/mobility/backends/active_record/query_methods.rb
mobility-0.6.0 lib/mobility/backends/active_record/query_methods.rb