trinidad 1.4.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,18 @@
1
+ == Trinidad 1.4.1 (2012-08-17)
2
+
3
+ * make sure file logging rotates correctly when file handler attempts rolling
4
+ after midnight (#81)
5
+ * refined (backwards-compatible) extension API
6
+ - options attr reader
7
+ - override_tomcat? no longer needed simply return a tomcat duck
8
+ - expose camelize + symbolize helpers
9
+ - WebAppExtension should only get a single context argument on configure
10
+ * better rails (2.3/3.x) detection with environment.rb
11
+ * minor server updates
12
+ - expose configured web_apps
13
+ - add a trap? helper (for easier overrides)
14
+ - introduce a stop! for stopping and destroying a the server
15
+
1
16
  == Trinidad 1.4.0 (2012-07-24)
2
17
 
3
18
  * fix incorrect context-param parsing and only configure logging when
@@ -1,77 +1,119 @@
1
1
  module Trinidad
2
2
  module Extensions
3
- def self.configure_webapp_extensions(extensions, tomcat, app_context)
4
- if extensions
5
- extensions.each do |name, options|
6
- if extension = extension(name, 'WebAppExtension', options)
7
- extension.configure(tomcat, app_context)
8
- end
3
+
4
+ def self.configure_options_extensions(extensions, parser, default_options)
5
+ extensions.each do |name, options|
6
+ if extension = extension(name, 'OptionsExtension', options)
7
+ extension.configure(parser, default_options)
9
8
  end
10
- end
9
+ end if extensions
11
10
  end
12
-
11
+
13
12
  def self.configure_server_extensions(extensions, tomcat)
14
- if extensions
15
- extensions.each do |name, options|
16
- if extension = extension(name, 'ServerExtension', options)
17
- configured_tomcat = extension.configure(tomcat)
18
- tomcat = configured_tomcat if extension.override_tomcat?
13
+ extensions.each do |name, options|
14
+ if extension = extension(name, 'ServerExtension', options)
15
+ outcome = extension.configure(tomcat)
16
+ if tomcat_like?(outcome) || extension.override_tomcat?
17
+ tomcat = outcome
19
18
  end
20
19
  end
21
- end
20
+ end if extensions
22
21
  tomcat
23
22
  end
24
23
 
25
- def self.configure_options_extensions(extensions, parser, default_options)
26
- if extensions
27
- extensions.each do |name, options|
28
- if extension = extension(name, 'OptionsExtension', options)
29
- extension.configure(parser, default_options)
24
+ def self.configure_webapp_extensions(extensions, tomcat, context)
25
+ extensions.each do |name, options|
26
+ if extension = extension(name, 'WebAppExtension', options)
27
+ extension.tomcat = tomcat
28
+ if extension.method(:configure).arity == 2
29
+ extension.configure(tomcat, context) # #deprecated old way
30
+ else
31
+ extension.configure(context)
30
32
  end
31
33
  end
32
- end
34
+ end if extensions
33
35
  end
34
-
36
+
37
+ protected
38
+
35
39
  def self.extension(name, type, options)
36
40
  class_name = (camelize(name.to_s) << type).to_sym
37
41
  load_extension(name) unless const_defined?(class_name)
38
42
  clazz = const_get(class_name) rescue nil
39
- clazz.new(options) if clazz
43
+ clazz.new(options) if clazz # MyExtension.new(options)
40
44
  end
41
45
 
42
46
  def self.load_extension(name)
43
47
  require "trinidad_#{name}_extension"
44
48
  end
45
49
 
50
+ private
51
+
52
+ def self.tomcat_like?(tomcat)
53
+ tomcat.respond_to?(:server) && tomcat.respond_to?(:start) && tomcat.respond_to?(:stop)
54
+ end
55
+
56
+ def self.camelize(string)
57
+ string.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
58
+ end
59
+
60
+ def self.camelize(string)
61
+ string = string.sub(/^[a-z\d]*/) { $&.capitalize }
62
+ string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }
63
+ string.gsub!('/', '::')
64
+ string
65
+ end
66
+
46
67
  class Extension
68
+
69
+ attr_reader :options
70
+
47
71
  def initialize(options = {})
48
72
  @options = options ? options.dup : {}
49
73
  end
