Sha256: b562f3d8e6e64068fa3b99a4b311831896ae626a576fa1678f4311d7bdc131b9

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

module RecordFilter
  module DSL
    class Restriction

      attr_reader :column, :negated, :operator, :value

      DEFAULT_VALUE = Object.new

      def initialize(column, value=DEFAULT_VALUE)
        @column, @negated, @operator = column, false, nil
        take_value(value)
      end

      def not(value=DEFAULT_VALUE)
        @negated = true
        take_value(value)
        self
      end

      [:equal_to, :is_null, :less_than, :less_than_or_equal_to, :greater_than, :greater_than_or_equal_to, :in, :like].each do |operator|
        define_method(operator) do |*args|
          @value = args[0] 
          @operator = operator
          self
        end
      end

      # Between can take either a tuple of [start, finish], a range, or two values.
      def between(start, finish=nil)
        @operator = :between
        if !finish.nil?
          @value = [start, finish]
        else
          @value = start
        end
      end

      alias_method :gt, :greater_than
      alias_method :gte, :greater_than_or_equal_to
      alias_method :lt, :less_than
      alias_method :lte, :less_than_or_equal_to
      alias_method :null, :is_null
      alias_method :nil, :is_null

      protected

      def take_value(value)
        if value.nil?
          is_null
        elsif value != DEFAULT_VALUE
          equal_to(value)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
aub-record_filter-0.1.4 lib/record_filter/dsl/restriction.rb
aub-record_filter-0.2.0 lib/record_filter/dsl/restriction.rb
outoftime-record_filter-0.1.4 lib/record_filter/dsl/restriction.rb
outoftime-record_filter-0.2.0 lib/record_filter/dsl/restriction.rb