class GemOnDemand::Project

Constants

DEPENDENCIES
MAX_VERSIONS
VERSION_REX

Attributes

cache[RW]
name[RW]
user[RW]

Public Class Methods

new(user, name, cache) click to toggle source
# File lib/gem_on_demand/project.rb, line 9
def initialize(user, name, cache)
  self.user = user
  self.name = name
  self.cache = cache
end

Public Instance Methods

build_gem(version) click to toggle source
# File lib/gem_on_demand/project.rb, line 29
def build_gem(version)
  cache.fetch("gem-#{version}") do
    checkout_version("v#{version}")
    gemspec = "#{name}.gemspec"
    Utils.remove_signing(gemspec)
    Utils.sh("gem build #{gemspec}")
    File.read("#{name}-#{version}.gem")
  end
end
dependencies() click to toggle source
# File lib/gem_on_demand/project.rb, line 15
def dependencies
  cache.fetch DEPENDENCIES do
    versions.last(MAX_VERSIONS).map do |version|
      next unless dependencies = dependencies_for_version(version)
      {
        :name => name,
        :number => version.sub(/^v/, ""),
        :platform => "ruby",
        :dependencies => dependencies
      }
    end.compact
  end
end

Private Instance Methods

checkout_version(version) click to toggle source
# File lib/gem_on_demand/project.rb, line 49
def checkout_version(version)
  Utils.sh("git checkout #{version} --force")
end
dependencies_for_version(version) click to toggle source
# File lib/gem_on_demand/project.rb, line 41
def dependencies_for_version(version)
  cache.fetch "dependencies-#{version}" do
    checkout_version(version)
    result = Utils.sh(%{ruby -e 'print Marshal.dump(eval(File.read("#{name}.gemspec")).runtime_dependencies.map{|d| [d.name, d.requirement.to_s]})'}, :fail => :allow)
    Marshal.load(result) if result
  end
end
versions() click to toggle source
# File lib/gem_on_demand/project.rb, line 53
def versions
  Utils.sh("git tag").split($/).grep(VERSION_REX)
end