74
+
75
+ private
76
+
77
+ # Hash#symbolize
78
+ def symbolize(options, deep = false)
79
+ Trinidad::Configuration.symbolize_options(options, deep)
80
+ end
81
+
82
+ # String#camelize
83
+ def camelize(string)
84
+ Trinidad::Extensions.send :camelize, string
85
+ end
86
+
50
87
  end
51
88
 
52
89
  class WebAppExtension < Extension
53
- def configure(tomcat, app_context)
54
- raise NotImplementedError, "#{self.class}#configure not implemented"
90
+
91
+ attr_accessor :tomcat
92
+
93
+ def configure(context)
94
+ raise NotImplementedError, "#{self.class.name}#configure(context) not implemented"
55
95
  end
96
+
56
97
  end
57
98
 
58
99
  class ServerExtension < Extension
100
+
59
101
  def configure(tomcat)
60
- raise NotImplementedError, "#{self.class}#configure not implemented"
102
+ raise NotImplementedError, "#{self.class.name}#configure(tomcat) not implemented"
61
103
  end
62
-
63
- def override_tomcat?; false; end # hack to allow override the tomcat's instance, it should be a better way
104
+
105
+ # #deprecated override tomcat by returning it from #configure
106
+ def override_tomcat?; false; end
107
+
64
108
  end
65
109
 
66
110
  class OptionsExtension < Extension
111
+
67
112
  def configure(parser, default_options)
68
- raise NotImplementedError, "#{self.class}#configure not implemented"
113
+ raise NotImplementedError, "#{self.class.name}#configure(parser, default_options) not implemented"
69
114
  end
115
+
70
116
  end
71
-
72
- private
73
- def self.camelize(string)
74
- string.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
75
- end
117
+
76
118
  end
77
119
  end
@@ -4,7 +4,7 @@ module Trinidad
4
4
  class Host < Base
5
5
 
6
6
  attr_reader :server, :app_holders
7
- # @deprecated (<= 1.3.5)
7
+ # @deprecated (<= 1.3.5)
8
8
  alias_method :contexts, :app_holders
9
9
 
10
10
  # #server current server instance
@@ -160,7 +160,8 @@ module Trinidad
160
160
  end
161
161
 
162
162
  def closeWriter
163
- super
163
+ date = _date
164
+ super # sets `date = null`
164
165
  # the additional trick here is to rotate the closed file
165
166
  synchronized do
166
167
  # we're normally in the lock here (from #publish)
@@ -168,11 +169,10 @@ module Trinidad
168
169
  dir = java.io.File.new(directory).getAbsoluteFile
169
170
  log = java.io.File.new(dir, prefix + "" + suffix)
170
171
  if log.exists
171
- date = _date
172
- if date.empty?
172
+ if ! date || date.empty?
173
173
  date = log.lastModified
174
- # we're abuse Timestamp to get a date formatted !
175
- # just like the super does internally (just in case)
174
+ # we abuse Timestamp to get a date formatted !
175
+ # just like super does internally (just in case)
176
176
  date = java.sql.Timestamp.new(date).toString[0, 10]
177
177
  end
178
178
  today = java.lang.System.currentTimeMillis
@@ -1,13 +1,13 @@
1
1
  module Trinidad
2
2
  class Server
3
- attr_reader :tomcat, :config
3
+ attr_reader :config, :tomcat, :web_apps
4
4
 
5
5
  def initialize(config = Trinidad.configuration)
6
6
  load_config(config)
7
7
  configure_logging(@config[:log])
8
8
  load_tomcat_server
9
- apps = create_web_apps
10
- load_host_monitor(apps)
9
+ @web_apps = create_web_apps
10
+ load_host_monitor(@web_apps)
11
11
  end
12
12
 
13
13
  def load_config(config)
@@ -114,7 +114,7 @@ module Trinidad
114
114
  end
115
115
 
116
116
  def start
117
- trap_signals if @config[:trap]
117
+ trap_signals if trap?
118
118
 
119
119
  @tomcat.start
120
120
  @tomcat.server.await
@@ -122,16 +122,24 @@ module Trinidad
122
122
 
123
123
  def stop
124
124
  @tomcat.stop
125
- @tomcat.destroy
126
125
  end
127
126
 
127
+ def stop!
128
+ stop
129
+ @tomcat.destroy
130
+ end
131
+
128
132
  protected
