class DataContract::Scatter

Public Class Methods

!(contract_list, receiver, contract_module) click to toggle source
# File lib/data_contract/scatter.rb, line 7
def self.!(contract_list, receiver, contract_module)
  assignable_contracts = contract_list.assignable(receiver)
  instance = new contract_list, contract_list.obj, receiver, assignable_contracts, contract_module
  instance.!
end

Public Instance Methods

!() click to toggle source
# File lib/data_contract/scatter.rb, line 13
def !
  if assignable_contracts.empty?
    raise ContractError, "#{receiver.class.name} cannot be assigned from #{source.class.name} without a shared or compatible contract"
  end

  if contract_module
    @assignable_contracts = specific_contract
  end

  assignable_contracts.each do |contract|
    contract.scatter receiver
  end

  receiver
end
specific_contract() click to toggle source
# File lib/data_contract/scatter.rb, line 29
def specific_contract
  contract = contract_list[contract_module]

  unless assignable_contracts.include? contract
    raise ContractError, "#{receiver.class.name} cannot be assigned from #{contract_module.name} without a shared or compatible contract"
  end

  [contract]
end