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

Instance Method Summary collapse

Instance Attribute Details

#part_keysObject (readonly)

Returns the value of attribute part_keys.



6
7
8
# File 'lib/cardname/parts.rb', line 6

def part_keys
  @part_keys
end

#partsObject (readonly)

Returns the value of attribute parts.



6
7
8
# File 'lib/cardname/parts.rb', line 6

def parts
  @parts
end

#simpleObject (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

#ancestorsObject



105
106
107
# File 'lib/cardname/parts.rb', line 105

def ancestors
  @ancestors ||= pieces.reject { |p| p == self}
end

#leftObject



23
24
25
# File 'lib/cardname/parts.rb', line 23

def left
  @left ||= simple? ? nil : parts[0..-2] * self.class.joint
end

#left_keyObject



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_nameObject



31
32
33
# File 'lib/cardname/parts.rb', line 31

def left_name
  @left_name ||= left && self.class.new(left)
end

#parent_keysObject



55
56
57
# File 'lib/cardname/parts.rb', line 55

def parent_keys
  @parent_keys ||= junction? ? [left_key, right_key] : []
end

#parent_namesObject



51
52
53
# File 'lib/cardname/parts.rb', line 51

def parent_names
  @parent_names ||= junction? ? [left_name, right_name] : []
end

#parentsObject



47
48
49
# File 'lib/cardname/parts.rb', line 47

def parents
  @parents ||= junction? ? [left, right] : []
end

#part_namesObject



78
79
80
# File 'lib/cardname/parts.rb', line 78

def part_names
  @part_names ||= parts.map(&:to_name)
end

#piece_namesObject



82
83
84
# File 'lib/cardname/parts.rb', line 82

def piece_names
  @piece_names ||= pieces.map(&:to_name)
end

#piecesObject

self and all ancestors (= parts and recursive lefts)

Examples:

"A+B+C+D".to_name.pieces
# => ["A", "B", "C", "D", "A+B", "A+B+C", "A+B+C+D"]


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

#rightObject



27
28
29
# File 'lib/cardname/parts.rb', line 27

def right
  @right ||= simple? ? nil : parts[-1]
end

#right_keyObject



43
44
45
# File 'lib/cardname/parts.rb', line 43

def right_key
  @right_key ||= simple? ? nil : part_keys.last
end

#right_nameObject



35
36
37
# File 'lib/cardname/parts.rb', line 35

def right_name
  @right_name ||= right && self.class.new(right)
end

#tagObject



66
67
68
# File 'lib/cardname/parts.rb', line 66

def tag
  @tag ||= simple? ? s : right
end

#tag_nameObject



74
75
76
# File 'lib/cardname/parts.rb', line 74

def tag_name
  @tag_name ||= simple? ? self : right_name
end

#to_aObject

Returns the value of attribute parts.



8
9
10
# File 'lib/cardname/parts.rb', line 8

def parts
  @parts
end

#trunkObject

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_nameObject



70
71
72
# File 'lib/cardname/parts.rb', line 70

def trunk_name
  @trunk_name ||= simple? ? self : left_name
end