class Rfm::Resultset

Public Instance Methods

map() { |record| ... } click to toggle source

Does custom processing during each record-to-resource translation done in DataMapper::Model#load Doing this here means we don't have to mess with DataMapper::Model#load.

Calls superclass method
# File lib/dm-filemaker-adapter/core_patches.rb, line 160
def map
  super do |record|
    resource = yield(record)
    #puts "DM INPUT RECORD: #{record.class} #{record.instance_variable_get(:@record_id)}"

                      if resource.kind_of?(DataMapper::Resource)
                              #puts "MODEL#LOAD custom processing RECORD #{record.class} RESOURCE #{resource.class}"
                              #puts record.inspect
      # For Testing:
      resource.instance_variable_set(:@record, record)
      # WBR - Loads portal data into DM model attached to this resource.
      portals = record.instance_variable_get(:@portals)
      #puts "MODEL#LOAD record: #{record.class} portals: #{portals.keys rescue 'no portals'}"
      #if record.respond_to?(:portals) && record.portals.kind_of?(Hash) && record.portals.any?
      model = resource.class
      return unless model.kind_of?(DataMapper::Model)
      #puts "MODEL#LOAD resource class: #{model}"
      if portals.kind_of?(Hash) && portals.any?
        begin
                #puts record.portals.to_yaml
                portal_keys = portals.keys
                #puts "PORTALS: #{portal_keys}"
                portal_keys.each do |portal_key|
                    #relat = model.relationships.to_a.find{|r| storage_name = r.child_model.storage_names[:default]; portal_key.to_s == storage_name }
                    relat = model.relationships.to_a.find{|r| storage_name = r.child_model.storage_name; portal_key.to_s == storage_name }
                    if relat
                           #puts "BUILDING RELATIONSHIP FROM PORTAL: #{relat.name} #{relat.child_model.name}"
                           resources_from_portal = relat.child_model.load(record.instance_variable_get(:@portals)[portal_key], relat.child_model.query)
                           resource.instance_variable_set(relat.instance_variable_name, resources_from_portal)
                    end
                end
        rescue
          #puts "ERROR LOADING PORTALS #{$!}"
        end
      end
                              resource.instance_variable_set(:@_record_id, record.instance_variable_get(:@record_id))
                              resource.instance_variable_set(:@_mod_id, record.instance_variable_get(:@mod_id))
                      end

                      resource
  end
end