Sha256: ac1acd83edea63080b7b0bead0283f403bac19f24c0758a783fac553f6daca58

Contents?: true

Size: 884 Bytes

Versions: 10

Compression:

Stored size: 884 Bytes

Contents

class Predicate
  module Match
    include Expr

    DEFAULT_OPTIONS = {
      case_sensitive: true
    }

    def priority
      80
    end

    def left
      self[1]
    end

    def right
      self[2]
    end

    def options
      @options ||= DEFAULT_OPTIONS.merge(self[3] || {})
    end

    def case_sentitive?
      options[:case_sensitive]
    end

    def free_variables
      @free_variables ||= left.free_variables | right.free_variables
    end

    def dyadic_priority
      800
    end

    def evaluate(tuple)
      l = left.evaluate(tuple)
      r = right.evaluate(tuple)
      if l.nil? or r.nil?
        nil
      elsif l.is_a?(Regexp)
        l =~ r.to_s
      elsif r.is_a?(Regexp)
        r =~ l.to_s
      elsif options[:case_sensitive]
        l.to_s.include?(r.to_s)
      else
        l.to_s.downcase.include?(r.to_s.downcase)
      end
    end

  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
predicate-2.4.0 lib/predicate/nodes/match.rb
predicate-2.3.3 lib/predicate/nodes/match.rb
predicate-2.3.2 lib/predicate/nodes/match.rb
predicate-2.3.1 lib/predicate/nodes/match.rb
predicate-2.3.0 lib/predicate/nodes/match.rb
predicate-2.2.1 lib/predicate/nodes/match.rb
predicate-2.2.0 lib/predicate/nodes/match.rb
predicate-2.1.0 lib/predicate/nodes/match.rb
predicate-2.0.1 lib/predicate/nodes/match.rb
predicate-2.0.0 lib/predicate/nodes/match.rb