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
 
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 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 
     | 
    
         
            +
            require 'ostruct'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 12 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 13 
     | 
    
         
            +
                # The Jar trait sets up the archive layout for an executable jar
         
     | 
| 
      
 14 
     | 
    
         
            +
                # project, and adds the JRuby jar files and a JarMain class to the
         
     | 
| 
      
 15 
     | 
    
         
            +
                # archive.
         
     | 
| 
      
 16 
     | 
    
         
            +
                class Jar
         
     | 
| 
      
 17 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 20 
     | 
    
         
            +
                    !War.detect?
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.gem_path      = '/'
         
     | 
| 
      
 25 
     | 
    
         
            +
                    config.pathmaps      = default_pathmaps
         
     | 
| 
      
 26 
     | 
    
         
            +
                    config.java_libs     = default_jar_files
         
     | 
| 
      
 27 
     | 
    
         
            +
                    config.manifest_file = 'MANIFEST.MF' if File.exist?('MANIFEST.MF')
         
     | 
| 
      
 28 
     | 
    
         
            +
                    config.init_contents << "#{config.warbler_templates}/jar.erb"
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 32 
     | 
    
         
            +
                    config.init_contents << StringIO.new("require 'rubygems'\n")
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    jar.files['META-INF/MANIFEST.MF'] = StringIO.new(Warbler::Jar::DEFAULT_MANIFEST.chomp + "Main-Class: JarMain\n") unless config.manifest_file
         
     | 
| 
      
 37 
     | 
    
         
            +
                    jar.files['JarMain.class'] = jar.entry_in_jar("#{WARBLER_HOME}/lib/warbler_jar.jar", "JarMain.class")
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  def default_pathmaps
         
     | 
| 
      
 41 
     | 
    
         
            +
                    p = OpenStruct.new
         
     | 
| 
      
 42 
     | 
    
         
            +
                    p.java_libs    = ["META-INF/lib/%f"]
         
     | 
| 
      
 43 
     | 
    
         
            +
                    p.java_classes = ["%p"]
         
     | 
| 
      
 44 
     | 
    
         
            +
                    p.application  = ["#{config.jar_name}/%p"]
         
     | 
| 
      
 45 
     | 
    
         
            +
                    p.gemspecs     = ["specifications/%f"]
         
     | 
| 
      
 46 
     | 
    
         
            +
                    p.gems         = ["gems/%p"]
         
     | 
| 
      
 47 
     | 
    
         
            +
                    p
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  def default_jar_files
         
     | 
| 
      
 51 
     | 
    
         
            +
                    require 'jruby-jars'
         
     | 
| 
      
 52 
     | 
    
         
            +
                    FileList[JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path]
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 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 Merb trait adds Merb::BootLoader gem dependencies to the project.
         
     | 
| 
      
 11 
     | 
    
         
            +
                class Merb
         
     | 
| 
      
 12 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 15 
     | 
    
         
            +
                    File.exist?("config/init.rb")
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def self.requires?(trait)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    trait == Traits::War
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 23 
     | 
    
         
            +
                    return false unless task = Warbler.project_application.lookup("merb_env")
         
     | 
| 
      
 24 
     | 
    
         
            +
                    task.invoke rescue nil
         
     | 
| 
      
 25 
     | 
    
         
            +
                    return false unless defined?(::Merb)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    config.webxml.booter = :merb
         
     | 
| 
      
 27 
     | 
    
         
            +
                    if defined?(::Merb::BootLoader::Dependencies.dependencies)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      ::Merb::BootLoader::Dependencies.dependencies.each {|g| config.gems << g }
         
     | 
| 
      
 29 
     | 
    
         
            +
                    else
         
     | 
| 
      
 30 
     | 
    
         
            +
                      warn "unable to auto-detect Merb dependencies; upgrade to Merb 1.0 or greater"
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 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 NoGemspec trait is used when no gemspec file is found for a
         
     | 
| 
      
 11 
     | 
    
         
            +
                # jar project. It assumes a standard layout including +bin+ and
         
     | 
