class EacRubyUtils::Listable::Lists

def acts_as_listable_items

def acts_as_listable_items
  @acts_as_listable_items ||= ActiveSupport::HashWithIndifferentAccess.new
end

def add(list_class, item, labels)

def add(list_class, item, labels)
  check_acts_as_listable_new_item(item)
  acts_as_listable_items[item] = list_class.new(self, item, labels)
end

def check_acts_as_listable_new_item(item)

def check_acts_as_listable_new_item(item)
  return unless acts_as_listable_items.key?(item)
  raise "Item já adicionado anteriormente: #{item} em #{self} " \
    "(#{acts_as_listable_items.keys})"
end

def find_list_by_method(method)

def find_list_by_method(method)
  acts_as_listable_items.each do |item, list|
    return list if method.to_sym == item.to_sym
  end
  nil
end

def initialize(source)

def initialize(source)
  @source = source
end

def method_missing(name, *args, &block)

def method_missing(name, *args, &block)
  list = find_list_by_method(name)
  list || super
end

def respond_to_missing?(name, include_all = false)

def respond_to_missing?(name, include_all = false)
  find_list_by_method(name) || super
end