Module: ActiveSet::Filtering::Enumerable::Operators

Defined in:
lib/active_set/filtering/enumerable/operators.rb

Overview

rubocop:disable Metrics/ModuleLength

Constant Summary collapse

NOT_TRANSFORMER =
->(result) { !result }
RANGE_TRANSFORMER =
->(value) { Range.new(*value.sort) }
REGEXP_TRANSFORMER =
->(value) { /#{Regexp.quote(value.to_s)}/ }
STRING_TRANSFORMER =
->(value) { value.to_s }
PREDICATES =
{
  EQ: {
    operator: :'=='
  },
  NOT_EQ: {
    operator: :'!='
  },
  EQ_ANY: {
    operator: :'==',
    reducer: :any?
  },
  EQ_ALL: {
    operator: :'==',
    reducer: :all?
  },
  NOT_EQ_ANY: {
    operator: :'!=',
    reducer: :any?
  },
  NOT_EQ_ALL: {
    operator: :'!=',
    reducer: :all?
  },

  IN: {
    operator: :presence_in
  },
  NOT_IN: {
    operator: :presence_in,
    result_transformer: NOT_TRANSFORMER
  },
  IN_ANY: {
    operator: :presence_in,
    reducer: :any?
  },
  IN_ALL: {
    operator: :presence_in,
    reducer: :all?
  },
  NOT_IN_ANY: {
    operator: :presence_in,
    reducer: :any?,
    result_transformer: NOT_TRANSFORMER
  },
  NOT_IN_ALL: {
    operator: :presence_in,
    reducer: :all?,
    result_transformer: NOT_TRANSFORMER
  },

  MATCHES: {
    operator: :'=~',
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: REGEXP_TRANSFORMER
  },
  DOES_NOT_MATCH: {
    operator: :'!~',
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: REGEXP_TRANSFORMER
  },
  MATCHES_ANY: {
    operator: :'=~',
    reducer: :any?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: REGEXP_TRANSFORMER
  },
  MATCHES_ALL: {
    operator: :'=~',
    reducer: :all?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: REGEXP_TRANSFORMER
  },
  DOES_NOT_MATCH_ANY: {
    operator: :'!~',
    reducer: :any?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: REGEXP_TRANSFORMER
  },
  DOES_NOT_MATCH_ALL: {
    operator: :'!~',
    reducer: :all?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: REGEXP_TRANSFORMER
  },

  LT: {
    operator: :'<'
  },
  LTEQ: {
    operator: :'<='
  },
  LT_ANY: {
    operator: :'<',
    reducer: :any?
  },
  LT_ALL: {
    operator: :'<',
    reducer: :all?
  },
  LTEQ_ANY: {
    operator: :'<=',
    reducer: :any?
  },
  LTEQ_ALL: {
    operator: :'<=',
    reducer: :all?
  },

  GT: {
    operator: :'>'
  },
  GTEQ: {
    operator: :'>='
  },
  GT_ANY: {
    operator: :'>',
    reducer: :any?
  },
  GT_ALL: {
    operator: :'>',
    reducer: :all?
  },
  GTEQ_ANY: {
    operator: :'>=',
    reducer: :any?
  },
  GTEQ_ALL: {
    operator: :'>=',
    reducer: :all?
  },

  BETWEEN: {
    operator: :cover?,
    query_attribute_transformer: RANGE_TRANSFORMER
  },
  NOT_BETWEEN: {
    operator: :cover?,
    query_attribute_transformer: RANGE_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },

  IS_TRUE: {
    operator: :'==',
    query_attribute_transformer: proc { |_| 1 }
  },
  IS_FALSE: {
    operator: :'==',
    query_attribute_transformer: proc { |_| 0 }
  },

  IS_NULL: {
    operator: :'=='
  },
  NOT_NULL: {
    operator: :'!='
  },

  IS_PRESENT: {
    operator: :'!=',
    reducer: :all?,
    query_attribute_transformer: proc { |_| Constants::BLANK_VALUES }
  },
  IS_BLANK: {
    operator: :'==',
    reducer: :any?,
    query_attribute_transformer: proc { |_| Constants::BLANK_VALUES }
  },

  MATCH_START: {
    operator: :'start_with?',
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_START_ANY: {
    operator: :'start_with?',
    reducer: :any?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_START_ALL: {
    operator: :'start_with?',
    reducer: :all?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_NOT_START: {
    operator: :'start_with?',
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },
  MATCH_NOT_START_ANY: {
    operator: :'start_with?',
    reducer: :any?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },
  MATCH_NOT_START_ALL: {
    operator: :'start_with?',
    reducer: :all?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },
  MATCH_END: {
    operator: :'end_with?',
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_END_ANY: {
    operator: :'end_with?',
    reducer: :any?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_END_ALL: {
    operator: :'end_with?',
    reducer: :all?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_NOT_END: {
    operator: :'end_with?',
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },
  MATCH_NOT_END_ANY: {
    operator: :'end_with?',
    reducer: :any?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },
  MATCH_NOT_END_ALL: {
    operator: :'end_with?',
    reducer: :all?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },
  MATCH_CONTAIN: {
    operator: :'include?',
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_CONTAIN_ANY: {
    operator: :'include?',
    reducer: :any?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_CONTAIN_ALL: {
    operator: :'include?',
    reducer: :all?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER
  },
  MATCH_NOT_CONTAIN: {
    operator: :'include?',
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },
  MATCH_NOT_CONTAIN_ANY: {
    operator: :'include?',
    reducer: :any?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  },
  MATCH_NOT_CONTAIN_ALL: {
    operator: :'include?',
    reducer: :all?,
    object_attribute_transformer: STRING_TRANSFORMER,
    query_attribute_transformer: STRING_TRANSFORMER,
    result_transformer: NOT_TRANSFORMER
  }
}.freeze

Class Method Summary collapse

Class Method Details

.get(operator_name) ⇒ Object



296
297
298
299
300
301
302
303
# File 'lib/active_set/filtering/enumerable/operators.rb', line 296

def self.get(operator_name)
  operator_key = operator_name.to_s.upcase.to_sym

  base_operator_hash = Constants::PREDICATES.fetch(operator_key, {})
  this_operator_hash = Operators::PREDICATES.fetch(operator_key, {})

  base_operator_hash.merge(this_operator_hash)
end