Module: Card::Query::CardQuery::Normalization
- Included in:
- Card::Query::CardQuery
- Defined in:
- lib/card/query/card_query/normalization.rb
Overview
normalize clause's keys and values.
Instance Method Summary collapse
- #clause_to_hash(clause) ⇒ Object
- #normalize_array_value(val) ⇒ Object
- #normalize_clause(clause) ⇒ Object
- #normalize_string_value(val) ⇒ Object
- #normalize_value(val) ⇒ Object
- #string_value_from_var(varname) ⇒ Object
Instance Method Details
#clause_to_hash(clause) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/card/query/card_query/normalization.rb', line 18 def clause_to_hash clause case clause when Hash then clause when String then { key: clause.to_name.key } when Integer then { id: clause } when Symbol then { id: Card::Codename.id(clause) } else raise Error::BadQuery, "Invalid clause: #{clause.inspect}" end end |
#normalize_array_value(val) ⇒ Object
37 38 39 |
# File 'lib/card/query/card_query/normalization.rb', line 37 def normalize_array_value val val.map { |v| normalize_value v } end |
#normalize_clause(clause) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/card/query/card_query/normalization.rb', line 6 def normalize_clause clause clause = clause_to_hash clause clause.symbolize_keys! clause.each do |key, val| next if key.to_sym == :return # when return values are relative, they are relative to the name of the # card returned, not the context card clause[key] = normalize_value val end clause end |
#normalize_string_value(val) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/card/query/card_query/normalization.rb', line 41 def normalize_string_value val case val.to_s when /^\$(\w+)$/ # replace from @vars when value starts with dollar sign string_value_from_var Regexp.last_match[1] when /\b_/ # absolutize based on @context when there are words beginning with "_" val.to_name.absolute(context) else val end end |
#normalize_value(val) ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/card/query/card_query/normalization.rb', line 28 def normalize_value val case val when Integer, Float, Hash, Symbol then val when String then normalize_string_value val when Array then normalize_array_value val else raise Error::BadQuery, "Invalid value type: #{val.class} (#{val.inspect})" end end |
#string_value_from_var(varname) ⇒ Object
54 55 56 |
# File 'lib/card/query/card_query/normalization.rb', line 54 def string_value_from_var varname @vars[varname.to_sym].to_s.strip end |