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



140
141
142
143
144
145
146
147
# File 'lib/node.rb', line 140

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



149
150
151
152
153
# File 'lib/node.rb', line 149

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

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

#added?Boolean

Returns:

  • (Boolean)


172
# File 'lib/node.rb', line 172

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

#copied?Boolean

Returns:

  • (Boolean)


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

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

#deleted?Boolean

Returns:

  • (Boolean)


173
# File 'lib/node.rb', line 173

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

#dir?Boolean

Returns:

  • (Boolean)


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

def dir? = !file?

#file?Boolean

Returns:

  • (Boolean)


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

def file? = children.nil?

#modified?Boolean

Returns:

  • (Boolean)


171
# File 'lib/node.rb', line 171

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

#new?Boolean

Returns:

  • (Boolean)


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

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

#renamed?Boolean

Returns:

  • (Boolean)


174
# File 'lib/node.rb', line 174

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

#staged?Boolean

Returns:

  • (Boolean)


178
# File 'lib/node.rb', line 178

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

#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



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/node.rb', line 155

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)


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

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

#valid?Boolean

Returns:

  • (Boolean)


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

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