lucidimagination-warbler 1.3.2.dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +16 -0
 - data/History.txt +217 -0
 - data/LICENSE.txt +26 -0
 - data/Manifest.txt +92 -0
 - data/README.txt +255 -0
 - data/Rakefile +103 -0
 - data/bin/warble +11 -0
 - data/ext/JarMain.java +148 -0
 - data/ext/WarMain.java +112 -0
 - data/ext/WarblerJar.java +182 -0
 - data/ext/WarblerJarService.java +18 -0
 - data/lib/warbler.rb +33 -0
 - data/lib/warbler/application.rb +86 -0
 - data/lib/warbler/config.rb +223 -0
 - data/lib/warbler/gems.rb +37 -0
 - data/lib/warbler/jar.rb +253 -0
 - data/lib/warbler/task.rb +183 -0
 - data/lib/warbler/templates/bundler.erb +3 -0
 - data/lib/warbler/templates/config.erb +1 -0
 - data/lib/warbler/templates/jar.erb +5 -0
 - data/lib/warbler/templates/rack.erb +1 -0
 - data/lib/warbler/templates/rails.erb +1 -0
 - data/lib/warbler/templates/war.erb +1 -0
 - data/lib/warbler/traits.rb +107 -0
 - data/lib/warbler/traits/bundler.rb +104 -0
 - data/lib/warbler/traits/gemspec.rb +59 -0
 - data/lib/warbler/traits/jar.rb +56 -0
 - data/lib/warbler/traits/merb.rb +35 -0
 - data/lib/warbler/traits/nogemspec.rb +42 -0
 - data/lib/warbler/traits/rack.rb +33 -0
 - data/lib/warbler/traits/rails.rb +62 -0
 - data/lib/warbler/traits/war.rb +197 -0
 - data/lib/warbler/version.rb +10 -0
 - data/lib/warbler/war.rb +8 -0
 - data/lib/warbler_jar.jar +0 -0
 - data/spec/drb_helper.rb +41 -0
 - data/spec/sample_bundler/Gemfile.lock +10 -0
 - data/spec/sample_bundler/config.ru +0 -0
 - data/spec/sample_jar/History.txt +6 -0
 - data/spec/sample_jar/Manifest.txt +8 -0
 - data/spec/sample_jar/README.txt +30 -0
 - data/spec/sample_jar/lib/sample_jar.rb +6 -0
 - data/spec/sample_jar/sample_jar.gemspec +40 -0
 - data/spec/sample_jar/test/test_sample_jar.rb +8 -0
 - data/spec/sample_war/app/controllers/application.rb +15 -0
 - data/spec/sample_war/app/helpers/application_helper.rb +3 -0
 - data/spec/sample_war/config/boot.rb +109 -0
 - data/spec/sample_war/config/database.yml +19 -0
 - data/spec/sample_war/config/environment.rb +67 -0
 - data/spec/sample_war/config/environments/development.rb +17 -0
 - data/spec/sample_war/config/environments/production.rb +25 -0
 - data/spec/sample_war/config/environments/test.rb +22 -0
 - data/spec/sample_war/config/initializers/inflections.rb +10 -0
 - data/spec/sample_war/config/initializers/mime_types.rb +5 -0
 - data/spec/sample_war/config/initializers/new_rails_defaults.rb +15 -0
 - data/spec/sample_war/config/routes.rb +41 -0
 - data/spec/sample_war/lib/tasks/utils.rake +0 -0
 - data/spec/sample_war/public/404.html +30 -0
 - data/spec/sample_war/public/422.html +30 -0
 - data/spec/sample_war/public/500.html +30 -0
 - data/spec/sample_war/public/favicon.ico +0 -0
 - data/spec/sample_war/public/index.html +274 -0
 - data/spec/sample_war/public/robots.txt +5 -0
 - data/spec/spec_helper.rb +112 -0
 - data/spec/warbler/application_spec.rb +95 -0
 - data/spec/warbler/bundler_spec.rb +136 -0
 - data/spec/warbler/config_spec.rb +130 -0
 - data/spec/warbler/gems_spec.rb +40 -0
 - data/spec/warbler/jar_spec.rb +718 -0
 - data/spec/warbler/task_spec.rb +170 -0
 - data/spec/warbler/traits_spec.rb +17 -0
 - data/spec/warbler/war_spec.rb +14 -0
 - data/warble.rb +142 -0
 - data/web.xml.erb +32 -0
 - metadata +198 -0
 
    
        data/lib/warbler/task.rb
    ADDED
    
    | 
         @@ -0,0 +1,183 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010-2011 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2007-2009 Sun Microsystems, Inc.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 5 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 6 
     | 
    
         
            +
            #++
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'rake'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'rake/tasklib'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'warbler/config'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'warbler/jar'
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 14 
     | 
    
         
            +
              # Warbler Rake task.  Allows defining multiple configurations inside the same
         
     | 
