class Aggro::AggregateRef

Public: Reference to an Aggregate which may be local or remote.

Public Instance Methods

command(command) click to toggle source
# File lib/aggro/aggregate_ref.rb, line 4
def command(command)
  response = send_command(command)

  if response.is_a? Message::InvalidTarget
    create
    response = send_command(command)
  end

  fail 'Could not send command' unless response.is_a? Message::OK

  self
end
create() click to toggle source
# File lib/aggro/aggregate_ref.rb, line 17
def create
  response = client.post build_create_message

  fail 'Could not create aggregate' unless response.is_a? Message::OK

  self
end
query(query) click to toggle source
# File lib/aggro/aggregate_ref.rb, line 25
def query(query)
  response = send_query(query)

  if response.is_a? Message::InvalidTarget
    create
    response = send_query(query)
  end

  handle_query_response response
end

Private Instance Methods

build_command_message(command) click to toggle source
# File lib/aggro/aggregate_ref.rb, line 38
def build_command_message(command)
  Message::Command.new(Aggro.local_node.id, id, command.to_details)
end
build_create_message() click to toggle source
# File lib/aggro/aggregate_ref.rb, line 42
def build_create_message
  Message::CreateAggregate.new(Aggro.local_node.id, id, type)
end
build_query_message(query) click to toggle source
# File lib/aggro/aggregate_ref.rb, line 46
def build_query_message(query)
  Message::Query.new(Aggro.local_node.id, id, query.to_details)
end
client() click to toggle source
# File lib/aggro/aggregate_ref.rb, line 50
def client
  locator.primary_node.client
end
handle_query_response(message) click to toggle source
# File lib/aggro/aggregate_ref.rb, line 54
def handle_query_response(message)
  fail 'Could not execute query' unless message.is_a? Message::Result

  if message.result.is_a? Aggro::QueryError
    fail message.result.cause
  else
    message.result
  end
end
locator() click to toggle source
# File lib/aggro/aggregate_ref.rb, line 64
def locator
  @locator ||= Locator.new(id)
end
send_command(command) click to toggle source
# File lib/aggro/aggregate_ref.rb, line 68
def send_command(command)
  client.post build_command_message(command)
end
send_query(query) click to toggle source
# File lib/aggro/aggregate_ref.rb, line 72
def send_query(query)
  client.post build_query_message(query)
end