Method: Arel::Visitors::PostgreSQL#visit_ArelExtensions_Nodes_Json

Defined in:
lib/arel_extensions/visitors/postgresql.rb

#visit_ArelExtensions_Nodes_Json(o, collector) ⇒ Object



519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
# File 'lib/arel_extensions/visitors/postgresql.rb', line 519

def visit_ArelExtensions_Nodes_Json o, collector
  case o.dict
  when Array
    collector << 'to_jsonb(array['
    o.dict.each.with_index do |v, i|
      if i != 0
        collector << Arel::Visitors::MySQL::COMMA
      end
      collector = visit v, collector
    end
    collector << '])'
  when Hash
    collector << 'jsonb_build_object('
    o.dict.each.with_index do |(k, v), i|
      if i != 0
        collector << Arel::Visitors::MySQL::COMMA
      end
      collector = visit k, collector
      collector << Arel::Visitors::MySQL::COMMA
      collector = visit v, collector
    end
    collector << ')'
  when String, Numeric, TrueClass, FalseClass
    collector = visit Arel.quoted("#{o.dict}"), collector
    collector << '::jsonb'
  when NilClass
    collector << %Q['null'::jsonb]
  else
    collector = visit o.dict, collector
    collector << '::jsonb'
  end
  collector
end