Sha256: 3fbf5698092e2dd2666f83b104d644f9dbc4c57a71def28a3b990a54d9332c06

Contents?: true

Size: 1.13 KB

Versions: 5

Compression:

Stored size: 1.13 KB

Contents

module Mobility
  module Backend
    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_extractor = lambda do |opts|
            opts.is_a?(Hash) && (opts.keys.map(&:to_s) & attributes).presence
          end
        end

        # @param [ActiveRecord::Relation] relation Relation being extended
        def extended(relation)
          model_class = relation.model
          unless model_class.respond_to?(:mobility_where_chain)
            model_class.define_singleton_method(:mobility_where_chain) do
              @mobility_where_chain ||= Class.new(::ActiveRecord::QueryMethods::WhereChain)
            end

            relation.define_singleton_method :where do |opts = :chain, *rest|
              opts == :chain ? mobility_where_chain.new(spawn) : super(opts, *rest)
            end
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mobility-0.1.12 lib/mobility/backend/active_record/query_methods.rb
mobility-0.1.11 lib/mobility/backend/active_record/query_methods.rb
mobility-0.1.10 lib/mobility/backend/active_record/query_methods.rb
mobility-0.1.7 lib/mobility/backend/active_record/query_methods.rb
mobility-0.1.6 lib/mobility/backend/active_record/query_methods.rb