Class: Node

Inherits:
Object
  • Object
show all
Includes:
NodeCollapsing
Defined in:
lib/node.rb

Overview

A Node represents a file or directory in the git-status-tree

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from NodeCollapsing

#collapsed_path, #collapsed_with_file?, #collapsible?, #deepest_collapsible_node

Constructor Details

#initialize(name, children = nil, status = nil) ⇒ Node

Returns a new instance of Node.

Raises:



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/node.rb', line 19

def initialize(name, children = nil, status = nil)
  self.class.indent ||= 4
  self.class.collapse_dirs ||= false
  validate_name!(name)

  msg = '"children" must be a NodesCollection or nil.'
  valid_nodes_collection = children.nil? || children.is_a?(NodesCollection)
  raise NodeChildrenError, msg unless valid_nodes_collection

  @name = name
  @children = children
  @status = status || '??'
end

Class Attribute Details

.collapse_dirsObject

Returns the value of attribute collapse_dirs.



14
15
16
# File 'lib/node.rb', line 14

def collapse_dirs
  @collapse_dirs
end

.indentObject

Returns the value of attribute indent.



14
15
16
# File 'lib/node.rb', line 14

def indent
  @indent
end

Instance Attribute Details

#childrenObject

Returns the value of attribute children.



17
18
19
# File 'lib/node.rb', line 17

def children
  @children
end

#nameObject

Returns the value of attribute name.



17
18
19
# File 'lib/node.rb', line 17

def name
  @name
end

#statusObject

Returns the value of attribute status.



17
18
19
# File 'lib/node.rb', line 17

def status
  @status
end

Class Method Details

.create_from_string(gs_porcelain) ⇒ Object

Raises:



33
34
35
36
37
38
39
# File 'lib/node.rb', line 33

def self.create_from_string(gs_porcelain)
  msg = '"str_node" must be String.'
  raise NodeTypeError, msg unless gs_porcelain.is_a? String
  raise NodeNameError, '"str_node" too short.' if gs_porcelain.length < 4

  node_from_gs(gs_porcelain)
end

.instances?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/node.rb', line 41

def self.instances?
  ->(node) { node.is_a?(Node) }
end

Instance Method Details

#+(other) ⇒ Object



144
145
146
147
148
149
150
151
# File 'lib/node.rb', line 144

def +(other)
  raise 'not valid' unless valid? && other.valid?
  raise "not a #{self.class}" unless other.is_a?(self.class)

  tmp_children = [children, other.children].compact.inject(&:+)

  NodesCollection.new([self.class.new(name, tmp_children)])
end

#<=>(other) ⇒ Object



153
154
155
156
157
# File 'lib/node.rb', line 153

def <=>(other)
  return (name <=> other.name) if file? == other.file?

  dir? && other.file? ? -1 : 1
end

#added?Boolean

Returns:

  • (Boolean)


179
180
181
# File 'lib/node.rb', line 179

def added?
  status.include?('A')
end

#copied?Boolean

Returns:

  • (Boolean)


191
192
193
# File 'lib/node.rb', line 191

def copied?
  status.include?('C')
end

#deleted?Boolean

Returns:

  • (Boolean)


183
184
185
# File 'lib/node.rb', line 183

def deleted?
  status.include?('D')
end

#dir?Boolean

Returns:

  • (Boolean)


136
137
138
# File 'lib/node.rb', line 136

def dir?
  !file?
end

#file?Boolean

Returns:

  • (Boolean)


132
133
134
# File 'lib/node.rb', line 132

def file?
  children.nil?
end

#modified?Boolean

Returns:

  • (Boolean)


175
176
177
# File 'lib/node.rb', line 175

def modified?
  status.include?('M')
end

#new?Boolean

Returns:

  • (Boolean)


199
200
201
# File 'lib/node.rb', line 199

def new?
  status.include?('?')
end

#renamed?Boolean

Returns:

  • (Boolean)


187
188
189
# File 'lib/node.rb', line 187

def renamed?
  status.include?('R')
end

#staged?Boolean

Returns:

  • (Boolean)


203
204
205
# File 'lib/node.rb', line 203

def staged?
  status.include?('+')
end

#to_primitiveObject



124
125
126
127
128
129
130
# File 'lib/node.rb', line 124

def to_primitive
  if dir?
    { name => children.to_primitive }
  else
    name
  end
end

#to_tree_s(depth = 0, open_parents = [0], last: true) ⇒ Object



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/node.rb', line 159

def to_tree_s(depth = 0, open_parents = [0], last: true)
  open_parents << depth

  pre = pre_tree(depth, open_parents, last)

  # Handle directory collapsing if enabled
  if self.class.collapse_dirs && collapsible?
    render_collapsed_tree(pre, depth, open_parents)
  else
    # Normal rendering
    str_tree = "#{pre}#{color_name}\n"
    str_tree += children.to_tree_s(depth + 1, open_parents) if children
    str_tree
  end
end

#unmerged?Boolean

Returns:

  • (Boolean)


195
196
197
# File 'lib/node.rb', line 195

def unmerged?
  status.include?('U')
end

#valid?Boolean

Returns:

  • (Boolean)


140
141
142
# File 'lib/node.rb', line 140

def valid?
  file? ? valid_file? : valid_dir?
end