class Batali::Origin::Path

Fetch unit from local path

Public Class Methods

new(*_) click to toggle source
Calls superclass method Batali::Origin::new
# File lib/batali/origin/path.rb, line 32
def initialize(*_)
  super
  self.path = Utility.clean_path(path)
  self.identifier = Smash.new(:path => path).checksum
  unless name?
    self.name = identifier
  end
end

Public Instance Methods

load_metadata() click to toggle source

@return [Smash] metadata information

# File lib/batali/origin/path.rb, line 76
def load_metadata
  memoize(:metadata) do
    if File.exist?(json = File.join(path, "metadata.json"))
      MultiJson.load(File.read(json)).to_smash
    elsif File.exist?(rb = File.join(path, "metadata.rb"))
      struct = Metadata.new
      struct.set_state!(:value_collapse => true)
      struct.instance_eval(File.read(rb), rb, 1)
      struct._dump.to_smash
    else
      raise Errno::ENOENT.new("Failed to locate metadata file in cookbook directory! (path: #{path})")
    end
  end
end
units() click to toggle source

@return [Array<Unit>]

# File lib/batali/origin/path.rb, line 42
def units
  memoize(:units) do
    info = load_metadata
    if info[:depends]
      unless info[:depends].first.is_a?(Array)
        info[:depends] = [info[:depends]]
      end
      info[:depends] = info[:depends].map do |dep|
        case dep
        when String
          [dep, "> 0"]
        else
          dep.size == 1 ? dep.push("> 0") : dep
        end
      end
    end
    [
      Unit.new(
        :name => info[:name],
        :version => info[:version],
        :dependencies => info.fetch(:depends, []),
        :source => Smash.new(
          :type => :path,
          :version => info[:version],
          :path => path,
          :dependencies => info.fetch(:depends, []),
          :cache_path => cache_path,
        ),
      ),
    ]
  end
end