Sha256: 72d0f88bbefdea34eeed4be9b7ce7356a9e8106c76a54fe950698210f1aec099

Contents?: true

Size: 1.57 KB

Versions: 12

Compression:

Stored size: 1.57 KB

Contents

class Card
  class Query
    class Value
      include Clause

      attr_reader :query, :operator, :value

      def initialize rawvalue, query
        @query = query
        @operator, @value = parse_value rawvalue
        canonicalize_operator
      end

      def parse_value rawvalue
        case rawvalue
        when String, Integer then ["=", rawvalue]
        when Array           then [rawvalue[0], rawvalue[1..-1]]
        else raise("Invalid Condition Clause #{rawvalue}.inspect}")
        end
      end

      def canonicalize_operator
        unless (target = OPERATORS[@operator.to_s])
          raise Card::Error::BadQuery, "Invalid Operator #{@operator}"
        end
        @operator = target
      end

      def sqlize v
        case v
        when Query then  v.to_sql
        when Array then  "(" + v.flatten.map { |x| sqlize(x) }.join(",") + ")"
        else quote(v.to_s)
        end
      end

      def to_sql field
        op = @operator
        v = @value
        table = @query.table_alias

        field, v = case field.to_s
                   when "name"
                     ["#{table}.key", [v].flatten.map(&:to_name).map(&:key)]
                   when "content"
                     ["#{table}.db_content", v]
                   else
                     ["#{table}.#{safe_sql field}", v]
                   end

        v = v[0] if Array === v && v.length == 1 && op != "in"
        if op == "~"
          cxn, v = match_prep(v)
          %(#{field} #{cxn.match(sqlize(v))})
        else
          "#{field} #{op} #{sqlize(v)}"
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
card-1.93.6 lib/card/query/value.rb
card-1.93.5 lib/card/query/value.rb
card-1.93.4 lib/card/query/value.rb
card-1.93.3 lib/card/query/value.rb
card-1.93.2 lib/card/query/value.rb
card-1.93.1 lib/card/query/value.rb
card-1.93.0 lib/card/query/value.rb
card-1.92.2 lib/card/query/value.rb
card-1.92.1 lib/card/query/value.rb
card-1.92 lib/card/query/value.rb
card-1.91 lib/card/query/value.rb
card-1.21.0 lib/card/query/value.rb