Sha256: 2fa228f1722f25b8f181d29f5fc92c651829dcda20f900273a2790979481c415

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

# frozen_string_literal: true

module QueryFilter
  module 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.present? && value_to.present?
          ["#{column} BETWEEN ? AND ?", value_from.to_f, value_to.to_f]
        elsif value_from.present?
          ["#{column} >= ?", value_from.to_f]
        elsif value_to.present?
          ["#{column} <= ?", value_to.to_f]
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
query_filter-0.2.3 lib/query_filter/utils/scope_range.rb