appengine-tools 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'date'
5
5
  require 'spec/rake/spectask'
6
6
 
7
7
  GEM = "appengine-tools"
8
- GEM_VERSION = "0.0.4"
8
+ GEM_VERSION = "0.0.5"
9
9
  AUTHOR = "Ryan Brown"
10
10
  EMAIL = "ribrdb@gmail.com"
11
11
  HOMEPAGE = "http://code.google.com/p/appengine-jruby"
@@ -29,6 +29,8 @@ spec = Gem::Specification.new do |s|
29
29
  s.add_dependency('appengine-rack')
30
30
  s.add_dependency('appengine-sdk')
31
31
  s.add_dependency('appengine-jruby-jars')
32
+ s.add_dependency('bundler', ["0.6.0"])
33
+ s.add_dependency('rubyzip')
32
34
  end
33
35
 
34
36
  task :default => :spec
@@ -27,9 +27,6 @@ module AppEngine
27
27
  import Java.ComGoogleAppengineToolsAdmin.AppAdminFactory
28
28
  import Java.ComGoogleAppengineToolsAdmin.AppVersionUpload
29
29
  import Java.ComGoogleAppengineToolsUtil.Logging
30
- import java.io.FileOutputStream
31
- import java.util.jar.JarOutputStream
32
- import java.util.zip.ZipEntry
33
30
 
34
31
  class JRubyAppVersionUpload < AppVersionUpload
35
32
  def initialize(connection, app)
@@ -76,13 +73,12 @@ module AppEngine
76
73
  end
77
74
 
78
75
  class JRubyAppCfg
79
- NO_XML_COMMANDS = [ 'version' ]
80
- RUBY_COMMANDS = ['bundle', 'gem', 'help', 'run']
76
+ NO_XML_COMMANDS = %w{version}
77
+ RUBY_COMMANDS = %w{gem bundle help run}
81
78
  COMMAND_SUMMARY = <<EOF
82
79
  run: run jruby in your application environment.
83
- gem: run rubygems for your application.
84
80
  bundle: package your application for deployment.
85
- The 'gem' and 'run' commands assume the app directory is the current directory.
81
+ The 'run' command assumes the app directory is the current directory.
86
82
  EOF
87
83
  class << self
88
84
  def main(args)
@@ -91,7 +87,7 @@ EOF
91
87
  send(command, *parsed_args)
92
88
  return
93
89
  end
94
- if command && ! NO_XML_COMMANDS.include?(command)
90
+ if command && !NO_XML_COMMANDS.include?(command)
95
91
  path = parsed_args[0]
96
92
  AppEngine::Admin.bundle_app(path)
97
93
  AppEngine::Development.boot_jruby
@@ -100,7 +96,7 @@ EOF
100
96
  else
101
97
  AppEngine::Development.boot_jruby
102
98
  end
103
- puts "running AppCfg"
99
+ puts "=> Running AppCfg"
104
100
  run_appcfg(args)
105
101
  end
106
102
 
@@ -111,98 +107,38 @@ EOF
111
107
  AppCfg.new(factory, args.to_java(java.lang.String))
112
108
  end
113
109
 
114
- def bundle(path)
115
- AppEngine::Admin.bundle_app(path)
110
+ def bundle(*args)
111
+ if File.directory?(args[-1] || '')
112
+ AppEngine::Admin.bundle_app(*args)
113
+ else
114
+ bundle_help
115
+ end
116
116
  end
117
117
 
118
118
  def bundle_help
119
119
  help = <<EOF
120
- #{$0} bundle app_dir
120
+ #{$0} bundle [gem bundle options] app_dir
121
121
 
122
- Generates files necessary to run an application as a Java Servlet.
123
- This is run automatically when necessary, so you should not
124
- need to run it manually.
122
+ Bundles the gems listed in Gemfile and generates files necessary
123
+ to run an application as a servlet. This runs automatically for you,
124
+ but you need to run it manually to update gems if you don't specify
125
+ a version number. Pass --update to refresh bundled gems.
125
126
 
126
127
  EOF
127
128
  end
128
-
129
+
129
130
  def gem(*args)
