class PGJsonBuilder

Attributes

_alias[RW]
attrs[RW]
relation[RW]

Public Class Methods

new(relation, opts={}) click to toggle source
# File lib/pg_flash_json/pg_json_builder.rb, line 5
def initialize(relation, opts={})
  @relation = relation
  raise ArgumentError unless @relation.is_a?(ActiveRecord::Relation) || @relation.is_a?(ActiveRecord::AssociationRelation)
  @_alias = SqlAlias.new.sql_alias
  @attrs = opts.fetch(:attrs, @relation.column_names)
  SqlAlias.clear
  self
end

Public Instance Methods

attr_pairs_string() click to toggle source
# File lib/pg_flash_json/pg_json_builder.rb, line 14
def attr_pairs_string
  aps = ""
   @attrs.each do |a|
    a = a.to_s
    value = "#{@_alias}.#{a}"
    aps << "'#{a}', #{value},"
  end
  aps[0..-2]
end
build_json_object_query(from_sub=false, relation_aps=attr_pairs_string) click to toggle source
# File lib/pg_flash_json/pg_json_builder.rb, line 28
def build_json_object_query(from_sub=false, relation_aps=attr_pairs_string)
  first_char = from_sub ? "(" : ""
  "#{first_char}SELECT json_agg( json_build_object(#{relation_aps}))"
end
json() click to toggle source
# File lib/pg_flash_json/pg_json_builder.rb, line 37
def json
  @relation.connection.execute(to_sql).first["json"]
end
query_end() click to toggle source
# File lib/pg_flash_json/pg_json_builder.rb, line 33
def query_end
  " as json FROM(#{@relation.to_sql})#{@_alias}"
end
to_sql() click to toggle source
# File lib/pg_flash_json/pg_json_builder.rb, line 24
def to_sql
  build_json_object_query + query_end
end