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