129
133
 
134
+ def trap?
135
+ !!@config[:trap]
136
+ end
137
+
130
138
  def create_web_apps
131
- apps = []
132
- apps << create_from_web_apps
139
+ apps = [ create_from_web_apps ]
133
140
  apps << create_from_apps_base
134
- apps.flatten.compact
141
+ apps.flatten!; apps.compact!
142
+ apps
135
143
  end
136
144
 
137
145
  def create_from_web_apps
@@ -232,9 +240,8 @@ module Trinidad
232
240
  def generate_default_keystore(config)
233
241
  keystore_file = java.io.File.new(config[:keystoreFile])
234
242
 
235
- if (!keystore_file.parent_file.exists &&
236
- !keystore_file.parent_file.mkdir)
237
- raise "Unable to create keystore folder: " + keystore_file.parent_file.canonical_path
243
+ if ! keystore_file.parent_file.exists && ! keystore_file.parent_file.mkdir
244
+ raise "Unable to create keystore folder: #{keystore_file.parent_file.canonical_path}"
238
245
  end
239
246
 
240
247
  key_tool_args = ["-genkey",
@@ -252,8 +259,9 @@ module Trinidad
252
259
  end
253
260
 
254
261
  def trap_signals
255
- trap('INT') { stop }
256
- trap('TERM') { stop }
262
+ trap('INT') { stop! }
263
+ trap('TERM') { stop! }
257
264
  end
265
+
258
266
  end
259
267
  end
@@ -1,3 +1,3 @@
1
1
  module Trinidad
2
- VERSION = '1.4.0'
2
+ VERSION = '1.4.1'
3
3
  end
@@ -179,7 +179,7 @@ module Trinidad
179
179
  private
180
180
 
181
181
  def web_xml_doc
182
- return @web_xml_doc || nil if ! @web_xml_doc.nil?
182
+ return @web_xml_doc || nil unless @web_xml_doc.nil?
183
183
  if deployment_descriptor
184
184
  begin
185
185
  require 'rexml/document'
@@ -200,14 +200,32 @@ module Trinidad
200
200
  web_app_dir = config[:web_app_dir] ||
201
201
  (default_config && default_config[:web_app_dir]) || Dir.pwd
202
202
  config_ru = (default_config && default_config[:rackup]) || 'config.ru'
203
- # Check for rackup (but still use config/environment.rb for Rails 3)
203
+ # check for rackup (but still use config/environment.rb for rails 3)
204
204
  if File.exists?(File.join(web_app_dir, config_ru)) &&
205
- ! File.exists?(File.join(web_app_dir, 'config/environment.rb'))
205
+ ! rails?(config, default_config) # do not :rackup a rails app
206
206
  config[:rackup] = config_ru
207
207
  end
208
208
  config[:rackup] || ! Dir[File.join(web_app_dir, 'WEB-INF/**/config.ru')].empty?
209
209
  end
210
-
210
+
211
+ def self.rails?(config, default_config = nil)
212
+ web_app_dir = config[:web_app_dir] ||
213
+ (default_config && default_config[:web_app_dir]) || Dir.pwd
214
+ # standart Rails 3.x `class Application < Rails::Application`
215
+ if File.exists?(application = File.join(web_app_dir, 'config/application.rb'))
216
+ application_rb = File.read(application)
217
+ return true if application_rb =~ /^[^#]*Rails::Application/
218
+ end
219
+ if File.exists?(environment = File.join(web_app_dir, 'config/environment.rb'))
220
+ environment_rb = File.read(environment)
221
+ # customized Rails 3.x, expect a `Rails::Application` subclass
222
+ return true if environment_rb =~ /^[^#]*Rails::Application/
223
+ # plain-old Rails 2.3 `RAILS_GEM_VERSION = '2.3.14'` ...
224
+ return true if environment_rb =~ /^[^#]*RAILS_GEM_VERSION/
225
+ end
226
+ false
227
+ end
228
+
211
229
  def self.war?(config, default_config = nil)
212
230
  config[:context_path] && config[:context_path][-4..-1] == '.war'
213
231
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: trinidad
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.4.0
5
+ version: 1.4.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - David Calavera
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-07-24 00:00:00 Z
13
+ date: 2012-08-17 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: trinidad_jars