class ActiveAdmin::Exportable::Exporter::RootStruct
Public Class Methods
new(node:, remove_ids:, includes: [])
click to toggle source
# File lib/active_admin/exportable/exporter.rb, line 28 def initialize(node:, remove_ids:, includes: []) @node = node @includes = includes @remove_ids = remove_ids end
Public Instance Methods
data()
click to toggle source
# File lib/active_admin/exportable/exporter.rb, line 34 def data if @node.respond_to?(:size) @node.map do |n| generate_data(node: n, includes: @includes) end else generate_data(node: @node, includes: @includes) end end
Private Instance Methods
associations_data(node:, includes:)
click to toggle source
# File lib/active_admin/exportable/exporter.rb, line 66 def associations_data(node:, includes:) association_data = generate_association_data(node: node, includes: includes) return [association_data.data] if association_data.instance_of?(AssociationStruct) association_data.flatten.map(&:data) end
generate_association_data(node:, includes:)
click to toggle source
# File lib/active_admin/exportable/exporter.rb, line 73 def generate_association_data(node:, includes:) return [] if includes.nil? || includes.empty? case includes when Hash generate_association_data_for_hash(node: node, includes: includes) when Array generate_association_data_for_array(node: node, includes: includes) when Symbol generate_association_data_for_symbol(node: node, includes: includes) end end
generate_association_data_for_array(node:, includes:)
click to toggle source
# File lib/active_admin/exportable/exporter.rb, line 93 def generate_association_data_for_array(node:, includes:) includes.map do |association_name| # It needs to "pass" again because we don't know the element's kinds. generate_association_data(node: node, includes: association_name) end end
generate_association_data_for_hash(node:, includes:)
click to toggle source
# File lib/active_admin/exportable/exporter.rb, line 86 def generate_association_data_for_hash(node:, includes:) includes.map do |association_name, inner_includes| AssociationStruct.new(record: node, association_name: association_name, remove_ids: @remove_ids, next_level_includes: inner_includes) end end
generate_association_data_for_symbol(node:, includes:)
click to toggle source
# File lib/active_admin/exportable/exporter.rb, line 100 def generate_association_data_for_symbol(node:, includes:) if node.respond_to?(:size) node.map do |inner_node| AssociationStruct.new(record: inner_node, association_name: includes, remove_ids: @remove_ids) end else AssociationStruct.new(record: node, association_name: includes, remove_ids: @remove_ids) end end
generate_data(node:, includes:)
click to toggle source
# File lib/active_admin/exportable/exporter.rb, line 46 def generate_data(node:, includes:) attributes = node.attributes a_data = associations_data(node: node, includes: includes) if @remove_ids attributes.delete('id') a_data.map do |a| [a[:foreign_type], a[:foreign_key]] if a[:kind] == 'belongs_to' end.flatten.compact.each do |key| attributes.delete(key) end end { class_name: node.class.name, attributes: attributes, associations: a_data } end