Sha256: 91efc2d46f62beb9f9088cf5f2c4ce1af5c52cda3e820a5c5ca49f9151df8e61

Contents?: true

Size: 1.86 KB

Versions: 3

Compression:

Stored size: 1.86 KB

Contents

#--
# Copyright (c) 2010-2012 Engine Yard, Inc.
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
# This source code is available under the MIT license.
# See the file LICENSE.txt for details.
#++

module Warbler
  module Traits
    # The Gemspec trait reads a .gemspec file to determine the files,
    # executables, require paths, and dependencies for a project.
    class Gemspec
      include Trait
      include PathmapHelper

      def self.detect?
        !Dir['*.gemspec'].empty?
      end

      def before_configure
        @spec_file = Dir['*.gemspec'].first
        require 'yaml'
        @spec = File.open(@spec_file) {|f| Gem::Specification.from_yaml(f) } rescue Gem::Specification.load(@spec_file)
        @spec.runtime_dependencies.each {|g| config.gems << g }
        config.dirs = []
        config.compiled_ruby_files = @spec.files.select {|f| f =~ /\.rb$/}
      end

      def after_configure
        @spec.require_paths.each do |p|
          add_init_load_path(config.pathmaps.application.inject(p) {|pm,x| pm.pathmap(x)})
        end
      end

      def update_archive(jar)
        (Dir['**/*'] - config.compiled_ruby_files).each do |f|
          jar.files[apply_pathmaps(config, f, :application)] = f
        end
        config.compiled_ruby_files.each do |f|
          f = f.sub(/\.rb$/, '.class')
          next unless File.exist?(f)
          jar.files[apply_pathmaps(config, f, :application)] = f
        end
        bin_path = apply_pathmaps(config, default_executable, :application)
        add_main_rb(jar, bin_path)
      end

      def default_executable
        if !@spec.executables.empty?
          "bin/#{@spec.executables.first}"
        else
          exe = Dir['bin/*'].first
          raise "No executable script found" unless exe
          warn "No default executable found in #{@spec_file}, using #{exe}"
          exe
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
warbler-1.3.6 lib/warbler/traits/gemspec.rb
warbler-1.3.5 lib/warbler/traits/gemspec.rb
warbler-1.3.4 lib/warbler/traits/gemspec.rb