module Tabulatr::JsonBuilder
Public Class Methods
build(data, klass, requested_attributes, id="id")
click to toggle source
# File lib/tabulatr/json_builder.rb, line 25 def self.build(data, klass, requested_attributes, id="id") if klass && ActiveModel.const_defined?(:ArraySerializer) ActiveModel::ArraySerializer.new(data, { root: "data", meta: data.__pagination, each_serializer: klass }).as_json else attrs = build_hash_from requested_attributes, id result = [] data.each do |f| tmp = {} attrs.each do |at| insert_attribute_in_hash(at, f, tmp) end tmp['_row_config'] = f['_row_config'] result << tmp end { data: result, meta: data.__pagination } end end
Private Class Methods
build_hash_from(requested_attributes, id)
click to toggle source
# File lib/tabulatr/json_builder.rb, line 48 def self.build_hash_from requested_attributes, id attrs = [] id_included = false requested_attributes ||= '' requested_attributes.split(',').each do |par| if par.include? ':' relation, action = par.split(':') attrs << {action: action, relation: relation} else id_included = true if par == id attrs << {action: par} end end attrs << {action: id} unless id_included attrs end
check_if_attribute_is_in_hash(hash, key)
click to toggle source
# File lib/tabulatr/json_builder.rb, line 81 def self.check_if_attribute_is_in_hash hash, key if !hash.has_key?(key) raise Tabulatr::RequestDataNotIncludedError.raise_error(key, hash) end end
insert_attribute_in_hash(at, f, r={})
click to toggle source
# File lib/tabulatr/json_builder.rb, line 65 def self.insert_attribute_in_hash at, f, r={} action = at[:action].to_sym relation = at[:relation].try(:to_sym) if at.has_key? :relation check_if_attribute_is_in_hash(f, relation) check_if_attribute_is_in_hash(f[relation], action) if action != :id set_value_at_key(r, f[relation][action], "#{at[:relation]}:#{at[:action]}") else check_if_attribute_is_in_hash(f, action) if [:checkbox, :id].exclude?(action) set_value_at_key(r, f[action], at[:action]) end r end
set_value_at_key(hash, value, key)
click to toggle source
# File lib/tabulatr/json_builder.rb, line 87 def self.set_value_at_key hash, value, key begin hash[key] = value rescue TypeError, NoMethodError => e raise Tabulatr::RequestDataNotIncludedError.raise_error(key, value) end end