module Scripper::Sequel::ModelStripper
Public Class Methods
strip(object, with_associations: nil, with_attributes: nil)
click to toggle source
# File lib/scripper/sequel/model_stripper.rb, line 7 def strip(object, with_associations: nil, with_attributes: nil) association_fields = build_association_fields(object, with_associations) attribute_fields = build_attribute_fields(object, with_attributes) attrs = { **convert_values(object.values), **association_fields, **attribute_fields, } struct_klass = Struct.new(*attrs.keys) struct_klass.new(*attrs.values) end
Private Class Methods
build_association_fields(object, associations)
click to toggle source
# File lib/scripper/sequel/model_stripper.rb, line 23 def build_association_fields(object, associations) return {} if associations.nil? if associations.is_a?(Array) build_association_fields_from_array(object, associations) else # consider associations a hash build_association_fields_from_hash(object, associations) end end
build_association_fields_from_array(object, associations)
click to toggle source
# File lib/scripper/sequel/model_stripper.rb, line 43 def build_association_fields_from_array(object, associations) associations.reduce({}) do |acc, association| association_value = object.public_send(association) stripped_association_value = if association_value.is_a?(Array) association_value.map { |obj| strip(obj) } else strip(association_value) end acc.merge(association.to_sym => stripped_association_value) end end
build_association_fields_from_hash(object, associations)
click to toggle source
# File lib/scripper/sequel/model_stripper.rb, line 57 def build_association_fields_from_hash(object, associations) associations.entries.reduce({}) do |acc, (association, condition)| association_ds = object.class.association_reflection(association).associated_dataset acc.merge( association.to_sym => condition.call(association_ds).all.map { |obj| strip(obj) }, ) end end
build_attribute_fields(object, attributes)
click to toggle source
# File lib/scripper/sequel/model_stripper.rb, line 33 def build_attribute_fields(object, attributes) return {} if attributes.nil? convert_values(attributes) end
convert_values(hsh)
click to toggle source
# File lib/scripper/sequel/model_stripper.rb, line 39 def convert_values(hsh) hsh.transform_values { |v| ValueConverter.convert_value(v) } end