Sha256: c2ccdc9d3d16dd9efdfb0b05793c726d14440bac9218c4399f391e98074a9060

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

module Ramaze
  # === Usage
  #
  #  require 'ramaze/contrib/gems'
  #
  #  # set install dir
  #  # Ramaze::Gems.options :install_dir => __DIR__('../asdf')
  #
  #  module Ramaze::Gems
  #    gem 'haml'
  #    gem 'sequel', '>=1.2.0'
  #    gem 'hpricot', :source => 'http://code.whytheluckystiff.net'
  #    gem 'aws-s3', :lib => 'aws/s3'
  #    gem 'oldmoe-mysql', :source => 'http://gems.github.com', :lib => 'mysqlplus'
  #    setup
  #  end
  #
  module Gems
    @gems = []

    class << self
      def gem(name, version = nil, options = {})
        case version
        when String
          options[:version] = version
        when Hash
          options.merge!(version)
        end

        @gems << GemStone.new(name, options)
      end

      # options include:
      #  :install_dir => where to install gems
      #  :extconf     => additional options for building extensions

      def options opts = {}
        @options ||= {}
        @options.merge! opts unless opts.empty?
        @options
      end

      def setup opts = {}
        options(opts)
        @gems.each{|gem| gem.setup }
      end
    end

    class GemStone
      attr_reader :name, :options

      def initialize(name, options = {})
        @name, @options = name, options
        require 'rubygems/dependency_installer'
        @installer = Gem::DependencyInstaller.new(@options)
      end

      def setup(ran = false)
        Gem.activate(name, *[options[:version]].compact)
        require options[:lib] || name
      rescue LoadError => error
        puts error
        return if ran
        install
        setup(ran = true)
      end

      def install
        if extconf = (options[:extconf] || Gems.options[:extconf])
          old_argv = ARGV.clone
          ARGV.replace extconf.split(' ')
        end

        print "Installing #{name}..."
        @installer.install name, options[:version]
        puts "done.\n\n"
      ensure
        ARGV.replace old_argv if extconf
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ramaze-2009.03 lib/ramaze/contrib/gems.rb