class NumberedList::List

Attributes

item[R]

Public Class Methods

add_item(item) click to toggle source
# File lib/numbered_list.rb, line 41
def self.add_item(item)

  if list.has_key?(item.name)
    raise DuplicateKey, "The key #{item.name} has already been registered."
  end
  @items ||= {}
  @items[item.name] = item
end
add_item_builder(item) click to toggle source
# File lib/numbered_list.rb, line 50
def self.add_item_builder(item)

  self.define_singleton_method(item.builder_method_name) do
    self.new(item.name)
  end
end
add_item_query(item) click to toggle source
# File lib/numbered_list.rb, line 57
def self.add_item_query(item)
  define_method(item.query_method_name) do
    name == item.name
  end
end
add_marshall_class() click to toggle source
# File lib/numbered_list.rb, line 75
def self.add_marshall_class
  klass = self.const_set("Marshall", Class.new(NumberedList::MarshallBase))
  original_class = self
  klass.class_eval do
    define_method(:value_class) do
      return original_class
    end
  end
end
as_objs() click to toggle source
# File lib/numbered_list.rb, line 102
def self.as_objs
  self.types.collect { |t| self.new(t) }
end
description(label) click to toggle source
# File lib/numbered_list.rb, line 98
def self.description(label)
  find_item(label).description
end
find_item(key) click to toggle source
# File lib/numbered_list.rb, line 93
def self.find_item(key)
  list && list.has_key?(key) ? list[key] : raise(BadType, "Unable to find the #{key}/#{key.class} for #{self.to_s} #{self.types} NumberedItem")
end
item(item_values) click to toggle source
# File lib/numbered_list.rb, line 63
def self.item(item_values)

  item = NumberedList::ItemValue.with(item_values)

  add_item(item)
  add_item_builder(item)
  add_item_query(item)
  class_exists = "#{self}::Marshall".constantize rescue nil #https://stackoverflow.com/a/32869926

  add_marshall_class unless class_exists
end
list() click to toggle source
# File lib/numbered_list.rb, line 37
def self.list
  @items || {}
end
new(name) click to toggle source
# File lib/numbered_list.rb, line 85
def initialize(name)
  if !self.class.types.include?(name.to_s.upcase)
    raise BadType, "'#{name}' Class #{name.class} is not a valid #{self.class.to_s}"
  end
  @item = self.class.find_item(name.to_s)
end
reset_list!() click to toggle source
# File lib/numbered_list.rb, line 18
def self.reset_list!

  list.values.each do |item|

    if respond_to?(item.builder_method_name)

      (
      class << self;
        self;
      end).send(:remove_method, item.builder_method_name)

    end #https://www.ruby-forum.com/topic/116025
    if respond_to?(item.query_method_name)
      remove_method item.query_method_name
    end
  end
  @items = {}
end
types() click to toggle source
# File lib/numbered_list.rb, line 118
def self.types
  list.keys
end

Public Instance Methods

==(other) click to toggle source
# File lib/numbered_list.rb, line 106
def ==(other)
  other.to_s == self.to_s
end
to_s() click to toggle source
# File lib/numbered_list.rb, line 110
def to_s
  name
end
to_str() click to toggle source
# File lib/numbered_list.rb, line 114
def to_str
  to_s
end