lib/appengine-tools/bundler.rb in appengine-tools-0.0.4 vs lib/appengine-tools/bundler.rb in appengine-tools-0.0.5
- old
+ new
@@ -15,10 +15,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
require 'appengine-rack'
require 'appengine-tools/boot'
+require 'appengine-tools/gem_bundler'
require 'appengine-tools/web-xml'
require 'appengine-tools/xml-formatter'
require 'fileutils'
require 'yaml'
@@ -33,74 +34,100 @@
end
def path(*pieces)
File.join(@root, *pieces)
end
-
+
def webinf
path('WEB-INF')
end
-
+
def webinf_lib
path('WEB-INF', 'lib')
end
-
+
+ def gems_jar
+ path('WEB-INF', 'lib', 'gems.jar')
+ end
+
def generation_dir
path('WEB-INF', 'appengine-generated')
end
+ def gems_dir
+ path('.gems')
+ end
+
+ def gemfile
+ path('Gemfile')
+ end
+
def config_ru
path('config.ru')
end
-
+
def web_xml
path('WEB-INF', 'web.xml')
end
-
+
def aeweb_xml
path('WEB-INF', 'appengine-web.xml')
end
-
+
def build_status
path('WEB-INF', 'appengine-generated', 'build_status.yaml')
end
-
+
def public_root
path(AppEngine::Rack.app.public_root) if AppEngine::Rack.app.public_root
end
-
+
+ def favicon_ico
+ File.join(public_root ? public_root : @root, 'favicon.ico')
+ end
+
+ def robots_txt
+ File.join(public_root ? public_root : @root, 'robots.txt')
+ end
+
def rack_app
AppEngine::Rack.app
end
-
+
end
class AppBundler
EXISTING_JRUBY = /^(jruby-abridged|appengine-jruby)-.*jar$/
EXISTING_RACK = /jruby-rack.*jar$/
EXISTING_APIS = /^appengine-api.*jar$/
JRUBY_RACK = 'jruby-rack-0.9.5.jar'
- JRUBY_RACK_URL = 'http://kenai.com/projects/jruby-rack/' +
- "downloads/download/#{JRUBY_RACK}"
+ JRUBY_RACK_URL = "http://kenai.com/downloads/jruby-rack/#{JRUBY_RACK}"
RACKUP = %q{Dir.chdir('..') if Dir.pwd =~ /WEB-INF$/;} +
%q{eval IO.read('config.ru'), nil, 'config.ru', 1}
def initialize(root_path)
@app = Application.new(root_path)
end
- def bundle
- bundle_deps
+ def bundle(args=[])
+ bundle_deps(args)
convert_config_ru
end
- def bundle_deps
+ def bundle_deps(args=[])
create_webinf
+ bundle_gems(args)
copy_jruby
copy_rack
copy_sdk
end
+
+ def bundle_gems(args)
+ return if defined? JRUBY_VERSION
+ gem_bundler = AppEngine::Admin::GemBundler.new(app.root)
+ gem_bundler.bundle(args)
+ end
def app
@app
end
@@ -109,38 +136,40 @@
Dir.mkdir(app.webinf_lib) unless File.exists?(app.webinf_lib)
Dir.mkdir(app.generation_dir) unless File.exists?(app.generation_dir)
end
def create_public
- return if app.public_root.nil?
- Dir.mkdir(app.public_root) unless File.exists?(app.public_root)
+ return unless defined? JRUBY_VERSION
+ if app.public_root and !File.exists?(app.public_root)
+ Dir.mkdir(app.public_root)
+ end
+ FileUtils.touch(app.favicon_ico) unless File.exists?(app.favicon_ico)
+ FileUtils.touch(app.robots_txt) unless File.exists?(app.robots_txt)
end
def convert_config_ru
if !File.exists?(app.config_ru)
if File.exists?(app.web_xml)
unless File.exists?(app.aeweb_xml)
- puts "!! Error: you either need a #{app.config_ru} or "
+ puts "Error: you either need a #{app.config_ru} or "
puts " #{app.aeweb_xml}."
exit 1
end
else
# TODO auto generate a config.ru
- puts "!! Error: you need to create #{app.config_ru}."
+ puts "Error: you need to create #{app.config_ru}."
exit 1
end
else
generate_xml
create_public
end
end
def copy_jruby
require 'appengine-jruby-jars'
- update_jars(
- "JRuby", EXISTING_JRUBY, [AppEngine::JRubyJars.jruby_jar],
- /rubygems/, [AppEngine::JRubyJars.rubygems_jar])
+ update_jars("JRuby", EXISTING_JRUBY, [AppEngine::JRubyJars.jruby_jar])
end
def copy_rack
update_jars('jruby-rack', EXISTING_RACK, [JRUBY_RACK]) do
require 'open-uri'
@@ -171,20 +200,20 @@
end
def update_jars(name, regex, jars, opt_regex=nil, opt_jars=[])
existing = find_jars(regex)
if existing.empty?
- message = "Installing #{name}"
+ message = "=> Installing #{name}"
jars_to_install = jars + opt_jars
else
has_optional_jars = existing.any? {|j| j =~ opt_regex}
expected_jars = jars
expected_jars.concat(opt_jars) if has_optional_jars
expected = expected_jars.map {|path| File.basename(path)}
if existing.size != expected.size ||
(expected & existing) != expected
- message = "Updating #{name}"
+ message = "=> Updating #{name}"
jars_to_install = expected_jars
end
end
if jars_to_install
puts message
@@ -223,18 +252,18 @@
Dir.glob("#{app.webinf_lib}/*.jar").each do |path|
$: << path
end
app_root = app.root
builder = WebXmlBuilder.new do
- # First configure the basic jruby-rack settings.
- add_jruby_rack_defaults(RACKUP)
-
- # Now read the user's rackup file
+ # First read the user's rackup file
# TODO generate a skeleton if it's missing
Dir.chdir(app_root) do
eval IO.read('config.ru'), nil, 'config.ru', 1
end
+
+ # Now configure the basic jruby-rack settings.
+ add_jruby_rack_defaults(RACKUP)
end
open(app.web_xml, 'w') do |webxml|
xml = AppEngine::Rack::XmlFormatter.format(builder.to_xml)
webxml.write(xml)
end
@@ -253,15 +282,15 @@
:exec => false)
end
end
end
- def self.bundle_app(root_path)
- AppBundler.new(root_path).bundle
+ def self.bundle_app(*args)
+ AppBundler.new(args.pop).bundle(args)
end
- def self.bundle_deps(root_path)
- AppBundler.new(root_path).bundle_deps
+ def self.bundle_deps(*args)
+ AppBundler.new(args.pop).bundle(args)
end
end
end