Module: Cardname::Parts
- Included in:
- Cardname
- Defined in:
- lib/cardname/parts.rb
Overview
naming conventions: methods that end with _name return name objects the same methods without _name return strings
Instance Attribute Summary collapse
-
#part_keys ⇒ Object
readonly
Returns the value of attribute part_keys.
-
#parts ⇒ Object
readonly
Returns the value of attribute parts.
-
#simple ⇒ Object
(also: #simple?)
readonly
Returns the value of attribute simple.
Instance Method Summary collapse
-
#[](*args) ⇒ Object
def + other self.class.new(parts + other.to_name.parts) end.
- #ancestors ⇒ Object
- #left ⇒ Object
- #left_key ⇒ Object
- #left_name ⇒ Object
- #parent_keys ⇒ Object
- #parent_names ⇒ Object
- #parents ⇒ Object
- #part_names ⇒ Object
- #piece_names ⇒ Object
-
#pieces ⇒ Object
self and all ancestors (= parts and recursive lefts).
- #right ⇒ Object
- #right_key ⇒ Object
- #right_name ⇒ Object
- #tag ⇒ Object
- #tag_name ⇒ Object
-
#to_a ⇒ Object
Returns the value of attribute parts.
-
#trunk ⇒ Object
Note that all names have a trunk and tag, but only junctions have left and right.
- #trunk_name ⇒ Object
Instance Attribute Details
#part_keys ⇒ Object (readonly)
Returns the value of attribute part_keys.
6 7 8 |
# File 'lib/cardname/parts.rb', line 6 def part_keys @part_keys end |
#parts ⇒ Object (readonly)
Returns the value of attribute parts.
6 7 8 |
# File 'lib/cardname/parts.rb', line 6 def parts @parts end |
#simple ⇒ Object (readonly) Also known as: simple?
Returns the value of attribute simple.
6 7 8 |
# File 'lib/cardname/parts.rb', line 6 def simple @simple end |
Instance Method Details
#[](*args) ⇒ Object
def + other
self.class.new(parts + other.to_name.parts)
end
113 114 115 |
# File 'lib/cardname/parts.rb', line 113 def [] *args self.class.new parts[*args] end |
#ancestors ⇒ Object
105 106 107 |
# File 'lib/cardname/parts.rb', line 105 def ancestors @ancestors ||= pieces.reject { |p| p == self} end |
#left ⇒ Object
23 24 25 |
# File 'lib/cardname/parts.rb', line 23 def left @left ||= simple? ? nil : parts[0..-2] * self.class.joint end |
#left_key ⇒ Object
39 40 41 |
# File 'lib/cardname/parts.rb', line 39 def left_key @left_key ||= simple? ? nil : part_keys[0..-2] * self.class.joint end |
#left_name ⇒ Object
31 32 33 |
# File 'lib/cardname/parts.rb', line 31 def left_name @left_name ||= left && self.class.new(left) end |
#parent_keys ⇒ Object
55 56 57 |
# File 'lib/cardname/parts.rb', line 55 def parent_keys @parent_keys ||= junction? ? [left_key, right_key] : [] end |
#parent_names ⇒ Object
51 52 53 |
# File 'lib/cardname/parts.rb', line 51 def parent_names @parent_names ||= junction? ? [left_name, right_name] : [] end |
#parents ⇒ Object
47 48 49 |
# File 'lib/cardname/parts.rb', line 47 def parents @parents ||= junction? ? [left, right] : [] end |
#part_names ⇒ Object
78 79 80 |
# File 'lib/cardname/parts.rb', line 78 def part_names @part_names ||= parts.map(&:to_name) end |
#piece_names ⇒ Object
82 83 84 |
# File 'lib/cardname/parts.rb', line 82 def piece_names @piece_names ||= pieces.map(&:to_name) end |
#pieces ⇒ Object
self and all ancestors (= parts and recursive lefts)
90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/cardname/parts.rb', line 90 def pieces @pieces ||= if simple? [self] else junction_pieces = [] parts[1..-1].inject parts[0] do |left, right| piece = [left, right] * self.class.joint junction_pieces << piece piece end parts + junction_pieces end end |
#right ⇒ Object
27 28 29 |
# File 'lib/cardname/parts.rb', line 27 def right @right ||= simple? ? nil : parts[-1] end |
#right_key ⇒ Object
43 44 45 |
# File 'lib/cardname/parts.rb', line 43 def right_key @right_key ||= simple? ? nil : part_keys.last end |
#right_name ⇒ Object
35 36 37 |
# File 'lib/cardname/parts.rb', line 35 def right_name @right_name ||= right && self.class.new(right) end |
#tag ⇒ Object
66 67 68 |
# File 'lib/cardname/parts.rb', line 66 def tag @tag ||= simple? ? s : right end |
#tag_name ⇒ Object
74 75 76 |
# File 'lib/cardname/parts.rb', line 74 def tag_name @tag_name ||= simple? ? self : right_name end |
#to_a ⇒ Object
Returns the value of attribute parts.
8 9 10 |
# File 'lib/cardname/parts.rb', line 8 def parts @parts end |
#trunk ⇒ Object
Note that all names have a trunk and tag, but only junctions have left and right
62 63 64 |
# File 'lib/cardname/parts.rb', line 62 def trunk @trunk ||= simple? ? s : left end |
#trunk_name ⇒ Object
70 71 72 |
# File 'lib/cardname/parts.rb', line 70 def trunk_name @trunk_name ||= simple? ? self : left_name end |