Class: ArelExtensions::Nodes::JsonNode

Inherits:
Function show all
Defined in:
lib/arel_extensions/nodes/json.rb

Direct Known Subclasses

Json, JsonGet, JsonGroup, JsonMerge, JsonSet

Constant Summary collapse

RETURN_TYPE =
:json

Constants inherited from Function

Function::MBSTRING

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Function

#!=, #==, #as, #convert_to_date_node, #convert_to_datetime_node, #convert_to_node, #convert_to_number, #convert_to_string_node, #expr, #left, #return_type, #right, #type_of_attribute

Methods included from Predications

#cast, #convert_to_node, #imatches, #in, #matches, #not_in, #when

Methods inherited from Arel::Nodes::Function

#as

Methods included from ArelExtensions::NullFunctions

#coalesce, #coalesce_blank, #if_present, #is_not_null, #is_null

Methods included from BooleanFunctions

#and, #or, #then, #⋀, #⋁

Methods included from StringFunctions

#&, #[], #ai_collate, #ai_imatches, #ai_matches, #blank, #byte_length, #char_length, #ci_collate, #collate, #concat, #downcase, #edit_distance, #group_concat, #idoes_not_match, #idoes_not_match_all, #idoes_not_match_any, #imatches, #imatches_all, #imatches_any, #length, #levenshtein_distance, #locate, #ltrim, #md5, #not_blank, #regexp_replace, #repeat, #replace, #rtrim, #smatches, #soundex, #substring, #trim, #upcase

Methods included from MathFunctions

#*, #/, #abs, #ceil, #floor, #format_number, #log10, #pow, #power, #round, #std, #sum, #variance

Methods included from DateDuration

#day, #format, #format_date, #hour, #minute, #month, #second, #wday, #week, #year

Methods included from Comparators

#!~, #<, #<=, #=~, #>, #>=

Methods included from Math

#+, #-

Methods included from Aliases

#xas

Instance Attribute Details

#dictObject

Returns the value of attribute dict.



6
7
8
# File 'lib/arel_extensions/nodes/json.rb', line 6

def dict
  @dict
end

Instance Method Details

#convert_to_json_node(n) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/arel_extensions/nodes/json.rb', line 33

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.null
  when Arel::SelectManager
    Arel.grouping(n)
  else
    convert_to_node(n)
  end
end

#get(key) ⇒ Object



13
14
15
# File 'lib/arel_extensions/nodes/json.rb', line 13

def get key
  JsonGet.new(self, key)
end

#group(as_array = true, orders = nil, distinct: false) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/arel_extensions/nodes/json.rb', line 21

def group as_array = true, orders = nil, distinct: false
  if distinct
    JsonGroup.new(Arel::Nodes::NamedFunction.new('DISTINCT', [self]), as_array, orders)
  else
    JsonGroup.new(self, as_array, orders)
  end
end

#hashObject



29
30
31
# File 'lib/arel_extensions/nodes/json.rb', line 29

def hash
  [@dict].hash
end

#merge(*expr) ⇒ Object



8
9
10
11
# 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) ⇒ Object



17
18
19
# File 'lib/arel_extensions/nodes/json.rb', line 17

def set key, value
  JsonSet.new(self, key, value)
end

#type_of_node(v) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
# File 'lib/arel_extensions/nodes/json.rb', line 61

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