Sha256: 1e7bb891798e818dc7d80c85632bb49e6b7302d79b0086d72e64b463b18686c3

Contents?: true

Size: 1.79 KB

Versions: 24

Compression:

Stored size: 1.79 KB

Contents

class Card
  module Query
    class Value
      class << self
        def match_prefices
          @match_prefices ||= %w[= ~]
        end

        def match_term_and_prefix_re
          @match_term_and_prefix_re ||=
            /^(?<prefix>[#{Regexp.escape match_prefices.join}]*)\s*(?<term>.*)$/
        end
      end

      # handling for match operator
      module MatchValue
        def match_sql field
          exact_name_match(field) ||
            "#{match_field field} #{connection.match match_value}"
        end

        def exact_name_match field
          return false unless match_prefix == "=" && field.to_sym == :name

          "#{field_sql field} = #{quote match_term.to_name.key}"
        end

        def match_field field
          fld = field.to_sym == :name ? "name" : standardize_field(field)
          "#{@query.table_alias}.#{fld}"
        end

        def match_value
          escape_regexp_characters unless match_prefix == "~~"
          quote match_term
        end

        def match_term
          @match_term || (parse_match_term_and_prefix && @match_term)
        end

        def match_prefix
          @match_prefix || (parse_match_term_and_prefix && @match_prefix)
        end

        # if search val is prefixed with "~~", it is a MYSQL regexp
        # (and will be passed through)
        #
        # Otherwise, all non-alphanumeric characters are escaped.
        #
        # A "~" prefix is ignored.

        def parse_match_term_and_prefix
          raw_term = Array.wrap(@value).join(" ")
          matches = raw_term.match self.class.match_term_and_prefix_re
          @match_prefix = matches[:prefix] || ""
          @match_term = matches[:term] || ""
        end

        def escape_regexp_characters
          match_term.gsub!(/(\W)/, '\\\\\1')
        end
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
card-1.108.1 lib/card/query/value/match_value.rb
card-1.108.0 lib/card/query/value/match_value.rb
card-1.107.0 lib/card/query/value/match_value.rb
card-1.106.0 lib/card/query/value/match_value.rb
card-1.105.6 lib/card/query/value/match_value.rb
card-1.105.5 lib/card/query/value/match_value.rb
card-1.105.4 lib/card/query/value/match_value.rb
card-1.105.3 lib/card/query/value/match_value.rb
card-1.105.2.pre1 lib/card/query/value/match_value.rb
card-1.105.2 lib/card/query/value/match_value.rb
card-1.105.1 lib/card/query/value/match_value.rb
card-1.105.0 lib/card/query/value/match_value.rb
card-1.104.2 lib/card/query/value/match_value.rb
card-1.104.1 lib/card/query/value/match_value.rb
card-1.104.0 lib/card/query/value/match_value.rb
card-1.103.4 lib/card/query/value/match_value.rb
card-1.103.3 lib/card/query/value/match_value.rb
card-1.103.2 lib/card/query/value/match_value.rb
card-1.103.1 lib/card/query/value/match_value.rb
card-1.103.0 lib/card/query/value/match_value.rb