class SgtnClient::SingleOperation

Public Class Methods

new(*conditions, &block) click to toggle source
# File lib/sgtn-client/common/single_operation.rb, line 6
def initialize(*conditions, &block)
  raise 'no way to create a new obj' unless block

  @lock = Mutex.new
  @hash = {}

  @conditions = conditions
  @creator = block
end

Public Instance Methods

operate(id, *args) click to toggle source

return new created object

# File lib/sgtn-client/common/single_operation.rb, line 17
def operate(id, *args)
  @lock.synchronize do
    obj = @hash[id]
    @conditions.each do |con|
      return obj unless con.call(id, obj, *args)
    end
    @hash[id] = @creator.call(id, obj, *args)
  end
end
remove_object(id) click to toggle source
# File lib/sgtn-client/common/single_operation.rb, line 27
def remove_object(id)
  @lock.synchronize do
    @hash.delete(id)
  end
end