Sha256: 322bd6270b1075b4c182f1611bb4b1159fc6ffe24c145ebee5730f28e69a0620

Contents?: true

Size: 857 Bytes

Versions: 3

Compression:

Stored size: 857 Bytes

Contents

module QueryFilter::Utils
  # Usage:
  #
  #   range = Utils::ScopeRange.new(:orders, { orders_from: 1, orders_to: 44 })
  #   range.query('orders_count')
  #
  class ScopeRange
    def initialize(name, options = {})
      @name = name
      @options = options
    end

    def name_from
      @name_from ||= "#{@name}_from".to_sym
    end

    def name_to
      @name_to ||= "#{@name}_to".to_sym
    end

    def value_from
      @options[name_from]
    end

    def value_to
      @options[name_to]
    end

    def valid?
      @options && (value_from.present? || value_to.present?)
    end

    def query(column)
      if value_from && value_to
        ["#{column} BETWEEN ? AND ?", value_from, value_to]
      elsif value_from
        ["#{column} >= ?", value_from]
      elsif value_to
        ["#{column} <= ?", value_to]
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
query_filter-0.1.2 lib/query_filter/utils/scope_range.rb
query_filter-0.1.1 lib/query_filter/utils/scope_range.rb
query_filter-0.1.0 lib/query_filter/utils/scope_range.rb