Class: MultiGit::Tree::Builder

Inherits:
Object
  • Object
show all
Includes:
Builder, Base, DSL
Defined in:
lib/multi_git/tree/builder.rb

Defined Under Namespace

Modules: DSL

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from DSL

#changed?, #clear, #delete, #directory, #entry_set, #executeable, #file, #link, #set, #to_builder

Methods included from Base

#==, #glob, #hash, #key?, #traverse, #type

Methods included from Walkable

#walk

Methods included from Builder

#to_builder

Methods included from Utils::AbstractMethods

#abstract

Constructor Details

#initialize(from = nil, &block) ⇒ Builder

Returns a new instance of Builder.



20
21
22
23
24
# File 'lib/multi_git/tree/builder.rb', line 20

def initialize(from = nil, &block)
  @dirty_entries = {}
  @from = from
  instance_eval(&block) if block
end

Instance Attribute Details

#fromMultiGit::Tree::Base? (readonly)

Returns:



18
19
20
# File 'lib/multi_git/tree/builder.rb', line 18

def from
  @from
end

Instance Method Details

#>>(repository) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/multi_git/tree/builder.rb', line 78

def >>(repository)
  ent = []
  dirty_entries.each do |name, entry|
    if entry
      object = repository.write(entry)
      ent << [name, object.mode, object.oid]
    end
  end
  if @from
    @from.each do |entry|
      unless dirty_entries.key? entry.name
        ent << [entry.name, entry.mode, entry.oid]
      end
    end
  end
  return repository.make_tree(ent)
end

#each {|entry| ... } ⇒ Object #eachEnumerable

Overloads:



47
48
49
50
51
52
# File 'lib/multi_git/tree/builder.rb', line 47

def each
  return to_enum unless block_given?
  names.each do |name|
    yield entry(name)
  end
end

#entriesHash<String,MultiGit::TreeEntry::Builder>

Returns:



70
71
72
# File 'lib/multi_git/tree/builder.rb', line 70

def entries
  Hash[names.map do |n| [n, entry(n)] end ]
end

#entry(key) ⇒ TreeEntry::Builder?

Parameters:

  • key (String)

Returns:



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/multi_git/tree/builder.rb', line 28

def entry(key)
  if @from
    dirty_entries.fetch(key) do
      e = @from.entry(key)
      if e
        dirty_entries[key] = e.to_builder.with_parent(self)
      end
    end
  else
    dirty_entries[key]
  end
end

#namesObject

TODO: cache



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/multi_git/tree/builder.rb', line 55

def names
  names = @from ? @from.names.dup : []
  dirty_entries.each do |k,v|
    if v
      unless names.include? k
        names << k
      end
    else
      names.delete(k)
    end
  end
  return names
end

#sizeObject



74
75
76
# File 'lib/multi_git/tree/builder.rb', line 74

def size
  names.size
end

#with_parent(parent, name) ⇒ Directory::Builder

Returns:



98
99
100
# File 'lib/multi_git/tree/builder.rb', line 98

def with_parent(parent, name)
  Directory::Builder.new(parent, name, self)
end