Module: Inform::Taggable
- Includes:
- TagHelpers
- Included in:
- Object
- Defined in:
- lib/story_teller/inform/ephemeral/tag.rb
Overview
The Inform::Taggable module
Instance Method Summary
collapse
Methods included from TagHelpers
#attributes, #has, #has?, #hasany?, #hasnt, #hasnt?
Instance Method Details
217
218
219
220
221
222
223
224
|
# File 'lib/story_teller/inform/ephemeral/tag.rb', line 217
def nil_safe_tags
attempt_twice do
log.warn "The tags for #{self} is nil" if self.tags.nil?
self.tags.compact.map(&:to_s).map(&:intern)
end || Array::Empty
end
|
#tag(*args) ⇒ Object
rubocop: disable Metrics/AbcSize
165
166
167
168
169
170
171
172
173
174
175
176
177
|
# File 'lib/story_teller/inform/ephemeral/tag.rb', line 165
def tag(*args)
workflags.add(self.identity) if args.delete(:workflag)
a = self.tag_names args
(a - (self.nil_safe_tags & a)).each do |tag|
if Inform::Tag.respond_to?(:find_or_create)
add_tag(Inform::Tag.find_or_create(name: tag.to_s))
else
add_tag(tags.find { |tag| tag.name == tag.to_s } || Inform::Tag.new(tag.to_s))
end
end
self.save_changes if self.respond_to?(:save_changes)
end
|
#tag_names(a) ⇒ Object
213
214
215
|
# File 'lib/story_teller/inform/ephemeral/tag.rb', line 213
def tag_names(a)
a.flatten.map(&:to_s).map(&:intern)
end
|
#tagged_with?(tag) ⇒ Boolean
190
191
192
|
# File 'lib/story_teller/inform/ephemeral/tag.rb', line 190
def tagged_with?(tag)
tagged_with_any? tag
end
|
#tagged_with_all?(*args) ⇒ Boolean
194
195
196
197
198
199
|
# File 'lib/story_teller/inform/ephemeral/tag.rb', line 194
def tagged_with_all?(*args)
return workflags.include?(self.identity) if args.delete(:workflag)
a = self.tag_names(args)
(self.nil_safe_tags & a).length == a.length
end
|
#tagged_with_any?(*args) ⇒ Boolean
201
202
203
204
|
# File 'lib/story_teller/inform/ephemeral/tag.rb', line 201
def tagged_with_any?(*args)
(args.delete(:workflag) && workflags.include?(self.identity)) || !self.tagged_with_none?(*tag_names(args))
end
|
#tagged_with_none?(*args) ⇒ Boolean
206
207
208
209
210
211
|
# File 'lib/story_teller/inform/ephemeral/tag.rb', line 206
def tagged_with_none?(*args)
return false if args.delete(:workflag) && workflags.include?(self.identity)
!nil_safe_tags.intersect?(tag_names(args))
end
|
#untag(*args) ⇒ Object
Also known as:
tag!
rubocop: enable Metrics/AbcSize
180
181
182
183
184
185
186
187
|
# File 'lib/story_teller/inform/ephemeral/tag.rb', line 180
def untag(*args)
workflags.delete(self.identity) if args.delete(:workflag)
(self.nil_safe_tags & tag_names(args)).each do |tag|
remove_tag Inform::Tag.find(name: tag.to_s)
end
self.save_changes if self.respond_to?(:save_changes)
end
|