class ItemsList

Constants

RESERVE_KEY

Attributes

items[RW]

Public Instance Methods

available_items() click to toggle source
# File lib/gertrude/items/items_list.rb, line 65
def available_items
  available_items = []
  @items.each_key do |type|
    @items[type].each_key do |item|
      available_items << item unless @items[type][item][RESERVE_KEY]
    end
  end
  available_items
end
get_all_items() click to toggle source
# File lib/gertrude/items/items_list.rb, line 45
def get_all_items
  list = Marshal.load(Marshal.dump(@items))
  list.each_key do |type|
    list[type].each do |item|
      list[type][item[0]] = sanitize_response({item[0] => item[1]})
    end
  end
  list
end
get_available_item(type) click to toggle source
# File lib/gertrude/items/items_list.rb, line 105
def get_available_item(type)
  Hash[*@items[type].select { |item| !@items[type][item][RESERVE_KEY] }.first]
end
get_available_items() click to toggle source
# File lib/gertrude/items/items_list.rb, line 41
def get_available_items
  available_items.join(",")
end
get_item(type, timeout) click to toggle source
# File lib/gertrude/items/items_list.rb, line 27
def get_item(type, timeout)
  raise ItemError::ItemTypeNotDefined.new(type) unless @items.has_key? type
  loop_for_item(type, timeout)
end
get_reserved_items() click to toggle source
# File lib/gertrude/items/items_list.rb, line 37
def get_reserved_items
  reserved_items.join(", ")
end
load_items!(yml) click to toggle source
# File lib/gertrude/items/items_list.rb, line 7
def load_items!(yml)
  config = YAML.load_file(yml)
  config.each_key do |type|
    config[type].each_key do |item|
      config[type][item] = {} if config[type][item].nil?
      config[type][item][RESERVE_KEY] = false
    end
  end
  raise ItemError::ItemsNotUnique.new unless unique_keys_across_items?(config)
  @items = config
  self
end
loop_for_item(type, timeout) click to toggle source
# File lib/gertrude/items/items_list.rb, line 85
def loop_for_item(type, timeout)
  item = wait_until(timeout: timeout) do
    item = get_available_item(type)
    raise ItemError::NoAvailableItems if item.empty?
    item
  end
  reserve_item(type, item.keys.first)
  sanitize_response(item)
end
release_all_items() click to toggle source
# File lib/gertrude/items/items_list.rb, line 55
def release_all_items
  raise ItemError::NoReservedItems if reserved_items.empty?
  @items.each_key do |type|
    @items[type].each_key do |item|
      @items[type][item][RESERVE_KEY] = false if @items[type][item][RESERVE_KEY]
    end
  end
  true
end
release_item(item) click to toggle source
# File lib/gertrude/items/items_list.rb, line 32
def release_item(item)
  raise ItemError::InvalidItem.new(item) unless @items.has_deep_key?(item)
  @items.deep_find(item)[RESERVE_KEY] = false
end
reserve_item(type, item_key) click to toggle source
# File lib/gertrude/items/items_list.rb, line 101
def reserve_item(type, item_key)
  @items[type][item_key][RESERVE_KEY] = true
end
reserved_items() click to toggle source
# File lib/gertrude/items/items_list.rb, line 75
def reserved_items
  taken_items = []
  @items.each_key do |type|
    @items[type].each_key do |item|
      taken_items << item if @items[type][item][RESERVE_KEY]
    end
  end
  taken_items
end
sanitize_response(item) click to toggle source
# File lib/gertrude/items/items_list.rb, line 95
def sanitize_response(item)
  x = Marshal.load(Marshal.dump(item))
  x.first.last.delete(RESERVE_KEY)
  x
end
unique_keys_across_items?(config) click to toggle source
# File lib/gertrude/items/items_list.rb, line 20
def unique_keys_across_items?(config)
  item_keys = []
  config.each_value { |v| item_keys.push(v.keys) }
  item_keys.flatten!
  item_keys.count == item_keys.uniq.count
end