class Authlogic::ActsAsAuthentic::Queries::FindWithCase

The query used by public-API method `find_by_smart_case_login_field`. @api private

Constants

AR_GEM_VERSION

Dup ActiveRecord.gem_version before freezing, in case someone else wants to modify it. Freezing modifies an object in place. github.com/binarylogic/authlogic/pull/590

Public Class Methods

new(model_class, field, value, sensitive) click to toggle source

@api private

# File lib/authlogic/acts_as_authentic/queries/find_with_case.rb, line 15
def initialize(model_class, field, value, sensitive)
  @model_class = model_class
  @field = field.to_s
  @value = value
  @sensitive = sensitive
end

Public Instance Methods

execute() click to toggle source

@api private

# File lib/authlogic/acts_as_authentic/queries/find_with_case.rb, line 23
def execute
  bind(relation).first
end

Private Instance Methods

bind(relation) click to toggle source

@api private

# File lib/authlogic/acts_as_authentic/queries/find_with_case.rb, line 30
def bind(relation)
  if AR_GEM_VERSION >= Gem::Version.new("5")
    bind = ActiveRecord::Relation::QueryAttribute.new(
      @field,
      @value,
      ActiveRecord::Type::Value.new
    )
    @model_class.where(relation, bind)
  else
    @model_class.where(relation)
  end
end
relation() click to toggle source

@api private

# File lib/authlogic/acts_as_authentic/queries/find_with_case.rb, line 44
def relation
  if !@sensitive
    @model_class.connection.case_insensitive_comparison(
      @model_class.arel_table,
      @field,
      @model_class.columns_hash[@field],
      @value
    )
  elsif AR_GEM_VERSION >= Gem::Version.new("5.0")
    @model_class.connection.case_sensitive_comparison(
      @model_class.arel_table,
      @field,
      @model_class.columns_hash[@field],
      @value
    )
  else
    value = @model_class.connection.case_sensitive_modifier(@value, @field)
    @model_class.arel_table[@field].eq(value)
  end
end