class Patriarch::DAOServices::TripartiteRelationshipBuilderService

Patriarch::Transaction instances are composed of transaction steps that each represent a behaviour being triggered. RelationshipBuilderServices allow Services managing transaction flow to build transaction step correctly. This deals with transaction step needed to represent tripartite behaviours

Public Instance Methods

create(transaction_item) click to toggle source

@param [Patriarch::Transaction] transaction_item Fills current transaction step of the Patriarch::Transaction argument passed with data needed later to execute transaction. This deals with “DO” behaviour steps

# File lib/patriarch/dao_services/tripartite_relationship_builder_service.rb, line 13
def create(transaction_item)
  t = Time.now.to_f
  dao_tab = Patriarch::DAOServices::RetrieverService.instance.call(transaction_item)

  actor_dao = dao_tab[:actor]
  target_dao = dao_tab[:target]
  medium_dao = dao_tab[:medium]

  protagonist_ids = [transaction_item.actor_id,transaction_item.target_id,transaction_item.medium_id]

  l    = build_struct_for_create(actor_dao,protagonist_ids,t)
  ll   = build_struct_for_create(target_dao,protagonist_ids,t)
  lll  = build_struct_for_create(medium_dao,protagonist_ids,t)

  # care about that, should be encapsulated into a beautiful add_to_queue method
  transaction_item.add_to_queue l
  transaction_item.add_to_queue ll
  transaction_item.add_to_queue lll
end
destroy(transaction_item) click to toggle source

@param [Patriarch::Transaction] transaction_item Fills current transaction step of the Patriarch::Transaction argument passed with data needed later to execute transaction. This deals with “UNDO” behaviour steps

# File lib/patriarch/dao_services/tripartite_relationship_builder_service.rb, line 36
def destroy(transaction_item)
  dao_tab = Patriarch::DAOServices::RetrieverService.instance.call(transaction_item)

  actor_dao = dao_tab[:actor]
  target_dao = dao_tab[:target]
  medium_dao = dao_tab[:medium]

  protagonist_ids = [transaction_item.actor_id,transaction_item.target_id,transaction_item.medium_id]

  #l   = lambda { actor_dao.delete protagonist_ids }
  #ll  = lambda { target_dao.delete protagonist_ids }
  #lll = lambda { medium_dao.delete protagonist_ids }

  l   = Patriarch::RedisInstruction.new(actor_dao ,:delete,[protagonist_ids])
  ll  = Patriarch::RedisInstruction.new(target_dao,:delete,[protagonist_ids])
  lll = Patriarch::RedisInstruction.new(medium_dao,:delete,[protagonist_ids])
  
  transaction_item.add_to_queue l
  transaction_item.add_to_queue ll
  transaction_item.add_to_queue lll
end

Protected Instance Methods

build_struct_for_create(dao,ids,time) click to toggle source

@param [Redis::Objects] dao @param [Array] ids @param [Time] time Returns Patriarch::RedisInstruction (structs) objects that store parameters to execute a redis operation

# File lib/patriarch/dao_services/tripartite_relationship_builder_service.rb, line 63
def build_struct_for_create(dao,ids,time)
  if dao.is_a? Redis::SortedSet
    return Patriarch::RedisInstruction.new(dao,:add,[ids,time])
  else                                          
    return Patriarch::RedisInstruction.new(dao,:add,[ids])      
  end
end