Class: Card::Query::Value
- Includes:
- Clause
- Defined in:
- lib/card/query/value.rb
Instance Attribute Summary collapse
-
#operator ⇒ Object
readonly
Returns the value of attribute operator.
-
#query ⇒ Object
readonly
Returns the value of attribute query.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Instance Method Summary collapse
- #canonicalize_operator ⇒ Object
-
#initialize(rawvalue, query) ⇒ Value
constructor
A new instance of Value.
- #parse_value(rawvalue) ⇒ Object
- #sqlize(v) ⇒ Object
- #to_sql(field) ⇒ Object
Methods included from Clause
#match_prep, #quote, #safe_sql
Constructor Details
#initialize(rawvalue, query) ⇒ Value
Returns a new instance of Value.
9 10 11 12 13 |
# File 'lib/card/query/value.rb', line 9 def initialize rawvalue, query @query = query @operator, @value = parse_value rawvalue canonicalize_operator end |
Instance Attribute Details
#operator ⇒ Object (readonly)
Returns the value of attribute operator.
7 8 9 |
# File 'lib/card/query/value.rb', line 7 def operator @operator end |
#query ⇒ Object (readonly)
Returns the value of attribute query.
7 8 9 |
# File 'lib/card/query/value.rb', line 7 def query @query end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
7 8 9 |
# File 'lib/card/query/value.rb', line 7 def value @value end |
Instance Method Details
#canonicalize_operator ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/card/query/value.rb', line 23 def canonicalize_operator if target = OPERATORS[@operator.to_s] @operator = target else fail BadQuery, "Invalid Operator #{@operator}" end end |
#parse_value(rawvalue) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/card/query/value.rb', line 15 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 |
#sqlize(v) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/card/query/value.rb', line 32 def sqlize v case v when Query; v.to_sql when Array; "(" + v.flatten.collect {|x| sqlize(x)}.join(',') + ")" else quote(v.to_s) end end |
#to_sql(field) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/card/query/value.rb', line 40 def to_sql field op,v = @operator, @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 |