| 
      
 12 
     | 
    
         
            +
                # +lib+ directories.
         
     | 
| 
      
 13 
     | 
    
         
            +
                class NoGemspec
         
     | 
| 
      
 14 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 17 
     | 
    
         
            +
                    Jar.detect? && !Gemspec.detect?
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 21 
     | 
    
         
            +
                    config.dirs = ['.']
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 25 
     | 
    
         
            +
                    if File.directory?("lib")
         
     | 
| 
      
 26 
     | 
    
         
            +
                      add_init_load_path(config.pathmaps.application.inject("lib") {|pm,x| pm.pathmap(x)})
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    add_main_rb(jar, jar.apply_pathmaps(config, default_executable, :application))
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  def default_executable
         
     | 
| 
      
 35 
     | 
    
         
            +
                    exes = Dir['bin/*']
         
     | 
| 
      
 36 
     | 
    
         
            +
                    exe = exes.grep(/#{config.jar_name}/).first || exes.first
         
     | 
| 
      
 37 
     | 
    
         
            +
                    raise "No executable script found" unless exe
         
     | 
| 
      
 38 
     | 
    
         
            +
                    exe
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 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 Rack trait adds config.ru to a Rack-based war project.
         
     | 
| 
      
 11 
     | 
    
         
            +
                class Rack
         
     | 
| 
      
 12 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 15 
     | 
    
         
            +
                    !Rails.detect? && (File.exist?("config.ru") || !Dir['*/config.ru'].empty?)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def self.requires?(trait)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    trait == Traits::War
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 23 
     | 
    
         
            +
                    config.webxml.booter = :rack
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.webinf_files += [FileList['config.ru', '*/config.ru'].detect {|f| File.exist?(f)}]
         
     | 
| 
      
 25 
     | 
    
         
            +
                    config.webxml.rack.env = ENV['RACK_ENV'] || 'production'
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 29 
     | 
    
         
            +
                    config.init_contents << "#{config.warbler_templates}/rack.erb"
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,62 @@ 
     | 
|
| 
      
 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 Rails trait invokes the Rake environment task and sets up Rails for a war-based project.
         
     | 
| 
      
 11 
     | 
    
         
            +
                class Rails
         
     | 
| 
      
 12 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 15 
     | 
    
         
            +
                    File.exist?("config/environment.rb")
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def self.requires?(trait)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    trait == Traits::War
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 23 
     | 
    
         
            +
                    config.jar_name = default_app_name
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    return unless Warbler.framework_detection
         
     | 
| 
      
 27 
     | 
    
         
            +
                    return false unless task = Warbler.project_application.lookup("environment")
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                    task.invoke rescue nil
         
     | 
| 
      
 30 
     | 
    
         
            +
                    return false unless defined?(::Rails)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    config.dirs << "tmp" if File.directory?("tmp")
         
     | 
| 
      
 33 
     | 
    
         
            +
                    config.webxml.booter = :rails
         
     | 
| 
      
 34 
     | 
    
         
            +
                    unless (defined?(::Rails.vendor_rails?) && ::Rails.vendor_rails?) || File.directory?("vendor/rails")
         
     | 
| 
      
 35 
     | 
    
         
            +
                      config.gems["rails"] = ::Rails::VERSION::STRING
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                    if defined?(::Rails.configuration.gems)
         
     | 
| 
      
 38 
     | 
    
         
            +
                      ::Rails.configuration.gems.each do |g|
         
     | 
| 
      
 39 
     | 
    
         
            +
                        config.gems << Gem::Dependency.new(g.name, g.requirement) if Dir["vendor/gems/#{g.name}*"].empty?
         
     | 
| 
      
 40 
     | 
    
         
            +
                      end
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 45 
     | 
    
         
            +
                    config.init_contents << "#{config.warbler_templates}/rails.erb"
         
     | 
| 
      
 46 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 47 
     | 
    
         
            +
                      rails_env = config.webxml.rails.env
         
     | 
| 
      
 48 
     | 
    
         
            +
                      unless IO.readlines("config/environments/#{rails_env}.rb").grep(/^\s*config\.threadsafe!/).empty?
         
     | 
| 
      
 49 
     | 
    
         
            +
                        config.webxml.jruby.min.runtimes = 1 unless Integer === config.webxml.jruby.min.runtimes
         
     | 
| 
      
 50 
     | 
    
         
            +
                        config.webxml.jruby.max.runtimes = 1 unless Integer === config.webxml.jruby.max.runtimes
         
     | 
| 
      
 51 
     | 
    
         
            +
                      end
         
     | 
| 
      
 52 
     | 
    
         
            +
                    rescue
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  def default_app_name
         
     | 
| 
      
 58 
     | 
    
         
            +
                    File.basename(File.expand_path(defined?(::Rails.root) ? ::Rails.root : (defined?(RAILS_ROOT) ? RAILS_ROOT : Dir.getwd)))
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,197 @@ 
     | 
|
| 
      
 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 'ostruct'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 11 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 12 
     | 
    
         
            +
                # The War trait sets up the layout and generates web.xml for the war project.
         
     | 
| 
      
 13 
     | 
    
         
            +
                class War
         
     | 
| 
      
 14 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  DEFAULT_GEM_PATH = '/WEB-INF/gems'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 19 
     | 
    
         
            +
                    Traits::Rails.detect? || Traits::Merb.detect? || Traits::Rack.detect?
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 23 
     | 
    
         
            +
                    config.gem_path      = DEFAULT_GEM_PATH
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.pathmaps      = default_pathmaps
         
     | 
| 
      
 25 
     | 
    
         
            +
                    config.webxml        = default_webxml_config
         
     | 
| 
      
 26 
     | 
    
         
            +
                    config.webinf_files  = default_webinf_files
         
     | 
| 
      
 27 
     | 
    
         
            +
                    config.java_libs     = default_jar_files
         
     | 
| 
      
 28 
     | 
    
         
            +
                    config.public_html   = FileList["public/**/*"]
         
     | 
| 
      
 29 
     | 
    
         
            +
                    config.jar_extension = 'war'
         
     | 
| 
      
 30 
     | 
    
         
            +
                    config.init_contents << "#{config.warbler_templates}/war.erb"
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 34 
     | 
    
         
            +
                    update_gem_path(DEFAULT_GEM_PATH)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  def default_pathmaps
         
     | 
| 
      
 38 
     | 
    
         
            +
                    p = OpenStruct.new
         
     | 
| 
      
 39 
     | 
    
         
            +
                    p.public_html  = ["%{public/,}p"]
         
     | 
| 
      
 40 
     | 
    
         
            +
                    p.java_libs    = ["WEB-INF/lib/%f"]
         
     | 
| 
      
 41 
     | 
    
         
            +
                    p.java_classes = ["WEB-INF/classes/%p"]
         
     | 
| 
      
 42 
     | 
    
         
            +
                    p.application  = ["WEB-INF/%p"]
         
     | 
| 
      
 43 
     | 
    
         
            +
                    p.webinf       = ["WEB-INF/%{.erb$,}f"]
         
     | 
| 
      
 44 
     | 
    
         
            +
                    p.gemspecs     = ["#{config.relative_gem_path}/specifications/%f"]
         
     | 
| 
      
 45 
     | 
    
         
            +
                    p.gems         = ["#{config.relative_gem_path}/gems/%p"]
         
     | 
| 
      
 46 
     | 
    
         
            +
                    p
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  def default_webxml_config
         
     | 
| 
      
 50 
     | 
    
         
            +
                    c = WebxmlOpenStruct.new
         
     | 
| 
      
 51 
     | 
    
         
            +
                    c.public.root = '/'
         
     | 
| 
      
 52 
     | 
    
         
            +
                    c.jndi = nil
         
     | 
| 
      
 53 
     | 
    
         
            +
                    c.ignored = %w(jndi booter)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    c
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  def default_webinf_files
         
     | 
| 
      
 58 
     | 
    
         
            +
                    webxml = if File.exist?("config/web.xml")
         
     | 
| 
      
 59 
     | 
    
         
            +
                      "config/web.xml"
         
     | 
| 
      
 60 
     | 
    
         
            +
                    elsif File.exist?("config/web.xml.erb")
         
     | 
| 
      
 61 
     | 
    
         
            +
                      "config/web.xml.erb"
         
     | 
| 
      
 62 
     | 
    
         
            +
                    else
         
     | 
| 
      
 63 
     | 
    
         
            +
                      "#{WARBLER_HOME}/web.xml.erb"
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
                    FileList[webxml]
         
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                  def default_jar_files
         
     | 
| 
      
 69 
     | 
    
         
            +
                    require 'jruby-jars'
         
     | 
| 
      
 70 
     | 
    
         
            +
                    require 'jruby-rack'
         
     | 
| 
      
 71 
     | 
    
         
            +
                    FileList[JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path, JRubyJars.jruby_rack_jar_path]
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 75 
     | 
    
         
            +
                    add_public_files(jar)
         
     | 
| 
      
 76 
     | 
    
         
            +
                    add_webxml(jar)
         
     | 
| 
      
 77 
     | 
    
         
            +
                    add_executables(jar) if config.features.include?("executable")
         
     | 
| 
      
 78 
     | 
    
         
            +
                    add_gemjar(jar) if config.features.include?("gemjar")
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  # Add public/static assets to the root of the war file.
         
     | 
| 
      
 82 
     | 
    
         
            +
                  def add_public_files(jar)
         
     | 
| 
      
 83 
     | 
    
         
            +
                    config.public_html.exclude *(config.excludes.to_a)
         
     | 
| 
      
 84 
     | 
    
         
            +
                    config.public_html.map {|f| jar.add_with_pathmaps(config, f, :public_html) }
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  # Add web.xml and other WEB-INF configuration files from
         
     | 
| 
      
 88 
     | 
    
         
            +
                  # config.webinf_files to the war file.
         
     | 
| 
      
 89 
     | 
    
         
            +
                  def add_webxml(jar)
         
     | 
| 
      
 90 
     | 
    
         
            +
                    config.webinf_files.each do |wf|
         
     | 
| 
      
 91 
     | 
    
         
            +
                      if wf =~ /\.erb$/
         
     | 
| 
      
 92 
     | 
    
         
            +
                        jar.files[jar.apply_pathmaps(config, wf, :webinf)] = jar.expand_erb(wf, config)
         
     | 
| 
      
 93 
     | 
    
         
            +
                      else
         
     | 
| 
      
 94 
     | 
    
         
            +
                        jar.files[jar.apply_pathmaps(config, wf, :webinf)] = wf
         
     | 
| 
      
 95 
     | 
    
         
            +
                      end
         
     | 
| 
      
 96 
     | 
    
         
            +
                    end
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                  def add_executables(jar)
         
     | 
| 
      
 100 
     | 
    
         
            +
                    winstone_type = ENV["WINSTONE"] || "winstone-lite"
         
     | 
| 
      
 101 
     | 
    
         
            +
                    winstone_version = ENV["WINSTONE_VERSION"] || "0.9.10"
         
     | 
| 
      
 102 
     | 
    
         
            +
                    winstone_path = "net/sourceforge/winstone/#{winstone_type}/#{winstone_version}/#{winstone_type}-#{winstone_version}.jar"
         
     | 
| 
      
 103 
     | 
    
         
            +
                    winstone_jar = File.expand_path("~/.m2/repository/#{winstone_path}")
         
     | 
| 
      
 104 
     | 
    
         
            +
                    unless File.exist?(winstone_jar)
         
     | 
| 
      
 105 
     | 
    
         
            +
                      # Not always covered in tests as these lines may not get
         
     | 
| 
      
 106 
     | 
    
         
            +
                      # executed every time if the jar is cached.
         
     | 
| 
      
 107 
     | 
    
         
            +
                      puts "Downloading #{winstone_type}.jar" #:nocov:
         
     | 
| 
      
 108 
     | 
    
         
            +
                      mkdir_p File.dirname(winstone_jar)      #:nocov:
         
     | 
| 
      
 109 
     | 
    
         
            +
                      require 'open-uri'                      #:nocov:
         
     | 
| 
      
 110 
     | 
    
         
            +
                      maven_repo = ENV["MAVEN_REPO"] || "http://repo2.maven.org/maven2" #:nocov:
         
     | 
| 
      
 111 
     | 
    
         
            +
                      open("#{maven_repo}/#{winstone_path}") do |stream| #:nocov:
         
     | 
| 
      
 112 
     | 
    
         
            +
                        File.open(winstone_jar, "wb") do |f| #:nocov:
         
     | 
| 
      
 113 
     | 
    
         
            +
                          while buf = stream.read(4096) #:nocov:
         
     | 
| 
      
 114 
     | 
    
         
            +
                            f << buf                    #:nocov:
         
     | 
| 
      
 115 
     | 
    
         
            +
                          end                           #:nocov:
         
     | 
| 
      
 116 
     | 
    
         
            +
                        end                             #:nocov:
         
     | 
| 
      
 117 
     | 
    
         
            +
                      end                               #:nocov:
         
     | 
| 
      
 118 
     | 
    
         
            +
                    end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                    jar.files['META-INF/MANIFEST.MF'] = StringIO.new(Warbler::Jar::DEFAULT_MANIFEST.chomp + "Main-Class: WarMain\n")
         
     | 
| 
      
 121 
     | 
    
         
            +
                    jar.files['WarMain.class'] = jar.entry_in_jar("#{WARBLER_HOME}/lib/warbler_jar.jar", 'WarMain.class')
         
     | 
| 
      
 122 
     | 
    
         
            +
                    jar.files['WEB-INF/winstone.jar'] = winstone_jar
         
     | 
| 
      
 123 
     | 
    
         
            +
                  end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                  def add_gemjar(jar)
         
     | 
| 
      
 126 
     | 
    
         
            +
                    gem_jar = Warbler::Jar.new
         
     | 
| 
      
 127 
     | 
    
         
            +
                    gem_path = Regexp::quote(config.relative_gem_path)
         
     | 
| 
      
 128 
     | 
    
         
            +
                    gems = jar.files.select{|k,v| k =~ %r{#{gem_path}/} }
         
     | 
| 
      
 129 
     | 
    
         
            +
                    gems.each do |k,v|
         
     | 
| 
      
 130 
     | 
    
         
            +
                      gem_jar.files[k.sub(%r{#{gem_path}/}, '')] = v
         
     | 
| 
      
 131 
     | 
    
         
            +
                    end
         
     | 
| 
      
 132 
     | 
    
         
            +
                    jar.files["WEB-INF/lib/gems.jar"] = "tmp/gems.jar"
         
     | 
| 
      
 133 
     | 
    
         
            +
                    jar.files.reject!{|k,v| k =~ /#{gem_path}/ || k == "WEB-INF/tmp/gems.jar"}
         
     | 
| 
      
 134 
     | 
    
         
            +
                    mkdir_p "tmp"
         
     | 
| 
      
 135 
     | 
    
         
            +
                    gem_jar.add_manifest
         
     | 
| 
      
 136 
     | 
    
         
            +
                    gem_jar.create("tmp/gems.jar")
         
     | 
| 
      
 137 
     | 
    
         
            +
                  end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                  # Helper class for holding arbitrary config.webxml values for injecting into +web.xml+.
         
     | 
| 
      
 140 
     | 
    
         
            +
                  class WebxmlOpenStruct < OpenStruct
         
     | 
| 
      
 141 
     | 
    
         
            +
                    %w(java com org javax gem).each do |name|
         
     | 
| 
      
 142 
     | 
    
         
            +
                      undef_method name        if Object.methods.include?(name)
         
     | 
| 
      
 143 
     | 
    
         
            +
                      undef_method name.to_sym if Object.methods.include?(name.to_sym)
         
     | 
| 
      
 144 
     | 
    
         
            +
                    end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                    def initialize(key = 'webxml')
         
     | 
| 
      
 147 
     | 
    
         
            +
                      @key = key
         
     | 
| 
      
 148 
     | 
    
         
            +
                      @table = Hash.new {|h,k| h[k] = WebxmlOpenStruct.new(k) }
         
     | 
| 
      
 149 
     | 
    
         
            +
                    end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                    def servlet_context_listener
         
     | 
| 
      
 152 
     | 
    
         
            +
                      case self.booter
         
     | 
| 
      
 153 
     | 
    
         
            +
                      when :rack
         
     | 
| 
      
 154 
     | 
    
         
            +
                        "org.jruby.rack.RackServletContextListener"
         
     | 
| 
      
 155 
     | 
    
         
            +
                      when :merb
         
     | 
| 
      
 156 
     | 
    
         
            +
                        "org.jruby.rack.merb.MerbServletContextListener"
         
     | 
| 
      
 157 
     | 
    
         
            +
                      else # :rails, default
         
     | 
| 
      
 158 
     | 
    
         
            +
                        "org.jruby.rack.rails.RailsServletContextListener"
         
     | 
| 
      
 159 
     | 
    
         
            +
                      end
         
     | 
| 
      
 160 
     | 
    
         
            +
                    end
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                    def [](key)
         
     | 
| 
      
 163 
     | 
    
         
            +
                      new_ostruct_member(key)
         
     | 
| 
      
 164 
     | 
    
         
            +
                      send(key)
         
     | 
| 
      
 165 
     | 
    
         
            +
                    end
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
                    def []=(key, value)
         
     | 
| 
      
 168 
     | 
    
         
            +
                      new_ostruct_member(key)
         
     | 
| 
      
 169 
     | 
    
         
            +
                      send("#{key}=", value)
         
     | 
| 
      
 170 
     | 
    
         
            +
                    end
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                    def context_params(escape = true)
         
     | 
| 
      
 173 
     | 
    
         
            +
                      require 'cgi'
         
     | 
| 
      
 174 
     | 
    
         
            +
                      params = {}
         
     | 
| 
      
 175 
     | 
    
         
            +
                      @table.each do |k,v|
         
     | 
| 
      
 176 
     | 
    
         
            +
                        case v
         
     | 
| 
      
 177 
     | 
    
         
            +
                        when WebxmlOpenStruct
         
     | 
| 
      
 178 
     | 
    
         
            +
                          nested_params = v.context_params
         
     | 
| 
      
 179 
     | 
    
         
            +
                          nested_params.each do |nk,nv|
         
     | 
| 
      
 180 
     | 
    
         
            +
                            params["#{escape ? CGI::escapeHTML(k.to_s) : k.to_s}.#{nk}"] = nv
         
     | 
| 
      
 181 
     | 
    
         
            +
                          end
         
     | 
| 
      
 182 
     | 
    
         
            +
                        else
         
     | 
| 
      
 183 
     | 
    
         
            +
                          params[escape ? CGI::escapeHTML(k.to_s) : k.to_s] = escape ? CGI::escapeHTML(v.to_s) : v.to_s
         
     | 
| 
      
 184 
     | 
    
         
            +
                        end
         
     | 
| 
      
 185 
     | 
    
         
            +
                      end
         
     | 
| 
      
 186 
     | 
    
         
            +
                      extra_ignored = Array === ignored ? ignored : []
         
     | 
| 
      
 187 
     | 
    
         
            +
                      params.delete_if {|k,v| ['ignored', *extra_ignored].include?(k.to_s) }
         
     | 
| 
      
 188 
     | 
    
         
            +
                      params
         
     | 
| 
      
 189 
     | 
    
         
            +
                    end
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
                    def to_s
         
     | 
| 
      
 192 
     | 
    
         
            +
                      "No value for '#@key' found"
         
     | 
| 
      
 193 
     | 
    
         
            +
                    end
         
     | 
| 
      
 194 
     | 
    
         
            +
                  end
         
     | 
| 
      
 195 
     | 
    
         
            +
                end
         
     | 
| 
      
 196 
     | 
    
         
            +
              end
         
     | 
| 
      
 197 
     | 
    
         
            +
            end
         
     |