module Scopiform::StringNumberDateScopes::ClassMethods

Private Instance Methods

setup_string_number_and_date_auto_scopes() click to toggle source
# File lib/scopiform/string_number_date_scopes.rb, line 16
def setup_string_number_and_date_auto_scopes
  string_number_dates = Helpers::STRING_TYPES + Helpers::NUMBER_TYPES + Helpers::DATE_TYPES
  string_number_date_columns = safe_columns.select { |column| string_number_dates.include? column.type }
  string_number_date_columns.each do |column|
    name = column.name
    name_sym = name.to_sym
    type = column.type

    auto_scope_add(
      name,
      proc { |*value, ctx: nil, **| where(scopiform_arel(ctx)[name_sym].in(value.flatten)) },
      suffix: '_in',
      argument_type: [type]
    )

    auto_scope_add(
      name,
      proc { |*value, ctx: nil, **| where.not(scopiform_arel(ctx)[name_sym].in(value.flatten)) },
      suffix: '_not_in',
      argument_type: [type]
    )

    auto_scope_add(
      name,
      proc { |value, ctx: nil, **| where(scopiform_arel(ctx)[name_sym].lt(value)) },
      suffix: '_lt',
      argument_type: type
    )

    auto_scope_add(
      name,
      proc { |value, ctx: nil, **| where(scopiform_arel(ctx)[name_sym].lteq(value)) },
      suffix: '_lte',
      argument_type: type
    )

    auto_scope_add(
      name,
      proc { |value, ctx: nil, **| where(scopiform_arel(ctx)[name_sym].gt(value)) },
      suffix: '_gt',
      argument_type: type
    )

    auto_scope_add(
      name,
      proc { |value, ctx: nil, **| where(scopiform_arel(ctx)[name_sym].gteq(value)) },
      suffix: '_gte',
      argument_type: type
    )
  end
end