warbler 1.2.1 → 1.3.0.beta1
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 +8 -5
 - data/History.txt +5 -0
 - data/Manifest.txt +43 -23
 - data/README.txt +67 -26
 - data/Rakefile +17 -6
 - data/ext/JarMain.java +147 -0
 - data/ext/{Main.java → WarMain.java} +4 -4
 - data/ext/{WarblerWar.java → WarblerJar.java} +79 -13
 - data/ext/{WarblerWarService.java → WarblerJarService.java} +2 -2
 - data/lib/warbler/application.rb +9 -9
 - data/lib/warbler/config.rb +58 -204
 - data/lib/warbler/gems.rb +2 -2
 - data/lib/warbler/jar.rb +247 -0
 - data/lib/warbler/task.rb +28 -60
 - data/lib/warbler/templates/config.erb +1 -1
 - data/lib/warbler/templates/rack.erb +1 -1
 - data/lib/warbler/templates/rails.erb +1 -1
 - data/lib/warbler/traits/bundler.rb +58 -0
 - data/lib/warbler/traits/gemspec.rb +64 -0
 - data/lib/warbler/traits/jar.rb +53 -0
 - data/lib/warbler/traits/merb.rb +34 -0
 - data/lib/warbler/traits/nogemspec.rb +41 -0
 - data/lib/warbler/traits/rack.rb +31 -0
 - data/lib/warbler/traits/rails.rb +57 -0
 - data/lib/warbler/traits/war.rb +191 -0
 - data/lib/warbler/traits.rb +105 -0
 - data/lib/warbler/version.rb +1 -1
 - data/lib/warbler/war.rb +1 -247
 - data/lib/warbler.rb +2 -5
 - data/lib/warbler_jar.jar +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 +41 -0
 - data/spec/sample_jar/test/test_sample_jar.rb +8 -0
 - data/spec/{sample → sample_war}/app/controllers/application.rb +0 -0
 - data/spec/{sample → sample_war}/app/helpers/application_helper.rb +0 -0
 - data/spec/{sample → sample_war}/config/boot.rb +0 -0
 - data/spec/{sample → sample_war}/config/database.yml +0 -0
 - data/spec/{sample → sample_war}/config/environment.rb +0 -0
 - data/spec/{sample → sample_war}/config/environments/development.rb +0 -0
 - data/spec/{sample → sample_war}/config/environments/production.rb +0 -0
 - data/spec/{sample → sample_war}/config/environments/test.rb +0 -0
 - data/spec/{sample → sample_war}/config/initializers/inflections.rb +0 -0
 - data/spec/{sample → sample_war}/config/initializers/mime_types.rb +0 -0
 - data/spec/{sample → sample_war}/config/initializers/new_rails_defaults.rb +0 -0
 - data/spec/{sample → sample_war}/config/routes.rb +0 -0
 - data/spec/{sample → sample_war}/lib/tasks/utils.rake +0 -0
 - data/spec/{sample → sample_war}/public/404.html +0 -0
 - data/spec/{sample → sample_war}/public/422.html +0 -0
 - data/spec/{sample → sample_war}/public/500.html +0 -0
 - data/spec/{sample → sample_war}/public/favicon.ico +0 -0
 - data/spec/{sample → sample_war}/public/index.html +0 -0
 - data/spec/{sample → sample_war}/public/robots.txt +0 -0
 - data/spec/spec_helper.rb +40 -0
 - data/spec/warbler/application_spec.rb +2 -9
 - data/spec/warbler/config_spec.rb +101 -83
 - data/spec/warbler/jar_spec.rb +763 -0
 - data/spec/warbler/task_spec.rb +56 -41
 - data/spec/warbler/traits_spec.rb +16 -0
 - data/spec/warbler/war_spec.rb +2 -492
 - data/warble.rb +36 -32
 - metadata +57 -35
 - data/lib/warbler_war.jar +0 -0
 
    
        data/lib/warbler/task.rb
    CHANGED
    
    | 
         @@ -7,8 +7,8 @@ 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            require 'rake'
         
     | 
| 
       9 
9 
     | 
    
         
             
            require 'rake/tasklib'
         
     | 
| 
       10 
     | 
    
         
            -
            require ' 
     | 
| 
       11 
     | 
    
         
            -
            require ' 
     | 
| 
      
 10 
     | 
    
         
            +
            require 'warbler/config'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'warbler/jar'
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            module Warbler
         
     | 
