Class: Card::Subcards
- Inherits:
-
Object
show all
- Defined in:
- lib/card/subcards.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(context_card) ⇒ Subcards
Returns a new instance of Subcards.
23
24
25
26
|
# File 'lib/card/subcards.rb', line 23
def initialize context_card
@context_card = context_card
@keys = ::Set.new
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
121
122
123
124
|
# File 'lib/card/subcards.rb', line 121
def method_missing method, *args
return unless @keys.respond_to? method
@keys.send method, *args
end
|
Instance Attribute Details
#context_card ⇒ Object
Returns the value of attribute context_card.
22
23
24
|
# File 'lib/card/subcards.rb', line 22
def context_card
@context_card
end
|
#keys ⇒ Object
Returns the value of attribute keys.
22
23
24
|
# File 'lib/card/subcards.rb', line 22
def keys
@keys
end
|
Instance Method Details
#<<(value) ⇒ Object
117
118
119
|
# File 'lib/card/subcards.rb', line 117
def << value
add value
end
|
#[](name) ⇒ Object
157
158
159
|
# File 'lib/card/subcards.rb', line 157
def [] name
card(name) || field(name)
end
|
#[]=(name, card_or_attr) ⇒ Object
148
149
150
151
152
153
154
155
|
# File 'lib/card/subcards.rb', line 148
def []= name, card_or_attr
case card_or_attr
when Hash
new_by_attributes name, card_or_attr
when Card
new_by_card card_or_attr
end
end
|
#add(name_or_card_or_attr, attr_or_opts = {}) ⇒ Object
add 'spoiler', content: 'John Snow is a Targaryen',
transact_in_stage: :integrate
add card_obj, delayed: true
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/card/subcards.rb', line 40
def add name_or_card_or_attr, attr_or_opts={}
case name_or_card_or_attr
when Card
new_by_card name_or_card_or_attr, attr_or_opts
when Symbol, String
new_by_attributes name_or_card_or_attr, attr_or_opts
when Hash
args = name_or_card_or_attr
if args[:name]
new_by_attributes args.delete(:name), args
else
multi_add args
end
end
end
|
#add_child(name, args) ⇒ Object
Also known as:
add_field
56
57
58
|
# File 'lib/card/subcards.rb', line 56
def add_child name, args
add prepend_plus(name), args
end
|
#card(name) ⇒ Object
166
167
168
169
|
# File 'lib/card/subcards.rb', line 166
def card name
return unless @keys.include? name.to_name.key
fetch_subcard name
end
|
#catch_up_to_stage(stage_index) ⇒ Object
75
76
77
78
79
|
# File 'lib/card/subcards.rb', line 75
def catch_up_to_stage stage_index
each_card do |subcard|
subcard.catch_up_to_stage stage_index
end
end
|
#clear ⇒ Object
81
82
83
84
85
86
87
88
89
|
# File 'lib/card/subcards.rb', line 81
def clear
@keys.each do |key|
if (subcard = fetch_subcard key)
ActManager.delete subcard.director
end
Card.cache.soft.delete key
end
@keys = ::Set.new
end
|
#deep_clear(cleared = ::Set.new) ⇒ Object
91
92
93
94
95
96
97
98
|
# File 'lib/card/subcards.rb', line 91
def deep_clear cleared=::Set.new
each_card do |card|
next if cleared.include? card.id
cleared << card.id
card.subcards.deep_clear cleared
end
clear
end
|
#each_card ⇒ Object
Also known as:
each
126
127
128
129
130
131
132
133
134
135
136
137
|
# File 'lib/card/subcards.rb', line 126
def each_card
cards = @keys.map do |key|
fetch_subcard key
end
cards.each do |card|
yield(card) if card
end
end
|
#each_with_key ⇒ Object
141
142
143
144
145
146
|
# File 'lib/card/subcards.rb', line 141
def each_with_key
@keys.each do |key|
card = fetch_subcard(key)
yield(card, key) if card
end
end
|
#field(name) ⇒ Object
161
162
163
164
|
# File 'lib/card/subcards.rb', line 161
def field name
key = field_name_to_key name
fetch_subcard key if @keys.include? key
end
|
#present? ⇒ Boolean
171
172
173
|
# File 'lib/card/subcards.rb', line 171
def present?
@keys.present?
end
|
#remove(name_or_card) ⇒ Object
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/card/subcards.rb', line 100
def remove name_or_card
key = subcard_key name_or_card
return unless @keys.include? key
@keys.delete key
removed_card = fetch_subcard key
removed_card.current_action.delete if removed_card.current_action
ActManager.deep_delete removed_card.director
Card.cache.soft.delete key
removed_card
end
|
#remove_child(name_or_card) ⇒ Object
Also known as:
remove_field
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/card/subcards.rb', line 61
def remove_child name_or_card
if name_or_card.is_a? Card
remove name_or_card
else
absolute_name = @context_card.cardname.field_name(name_or_card)
if @keys.include? absolute_name.key
remove absolute_name
else
remove @context_card.cardname.relative_field_name(name_or_card)
end
end
end
|
#rename(old_name, new_name) ⇒ Object
111
112
113
114
115
|
# File 'lib/card/subcards.rb', line 111
def rename old_name, new_name
return unless @keys.include? old_name.to_name.key
@keys.delete old_name.to_name.key
@keys << new_name.to_name.key
end
|