appengine-tools 0.0.1 → 0.0.2

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/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.1"
8
+ GEM_VERSION = "0.0.2"
9
9
  AUTHOR = "Ryan Brown"
10
10
  EMAIL = "ribrdb@gmail.com"
11
11
  HOMEPAGE = "http://code.google.com/p/appengine-jruby"
@@ -28,7 +28,7 @@ spec = Gem::Specification.new do |s|
28
28
  s.executables = [ 'appcfg.rb', 'dev_appserver.rb' ]
29
29
  s.add_dependency('appengine-rack')
30
30
  s.add_dependency('appengine-sdk')
31
- s.add_dependency('jruby-abridged')
31
+ s.add_dependency('appengine-jruby-jars')
32
32
  end
33
33
 
34
34
  task :default => :spec
@@ -54,4 +54,4 @@ task :make_spec do
54
54
  File.open("#{GEM}.gemspec", "w") do |file|
55
55
  file.puts spec.to_ruby
56
56
  end
57
- end
57
+ end
@@ -23,11 +23,11 @@ module AppEngine
23
23
  def boot_jruby(root=nil)
24
24
  unless defined?(JRUBY_VERSION)
25
25
  require 'rubygems'
26
- require 'jruby-abridged'
26
+ require 'appengine-jruby-jars'
27
27
 
28
28
  jars = [
29
- JRubyAbridged.jruby_jar,
30
- JRubyAbridged.rubygems_jar,
29
+ AppEngine::JRubyJars.jruby_jar,
30
+ AppEngine::JRubyJars.rubygems_jar,
31
31
  AppEngine::SDK::TOOLS_JAR,
32
32
  ]
33
33
 
@@ -18,6 +18,8 @@
18
18
  require 'appengine-rack'
19
19
  require 'appengine-tools/web-xml'
20
20
  require 'appengine-tools/xml-formatter'
21
+ require 'fileutils'
22
+ require 'yaml'
21
23
 
22
24
  module AppEngine
23
25
  module Admin
@@ -41,6 +43,10 @@ module AppEngine
41
43
  path('WEB-INF', 'lib')
42
44
  end
43
45
 
46
+ def generation_dir
47
+ path('WEB-INF', 'appengine-generated')
48
+ end
49
+
44
50
  def config_ru
45
51
  path('config.ru')
46
52
  end
@@ -53,10 +59,18 @@ module AppEngine
53
59
  path('WEB-INF', 'appengine-web.xml')
54
60
  end
55
61
 
62
+ def build_status
63
+ path('WEB-INF', 'appengine-generated', 'build_status.yaml')
64
+ end
65
+
56
66
  def public_root
57
67
  path(AppEngine::Rack.app.public_root) if AppEngine::Rack.app.public_root
58
68
  end
59
69
 
70
+ def persistent_path_token
71
+ path(public_root, '__preserve__')
72
+ end
73
+
60
74
  def rack_app
61
75
  AppEngine::Rack.app
62
76
  end
@@ -64,14 +78,14 @@ module AppEngine
64
78
  end
65
79
 
66
80
  class AppBundler
67
- EXISTING_JRUBY = /^jruby(?!-rack).*jar$/
81
+ EXISTING_JRUBY = /^appengine-jruby-.*jar$/
68
82
  EXISTING_RACK = /jruby-rack.*jar$/
69
83
  EXISTING_APIS = /^appengine-api.*jar$/
70
84
  JRUBY_RACK = 'jruby-rack-0.9.4.jar'
71
- JRUBY_RACK_URL = 'http://kenai.com/projects/jruby-rack/downloads/' +
72
- 'download/' + JRUBY_RACK
85
+ JRUBY_RACK_URL = 'http://kenai.com/projects/jruby-rack/' +
86
+ "downloads/download/#{JRUBY_RACK}"
73
87
  RACKUP = %q{Dir.chdir('..') if Dir.pwd =~ /WEB-INF$/;} +
74
- %q{eval IO.read('config.ru'), nil, 'config.ru', 1}
88
+ %q{eval IO.read('config.ru'), nil, 'config.ru', 1}
75
89
 
76
90
  def initialize(root_path)
77
91
  @app = Application.new(root_path)
@@ -79,7 +93,6 @@ module AppEngine
79
93
 
80
94
  def bundle
81
95
  create_webinf
82
- create_public
83
96
  copy_jruby
84
97
  copy_rack
85
98
  copy_sdk
@@ -93,13 +106,14 @@ module AppEngine
93
106
  def create_webinf
94
107
  Dir.mkdir(app.webinf) unless File.exists?(app.webinf)