| 
       14 
14 
     | 
    
         
             
              # Warbler Rake task.  Allows defining multiple configurations inside the same
         
     | 
| 
         @@ -18,11 +18,11 @@ module Warbler 
     | 
|
| 
       18 
18 
     | 
    
         
             
              # code like the following in a Rakefile:
         
     | 
| 
       19 
19 
     | 
    
         
             
              #
         
     | 
| 
       20 
20 
     | 
    
         
             
              #     Warbler::Task.new("war1", Warbler::Config.new do |config|
         
     | 
| 
       21 
     | 
    
         
            -
              #       config. 
     | 
| 
      
 21 
     | 
    
         
            +
              #       config.jar_name = "war1"
         
     | 
| 
       22 
22 
     | 
    
         
             
              #       # ...
         
     | 
| 
       23 
23 
     | 
    
         
             
              #     end
         
     | 
| 
       24 
24 
     | 
    
         
             
              #     Warbler::Task.new("war2", Warbler::Config.new do |config|
         
     | 
| 
       25 
     | 
    
         
            -
              #       config. 
     | 
| 
      
 25 
     | 
    
         
            +
              #       config.jar_name = "war2"
         
     | 
| 
       26 
26 
     | 
    
         
             
              #       # ...
         
     | 
| 
       27 
27 
     | 
    
         
             
              #     end
         
     | 
| 
       28 
28 
     | 
    
         
             
              #
         
     | 
| 
         @@ -35,11 +35,10 @@ module Warbler 
     | 
|
| 
       35 
35 
     | 
    
         
             
                # Warbler::Config
         
     | 
| 
       36 
36 
     | 
    
         
             
                attr_accessor :config
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                # Warbler:: 
     | 
| 
       39 
     | 
    
         
            -
                attr_accessor : 
     | 
| 
      
 38 
     | 
    
         
            +
                # Warbler::Jar
         
     | 
