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