Sha256: c79275da4b7f321eb65da6f53c6fdc3f1d95512bf316990dfc749ac8a24941fb

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
        if target = OPERATORS[@operator.to_s]
          @operator = target
        else
          raise Card::Error::BadQuery, "Invalid Operator #{@operator}"
        end
      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.20.4 lib/card/query/value.rb
card-1.20.3 lib/card/query/value.rb
card-1.20.2 lib/card/query/value.rb
card-1.20.1 lib/card/query/value.rb
card-1.20.0 lib/card/query/value.rb
card-1.19.6 lib/card/query/value.rb
card-1.19.5 lib/card/query/value.rb
card-1.19.4 lib/card/query/value.rb
card-1.19.3 lib/card/query/value.rb
card-1.19.2 lib/card/query/value.rb
card-1.19.1 lib/card/query/value.rb
card-1.19.0 lib/card/query/value.rb