Sha256: 59261737df13b697c3e5c996cfb0e5daa9b8ac75e4d4f5455227139330e16459

Contents?: true

Size: 1.82 KB

Versions: 3

Compression:

Stored size: 1.82 KB

Contents

module MassiveRecord
  module ORM
    module Persistence
      module Operations
        module Embedded
          module OperationHelpers
            def embedded_in_proxies
              record.relation_proxies.select { |proxy| proxy.metadata.embedded_in? }
            end
            
            def embedded_in_proxy_targets
              embedded_in_proxies.collect(&:load_proxy_target).compact
            end

            def raise_error_if_embedded_in_proxy_targets_are_missing
              relations_not_assigned = []
              relations_assigned = []

              embedded_in_proxies.each do |proxy|
                if proxy.load_proxy_target.nil? 
                  relations_not_assigned << proxy.metadata.name
                else
                  relations_assigned << proxy.metadata.name
                end
              end

              if relations_assigned.empty?
                raise MassiveRecord::ORM::NotAssignedToEmbeddedCollection.new(record, relations_not_assigned)
              end
            end

            def update_embedded(relation_proxy, value)
              row = row_for_record(relation_proxy)
              row.values = {
                inverse_proxy_for(relation_proxy).metadata.store_in => {
                  record.database_id => value
                }
              }
              row.save
            end






            def inverse_proxy_for(proxy)
              proxy.load_proxy_target.send(:relation_proxy, proxy.metadata.inverse_of)
            end


            def row_for_record(record)
              raise IdMissing.new("You must set an ID before save.") if record.id.blank?

              MassiveRecord::Wrapper::Row.new({
                :id => record.id,
                :table => record.class.table
              })
            end

          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
massive_record-0.2.2 lib/massive_record/orm/persistence/operations/embedded/operation_helpers.rb
massive_record-0.2.2.rc2 lib/massive_record/orm/persistence/operations/embedded/operation_helpers.rb
massive_record-0.2.2.rc1 lib/massive_record/orm/persistence/operations/embedded/operation_helpers.rb