Class: NumberedList
- Inherits:
-
Object
show all
- Defined in:
- lib/numbered_list.rb
Defined Under Namespace
Classes: BadType, DuplicateKey, ItemValue, MarshallBase
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of NumberedList.
81
82
83
84
85
86
|
# File 'lib/numbered_list.rb', line 81
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
|
Instance Attribute Details
#item ⇒ Object
Returns the value of attribute item.
4
5
6
|
# File 'lib/numbered_list.rb', line 4
def item
@item
end
|
Class Method Details
.add_item(item) ⇒ Object
37
38
39
40
41
42
43
44
|
# File 'lib/numbered_list.rb', line 37
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) ⇒ Object
46
47
48
49
50
51
|
# File 'lib/numbered_list.rb', line 46
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) ⇒ Object
53
54
55
56
57
|
# File 'lib/numbered_list.rb', line 53
def self.add_item_query(item)
define_method(item.query_method_name) do
name == item.name
end
end
|
.add_marshall_class ⇒ Object
71
72
73
74
75
76
77
78
79
|
# File 'lib/numbered_list.rb', line 71
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 ⇒ Object
98
99
100
|
# File 'lib/numbered_list.rb', line 98
def self.as_objs
self.types.collect {|t| self.new(t)}
end
|
.description(label) ⇒ Object
94
95
96
|
# File 'lib/numbered_list.rb', line 94
def self.description(label)
find_item(label).description
end
|
.find_item(key) ⇒ Object
89
90
91
|
# File 'lib/numbered_list.rb', line 89
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) ⇒ Object
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/numbered_list.rb', line 59
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
add_marshall_class unless class_exists
end
|
.list ⇒ Object
33
34
35
|
# File 'lib/numbered_list.rb', line 33
def self.list
@items || {}
end
|
.reset_list! ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/numbered_list.rb', line 14
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
if respond_to?(item.query_method_name)
remove_method item.query_method_name
end
end
@items = {}
end
|
.types ⇒ Object
114
115
116
117
|
# File 'lib/numbered_list.rb', line 114
def self.types
list.keys
end
|
Instance Method Details
#==(other) ⇒ Object
102
103
104
|
# File 'lib/numbered_list.rb', line 102
def ==(other)
other.to_s == self.to_s
end
|
#to_s ⇒ Object
106
107
108
|
# File 'lib/numbered_list.rb', line 106
def to_s
name
end
|
#to_str ⇒ Object
110
111
112
|
# File 'lib/numbered_list.rb', line 110
def to_str
to_s
end
|