class Gitmain::Tree

Attributes

id[R]
name[R]
path[R]
repository[R]

Public Class Methods

new(repository, id, path = nil, name = nil) click to toggle source
# File lib/gitmain/tree.rb, line 5
def initialize(repository, id, path = nil, name = nil)
  raise ArgumentError, 'provide a valid repository' unless repository.kind_of?(Gitmain::Repository)
  raise ArgumentError, 'provide a valid tree id' unless id.to_s.match(/\A[0-9a-f]{40}\z/)
  @repository = repository
  @id = id
  @path = path
  @name = name
end

Public Instance Methods

blobs(klass: Gitmain::Blob, recursive: false) click to toggle source
# File lib/gitmain/tree.rb, line 14
def blobs(klass: Gitmain::Blob, recursive: false)
  if recursive
    _tree.walk(:postorder).map do |root, object|
      if object[:type] == :blob
        blob_path = File.join(*[path, name, root].map(&:to_s).reject(&:empty?))
        blob_path.sub!(/\/\z/, '')
        blob_path = nil if blob_path.empty?
        klass.new(repository, object[:oid], blob_path, object[:name])
      end
    end.compact
  else
    _tree.each.map do |object|
      if object[:type] == :blob
        blob_path = File.join(*[path, name].map(&:to_s).reject(&:empty?))
        blob_path.sub!(/\/\z/, '')
        blob_path = nil if blob_path.empty?
        klass.new(repository, object[:oid], blob_path, object[:name])
      end
    end.compact
  end
end
file_name() click to toggle source
# File lib/gitmain/tree.rb, line 36
def file_name
  File.join(*[path, name].map(&:to_s).reject(&:empty?))
end
trees(klass: Gitmain::Tree, recursive: false) click to toggle source
# File lib/gitmain/tree.rb, line 40
def trees(klass: Gitmain::Tree, recursive: false)
  if recursive
    _tree.walk(:postorder).map do |root, object|
      if object[:type] == :tree
        tree_path = File.join(*[path, name, root].map(&:to_s).reject(&:empty?))
        tree_path.sub!(/\/\z/, '')
        tree_path = nil if tree_path.empty?
        klass.new(repository, object[:oid], tree_path, object[:name])
      end
    end.compact
  else
    _tree.each.map do |object|
      if object[:type] == :tree
        tree_path = File.join(*[path, name].map(&:to_s).reject(&:empty?))
        tree_path.sub!(/\/\z/, '')
        tree_path = nil if tree_path.empty?
        klass.new(repository, object[:oid], tree_path, object[:name])
      end
    end.compact
  end
end

Private Instance Methods

_tree() click to toggle source
# File lib/gitmain/tree.rb, line 64
def _tree
  @_tree ||= repository.rugged(id)
end