Class: MultiGit::Tree::Builder
- Inherits:
-
Object
- Object
- MultiGit::Tree::Builder
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
#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
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
#each ⇒ Enumerable
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
|
70
71
72
|
# File 'lib/multi_git/tree/builder.rb', line 70
def entries
Hash[names.map do |n| [n, entry(n)] end ]
end
|
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
|
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
|
74
75
76
|
# File 'lib/multi_git/tree/builder.rb', line 74
def size
names.size
end
|
98
99
100
|
# File 'lib/multi_git/tree/builder.rb', line 98
def with_parent(parent, name)
Directory::Builder.new(parent, name, self)
end
|