| 
      
 39 
     | 
    
         
            +
                attr_accessor :jar
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                def initialize(name =  
     | 
| 
       42 
     | 
    
         
            -
                  @name   = name
         
     | 
| 
      
 41 
     | 
    
         
            +
                def initialize(name = nil, config = nil)
         
     | 
| 
       43 
42 
     | 
    
         
             
                  @config = config
         
     | 
| 
       44 
43 
     | 
    
         
             
                  if @config.nil? && File.exists?(Config::FILE)
         
     | 
| 
       45 
44 
     | 
    
         
             
                    @config = eval(File.open(Config::FILE) {|f| f.read})
         
     | 
| 
         @@ -49,11 +48,15 @@ module Warbler 
     | 
|
| 
       49 
48 
     | 
    
         
             
                    warn "Warbler::Config not provided by override in initializer or #{Config::FILE}; using defaults"
         
     | 
| 
       50 
49 
     | 
    
         
             
                    @config = Config.new
         
     | 
| 
       51 
50 
     | 
    
         
             
                  end
         
     | 
| 
       52 
     | 
    
         
            -
                  @ 
     | 
| 
      
 51 
     | 
    
         
            +
                  @name = name || @config.jar_extension
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @jar = Warbler::Jar.new
         
     | 
| 
       53 
53 
     | 
    
         
             
                  yield self if block_given?
         
     | 
| 
       54 
54 
     | 
    
         
             
                  define_tasks
         
     | 
| 
       55 
55 
     | 
    
         
             
                end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
      
 57 
     | 
    
         
            +
                # Deprecated: attr_accessor :war
         
     | 
| 
      
 58 
     | 
    
         
            +
                alias war jar
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       57 
60 
     | 
    
         
             
                private
         
     | 
| 
       58 
61 
     | 
    
         
             
                def define_tasks
         
     | 
| 
       59 
62 
     | 
    
         
             
                  define_main_task
         
     | 
| 
         @@ -72,7 +75,7 @@ module Warbler 
     | 
|
| 
       72 
75 
     | 
    
         
             
                end
         
     | 
| 
       73 
76 
     | 
    
         | 
| 
       74 
77 
     | 
    
         
             
                def define_main_task
         
     | 
| 
       75 
     | 
    
         
            -
                  desc "Create the project . 
     | 
| 
      
 78 
     | 
    
         
            +
                  desc "Create the project #{config.jar_extension} file"
         
     | 
| 
       76 
79 
     | 
    
         
             
                  task @name do
         
     | 
| 
       77 
80 
     | 
    
         
             
                    unless @config.features.empty?
         
     | 
| 
       78 
81 
     | 
    
         
             
                      @config.features.each do |feature|
         
     | 
| 
         @@ -93,28 +96,31 @@ module Warbler 
     | 
|
| 
       93 
96 
     | 
    
         
             
                end
         
     | 
| 
       94 
97 
     | 
    
         | 
| 
       95 
98 
     | 
    
         
             
                def define_clean_task
         
     | 
| 
       96 
     | 
    
         
            -
                  desc "Remove the . 
     | 
| 
      
 99 
     | 
    
         
            +
                  desc "Remove the project #{config.jar_extension} file"
         
     | 
| 
       97 
100 
     | 
    
         
             
                  task "clean" do
         
     | 
| 
       98 
     | 
    
         
            -
                    rm_f "#{config. 
     | 
| 
      
 101 
     | 
    
         
            +
                    rm_f "#{config.jar_name}.#{config.jar_extension}"
         
     | 
| 
       99 
102 
     | 
    
         
             
                  end
         
     | 
| 
       100 
103 
     | 
    
         
             
                  task "clear" => "#{name}:clean"
         
     | 
| 
       101 
104 
     | 
    
         
             
                end
         
     | 
| 
       102 
105 
     | 
    
         | 
| 
       103 
106 
     | 
    
         
             
                def define_compiled_task
         
     | 
| 
       104 
107 
     | 
    
         
             
                  task "compiled" do
         
     | 
| 
       105 
     | 
    
         
            -
                     
     | 
| 
      
 108 
     | 
    
         
            +
                    jar.compile(config)
         
     | 
| 
      
 109 
     | 
    
         
            +
                    task @name do
         
     | 
| 
      
 110 
     | 
    
         
            +
                      rm_f config.compiled_ruby_files.map {|f| f.sub(/\.rb$/, '.class') }
         
     | 
| 
      
 111 
     | 
    
         
            +
                    end
         
     | 
| 
       106 
112 
     | 
    
         
             
                  end
         
     | 
| 
       107 
113 
     | 
    
         
             
                end
         
     | 
| 
       108 
114 
     | 
    
         | 
| 
       109 
115 
     | 
    
         
             
                def define_files_task
         
     | 
| 
       110 
116 
     | 
    
         
             
                  task "files" do
         
     | 
| 
       111 
     | 
    
         
            -
                     
     | 
| 
      
 117 
     | 
    
         
            +
                    jar.apply(config)
         
     | 
| 
       112 
118 
     | 
    
         
             
                  end
         
     | 
| 
       113 
119 
     | 
    
         
             
                end
         
     | 
| 
       114 
120 
     | 
    
         | 
| 
       115 
121 
     | 
    
         
             
                def define_jar_task
         
     | 
| 
       116 
122 
     | 
    
         
             
                  task "jar" do
         
     | 
| 
       117 
     | 
    
         
            -
                     
     | 
| 
      
 123 
     | 
    
         
            +
                    jar.create(config)
         
     | 
| 
       118 
124 
     | 
    
         
             
                  end
         
     | 
| 
       119 
125 
     | 
    
         
             
                end
         
     | 
| 
       120 
126 
     | 
    
         | 
| 
         @@ -122,36 +128,22 @@ module Warbler 
     | 
|
| 
       122 
128 
     | 
    
         
             
                  desc "Dump diagnostic information"
         
     | 
| 
       123 
129 
     | 
    
         
             
                  task "debug" => "files" do
         
     | 
| 
       124 
130 
     | 
    
         
             
                    require 'yaml'
         
     | 
| 
       125 
     | 
    
         
            -
                    puts  
     | 
| 
       126 
     | 
    
         
            -
                     
     | 
| 
      
 131 
     | 
    
         
            +
                    puts config.dump
         
     | 
| 
      
 132 
     | 
    
         
            +
                    jar.files.each {|k,v| puts "#{k} -> #{String === v ? v : '<blob>'}"}
         
     | 
| 
       127 
133 
     | 
    
         
             
                  end
         
     | 
| 
       128 
134 
     | 
    
         
             
                  task "debug:includes" => "files" do
         
     | 
| 
       129 
135 
     | 
    
         
             
                    puts "", "included files:"
         
     | 
| 
       130 
     | 
    
         
            -
                    puts *war. 
     | 
| 
      
 136 
     | 
    
         
            +
                    puts *war.app_filelist.include
         
     | 
| 
       131 
137 
     | 
    
         
             
                  end
         
     | 
| 
       132 
138 
     | 
    
         
             
                  task "debug:excludes" => "files" do
         
     | 
| 
       133 
139 
     | 
    
         
             
                    puts "", "excluded files:"
         
     | 
| 
       134 
     | 
    
         
            -
                    puts *war. 
     | 
| 
      
 140 
     | 
    
         
            +
                    puts *war.app_filelist.exclude
         
     | 
| 
       135 
141 
     | 
    
         
             
                  end
         
     | 
| 
       136 
142 
     | 
    
         
             
                end
         
     | 
| 
       137 
143 
     | 
    
         | 
| 
       138 
144 
     | 
    
         
             
                def define_gemjar_task
         
     | 
| 
       139 
145 
     | 
    
         
             
                  task "gemjar" do
         
     | 
| 
       140 
     | 
    
         
            -
                     
     | 
| 
       141 
     | 
    
         
            -
                  end
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
                  gem_jar = Warbler::War.new
         
     | 
| 
       144 
     | 
    
         
            -
                  task "make_gemjar" => "files" do
         
     | 
| 
       145 
     | 
    
         
            -
                    gem_path = Regexp::quote(config.relative_gem_path)
         
     | 
| 
       146 
     | 
    
         
            -
                    gems = war.files.select{|k,v| k =~ %r{#{gem_path}/} }
         
     | 
| 
       147 
     | 
    
         
            -
                    gems.each do |k,v|
         
     | 
| 
       148 
     | 
    
         
            -
                      gem_jar.files[k.sub(%r{#{gem_path}/}, '')] = v
         
     | 
| 
       149 
     | 
    
         
            -
                    end
         
     | 
| 
       150 
     | 
    
         
            -
                    war.files["WEB-INF/lib/gems.jar"] = "tmp/gems.jar"
         
     | 
| 
       151 
     | 
    
         
            -
                    war.files.reject!{|k,v| k =~ /#{gem_path}/ }
         
     | 
| 
       152 
     | 
    
         
            -
                    mkdir_p "tmp"
         
     | 
| 
       153 
     | 
    
         
            -
                    gem_jar.add_manifest
         
     | 
| 
       154 
     | 
    
         
            -
                    gem_jar.create("tmp/gems.jar")
         
     | 
| 
      
 146 
     | 
    
         
            +
                    @config.features << "gemjar"
         
     | 
| 
       155 
147 
     | 
    
         
             
                  end
         
     | 
| 
       156 
148 
     | 
    
         
             
                end
         
     | 
| 
       157 
149 
     | 
    
         | 
| 
         @@ -186,32 +178,8 @@ module Warbler 
     | 
|
| 
       186 
178 
     | 
    
         
             
                end
         
     | 
| 
       187 
179 
     | 
    
         | 
| 
       188 
180 
     | 
    
         
             
                def define_executable_task
         
     | 
| 
       189 
     | 
    
         
            -
                   
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
                  winstone_path = "net/sourceforge/winstone/#{winstone_type}/#{winstone_version}/#{winstone_type}-#{winstone_version}.jar"
         
     | 
| 
       192 
     | 
    
         
            -
                  winstone_jar = File.expand_path("~/.m2/repository/#{winstone_path}")
         
     | 
| 
       193 
     | 
    
         
            -
                  file winstone_jar do |t|
         
     | 
| 
       194 
     | 
    
         
            -
                    # Not always covered in tests as these lines may not get
         
     | 
| 
       195 
     | 
    
         
            -
                    # executed every time if the jar is cached.
         
     | 
| 
       196 
     | 
    
         
            -
                    puts "Downloading #{winstone_type}.jar" #:nocov:
         
     | 
| 
       197 
     | 
    
         
            -
                    mkdir_p File.dirname(t.name)            #:nocov:
         
     | 
| 
       198 
     | 
    
         
            -
                    require 'open-uri'                      #:nocov:
         
     | 
| 
       199 
     | 
    
         
            -
                    maven_repo = ENV["MAVEN_REPO"] || "http://repo2.maven.org/maven2" #:nocov:
         
     | 
| 
       200 
     | 
    
         
            -
                    open("#{maven_repo}/#{winstone_path}") do |stream| #:nocov:
         
     | 
| 
       201 
     | 
    
         
            -
                      File.open(t.name, "wb") do |f|  #:nocov:
         
     | 
| 
       202 
     | 
    
         
            -
                        while buf = stream.read(4096) #:nocov:
         
     | 
| 
       203 
     | 
    
         
            -
                          f << buf                    #:nocov:
         
     | 
| 
       204 
     | 
    
         
            -
                        end                           #:nocov:
         
     | 
| 
       205 
     | 
    
         
            -
                      end                             #:nocov:
         
     | 
| 
       206 
     | 
    
         
            -
                    end                               #:nocov:
         
     | 
| 
       207 
     | 
    
         
            -
                  end
         
     | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
       209 
     | 
    
         
            -
                  task "executable" => winstone_jar do
         
     | 
| 
       210 
     | 
    
         
            -
                    war.files['META-INF/MANIFEST.MF'] = StringIO.new(War::DEFAULT_MANIFEST.chomp + "Main-Class: Main\n")
         
     | 
| 
       211 
     | 
    
         
            -
                    war.files['Main.class'] = Zip::ZipFile.open("#{WARBLER_HOME}/lib/warbler_war.jar") do |zf|
         
     | 
| 
       212 
     | 
    
         
            -
                      zf.get_input_stream('Main.class') {|io| StringIO.new(io.read) }
         
     | 
| 
       213 
     | 
    
         
            -
                    end
         
     | 
| 
       214 
     | 
    
         
            -
                    war.files['WEB-INF/winstone.jar'] = winstone_jar
         
     | 
| 
      
 181 
     | 
    
         
            +
                  task "executable" do
         
     | 
| 
      
 182 
     | 
    
         
            +
                    @config.features << "executable"
         
     | 
| 
       215 
183 
     | 
    
         
             
                  end
         
     | 
| 
       216 
184 
     | 
    
         
             
                end
         
     | 
| 
       217 
185 
     | 
    
         | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            WARBLER_CONFIG = <%= webxml.context_params(false) 
     | 
| 
      
 1 
     | 
    
         
            +
            WARBLER_CONFIG = <%= config.webxml ? config.webxml.context_params(false).inspect : '{}' %>
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ENV['RACK_ENV'] = '<%= (params = webxml.context_params; params['rack.env'] || params['rails.env']) %>'
         
     | 
| 
      
 1 
     | 
    
         
            +
            ENV['RACK_ENV'] = '<%= (params = config.webxml.context_params; params['rack.env'] || params['rails.env']) %>'
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ENV['RAILS_ENV'] = '<%= webxml.rails.env %>'
         
     | 
| 
      
 1 
     | 
    
         
            +
            ENV['RAILS_ENV'] = '<%= config.webxml.rails.env %>'
         
     | 
| 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #++
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 9 
     | 
    
         
            +
                # The Bundler trait uses Bundler to determine gem dependencies to
         
     | 
| 
      
 10 
     | 
    
         
            +
                # be added to the project.
         
     | 
| 
      
 11 
     | 
    
         
            +
                class Bundler
         
     | 
| 
      
 12 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 15 
     | 
    
         
            +
                    File.exist?("Gemfile")
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def self.requires?(trait)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    trait == Traits::War || trait == Traits::Jar
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 23 
     | 
    
         
            +
                    config.bundler = true
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.bundle_without = ["development", "test"]
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 28 
     | 
    
         
            +
                    add_bundler_gems if config.bundler
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  def add_bundler_gems
         
     | 
| 
      
 32 
     | 
    
         
            +
                    config.gems.clear
         
     | 
| 
      
 33 
     | 
    
         
            +
                    config.gem_dependencies = false # Bundler takes care of these
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    require 'bundler'
         
     | 
| 
      
 36 
     | 
    
         
            +
                    gemfile = Pathname.new("Gemfile").expand_path
         
     | 
| 
      
 37 
     | 
    
         
            +
                    root = gemfile.dirname
         
     | 
| 
      
 38 
     | 
    
         
            +
                    lockfile = root.join('Gemfile.lock')
         
     | 
| 
      
 39 
     | 
    
         
            +
                    definition = ::Bundler::Definition.build(gemfile, lockfile, nil)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    groups = definition.groups - config.bundle_without.map {|g| g.to_sym}
         
     | 
| 
      
 41 
     | 
    
         
            +
                    definition.specs_for(groups).each {|spec| config.gems << spec }
         
     | 
| 
      
 42 
     | 
    
         
            +
                    config.init_contents << StringIO.new("ENV['BUNDLE_WITHOUT'] = '#{config.bundle_without.join(':')}'\n")
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    add_bundler_files(jar) if config.bundler
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  # Add Bundler Gemfiles to the archive.
         
     | 
| 
      
 50 
     | 
    
         
            +
                  def add_bundler_files(jar)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    jar.files[jar.apply_pathmaps(config, 'Gemfile', :application)] = 'Gemfile'
         
     | 
| 
      
 52 
     | 
    
         
            +
                    if File.exist?('Gemfile.lock')
         
     | 
| 
      
 53 
     | 
    
         
            +
                      jar.files[jar.apply_pathmaps(config, 'Gemfile.lock', :application)] = 'Gemfile.lock'
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,64 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #++
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 9 
     | 
    
         
            +
                # The Gemspec trait reads a .gemspec file to determine the files,
         
     | 
| 
      
 10 
     | 
    
         
            +
                # executables, require paths, and dependencies for a project.
         
     | 
| 
      
 11 
     | 
    
         
            +
                class Gemspec
         
     | 
| 
      
 12 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 15 
     | 
    
         
            +
                    !Dir['*.gemspec'].empty?
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @spec_file = Dir['*.gemspec'].first
         
     | 
| 
      
 20 
     | 
    
         
            +
                    require 'yaml'
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @spec = File.open(@spec_file) {|f| Gem::Specification.from_yaml(f) } rescue Gem::Specification.load(@spec_file)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @spec.runtime_dependencies.each {|g| config.gems << g }
         
     | 
| 
      
 23 
     | 
    
         
            +
                    config.dirs = []
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.compiled_ruby_files = @spec.files.select {|f| f =~ /\.rb$/}
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @spec.require_paths.each do |p|
         
     | 
| 
      
 29 
     | 
    
         
            +
                      add_init_load_path(config.pathmaps.application.inject(p) {|pm,x| pm.pathmap(x)})
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 34 
     | 
    
         
            +
                    @spec.files.each do |f|
         
     | 
| 
      
 35 
     | 
    
         
            +
                      unless File.exist?(f)
         
     | 
| 
      
 36 
     | 
    
         
            +
                        warn "update your gemspec; skipping missing file #{f}"
         
     | 
| 
      
 37 
     | 
    
         
            +
                        next
         
     | 
| 
      
 38 
     | 
    
         
            +
                      end
         
     | 
| 
      
 39 
     | 
    
         
            +
                      file_key = jar.apply_pathmaps(config, f, :application)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      next if jar.files[file_key]
         
     | 
| 
      
 41 
     | 
    
         
            +
                      jar.files[file_key] = f
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                    config.compiled_ruby_files.each do |f|
         
     | 
| 
      
 44 
     | 
    
         
            +
                      f = f.sub(/\.rb$/, '.class')
         
     | 
| 
      
 45 
     | 
    
         
            +
                      next unless File.exist?(f)
         
     | 
| 
      
 46 
     | 
    
         
            +
                      jar.files[jar.apply_pathmaps(config, f, :application)] = f
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
      
 48 
     | 
    
         
            +
                    bin_path = jar.apply_pathmaps(config, default_executable, :application)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    add_main_rb(jar, bin_path)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  def default_executable
         
     | 
| 
      
 53 
     | 
    
         
            +
                    if @spec.default_executable
         
     | 
| 
      
 54 
     | 
    
         
            +
                      "bin/#{@spec.default_executable}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                    else
         
     | 
| 
      
 56 
     | 
    
         
            +
                      exe = Dir['bin/*'].first
         
     | 
| 
      
 57 
     | 
    
         
            +
                      raise "No executable script found" unless exe
         
     | 
| 
      
 58 
     | 
    
         
            +
                      warn "No default executable found in #{@spec_file}, using #{exe}"
         
     | 
| 
      
 59 
     | 
    
         
            +
                      exe
         
     | 
| 
      
 60 
     | 
    
         
            +
                    end
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #++
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'ostruct'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 11 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 12 
     | 
    
         
            +
                # The Jar trait sets up the archive layout for an executable jar
         
     | 
| 
      
 13 
     | 
    
         
            +
                # project, and adds the JRuby jar files and a JarMain class to the
         
     | 
| 
      
 14 
     | 
    
         
            +
                # archive.
         
     | 
| 
      
 15 
     | 
    
         
            +
                class Jar
         
     | 
| 
      
 16 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 19 
     | 
    
         
            +
                    !War.detect?
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 23 
     | 
    
         
            +
                    config.pathmaps      = default_pathmaps
         
     | 
| 
      
 24 
     | 
    
         
            +
                    config.java_libs     = default_jar_files
         
     | 
| 
      
 25 
     | 
    
         
            +
                    config.manifest_file = 'MANIFEST.MF' if File.exist?('MANIFEST.MF')
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 29 
     | 
    
         
            +
                    config.init_contents << StringIO.new("require 'rubygems'\n")
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    jar.files['META-INF/MANIFEST.MF'] = StringIO.new(Warbler::Jar::DEFAULT_MANIFEST.chomp + "Main-Class: JarMain\n") unless config.manifest_file
         
     | 
| 
      
 34 
     | 
    
         
            +
                    jar.files['JarMain.class'] = jar.entry_in_jar("#{WARBLER_HOME}/lib/warbler_jar.jar", "JarMain.class")
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  def default_pathmaps
         
     | 
| 
      
 38 
     | 
    
         
            +
                    p = OpenStruct.new
         
     | 
| 
      
 39 
     | 
    
         
            +
                    p.java_libs    = ["META-INF/lib/%f"]
         
     | 
| 
      
 40 
     | 
    
         
            +
                    p.java_classes = ["%p"]
         
     | 
| 
      
 41 
     | 
    
         
            +
                    p.application  = ["#{config.jar_name}/%p"]
         
     | 
| 
      
 42 
     | 
    
         
            +
                    p.gemspecs     = ["specifications/%f"]
         
     | 
| 
      
 43 
     | 
    
         
            +
                    p.gems         = ["gems/%p"]
         
     | 
| 
      
 44 
     | 
    
         
            +
                    p
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  def default_jar_files
         
     | 
| 
      
 48 
     | 
    
         
            +
                    require 'jruby-jars'
         
     | 
| 
      
 49 
     | 
    
         
            +
                    FileList[JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path]
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #++
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 9 
     | 
    
         
            +
                # The Merb trait adds Merb::BootLoader gem dependencies to the project.
         
     | 
| 
      
 10 
     | 
    
         
            +
                class Merb
         
     | 
| 
      
 11 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 14 
     | 
    
         
            +
                    File.exist?("config/init.rb")
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def self.requires?(trait)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    trait == Traits::War
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 22 
     | 
    
         
            +
                    return false unless task = Warbler.project_application.lookup("merb_env")
         
     | 
| 
      
 23 
     | 
    
         
            +
                    task.invoke rescue nil
         
     | 
| 
      
 24 
     | 
    
         
            +
                    return false unless defined?(::Merb)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    config.webxml.booter = :merb
         
     | 
| 
      
 26 
     | 
    
         
            +
                    if defined?(::Merb::BootLoader::Dependencies.dependencies)
         
     | 
| 
      
 27 
     | 
    
         
            +
                      ::Merb::BootLoader::Dependencies.dependencies.each {|g| config.gems << g }
         
     | 
| 
      
 28 
     | 
    
         
            +
                    else
         
     | 
| 
      
 29 
     | 
    
         
            +
                      warn "unable to auto-detect Merb dependencies; upgrade to Merb 1.0 or greater"
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #++
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 9 
     | 
    
         
            +
                # The NoGemspec trait is used when no gemspec file is found for a
         
     | 
| 
      
 10 
     | 
    
         
            +
                # jar project. It assumes a standard layout including +bin+ and
         
     | 
| 
      
 11 
     | 
    
         
            +
                # +lib+ directories.
         
     | 
| 
      
 12 
     | 
    
         
            +
                class NoGemspec
         
     | 
| 
      
 13 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 16 
     | 
    
         
            +
                    Jar.detect? && !Gemspec.detect?
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 20 
     | 
    
         
            +
                    config.dirs = ['.']
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 24 
     | 
    
         
            +
                    if File.directory?("lib")
         
     | 
| 
      
 25 
     | 
    
         
            +
                      add_init_load_path(config.pathmaps.application.inject("lib") {|pm,x| pm.pathmap(x)})
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  def update_archive(jar)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    add_main_rb(jar, jar.apply_pathmaps(config, default_executable, :application))
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  def default_executable
         
     | 
| 
      
 34 
     | 
    
         
            +
                    exes = Dir['bin/*']
         
     | 
| 
      
 35 
     | 
    
         
            +
                    exe = exes.grep(/#{config.jar_name}/).first || exes.first
         
     | 
| 
      
 36 
     | 
    
         
            +
                    raise "No executable script found" unless exe
         
     | 
| 
      
 37 
     | 
    
         
            +
                    exe
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #++
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 9 
     | 
    
         
            +
                # The Rack trait adds config.ru to a Rack-based war project.
         
     | 
| 
      
 10 
     | 
    
         
            +
                class Rack
         
     | 
| 
      
 11 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 14 
     | 
    
         
            +
                    !Rails.detect? && (File.exist?("config.ru") || !Dir['*/config.ru'].empty?)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def self.requires?(trait)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    trait == Traits::War
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 22 
     | 
    
         
            +
                    config.webxml.booter = :rack
         
     | 
| 
      
 23 
     | 
    
         
            +
                    config.webinf_files += [FileList['config.ru', '*/config.ru'].detect {|f| File.exist?(f)}]
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 27 
     | 
    
         
            +
                    config.init_contents << "#{config.warbler_templates}/rack.erb"
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2010 Engine Yard, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This source code is available under the MIT license.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # See the file LICENSE.txt for details.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #++
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Warbler
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Traits
         
     | 
| 
      
 9 
     | 
    
         
            +
                # The Rails trait invokes the Rake environment task and sets up Rails for a war-based project.
         
     | 
| 
      
 10 
     | 
    
         
            +
                class Rails
         
     | 
| 
      
 11 
     | 
    
         
            +
                  include Trait
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def self.detect?
         
     | 
| 
      
 14 
     | 
    
         
            +
                    File.exist?("config/environment.rb")
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def self.requires?(trait)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    trait == Traits::War
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def before_configure
         
     | 
| 
      
 22 
     | 
    
         
            +
                    config.jar_name = default_app_name
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    return unless Warbler.framework_detection
         
     | 
| 
      
 25 
     | 
    
         
            +
                    return false unless task = Warbler.project_application.lookup("environment")
         
     | 
| 
      
 26 
     | 
    
         
            +
                    task.invoke rescue nil
         
     | 
| 
      
 27 
     | 
    
         
            +
                    return false unless defined?(::Rails)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    config.dirs << "tmp" if File.directory?("tmp")
         
     | 
| 
      
 29 
     | 
    
         
            +
                    config.webxml.booter = :rails
         
     | 
| 
      
 30 
     | 
    
         
            +
                    unless (defined?(::Rails.vendor_rails?) && ::Rails.vendor_rails?) || File.directory?("vendor/rails")
         
     | 
| 
      
 31 
     | 
    
         
            +
                      config.gems["rails"] = ::Rails::VERSION::STRING
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
                    if defined?(::Rails.configuration.gems)
         
     | 
| 
      
 34 
     | 
    
         
            +
                      ::Rails.configuration.gems.each do |g|
         
     | 
| 
      
 35 
     | 
    
         
            +
                        config.gems << Gem::Dependency.new(g.name, g.requirement) if Dir["vendor/gems/#{g.name}*"].empty?
         
     | 
| 
      
 36 
     | 
    
         
            +
                      end
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                    if defined?(::Rails.configuration.threadsafe!) &&
         
     | 
| 
      
 39 
     | 
    
         
            +
                        (defined?(::Rails.configuration.allow_concurrency) && # Rails 3
         
     | 
| 
      
 40 
     | 
    
         
            +
                         ::Rails.configuration.allow_concurrency && ::Rails.configuration.preload_frameworks) ||
         
     | 
| 
      
 41 
     | 
    
         
            +
                      (defined?(::Rails.configuration.action_controller.allow_concurrency) && # Rails 2
         
     | 
| 
      
 42 
     | 
    
         
            +
                       ::Rails.configuration.action_controller.allow_concurrency && ::Rails.configuration.action_controller.preload_frameworks)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      config.webxml.jruby.max.runtimes = 1
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  def after_configure
         
     | 
| 
      
 48 
     | 
    
         
            +
                    config.init_contents << "#{config.warbler_templates}/rails.erb"
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  def default_app_name
         
     | 
| 
      
 53 
     | 
    
         
            +
                    File.basename(File.expand_path(defined?(::Rails.root) ? ::Rails.root : (defined?(RAILS_ROOT) ? RAILS_ROOT : Dir.getwd)))
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     |