130
- AppEngine::Admin.bundle_deps('.')
131
- AppEngine::Development.boot_jruby
132
- puts "=> Running RubyGems"
133
- require 'rubygems'
134
- require 'rubygems/command_manager'
135
- Gem.configuration = Gem::ConfigFile.new(args)
136
- Gem.use_paths('.gems')
137
- Gem::Command.add_specific_extra_args(
138
- 'install', %w(--no-rdoc --no-ri))
139
- saved_gems = all_gem_specs
140
- begin
141
- Gem::CommandManager.instance.run(Gem.configuration.args)
142
- rescue Gem::SystemExitException => e
143
- exit e.exit_code unless e.exit_code == 0
144
- end
145
- unless ((all_gem_specs == saved_gems) &&
146
- File.exist?('WEB-INF/lib/gems.jar'))
147
- Dir.mkdir 'WEB-INF' unless File.exists? 'WEB-INF'
148
- Dir.mkdir 'WEB-INF/lib' unless File.exists? 'WEB-INF/lib'
149
- Dir.chdir '.gems'
150
- puts '=> Packaging gems'
151
- write_jar('../WEB-INF/lib/gems.jar') do |jar|
152
- add_to_jar('gems', jar)
153
- add_to_jar('specifications', jar)
154
- end
155
- puts 'If you upgraded any gems, please run `appcfg.rb gem cleanup`'
156
- puts 'to remove the old versions.'
157
- end
131
+ gem_help
158
132
  end
159
133
 
160
134
  def gem_help
161
135
  help = <<EOF
162
- #{$0} gem [rubygems arguments]
163
-
164
136
 
165
- Configures rubygems for this application and bundles the gems into a .jar file.
166
- Must be run from the application directory.
137
+ Sorry, the 'appcfg.rb gem' option is deprecated.
138
+ Simply update the 'Gemfile' and run 'appcfg.rb bundle .' instead.
167
139
 
168
140
  EOF
169
- end
170
-
171
- def all_gem_specs
172
- Gem.source_index.map do |_, spec|
173
- spec
174
- end
175
- end
176
-
177
- def write_jar(filename)
178
- filename = File.expand_path(filename)
179
- jar = JarOutputStream.new(FileOutputStream.new(filename))
180
- begin
181
- yield jar
182
- ensure
183
- jar.close
184
- end
185
- end
186
-
187
- def add_to_jar(path, jar)
188
- directory = File.directory?(path)
189
- if directory
190
- path << '/'
191
- end
192
- entry = ZipEntry.new(path)
193
- jar.put_next_entry(entry)
194
- unless directory
195
- data = IO.read(path)
196
- jar.write(data.to_java_bytes, 0, data.size)
197
- end
198
- jar.close_entry
199
- if directory
200
- Dir.entries(path).each do |filename|
201
- unless ['.', '..'].include?(filename)
202
- add_to_jar(path + filename, jar)
203
- end
204
- end
205
- end
141
+ puts help
206
142
  end
207
143
 
208
144
  def run(*args)
@@ -214,7 +150,6 @@ EOF
214
150
  help = <<EOF
215
151
  #{$0} run [ruby args]
216
152
 
217
-
218
153
  Starts the jruby interpreter within your application's environment.
219
154
  Use `#{$0} run -S command` to run a command such as rake or irb.
220
155
  Must be run from the application directory, after running bundle.
@@ -265,4 +200,4 @@ EOF
265
200
  end
266
201
  end
267
202
  end
268
- end
203
+ end
@@ -22,7 +22,6 @@ module AppEngine
22
22
  class << self
23
23
  def boot_jruby(root=nil, options={})
24
24
  unless defined?(JRUBY_VERSION)
25
- require 'rubygems'
26
25
  require 'appengine-jruby-jars'
27
26
 