95
108
  Dir.mkdir(app.webinf_lib) unless File.exists?(app.webinf_lib)
109
+ Dir.mkdir(app.generation_dir) unless File.exists?(app.generation_dir)
96
110
  end
97
111
 
98
112
  def create_public
99
- path = app.public_root
100
- if path && !File.exists?(path)
101
- Dir.mkdir(path)
102
- end
113
+ return if app.public_root.nil?
114
+ Dir.mkdir(app.public_root) unless File.exists?(app.public_root)
115
+ token = app.persistent_path_token
116
+ FileUtils.touch(token) unless File.exists?(token)
103
117
  end
104
118
 
105
119
  def convert_config_ru
@@ -107,25 +121,28 @@ module AppEngine
107
121
  if !File.exists?(app.config_ru)
108
122
  if File.exists?(app.web_xml)
109
123
  unless File.exists?(app.aeweb_xml)
110
- puts "Error: you either need a #{app.config_ru} or "
124
+ puts "!! Error: you either need a #{app.config_ru} or "
111
125
  puts " #{app.aeweb_xml}."
112
126
  exit 1
113
127
  end
114
128
  else
115
129
  # TODO auto generate a config.ru
116
- puts "Error: you need to create #{app.config_ru}."
130
+ puts "!! Error: you need to create #{app.config_ru}."
117
131
  exit 1
118
132
  end
119
133
  else
120
134
  generate_xml
135
+ create_public
121
136
  end
122
137
  end
123
138
 
124
139
  def copy_jruby
125
140
  current_jruby = find_jars(EXISTING_JRUBY)
126
141
  if current_jruby.empty?