| 
      
 15 
     | 
    
         
            +
              # Rakefile by using different task names.
         
     | 
| 
      
 16 
     | 
    
         
            +
              #
         
     | 
| 
      
 17 
     | 
    
         
            +
              # To define multiple Warbler configurations in a single project, use
         
     | 
| 
      
 18 
     | 
    
         
            +
              # code like the following in a Rakefile:
         
     | 
| 
      
 19 
     | 
    
         
            +
              #
         
     | 
| 
      
 20 
     | 
    
         
            +
              #     Warbler::Task.new("war1", Warbler::Config.new do |config|
         
     | 
| 
      
 21 
     | 
    
         
            +
              #       config.jar_name = "war1"
         
     | 
| 
      
 22 
     | 
    
         
            +
              #       # ...
         
     | 
| 
      
 23 
     | 
    
         
            +
              #     end
         
     | 
| 
      
 24 
     | 
    
         
            +
              #     Warbler::Task.new("war2", Warbler::Config.new do |config|
         
     | 
| 
      
 25 
     | 
    
         
            +
              #       config.jar_name = "war2"
         
     | 
| 
      
 26 
     | 
    
         
            +
              #       # ...
         
     | 
| 
      
 27 
     | 
    
         
            +
              #     end
         
     | 
| 
      
 28 
     | 
    
         
            +
              #
         
     | 
| 
      
 29 
     | 
    
         
            +
              # With this setup, you can create two separate war files two
         
     | 
| 
      
 30 
     | 
    
         
            +
              # different configurations by running <tt>rake war1 war2</tt>.
         
     | 
| 
      
 31 
     | 
    
         
            +
              class Task < Rake::TaskLib
         
     | 
| 
      
 32 
     | 
    
         
            +
                # Task name
         
     | 
| 
      
 33 
     | 
    
         
            +
                attr_accessor :name
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                # Warbler::Config
         
     | 
| 
      
 36 
     | 
    
         
            +
                attr_accessor :config
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                # Warbler::Jar
         
     | 
