class ArelExtensions::Nodes::JsonNode

Constants

RETURN_TYPE

Attributes

dict[RW]

Public Instance Methods

convert_to_json_node(n) click to toggle source
# File lib/arel_extensions/nodes/json.rb, line 29
def convert_to_json_node(n)
  case n
  when JsonNode
    n.dict
  when Array
    n.map{|e|
       (e.is_a?(Array) || e.is_a?(Hash)) ? Json.new(e) : convert_to_json_node(e)
    }
  when Hash
    n.reduce({}){|acc,v|
      acc[convert_to_json_node(v[0])] = (v[1].is_a?(Array) || v[1].is_a?(Hash)) ? Json.new(v[1]) : convert_to_json_node(v[1])
      acc
    }
  when String, Numeric, TrueClass, FalseClass
    convert_to_node(n)
  when Date
    convert_to_node(n.strftime("%Y-%m-%d"))
  when DateTime, Time
    convert_to_node(n.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
  when NilClass
    Arel.sql('null')
  else
    convert_to_node(n)
  end
end
get(key) click to toggle source
# File lib/arel_extensions/nodes/json.rb, line 13
def get key
  JsonGet.new(self,key)
end
group(as_array = true, orders = nil) click to toggle source
# File lib/arel_extensions/nodes/json.rb, line 21
def group as_array = true, orders = nil
  JsonGroup.new(self,as_array, orders)
end
hash() click to toggle source
# File lib/arel_extensions/nodes/json.rb, line 25
def hash
  [@dict].hash
end
merge(*expr) click to toggle source
# File lib/arel_extensions/nodes/json.rb, line 8
def merge *expr
  args = [self] + expr.map{|e| Json.new(e)}
  JsonMerge.new(args)
end
set(key, value) click to toggle source
# File lib/arel_extensions/nodes/json.rb, line 17
def set key, value
  JsonSet.new(self,key,value)
end
type_of_node(v) click to toggle source
# File lib/arel_extensions/nodes/json.rb, line 55
def type_of_node(v)
  if v.is_a?(Arel::Attributes::Attribute)
    self.type_of_attribute(v)
  elsif v.respond_to?(:return_type)
    v.return_type
  elsif v.nil?
    :nil
  else
    :string
  end
end