127
- require 'jruby-abridged'
128
- FileUtils.cp([JRubyAbridged.jruby_jar, JRubyAbridged.rubygems_jar],
142
+ puts "=> Installing JRuby"
143
+ require 'appengine-jruby-jars'
144
+ FileUtils.cp([AppEngine::JRubyJars.jruby_jar,
145
+ AppEngine::JRubyJars.rubygems_jar],
129
146
  app.webinf_lib)
130
147
  end
131
148
  # TODO else warn if out of date
@@ -135,8 +152,8 @@ module AppEngine
135
152
  current_rack = find_jars(EXISTING_RACK)
136
153
  if current_rack.empty?
137
154
  # TODO cache this somewhere
155
+ puts "=> Retrieving jruby-rack"
138
156
  require 'open-uri'
139
- puts 'Downloading jruby-rack...'
140
157
  open(JRUBY_RACK_URL) do |src|
141
158
  open(File.join(app.webinf_lib, JRUBY_RACK), 'wb') do |dest|
142
159
  dest.write(src.read)
@@ -148,6 +165,7 @@ module AppEngine
148
165
  def copy_sdk
149
166
  current_apis = find_jars(EXISTING_APIS)
150
167
  if current_apis.empty?
168
+ puts "=> Installing appengine-sdk"
151
169
  require 'appengine-sdk'
152
170
  jars = Dir.glob(
153
171
  "#{AppEngine::SDK::SDK_ROOT}/lib/user/appengine-api*.jar")
@@ -161,8 +179,22 @@ module AppEngine
161
179
  def find_jars(regex)
162
180
  Dir.entries(app.webinf_lib).grep(regex) rescue []
163
181
  end
164
-
182
+
183
+ def valid_build
184
+ return false unless File.exists? app.build_status
185
+ return false unless File.exists? app.web_xml
186
+ return false unless File.exists? app.aeweb_xml
187
+ yaml = YAML.load_file app.build_status
188
+ return false unless yaml.is_a? Hash
189
+ return false unless File.stat(app.config_ru).mtime.eql? yaml[:config_ru]
190
+ return false unless File.stat(app.web_xml).mtime.eql? yaml[:web_xml]
191
+ return false unless File.stat(app.aeweb_xml).mtime.eql? yaml[:aeweb_xml]
192
+ true
193
+ end
194
+
165
195
  def generate_xml
196
+ return if valid_build
197
+ puts "=> Generating configuration files"
166
198
  Dir.glob("#{app.webinf_lib}/*.jar").each do |path|
167
199
  $: << path
168
200
  end
@@ -185,6 +217,11 @@ module AppEngine
185
217
  xml = AppEngine::Rack::XmlFormatter.format(app.rack_app.to_xml)
186
218
  aeweb.write(xml)
187
219
  end
220
+ yaml = {
221
+ :config_ru => File.stat(app.config_ru).mtime,
222
+ :aeweb_xml => File.stat(app.aeweb_xml).mtime,
223
+ :web_xml => File.stat(app.web_xml).mtime }
224
+ open(app.build_status, 'w') { |f| YAML.dump(yaml, f) }
188
225
  end
189
226
  end
190
227
 
@@ -29,8 +29,6 @@ module AppEngine
29
29
  unless ENV['BOOTING_DEVAPPSERVER']
30
30
  puts "=> Booting DevAppServer"
31
31
  puts "=> Press Ctrl-C to shutdown server"
32
- print "=> "
33
- $stdout.flush
34
32
  ENV['BOOTING_DEVAPPSERVER'] = 'true'
35
33
  end
36
34
  AppEngine::Admin.bundle_app(path)
@@ -47,8 +45,8 @@ module AppEngine
47
45
  def get_jruby_home(path)
48
46
  return unless path
49
47
  Dir.chdir("#{path}/WEB-INF/lib") do
50
- jars = Dir.glob("jruby-abridged-*.jar").grep(
51
- /^jruby-abridged-\d+[.]\d+[.]\d+[.]jar$/)
48
+ jars = Dir.glob("appengine-jruby-*.jar").grep(
49
+ /^appengine-jruby-\d+[.]\d+[.]\d+[.]jar$/)
52
50
  if !jars.empty?
53
51
  jar = File.expand_path(jars[0])
54
52
  return "file:/#{jar}!/META-INF/jruby.home"
@@ -32,8 +32,8 @@ class WebXmlBuilder < Rack::Builder
32
32
 
33
33
  def add_jruby_rack_defaults(rackup)
34
34
  use JavaContextParams, :rackup => rackup
35
-
36
- run JavaServlet.new('org.jruby.rack.RackServlet')
35
+ use JavaServletFilter, 'org.jruby.rack.RackFilter',
36
+ { :name => 'RackFilter', :wildcard => true }
37
37
  use JavaContextListener, 'org.jruby.rack.RackServletContextListener'
38
38
  end
39
39
 
@@ -83,4 +83,4 @@ class WebXmlBuilder < Rack::Builder
83
83
  yield path, value
84
84
  end
85
85
  end
86
- end
86
+ end
data/spec/web.xml CHANGED
@@ -1,6 +1,7 @@
1
1
  <web-app version='2.5' xmlns='http://java.sun.com/xml/ns/javaee'>
2
2
  <security-constraint>
3
3
  <web-resource-collection>
4
+ <url-pattern>/private</url-pattern>
4
5
  <url-pattern>/private/*</url-pattern>
5
6
  </web-resource-collection>
6
7
  <auth-constraint>
@@ -9,6 +10,7 @@
9
10
  </security-constraint>
10
11
  <security-constraint>
11
12
  <web-resource-collection>
13
+ <url-pattern>/admin2</url-pattern>
12
14
  <url-pattern>/admin2/*</url-pattern>
13
15
  </web-resource-collection>
14
16
  <auth-constraint>
@@ -17,6 +19,7 @@
17
19
  </security-constraint>
18
20
  <security-constraint>
19
21
  <web-resource-collection>
22
+ <url-pattern>/secure</url-pattern>
20
23
  <url-pattern>/secure/*</url-pattern>
21
24
  </web-resource-collection>
22
25
  <user-data-constraint>
@@ -67,14 +70,14 @@
67
70
  <param-name>rackup</param-name>
68
71
  <param-value>rackup</param-value>
69
72
  </context-param>
70
- <servlet>
71
- <servlet-name>org.jruby.rack.RackServlet</servlet-name>
72
- <servlet-class>org.jruby.rack.RackServlet</servlet-class>
73
- </servlet>
74
- <servlet-mapping>
75
- <servlet-name>org.jruby.rack.RackServlet</servlet-name>
76
- <url-pattern>/</url-pattern>
77
- </servlet-mapping>
73
+ <filter>
74
+ <filter-name>RackFilter</filter-name>
75
+ <filter-class>org.jruby.rack.RackFilter</filter-class>
76
+ </filter>
77
+ <filter-mapping>
78
+ <filter-name>RackFilter</filter-name>
79
+ <url-pattern>/*</url-pattern>
80
+ </filter-mapping>
78
81
  <listener>
79
82
  <listener-class>org.jruby.rack.RackServletContextListener</listener-class>
80
83
  </listener>
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.1
4
+ version: 0.0.2
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-07-30 00:00:00 -07:00
12
+ date: 2009-08-13 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: "0"
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
- name: jruby-abridged
36
+ name: appengine-jruby-jars
37
37
  type: :runtime
38
38
  version_requirement:
39
39
  version_requirements: !ruby/object:Gem::Requirement