| 
      
 39 
     | 
    
         
            +
                attr_accessor :jar
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def initialize(name = nil, config = nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @config = config
         
     | 
| 
      
 43 
     | 
    
         
            +
                  if @config.nil? && File.exists?(Config::FILE)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    @config = eval(File.open(Config::FILE) {|f| f.read})
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @config ||= Config.new
         
     | 
| 
      
 47 
     | 
    
         
            +
                  unless @config.kind_of? Config
         
     | 
| 
      
 48 
     | 
    
         
            +
                    $stderr.puts "Warbler::Config not provided by override in initializer or #{Config::FILE}; using defaults"
         
     | 
| 
      
 49 
     | 
    
         
            +
                    @config = Config.new
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @name = name || @config.jar_extension
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @jar = Warbler::Jar.new
         
     | 
| 
      
 53 
     | 
    
         
            +
                  yield self if block_given?
         
     | 
| 
      
 54 
     | 
    
         
            +
                  define_tasks
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                # Deprecated: attr_accessor :war
         
     | 
| 
      
 58 
     | 
    
         
            +
                alias war jar
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                private
         
     | 
| 
      
 61 
     | 
    
         
            +
                def define_tasks
         
     | 
| 
      
 62 
     | 
    
         
            +
                  define_main_task
         
     | 
| 
      
 63 
     | 
    
         
            +
                  namespace name do
         
     | 
| 
      
 64 
     | 
    
         
            +
                    define_clean_task
         
     | 
| 
      
 65 
     | 
    
         
            +
                    define_compiled_task
         
     | 
| 
      
 66 
     | 
    
         
            +
                    define_files_task
         
     | 
| 
      
 67 
     | 
    
         
            +
                    define_jar_task
         
     | 
| 
      
 68 
     | 
    
         
            +
                    define_debug_task
         
     | 
| 
      
 69 
     | 
    
         
            +
                    define_config_task
         
     | 
| 
      
 70 
     | 
    
         
            +
                    define_pluginize_task
         
     | 
| 
      
 71 
     | 
    
         
            +
                    define_version_task
         
     | 
| 
      
 72 
     | 
    
         
            +
                    define_extra_tasks
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                def define_main_task
         
     | 
| 
      
 77 
     | 
    
         
            +
                  desc "Create the project #{config.jar_extension} file"
         
     | 
| 
      
 78 
     | 
    
         
            +
                  task @name do
         
     | 
| 
      
 79 
     | 
    
         
            +
                    unless @config.features.empty?
         
     | 
| 
      
 80 
     | 
    
         
            +
                      @config.features.each do |feature|
         
     | 
| 
      
 81 
     | 
    
         
            +
                        t = "#@name:#{feature}"
         
     | 
| 
      
 82 
     | 
    
         
            +
                        unless Rake.application.lookup(t)
         
     | 
| 
      
 83 
     | 
    
         
            +
                          $stderr.puts "unknown feature `#{feature}', ignoring"
         
     | 
| 
      
 84 
     | 
    
         
            +
                          next
         
     | 
| 
      
 85 
     | 
    
         
            +
                        end
         
     | 
| 
      
 86 
     | 
    
         
            +
                        Rake::Task[t].invoke
         
     | 
| 
      
 87 
     | 
    
         
            +
                      end
         
     | 
| 
      
 88 
     | 
    
         
            +
                    end
         
     | 
| 
      
 89 
     | 
    
         
            +
                    # Invoke this way so custom dependencies can be defined before
         
     | 
| 
      
 90 
     | 
    
         
            +
                    # the file find routine is run
         
     | 
| 
      
 91 
     | 
    
         
            +
                    ["#{@name}:files", "#{@name}:jar"].each do |t|
         
     | 
| 
      
 92 
     | 
    
         
            +
                      Rake::Task[t].invoke
         
     | 
| 
      
 93 
     | 
    
         
            +
                    end
         
     | 
| 
      
 94 
     | 
    
         
            +
                  end
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                def define_clean_task
         
     | 
| 
      
 98 
     | 
    
         
            +
                  desc "Remove the project #{config.jar_extension} file"
         
     | 
| 
      
 99 
     | 
    
         
            +
                  task "clean" do
         
     | 
| 
      
 100 
     | 
    
         
            +
                    rm_f "#{config.jar_name}.#{config.jar_extension}"
         
     | 
| 
      
 101 
     | 
    
         
            +
                  end
         
     | 
| 
      
 102 
     | 
    
         
            +
                  task "clear" => "#{name}:clean"
         
     | 
| 
      
 103 
     | 
    
         
            +
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                def define_compiled_task
         
     | 
| 
      
 106 
     | 
    
         
            +
                  task "compiled" do
         
     | 
| 
      
 107 
     | 
    
         
            +
                    jar.compile(config)
         
     | 
| 
      
 108 
     | 
    
         
            +
                    task @name do
         
     | 
| 
      
 109 
     | 
    
         
            +
                      rm_f config.compiled_ruby_files.map {|f| f.sub(/\.rb$/, '.class') }
         
     | 
| 
      
 110 
     | 
    
         
            +
                    end
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
                end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                def define_files_task
         
     | 
| 
      
 115 
     | 
    
         
            +
                  task "files" do
         
     | 
| 
      
 116 
     | 
    
         
            +
                    jar.apply(config)
         
     | 
| 
      
 117 
     | 
    
         
            +
                  end
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                def define_jar_task
         
     | 
| 
      
 121 
     | 
    
         
            +
                  task "jar" do
         
     | 
| 
      
 122 
     | 
    
         
            +
                    jar.create(config)
         
     | 
| 
      
 123 
     | 
    
         
            +
                  end
         
     | 
| 
      
 124 
     | 
    
         
            +
                end
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                def define_debug_task
         
     | 
| 
      
 127 
     | 
    
         
            +
                  desc "Dump diagnostic information"
         
     | 
| 
      
 128 
     | 
    
         
            +
                  task "debug" => "files" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                    require 'yaml'
         
     | 
| 
      
 130 
     | 
    
         
            +
                    puts config.dump
         
     | 
| 
      
 131 
     | 
    
         
            +
                    jar.files.each {|k,v| puts "#{k} -> #{String === v ? v : '<blob>'}"}
         
     | 
| 
      
 132 
     | 
    
         
            +
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
                  task "debug:includes" => "files" do
         
     | 
| 
      
 134 
     | 
    
         
            +
                    puts "", "included files:"
         
     | 
| 
      
 135 
     | 
    
         
            +
                    puts *war.app_filelist.include
         
     | 
| 
      
 136 
     | 
    
         
            +
                  end
         
     | 
| 
      
 137 
     | 
    
         
            +
                  task "debug:excludes" => "files" do
         
     | 
| 
      
 138 
     | 
    
         
            +
                    puts "", "excluded files:"
         
     | 
| 
      
 139 
     | 
    
         
            +
                    puts *war.app_filelist.exclude
         
     | 
| 
      
 140 
     | 
    
         
            +
                  end
         
     | 
| 
      
 141 
     | 
    
         
            +
                end
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                def define_extra_tasks
         
     | 
| 
      
 144 
     | 
    
         
            +
                  @config.define_tasks
         
     | 
| 
      
 145 
     | 
    
         
            +
                end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                def define_config_task
         
     | 
| 
      
 148 
     | 
    
         
            +
                  task "config" do
         
     | 
| 
      
 149 
     | 
    
         
            +
                    if File.exists?(Warbler::Config::FILE) && ENV["FORCE"].nil?
         
     | 
| 
      
 150 
     | 
    
         
            +
                      puts "There's another bird sitting on my favorite branch"
         
     | 
| 
      
 151 
     | 
    
         
            +
                      puts "(file '#{Warbler::Config::FILE}' already exists. Pass argument FORCE=1 to override)"
         
     | 
| 
      
 152 
     | 
    
         
            +
                    elsif !File.directory?("config")
         
     | 
| 
      
 153 
     | 
    
         
            +
                      puts "I'm confused; my favorite branch is missing"
         
     | 
| 
      
 154 
     | 
    
         
            +
                      puts "(directory 'config' is missing)"
         
     | 
| 
      
 155 
     | 
    
         
            +
                    else
         
     | 
| 
      
 156 
     | 
    
         
            +
                      cp "#{Warbler::WARBLER_HOME}/warble.rb", Warbler::Config::FILE
         
     | 
| 
      
 157 
     | 
    
         
            +
                    end
         
     | 
| 
      
 158 
     | 
    
         
            +
                  end
         
     | 
| 
      
 159 
     | 
    
         
            +
                end
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
                def define_pluginize_task
         
     | 
| 
      
 162 
     | 
    
         
            +
                  task "pluginize" do
         
     | 
| 
      
 163 
     | 
    
         
            +
                    if !Dir["vendor/plugins/warbler*"].empty? && ENV["FORCE"].nil?
         
     | 
| 
      
 164 
     | 
    
         
            +
                      puts "I found an old nest in vendor/plugins; please trash it so I can make a new one"
         
     | 
| 
      
 165 
     | 
    
         
            +
                      puts "(directory vendor/plugins/warbler* exists)"
         
     | 
| 
      
 166 
     | 
    
         
            +
                    else
         
     | 
| 
      
 167 
     | 
    
         
            +
                      rm_rf FileList["vendor/plugins/warbler*"], :verbose => false
         
     | 
| 
      
 168 
     | 
    
         
            +
                      mkdir_p "vendor/plugins/warbler/tasks"
         
     | 
| 
      
 169 
     | 
    
         
            +
                      File.open("vendor/plugins/warbler/tasks/warbler.rake", "w") do |f|
         
     | 
| 
      
 170 
     | 
    
         
            +
                        f.puts "require 'warbler'"
         
     | 
| 
      
 171 
     | 
    
         
            +
                        f.puts "Warbler::Task.new"
         
     | 
| 
      
 172 
     | 
    
         
            +
                      end
         
     | 
| 
      
 173 
     | 
    
         
            +
                    end
         
     | 
| 
      
 174 
     | 
    
         
            +
                  end
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                def define_version_task
         
     | 
| 
      
 178 
     | 
    
         
            +
                  task "version" do
         
     | 
| 
      
 179 
     | 
    
         
            +
                    puts "Warbler version #{Warbler::VERSION}"
         
     | 
| 
      
 180 
     | 
    
         
            +
                  end
         
     | 
| 
      
 181 
     | 
    
         
            +
                end
         
     | 
| 
      
 182 
     | 
    
         
            +
              end
         
     | 
| 
      
 183 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            WARBLER_CONFIG = <%= config.webxml ? config.webxml.context_params(false).inspect : '{}' %>
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ENV['RACK_ENV'] = '<%= (params = config.webxml.context_params; params['rack.env']) %>'
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ENV['RAILS_ENV'] = '<%= config.webxml.rails.env %>'
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ENV['GEM_HOME'] ||= $servlet_context.getRealPath('<%= config.gem_path %>')
         
     | 
| 
         @@ -0,0 +1,107 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010-2011 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2007-2009 Sun Microsystems, Inc.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 5 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 6 
     | 
    
         
            +
            #++
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 11 
     | 
    
         
            +
              # Traits are project configuration characteristics that correspond
         
     | 
| 
      
 12 
     | 
    
         
            +
              # to the framework or project layout. Each trait corresponds to a
         
     | 
| 
      
 13 
     | 
    
         
            +
              # class in Warbler::Traits that contains baked-in knowledge about
         
     | 
| 
      
 14 
     | 
    
         
            +
              # the kind of project and how it should be packed into the jar or
         
     | 
| 
      
 15 
     | 
    
         
            +
              # war file.
         
     | 
| 
      
 16 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 17 
     | 
    
         
            +
                attr_accessor :traits
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @traits = auto_detect_traits
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def auto_detect_traits
         
     | 
| 
      
 24 
     | 
    
         
            +
                  Traits.constants.map {|t| Traits.const_get(t)}.select {|tc| tc.detect? }.sort
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def before_configure
         
     | 
| 
      
 28 
     | 
    
         
            +
                  trait_objects.each {|t| t.before_configure }
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                def after_configure
         
     | 
| 
      
 32 
     | 
    
         
            +
                  trait_objects.each {|t| t.after_configure }
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                def trait_objects
         
     | 
| 
      
 36 
     | 
    
         
            +
                  @trait_objects ||= @traits.map {|klass| klass.new(self) }
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def update_archive(jar)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  trait_objects.each {|t| t.update_archive(jar) }
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def dump_traits
         
     | 
| 
      
 44 
     | 
    
         
            +
                  @trait_objects = nil
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @traits.collect! {|t| t.name }
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              # Each trait class includes this module to receive shared functionality.
         
     | 
| 
      
 50 
     | 
    
         
            +
              module Trait
         
     | 
| 
      
 51 
     | 
    
         
            +
                module ClassMethods
         
     | 
| 
      
 52 
     | 
    
         
            +
                  def <=>(o)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    requires?(o) ? 1 : (o.requires?(self) ? -1 : 0)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  def requires?(t)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    false
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                def self.included(base)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  base.extend ClassMethods
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                attr_reader :config
         
     | 
| 
      
 66 
     | 
    
         
            +
                def initialize(config)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  @config = config
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                def before_configure
         
     | 
| 
      
 71 
     | 
    
         
            +
                end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                def after_configure
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                def update_archive(jar)
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                def add_init_load_path(path)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  config.init_contents << StringIO.new("$LOAD_PATH.unshift __FILE__.sub(/!.*/, '!/#{path}')\n")
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                def add_main_rb(jar, bin_path)
         
     | 
| 
      
 84 
     | 
    
         
            +
                  jar.files['META-INF/main.rb'] = StringIO.new("load '#{bin_path}'")
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                def update_gem_path(default_gem_path)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  if config.gem_path != default_gem_path
         
     | 
| 
      
 89 
     | 
    
         
            +
                    config.gem_path = "/#{config.gem_path}" unless config.gem_path =~ %r{^/}
         
     | 
| 
      
 90 
     | 
    
         
            +
                    sub_gem_path = config.gem_path[1..-1]
         
     | 
| 
      
 91 
     | 
    
         
            +
                    config.pathmaps.marshal_dump.keys.each do |pm|
         
     | 
| 
      
 92 
     | 
    
         
            +
                      config.pathmaps.send(pm).each {|p| p.sub!(default_gem_path[1..-1], sub_gem_path)}
         
     | 
| 
      
 93 
     | 
    
         
            +
                    end
         
     | 
| 
      
 94 
     | 
    
         
            +
                    config.webxml["gem"]["path"] = config.gem_path if config.webxml
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
            end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
            require 'warbler/traits/jar'
         
     | 
| 
      
 101 
     | 
    
         
            +
            require 'warbler/traits/war'
         
     | 
| 
      
 102 
     | 
    
         
            +
            require 'warbler/traits/rails'
         
     | 
| 
      
 103 
     | 
    
         
            +
            require 'warbler/traits/merb'
         
     | 
| 
      
 104 
     | 
    
         
            +
            require 'warbler/traits/rack'
         
     | 
| 
      
 105 
     | 
    
         
            +
            require 'warbler/traits/bundler'
         
     | 
| 
      
 106 
     | 
    
         
            +
            require 'warbler/traits/gemspec'
         
     | 
| 
      
 107 
     | 
    
         
            +
            require 'warbler/traits/nogemspec'
         
     | 
| 
         @@ -0,0 +1,104 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010-2011 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2007-2009 Sun Microsystems, Inc.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 5 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 6 
     | 
    
         
            +
            #++
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 9 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 10 
     | 
    
         
            +
                # The Bundler trait uses Bundler to determine gem dependencies to
         
     | 
| 
      
 11 
     | 
    
         
            +
                # be added to the project.
         
     | 
| 
      
 12 
     | 
    
         
            +
                class Bundler
         
     | 
| 
      
 13 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 16 
     | 
    
         
            +
                    File.exist?(ENV['BUNDLE_GEMFILE'] || "Gemfile")
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def self.requires?(trait)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    trait == Traits::War || trait == Traits::Jar
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.bundler = true
         
     | 
| 
      
 25 
     | 
    
         
            +
                    config.bundle_without = ["development", "test"]
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 29 
     | 
    
         
            +
                    add_bundler_gems if config.bundler
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def add_bundler_gems
         
     | 
| 
      
 33 
     | 
    
         
            +
            	require 'bundler'
         
     | 
| 
      
 34 
     | 
    
         
            +
                    config.gems.clear
         
     | 
| 
      
 35 
     | 
    
         
            +
                    config.gem_dependencies = false # Bundler takes care of these
         
     | 
| 
      
 36 
     | 
    
         
            +
                    config.bundler = {}
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    bundler_specs.each do |spec|
         
     | 
| 
      
 39 
     | 
    
         
            +
                      # Bundler HAX -- fixup bad #loaded_from attribute in fake
         
     | 
| 
      
 40 
     | 
    
         
            +
                      # bundler gemspec from bundler/source.rb
         
     | 
| 
      
 41 
     | 
    
         
            +
                      if spec.name == "bundler"
         
     | 
| 
      
 42 
     | 
    
         
            +
                        full_gem_path = Pathname.new(spec.full_gem_path)
         
     | 
| 
      
 43 
     | 
    
         
            +
                        tries = 2
         
     | 
| 
      
 44 
     | 
    
         
            +
                        (full_gem_path = full_gem_path.dirname; tries -= 1) while tries > 0 && !full_gem_path.join('bundler.gemspec').exist?
         
     | 
| 
      
 45 
     | 
    
         
            +
                        spec.loaded_from = full_gem_path.to_s
         
     | 
| 
      
 46 
     | 
    
         
            +
                      end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                      case spec.source
         
     | 
| 
      
 49 
     | 
    
         
            +
                      when ::Bundler::Source::Git
         
     | 
| 
      
 50 
     | 
    
         
            +
                        config.bundler[:git_specs] ||= []
         
     | 
| 
      
 51 
     | 
    
         
            +
                        config.bundler[:git_specs] << spec
         
     | 
| 
      
 52 
     | 
    
         
            +
                      when ::Bundler::Source::Path
         
     | 
| 
      
 53 
     | 
    
         
            +
                        $stderr.puts("warning: Bundler `path' components are not currently supported.",
         
     | 
| 
      
 54 
     | 
    
         
            +
                                     "The `#{spec.full_name}' component was not bundled.",
         
     | 
| 
      
 55 
     | 
    
         
            +
                                     "Your application may fail to boot!")
         
     | 
| 
      
 56 
     | 
    
         
            +
                      else
         
     | 
| 
      
 57 
     | 
    
         
            +
                        config.gems << spec
         
     | 
| 
      
 58 
     | 
    
         
            +
                      end
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
                    config.bundler[:gemfile]  = ::Bundler.default_gemfile
         
     | 
| 
      
 61 
     | 
    
         
            +
                    config.bundler[:lockfile] = ::Bundler.default_lockfile
         
     | 
| 
      
 62 
     | 
    
         
            +
                    config.bundler[:frozen] = ::Bundler.settings[:frozen]
         
     | 
| 
      
 63 
     | 
    
         
            +
                    config.excludes += [::Bundler.settings[:path]] if ::Bundler.settings[:path]
         
     | 
| 
      
 64 
     | 
    
         
            +
                    config.init_contents << "#{config.warbler_templates}/bundler.erb"
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 68 
     | 
    
         
            +
                    add_bundler_files(jar) if config.bundler
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                  # Add Bundler Gemfiles and git repositories to the archive.
         
     | 
| 
      
 72 
     | 
    
         
            +
                  def add_bundler_files(jar)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    pwd = Pathname.new(Dir.pwd)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    gemfile  = config.bundler[:gemfile].relative_path_from(pwd).to_s
         
     | 
| 
      
 75 
     | 
    
         
            +
                    lockfile = config.bundler[:lockfile].relative_path_from(pwd).to_s
         
     | 
| 
      
 76 
     | 
    
         
            +
                    jar.files[jar.apply_pathmaps(config, gemfile, :application)] = config.bundler[:gemfile].to_s
         
     | 
| 
      
 77 
     | 
    
         
            +
                    if File.exist?(lockfile)
         
     | 
| 
      
 78 
     | 
    
         
            +
                      jar.files[jar.apply_pathmaps(config, lockfile, :application)] = config.bundler[:lockfile].to_s
         
     | 
| 
      
 79 
     | 
    
         
            +
                    end
         
     | 
| 
      
 80 
     | 
    
         
            +
                    if config.bundler[:git_specs]
         
     | 
| 
      
 81 
     | 
    
         
            +
                      pathmap = "#{config.relative_gem_path}/bundler/gems/%p"
         
     | 
| 
      
 82 
     | 
    
         
            +
                      pathmap.sub!(%r{^/+}, '')
         
     | 
| 
      
 83 
     | 
    
         
            +
                      config.pathmaps.git = [pathmap]
         
     | 
| 
      
 84 
     | 
    
         
            +
                      config.bundler[:git_specs].each do |spec|
         
     | 
| 
      
 85 
     | 
    
         
            +
                        full_gem_path = Pathname.new(spec.full_gem_path)
         
     | 
| 
      
 86 
     | 
    
         
            +
                        FileList["#{full_gem_path.to_s}/**/*"].each do |src|
         
     | 
| 
      
 87 
     | 
    
         
            +
                          f = Pathname.new(src).relative_path_from(full_gem_path).to_s
         
     | 
| 
      
 88 
     | 
    
         
            +
                          next if config.gem_excludes && config.gem_excludes.any? {|rx| f =~ rx }
         
     | 
| 
      
 89 
     | 
    
         
            +
                          jar.files[jar.apply_pathmaps(config, File.join(full_gem_path.basename, f), :git)] = src
         
     | 
| 
      
 90 
     | 
    
         
            +
                        end
         
     | 
| 
      
 91 
     | 
    
         
            +
                      end
         
     | 
| 
      
 92 
     | 
    
         
            +
                    end
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                  private
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                  def bundler_specs
         
     | 
| 
      
 98 
     | 
    
         
            +
            	bundle_without = config.bundle_without.map {|s| s.to_sym}
         
     | 
| 
      
 99 
     | 
    
         
            +
            	definition = ::Bundler.definition
         
     | 
| 
      
 100 
     | 
    
         
            +
                    definition.specs_for(definition.groups - bundle_without)
         
     | 
| 
      
 101 
     | 
    
         
            +
                  end
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
              end
         
     | 
| 
      
 104 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,59 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010-2011 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2007-2009 Sun Microsystems, Inc.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 5 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 6 
     | 
    
         
            +
            #++
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 9 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 10 
     | 
    
         
            +
                # The Gemspec trait reads a .gemspec file to determine the files,
         
     | 
| 
      
 11 
     | 
    
         
            +
                # executables, require paths, and dependencies for a project.
         
     | 
| 
      
 12 
     | 
    
         
            +
                class Gemspec
         
     | 
| 
      
 13 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 16 
     | 
    
         
            +
                    !Dir['*.gemspec'].empty?
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @spec_file = Dir['*.gemspec'].first
         
     | 
| 
      
 21 
     | 
    
         
            +
                    require 'yaml'
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @spec = File.open(@spec_file) {|f| Gem::Specification.from_yaml(f) } rescue Gem::Specification.load(@spec_file)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @spec.runtime_dependencies.each {|g| config.gems << g }
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.dirs = []
         
     | 
| 
      
 25 
     | 
    
         
            +
                    config.compiled_ruby_files = @spec.files.select {|f| f =~ /\.rb$/}
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @spec.require_paths.each do |p|
         
     | 
| 
      
 30 
     | 
    
         
            +
                      add_init_load_path(config.pathmaps.application.inject(p) {|pm,x| pm.pathmap(x)})
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    (Dir['**/*'] - config.compiled_ruby_files).each do |f|
         
     | 
| 
      
 36 
     | 
    
         
            +
                      jar.files[jar.apply_pathmaps(config, f, :application)] = f
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                    config.compiled_ruby_files.each do |f|
         
     | 
| 
      
 39 
     | 
    
         
            +
                      f = f.sub(/\.rb$/, '.class')
         
     | 
| 
      
 40 
     | 
    
         
            +
                      next unless File.exist?(f)
         
     | 
| 
      
 41 
     | 
    
         
            +
                      jar.files[jar.apply_pathmaps(config, f, :application)] = f
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                    bin_path = jar.apply_pathmaps(config, default_executable, :application)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    add_main_rb(jar, bin_path)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  def default_executable
         
     | 
| 
      
 48 
     | 
    
         
            +
                    if !@spec.executables.empty?
         
     | 
| 
      
 49 
     | 
    
         
            +
                      "bin/#{@spec.executables.first}"
         
     | 
| 
      
 50 
     | 
    
         
            +
                    else
         
     | 
| 
      
 51 
     | 
    
         
            +
                      exe = Dir['bin/*'].first
         
     | 
| 
      
 52 
     | 
    
         
            +
                      raise "No executable script found" unless exe
         
     | 
| 
      
 53 
     | 
    
         
            +
                      warn "No default executable found in #{@spec_file}, using #{exe}"
         
     | 
| 
      
 54 
     | 
    
         
            +
                      exe
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     |