28
27
  jars = [
@@ -83,4 +82,4 @@ module AppEngine
83
82
  end
84
83
  end
85
84
  end
86
- end
85
+ end
@@ -17,6 +17,7 @@
17
17
 
18
18
  require 'appengine-rack'
19
19
  require 'appengine-tools/boot'
20
+ require 'appengine-tools/gem_bundler'
20
21
  require 'appengine-tools/web-xml'
21
22
  require 'appengine-tools/xml-formatter'
22
23
  require 'fileutils'
@@ -35,43 +36,63 @@ module AppEngine
35
36
  def path(*pieces)
36
37
  File.join(@root, *pieces)
37
38
  end
38
-
39
+
39
40
  def webinf
40
41
  path('WEB-INF')
41
42
  end
42
-
43
+
43
44
  def webinf_lib
44
45
  path('WEB-INF', 'lib')
45
46
  end
46
-
47
+
48
+ def gems_jar
49
+ path('WEB-INF', 'lib', 'gems.jar')
50
+ end
51
+
47
52
  def generation_dir
48
53
  path('WEB-INF', 'appengine-generated')
49
54
  end
50
55
 
56
+ def gems_dir
57
+ path('.gems')
58
+ end
59
+
60
+ def gemfile
61
+ path('Gemfile')
62
+ end
63
+
51
64
  def config_ru
52
65
  path('config.ru')
53
66
  end
54
-
67
+
55
68
  def web_xml
56
69
  path('WEB-INF', 'web.xml')
57
70
  end
58
-
71
+
59
72
  def aeweb_xml
60
73
  path('WEB-INF', 'appengine-web.xml')
61
74
  end
62
-
75
+
63
76
  def build_status
64
77
  path('WEB-INF', 'appengine-generated', 'build_status.yaml')
65
78
  end
66
-
79
+
67
80
  def public_root
68
81
  path(AppEngine::Rack.app.public_root) if AppEngine::Rack.app.public_root
69
82
  end
70
-
83
+
84
+ def favicon_ico
85
+ File.join(public_root ? public_root : @root, 'favicon.ico')
86
+ end
87
+
88
+ def robots_txt
89
+ File.join(public_root ? public_root : @root, 'robots.txt')
90
+ end
91
+
71
92
  def rack_app
72
93
  AppEngine::Rack.app
73
94
  end
74
-
95
+
75
96
  end
76
97
 
77
98
  class AppBundler
@@ -79,8 +100,7 @@ module AppEngine
79
100
  EXISTING_RACK = /jruby-rack.*jar$/
80
101
  EXISTING_APIS = /^appengine-api.*jar$/
81
102
  JRUBY_RACK = 'jruby-rack-0.9.5.jar'
82
- JRUBY_RACK_URL = 'http://kenai.com/projects/jruby-rack/' +
83
- "downloads/download/#{JRUBY_RACK}"
103
+ JRUBY_RACK_URL = "http://kenai.com/downloads/jruby-rack/#{JRUBY_RACK}"
84
104
  RACKUP = %q{Dir.chdir('..') if Dir.pwd =~ /WEB-INF$/;} +
85
105
  %q{eval IO.read('config.ru'), nil, 'config.ru', 1}
86
106
 
@@ -88,17 +108,24 @@ module AppEngine
88
108
  @app = Application.new(root_path)
89
109
  end
90
110
 
91
- def bundle
92
- bundle_deps
111
+ def bundle(args=[])
112
+ bundle_deps(args)
93
113
  convert_config_ru
94
114
  end
95
115
 
96
- def bundle_deps
116
+ def bundle_deps(args=[])
97
117
  create_webinf
118
+ bundle_gems(args)
98
119
  copy_jruby
99
120
  copy_rack
100
121
  copy_sdk
101
122
  end
123
+
124
+ def bundle_gems(args)
125
+ return if defined? JRUBY_VERSION
126
+ gem_bundler = AppEngine::Admin::GemBundler.new(app.root)
127
+ gem_bundler.bundle(args)
128
+ end
102
129
 
103
130
  def app
104
131
  @app
@@ -111,21 +138,25 @@ module AppEngine
111
138
  end
112
139
 
113
140
  def create_public
114
- return if app.public_root.nil?
115
- Dir.mkdir(app.public_root) unless File.exists?(app.public_root)
141
+ return unless defined? JRUBY_VERSION
142
+ if app.public_root and !File.exists?(app.public_root)
143
+ Dir.mkdir(app.public_root)
144
+ end
145
+ FileUtils.touch(app.favicon_ico) unless File.exists?(app.favicon_ico)
146
+ FileUtils.touch(app.robots_txt) unless File.exists?(app.robots_txt)
116
147
  end
117
148
 
118
149
  def convert_config_ru
119
150
  if !File.exists?(app.config_ru)
120
151
  if File.exists?(app.web_xml)
121
152
  unless File.exists?(app.aeweb_xml)
122
- puts "!! Error: you either need a #{app.config_ru} or "
153
+ puts "Error: you either need a #{app.config_ru} or "
123
154
  puts " #{app.aeweb_xml}."
124
155
  exit 1
125
156
  end
126
157
  else
127
158
  # TODO auto generate a config.ru
128
- puts "!! Error: you need to create #{app.config_ru}."
159
+ puts "Error: you need to create #{app.config_ru}."
129
160
  exit 1
130
161
  end
131
162
  else
@@ -136,9 +167,7 @@ module AppEngine
136
167
 
137
168
  def copy_jruby
138
169
  require 'appengine-jruby-jars'
139
- update_jars(
140
- "JRuby", EXISTING_JRUBY, [AppEngine::JRubyJars.jruby_jar],
141
- /rubygems/, [AppEngine::JRubyJars.rubygems_jar])
170
+ update_jars("JRuby", EXISTING_JRUBY, [AppEngine::JRubyJars.jruby_jar])
142
171
  end
143
172
 
144
173
  def copy_rack
@@ -173,7 +202,7 @@ module AppEngine
173
202
  def update_jars(name, regex, jars, opt_regex=nil, opt_jars=[])
174
203
  existing = find_jars(regex)
175
204
  if existing.empty?
176
- message = "Installing #{name}"
205
+ message = "=> Installing #{name}"
177
206
  jars_to_install = jars + opt_jars
178
207
  else
179
208
  has_optional_jars = existing.any? {|j| j =~ opt_regex}
@@ -182,7 +211,7 @@ module AppEngine
182
211
  expected = expected_jars.map {|path| File.basename(path)}
183
212
  if existing.size != expected.size ||
184
213
  (expected & existing) != expected
185
- message = "Updating #{name}"
214
+ message = "=> Updating #{name}"
186
215
  jars_to_install = expected_jars
187
216
  end
188
217
  end
@@ -225,14 +254,14 @@ module AppEngine
225
254
  end
226
255
  app_root = app.root
227
256
  builder = WebXmlBuilder.new do
228
- # First configure the basic jruby-rack settings.
229
- add_jruby_rack_defaults(RACKUP)
230
-
231
- # Now read the user's rackup file
257
+ # First read the user's rackup file
232
258
  # TODO generate a skeleton if it's missing
233
259
  Dir.chdir(app_root) do
234
260
  eval IO.read('config.ru'), nil, 'config.ru', 1
235
261
  end
262
+
263
+ # Now configure the basic jruby-rack settings.
264
+ add_jruby_rack_defaults(RACKUP)
236
265
  end
237
266
  open(app.web_xml, 'w') do |webxml|
238
267
  xml = AppEngine::Rack::XmlFormatter.format(builder.to_xml)
@@ -255,12 +284,12 @@ module AppEngine
255
284
  end
256
285
  end
257
286
 
258
- def self.bundle_app(root_path)
259
- AppBundler.new(root_path).bundle
287
+ def self.bundle_app(*args)
288
+ AppBundler.new(args.pop).bundle(args)
260
289
  end
261
290
 
262
- def self.bundle_deps(root_path)
263
- AppBundler.new(root_path).bundle_deps
291
+ def self.bundle_deps(*args)
292
+ AppBundler.new(args.pop).bundle(args)
264
293
  end
265
294
 
266
295
  end
@@ -72,6 +72,11 @@ module AppEngine
72
72
  ENV.delete 'GEM_PATH'
73
73
  java_args << '-classpath'
74
74
  java_args << AppEngine::SDK::TOOLS_JAR
75
+ java_args << '-Djava.util.logging.config.file=' +
76
+ AppEngine::SDK::SDK_ROOT + '/config/sdk/logging.properties'
77
+ if defined? AppEngine::SDK::AGENT_JAR
78
+ java_args << '-javaagent:' + AppEngine::SDK::AGENT_JAR
79
+ end
75
80
  command = ['java'] + java_args + DEV_APPSERVER + server_args
76
81
  if ENV['VERBOSE']
77
82
  puts "exec #{command.map{|x| x.inspect}.join(' ')}"
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/ruby1.8 -w
2
+ #
3
+ # Copyright:: Copyright 2009 Google Inc.
4
+ # Original Author:: John Woodell (mailto:woodie@google.com)
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require 'rubygems'
19
+ require 'fileutils'
20
+ require 'zip/zip'
21
+ require 'zip/zipfilesystem'
22
+ require 'rubygems/command_manager'
23
+ require 'appengine-tools/bundler'
24
+
25
+ module AppEngine
26
+ module Admin
27
+
28
+ class GemBundler
29
+
30
+ def initialize(root)
31
+ @root = root
32
+ @app = Application.new(root)
33
+ end
34
+
35
+ def bundle(args)
36
+ verify_gemfile
37
+ gem_bundle(args)
38
+ end
39
+
40
+ private
41
+
42
+ def app
43
+ @app
44
+ end
45
+
46
+ def gems_out_of_date
47
+ if File.exists?(app.gems_jar) and
48
+ File.stat(app.gems_jar).mtime > File.stat(app.gemfile).mtime
49
+ return false
50
+ end
51
+ return true
52
+ end
53
+
54
+ def gem_bundle(args)
55
+ return unless args.include?('--update') || gems_out_of_date
56
+ Gem.platforms = [Gem::Platform::RUBY,
57
+ Gem::Platform.new('universal-java')]
58
+ Gem.configuration = Gem::ConfigFile.new(args.unshift('bundle'))
59
+ puts "=> Bundling gems"
60
+ begin
61
+ Dir.chdir(@root) do
62
+ Gem::CommandManager.instance.run(Gem.configuration.args)
63
+ end
64
+ rescue Gem::SystemExitException => e
65
+ exit e.exit_code unless e.exit_code == 0
66
+ end
67
+ bundler_dir = "#{app.gems_dir}/bundler_gems"
68
+ # TODO: this temporary hack should be fixed properly
69
+ gem_patch = <<MOD
70
+ # Injected by appengine-tools to patch bundler 0.6.0 for Sinatra 0.9.4
71
+ module Gem
72
+ def self.dir; ENV['GEM_HOME']; end
73
+ RubyGemsVersion = "0.0.0" unless defined? RubyGemsVersion
74
+ end
75
+ MOD
76
+ File.open("#{bundler_dir}/environment.rb",'a') {|f| f << gem_patch }
77
+ FileUtils.rm app.gems_jar, :force => true # blow away the old jar
78
+ puts "=> Installing gems"
79
+ gem_files = Dir["#{bundler_dir}/gems/**/**"] +
80
+ Dir["#{bundler_dir}/environment.rb"]
81
+ Zip::ZipFile.open(app.gems_jar, 'w') do |jar|
82
+ gem_files.reject {|f| f == app.gems_jar}.each do |file|
83
+ jar.add(file.sub("#{app.gems_dir}/",''), file)
84
+ end
85
+ end
86
+ end
87
+
88
+ def verify_gemfile
89
+ return if File.exists?(app.gemfile)
90
+ puts "=> Generating gemfile"
91
+
92
+ # TODO: Maybe we should include the latest
93
+ # versions from updatecheck here?
94
+ stock_gemfile = <<EOF
95
+ # Critical default settings:
96
+ disable_system_gems
97
+ disable_rubygems
98
+ bundle_path ".gems/bundler_gems"
99
+
100
+ # List gems to bundle here:
101
+ #gem "rack", "1.0.0"
102
+ #gem "dm-appengine"
103
+ #gem "sinatra"
104
+ EOF
105
+ File.open(app.gemfile,'w') {|f| f.write(stock_gemfile) }
106
+ end
107
+ end
108
+ end
109
+ end
110
+
@@ -46,13 +46,12 @@ module AppEngine
46
46
  end
47
47
 
48
48
  def find_gem_version(name)
49
- specs = Dir.glob("#{@approot}/.gems/specifications/#{name}-*.gemspec")
50
- versions = specs.map do |filename|
51
- if filename =~ /-(\w+\.\w+.\w+).gemspec$/
52
- Gem::Version.new($1)
49
+ IO.foreach("#{@approot}/.gems/bundler_gems/environment.rb") do |line|
50
+ if line =~ %r(/gems/#{name}-(\w+\.\w+.\w+)[/"])
51
+ return Gem::Version.new($1)
53
52
  end
54
- end
55
- versions.sort[-1]
53
+ end rescue nil
54
+ nil
56
55
  end
57
56
 
58
57
  def remote_versions
@@ -66,7 +65,7 @@ module AppEngine
66
65
  def check_for_updates
67
66
  local = local_versions
68
67
  unless local['google-appengine']
69
- puts 'Skipping update check'
68
+ puts '=> Skipping update check'
70
69
  return
71
70
  end
72
71
  latest = remote_versions
@@ -74,13 +73,13 @@ module AppEngine
74
73
  current = latest[name]
75
74
  if version && version < current
76
75
  prefix = if name == 'google-appengine'
77
- "sudo"
76
+ update_msg = "=> Please run sudo gem update google-appengine."
78
77
  else
79
- "appcfg.rb"
78
+ update_msg = "=> Please update your Gemfile."
80
79
  end
81
- puts "There is a new version of #{name}: #{current} " +
80
+ puts "=> There is a new version of #{name}: #{current} " +
82
81
  "(You have #{version})"
83
- puts "Please run #{prefix} gem update #{name}."
82
+ puts update_msg
84
83
  end
85
84
  end
86
85
  end
@@ -115,4 +114,4 @@ module AppEngine
115
114
  end
116
115
  end
117
116
  end
118
- end
117
+ end
@@ -27,14 +27,21 @@ class WebXmlBuilder < Rack::Builder
27
27
  def initialize(&block)
28
28
  @path = "/"
29
29
  @paths = Hash.new {|h, k| h[k] = []}
30
+ @skip_defaults = false
30
31
  instance_eval(&block) if block_given?
31
32
  end
32
33
 
34
+ def skip_rack_servlet
35
+ @skip_defaults = true
36
+ end
37
+
33
38
  def add_jruby_rack_defaults(rackup)
34
39
  use JavaContextParams, :rackup => rackup
35
- use JavaServletFilter, 'org.jruby.rack.RackFilter',
36
- { :name => 'RackFilter', :wildcard => true }
37
- use JavaContextListener, 'org.jruby.rack.RackServletContextListener'
40
+ unless @skip_defaults
41
+ use JavaServletFilter, 'org.jruby.rack.RackFilter',
42
+ { :name => 'RackFilter', :wildcard => true }
43
+ end
44
+ use JavaContextListener, 'com.google.appengine.jruby.LazyContextListener'
38
45
  end
39
46
 
40
47
  def use(middleware, *args, &block)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appengine-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Brown
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-15 00:00:00 -07:00
12
+ date: 2009-11-02 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,6 +42,26 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: "0"
44
44
  version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: bundler
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.6.0
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubyzip
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
45
65
  description: Tools for developing and deploying apps to Google App Engine
46
66
  email: ribrdb@gmail.com
47
67
  executables:
@@ -56,21 +76,22 @@ files:
56
76
  - LICENSE
57
77
  - README.rdoc
58
78
  - Rakefile
79
+ - lib/appengine-tools/update_check.rb
59
80
  - lib/appengine-tools/appcfg.rb
60
- - lib/appengine-tools/boot.rb
61
81
  - lib/appengine-tools/bundler.rb
62
- - lib/appengine-tools/dev_appserver.rb
63
- - lib/appengine-tools/update_check.rb
64
- - lib/appengine-tools/web-xml.rb
82
+ - lib/appengine-tools/gem_bundler.rb
65
83
  - lib/appengine-tools/xml-formatter.rb
84
+ - lib/appengine-tools/boot.rb
85
+ - lib/appengine-tools/web-xml.rb
86
+ - lib/appengine-tools/dev_appserver.rb
66
87
  - spec/appengine-web.xml
88
+ - spec/web.xml
67
89
  - spec/config.ru
68
- - spec/rack_spec.rb
69
90
  - spec/spec.opts
70
- - spec/spec_helper.rb
91
+ - spec/rack_spec.rb
71
92
  - spec/update_check_spec.rb
93
+ - spec/spec_helper.rb
72
94
  - spec/web-xml_spec.rb
73
- - spec/web.xml
74
95
  has_rdoc: true
75
96
  homepage: http://code.google.com/p/appengine-jruby
76
97
  licenses: []