Sha256: fff6cafac8a9acca4d7923522647bae24552accdffafe35547cd166ef951b115

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

require 'velcro/file_helpers'
require 'velcro/homebrew'

class Velcro
  class Lockfile
    include FileHelpers

    attr_accessor :homebrew

    def initialize
      self.homebrew = Homebrew.new
    end

    def generate(dependencies)
      File.open(lockfile_in(Dir.pwd), 'w+') do |lockfile|
        lockfile.write(
          [
            'FORMULA',
            indent(generate_formula(dependencies)),
            '',
            'DEPENDENCIES',
            indent(generate_dependencies(dependencies)),
            ''
          ].flatten.join("\n")
        )
      end
    end

    def generate_formula(dependencies)
      dependencies.map do |dependency|
        [
          "#{dependency.name} (#{specified_or_most_recent_version(dependency)})",
          indent(generate_child_dependencies(dependency))
        ]
      end.flatten
    end

    def generate_child_dependencies(dependency)
      self.homebrew.child_dependencies(dependency).map do |child|
        "#{child.name} (#{child.version})"
      end
    end

    def generate_dependencies(dependencies)
      dependencies.map do |dependency|
        line = "#{dependency.name}"
        line << " (#{dependency.version})" if dependency.version
        line
      end
    end

    def specified_or_most_recent_version(dependency)
      dependency.version || self.homebrew.versions(dependency).split.first
    end

    def indent(lines)
      Array(lines).map do |line|
        "  #{line}"
      end
    end

    def lockfile_in(directory)
      File.join(directory, 'Brewfile.lock')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
velcro-0.1.0 lib/velcro/lockfile.rb