padrino-core 0.9.6 → 0.9.7
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/README.rdoc +45 -45
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/padrino-core.rb +6 -6
- data/lib/padrino-core/application.rb +13 -18
- data/lib/padrino-core/application/mounter.rb +20 -20
- data/lib/padrino-core/application/rendering.rb +48 -21
- data/lib/padrino-core/application/routing.rb +20 -6
- data/lib/padrino-core/application/showexceptions.rb +25 -0
- data/lib/padrino-core/caller.rb +35 -36
- data/lib/padrino-core/cli/adapter.rb +4 -5
- data/lib/padrino-core/cli/base.rb +1 -1
- data/lib/padrino-core/cli/rake.rb +0 -1
- data/lib/padrino-core/loader.rb +12 -12
- data/lib/padrino-core/locale/en.yml +1 -1
- data/lib/padrino-core/locale/it.yml +4 -4
- data/lib/padrino-core/logger.rb +24 -24
- data/lib/padrino-core/reloader.rb +6 -6
- data/lib/padrino-core/server.rb +5 -5
- data/lib/padrino-core/support_lite.rb +9 -9
- data/lib/padrino-core/tasks.rb +4 -4
- data/lib/padrino-core/version.rb +3 -3
- data/padrino-core.gemspec +3 -2
- data/test/fixtures/apps/simple.rb +3 -3
- data/test/test_application.rb +61 -26
- data/test/test_mounter.rb +5 -5
- data/test/test_reloader_simple.rb +4 -4
- data/test/test_routing.rb +44 -0
- data/test/test_server.rb +1 -1
- metadata +4 -3
@@ -1,9 +1,33 @@
|
|
1
1
|
module Padrino
|
2
|
+
##
|
3
|
+
# Padrino enhances the Sinatra ‘render’ method to have support for automatic template engine detection,
|
4
|
+
# among other more advanced features.
|
5
|
+
#
|
2
6
|
module Rendering
|
3
7
|
def self.registered(app)
|
4
8
|
app.send(:include, Padrino::Rendering)
|
5
9
|
end
|
6
10
|
|
11
|
+
def self.included(base)
|
12
|
+
base.extend(ClassMethods)
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
##
|
17
|
+
# Use layout like rails does or if a block given then like sinatra.
|
18
|
+
# If used without a block, sets the current layout for the route.
|
19
|
+
#
|
20
|
+
# By default, searches in your +app+/+views+/+layouts+/+application+.(+haml+|+erb+|+xxx+)
|
21
|
+
#
|
22
|
+
# If you define +layout+ :+custom+ then searches for your layouts in
|
23
|
+
# +app+/+views+/+layouts+/+custom+.(+haml+|+erb+|+xxx+)
|
24
|
+
#
|
25
|
+
def layout(name=:layout, &block)
|
26
|
+
return super(name, &block) if block_given?
|
27
|
+
@_layout = name
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
7
31
|
private
|
8
32
|
##
|
9
33
|
# Hijacking the sinatra render for:
|
@@ -12,6 +36,7 @@ module Padrino
|
|
12
36
|
# * Use render 'path/to/my/template' (without symbols)
|
13
37
|
# * Use render 'path/to/my/template' (with auto enegine lookup)
|
14
38
|
# * Use render 'path/to/template', :layout => false
|
39
|
+
# * Use render 'path/to/template', :layout => false, :engine => 'haml'
|
15
40
|
# * Use render { :a => 1, :b => 2, :c => 3 } # => return a json string
|
16
41
|
#
|
17
42
|
def render(engine, data=nil, options={}, locals={}, &block)
|
@@ -31,11 +56,10 @@ module Padrino
|
|
31
56
|
|
32
57
|
# Use layout as rails do
|
33
58
|
if (options[:layout].nil? || options[:layout] == true) && !self.class.templates.has_key?(:layout)
|
34
|
-
layout = self.class.instance_variable_defined?(:@_layout) ? self.class.instance_variable_get(:@_layout) : :application
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
logger.debug "Rendering layout #{options[:layout]}" if defined?(logger)
|
59
|
+
if layout = self.class.instance_variable_defined?(:@_layout) ? self.class.instance_variable_get(:@_layout) : :application
|
60
|
+
layout = Dir["#{self.options.views}/#{layout}.*"].any? ? layout.to_sym : File.join('layouts', layout.to_s).to_sym
|
61
|
+
options[:layout] = resolve_template(layout)[0] rescue nil
|
62
|
+
logger.debug "Rendering layout #{options[:layout]}" if defined?(logger) && options[:layout]
|
39
63
|
end
|
40
64
|
end
|
41
65
|
super(engine, data, options, locals, &block)
|
@@ -43,27 +67,30 @@ module Padrino
|
|
43
67
|
|
44
68
|
##
|
45
69
|
# Returns the template path and engine that match (if presents) content_type, I18n.locale.
|
46
|
-
#
|
70
|
+
#
|
47
71
|
# ==== Example
|
48
|
-
#
|
72
|
+
#
|
49
73
|
# get "/foo", :respond_to => [:html, :js] do; render 'path/to/foo'; end
|
50
74
|
# # If you request "/foo.js" with I18n.locale == :ru => [:"/path/to/foo.ru.js", :erb]
|
51
75
|
# # If you request "/foo" with I18n.locale == :de => [:"/path/to/foo.de.haml", :haml]
|
52
|
-
#
|
76
|
+
#
|
53
77
|
def resolve_template(template_path, options={})
|
54
78
|
view_path = options.delete(:views) || self.options.views || self.class.views || "./views"
|
55
|
-
template_path
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
regexs.unshift(/^[^\.]+\.#{I18n.locale}\.#{content_type}\.[^\.]+$/) if content_type.present?
|
79
|
+
template_path = "/#{template_path}" unless template_path.to_s =~ /^\//
|
80
|
+
templates = Dir[File.join(view_path, template_path) + ".*"].map do |file|
|
81
|
+
template_file = file.sub(view_path, '').chomp(File.extname(file)).to_sym # retrieves relative file path
|
82
|
+
template_engine = options[:engine] || File.extname(file)[1..-1].to_sym # retrieves engine extension
|
83
|
+
[template_file, template_engine]
|
61
84
|
end
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
85
|
+
|
86
|
+
located_template =
|
87
|
+
templates.find { |file, e| defined?(I18n) && file.to_s == "#{template_path}.#{I18n.locale}.#{content_type}" } ||
|
88
|
+
templates.find { |file, e| defined?(I18n) && file.to_s == "#{template_path}.#{I18n.locale}" && content_type == :html } ||
|
89
|
+
templates.find { |file, e| file.to_s == "#{template_path}.#{content_type}" } ||
|
90
|
+
templates.find { |file, e| file.to_s == "#{template_path}" && content_type == :html }
|
91
|
+
|
92
|
+
raise "Template path '#{template_path}' could not be located and rendered!" unless located_template
|
93
|
+
located_template
|
67
94
|
end
|
68
95
|
|
69
96
|
##
|
@@ -76,5 +103,5 @@ module Padrino
|
|
76
103
|
is_in_development = (defined?(Padrino) && Padrino.respond_to?(:env) && Padrino.env != :production)
|
77
104
|
@template_cache.clear if is_in_development && can_clear_cache
|
78
105
|
end
|
79
|
-
end
|
80
|
-
end
|
106
|
+
end # Rendering
|
107
|
+
end # Padrino
|
@@ -2,7 +2,17 @@ require 'usher' unless defined?(Usher)
|
|
2
2
|
require 'padrino-core/support_lite' unless String.method_defined?(:blank!)
|
3
3
|
|
4
4
|
module Padrino
|
5
|
+
##
|
6
|
+
# Padrino provides advanced routing definition support to make routes and url generation much easier.
|
7
|
+
# This routing system supports named route aliases and easy access to url paths.
|
8
|
+
# The benefits of this is that instead of having to hard-code route urls into every area of your application,
|
9
|
+
# now we can just define the urls in a single spot and then attach an alias which can be used to refer
|
10
|
+
# to the url throughout the application.
|
11
|
+
#
|
5
12
|
module Routing
|
13
|
+
class UnrecognizedException < RuntimeError #:nodoc:
|
14
|
+
end
|
15
|
+
|
6
16
|
def self.registered(app)
|
7
17
|
app.send(:include, Padrino::Routing)
|
8
18
|
end
|
@@ -170,6 +180,9 @@ module Padrino
|
|
170
180
|
url = router.generator.generate(name, params)
|
171
181
|
url = uri_root + url if defined?(uri_root) && uri_root != "/"
|
172
182
|
url
|
183
|
+
rescue Usher::UnrecognizedException
|
184
|
+
route_error = "route mapping for url(#{name.inspect}) could not be found!"
|
185
|
+
raise Padrino::Routing::UnrecognizedException.new(route_error)
|
173
186
|
end
|
174
187
|
alias :url_for :url
|
175
188
|
|
@@ -238,8 +251,9 @@ module Padrino
|
|
238
251
|
end
|
239
252
|
|
240
253
|
# Little reformats
|
241
|
-
path.sub!(%r{\bindex$}, "")
|
242
|
-
path
|
254
|
+
path.sub!(%r{\bindex$}, "") # If the route end with /index we remove them
|
255
|
+
path.sub!(%r^/index(\(.\{:format[\,\w\$\|]*\}\))$^, '\1') # Remove index from formatted routes
|
256
|
+
path = (uri_root == "/" ? "/" : "(/)") if path.blank? # Add a trailing delimiter if path is empty
|
243
257
|
|
244
258
|
# We need to have a path that start with / in some circumstances and that don't end with /
|
245
259
|
if path != "(/)" && path != "/"
|
@@ -306,8 +320,8 @@ module Padrino
|
|
306
320
|
container % match
|
307
321
|
else ".{:format,#{format_params}}"
|
308
322
|
end
|
309
|
-
path
|
323
|
+
path + format_suffix
|
310
324
|
end
|
311
|
-
end
|
312
|
-
end
|
313
|
-
end
|
325
|
+
end # ClassMethods
|
326
|
+
end # Routing
|
327
|
+
end # Padrino
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Padrino
|
2
|
+
##
|
3
|
+
# This module extend Sinatra::ShowExceptions adding Padrino as "Framework"
|
4
|
+
#
|
5
|
+
module ShowExceptions
|
6
|
+
|
7
|
+
def self.included(base)
|
8
|
+
base.alias_method_chain :frame_class, :padrino
|
9
|
+
end
|
10
|
+
|
11
|
+
def frame_class_with_padrino(frame)
|
12
|
+
if frame.filename =~ /lib\/sinatra.*\.rb|lib\/padrino.*\.rb/
|
13
|
+
"framework"
|
14
|
+
elsif (defined?(Gem) && frame.filename.include?(Gem.dir)) ||
|
15
|
+
frame.filename =~ /\/bin\/(\w+)$/ ||
|
16
|
+
frame.filename =~ /Ruby\/Gems/
|
17
|
+
"system"
|
18
|
+
else
|
19
|
+
"app"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end # ShowExceptions
|
23
|
+
end # Padrino
|
24
|
+
|
25
|
+
Sinatra::ShowExceptions.send(:include, Padrino::ShowExceptions)
|
data/lib/padrino-core/caller.rb
CHANGED
@@ -1,46 +1,45 @@
|
|
1
1
|
module Padrino
|
2
2
|
PADRINO_IGNORE_CALLERS = [
|
3
|
-
%r{lib/padrino-.*$},
|
4
|
-
%r{/padrino-.*/(lib|bin)},
|
5
|
-
%r{/bin/padrino$},
|
6
|
-
%r{/sinatra},
|
7
|
-
%r{lib/tilt.*\.rb$},
|
8
|
-
%r{lib/rack.*\.rb$},
|
9
|
-
%r{lib/mongrel.*\.rb$},
|
10
|
-
%r{lib/shotgun.*\.rb$},
|
11
|
-
%r{bin/shotgun$},
|
12
|
-
%r{\(.*\)},
|
13
|
-
%r{shoulda/context\.rb$},
|
14
|
-
%r{mocha/integration},
|
15
|
-
%r{test/unit},
|
16
|
-
%r{rake_test_loader\.rb},
|
17
|
-
%r{custom_require\.rb$},
|
18
|
-
%r{active_support},
|
19
|
-
%r{/thor},
|
3
|
+
%r{lib/padrino-.*$}, # all padrino code
|
4
|
+
%r{/padrino-.*/(lib|bin)}, # all padrino code
|
5
|
+
%r{/bin/padrino$}, # all padrino code
|
6
|
+
%r{/sinatra(/(base|main|showexceptions))?\.rb$}, # all sinatra code
|
7
|
+
%r{lib/tilt.*\.rb$}, # all tilt code
|
8
|
+
%r{lib/rack.*\.rb$}, # all rack code
|
9
|
+
%r{lib/mongrel.*\.rb$}, # all mongrel code
|
10
|
+
%r{lib/shotgun.*\.rb$}, # all shotgun lib
|
11
|
+
%r{bin/shotgun$}, # shotgun binary
|
12
|
+
%r{\(.*\)}, # generated code
|
13
|
+
%r{shoulda/context\.rb$}, # shoulda hacks
|
14
|
+
%r{mocha/integration}, # mocha hacks
|
15
|
+
%r{test/unit}, # test unit hacks
|
16
|
+
%r{rake_test_loader\.rb}, # rake hacks
|
17
|
+
%r{custom_require\.rb$}, # rubygems require hacks
|
18
|
+
%r{active_support}, # active_support require hacks
|
19
|
+
%r{/thor}, # thor require hacks
|
20
20
|
] unless defined?(PADRINO_IGNORE_CALLERS)
|
21
21
|
|
22
22
|
##
|
23
23
|
# Add rubinius (and hopefully other VM impls) ignore patterns ...
|
24
|
-
#
|
24
|
+
#
|
25
25
|
PADRINO_IGNORE_CALLERS.concat(RUBY_IGNORE_CALLERS) if defined?(RUBY_IGNORE_CALLERS)
|
26
26
|
|
27
27
|
private
|
28
|
+
##
|
29
|
+
# Returns the filename for the file that is the direct caller (first caller)
|
30
|
+
#
|
31
|
+
def self.first_caller
|
32
|
+
caller_files.first
|
33
|
+
end
|
28
34
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
caller_files
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
def self.caller_files
|
41
|
-
caller(1).
|
42
|
-
map { |line| line.split(/:(?=\d|in )/)[0,2] }.
|
43
|
-
reject { |file,line| PADRINO_IGNORE_CALLERS.any? { |pattern| file =~ pattern } }.
|
44
|
-
map { |file,line| file }
|
45
|
-
end
|
46
|
-
end # Padrino
|
35
|
+
##
|
36
|
+
# Like Kernel#caller but excluding certain magic entries and without
|
37
|
+
# line / method information; the resulting array contains filenames only.
|
38
|
+
#
|
39
|
+
def self.caller_files
|
40
|
+
caller(1).
|
41
|
+
map { |line| line.split(/:(?=\d|in )/)[0,2] }.
|
42
|
+
reject { |file,line| PADRINO_IGNORE_CALLERS.any? { |pattern| file =~ pattern } }.
|
43
|
+
map { |file,line| file }
|
44
|
+
end
|
45
|
+
end # Padrino
|
data/lib/padrino-core/loader.rb
CHANGED
@@ -2,7 +2,7 @@ module Padrino
|
|
2
2
|
class << self
|
3
3
|
##
|
4
4
|
# Requires necessary dependencies as well as application files from root lib and models
|
5
|
-
#
|
5
|
+
#
|
6
6
|
def load!
|
7
7
|
return false if loaded?
|
8
8
|
@_called_from = first_caller
|
@@ -17,7 +17,7 @@ module Padrino
|
|
17
17
|
|
18
18
|
##
|
19
19
|
# Method for reloading required applications and their files
|
20
|
-
#
|
20
|
+
#
|
21
21
|
def reload!
|
22
22
|
return unless Reloader::Stat.changed?
|
23
23
|
Reloader::Stat.reload! # detects the modified files
|
@@ -26,14 +26,14 @@ module Padrino
|
|
26
26
|
|
27
27
|
##
|
28
28
|
# This adds the ablity to instantiate Padrino.load! after Padrino::Application definition.
|
29
|
-
#
|
29
|
+
#
|
30
30
|
def called_from
|
31
31
|
@_called_from || first_caller
|
32
32
|
end
|
33
33
|
|
34
34
|
##
|
35
35
|
# Return true if Padrino was loaded with Padrino.load!
|
36
|
-
#
|
36
|
+
#
|
37
37
|
def loaded?
|
38
38
|
Thread.current[:padrino_loaded]
|
39
39
|
end
|
@@ -42,23 +42,23 @@ module Padrino
|
|
42
42
|
# Attempts to require all dependency libs that we need.
|
43
43
|
# If you use this method we can perform correctly a Padrino.reload!
|
44
44
|
# Another good thing that this method are dependency check, for example:
|
45
|
-
#
|
45
|
+
#
|
46
46
|
# models
|
47
47
|
# \-- a.rb => require something of b.rb
|
48
48
|
# \-- b.rb
|
49
|
-
#
|
49
|
+
#
|
50
50
|
# In the example above if we do:
|
51
|
-
#
|
51
|
+
#
|
52
52
|
# Dir["/models/*.rb"].each { |r| require r }
|
53
|
-
#
|
53
|
+
#
|
54
54
|
# we get an error, because we try to require first a.rb that need +something+ of b.rb.
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# With +require_dependencies+ we don't have this problem.
|
57
|
-
#
|
57
|
+
#
|
58
58
|
# ==== Examples
|
59
59
|
# # For require all our app libs we need to do:
|
60
60
|
# require_dependencies("#{Padrino.root}/lib/**/*.rb")
|
61
|
-
#
|
61
|
+
#
|
62
62
|
def require_dependencies(*paths)
|
63
63
|
# Extract all files to load
|
64
64
|
files = paths.map { |path| Dir[path] }.flatten
|
@@ -101,7 +101,7 @@ module Padrino
|
|
101
101
|
|
102
102
|
##
|
103
103
|
# Concat to $LOAD_PATH the given paths
|
104
|
-
#
|
104
|
+
#
|
105
105
|
def set_load_paths(*paths)
|
106
106
|
$:.concat(paths)
|
107
107
|
$:.uniq!
|
@@ -8,13 +8,13 @@ it:
|
|
8
8
|
short: "%d %b"
|
9
9
|
long: "%d %B %Y"
|
10
10
|
only_day: "%e"
|
11
|
-
|
11
|
+
|
12
12
|
day_names: [Domenica, Lunedì, Martedì, Mercoledì, Giovedì, Venerdì, Sabato]
|
13
13
|
abbr_day_names: [Dom, Lun, Mar, Mer, Gio, Ven, Sab]
|
14
14
|
month_names: [~, Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre]
|
15
15
|
abbr_month_names: [~, Gen, Feb, Mar, Apr, Mag, Giu, Lug, Ago, Set, Ott, Nov, Dic]
|
16
16
|
order: [ :day, :month, :year ]
|
17
|
-
|
17
|
+
|
18
18
|
time:
|
19
19
|
formats:
|
20
20
|
default: "%a %d %b %Y, %H:%M:%S %z"
|
@@ -22,11 +22,11 @@ it:
|
|
22
22
|
short: "%d %b %H:%M"
|
23
23
|
long: "%d %B %Y %H:%M"
|
24
24
|
only_second: "%S"
|
25
|
-
|
25
|
+
|
26
26
|
datetime:
|
27
27
|
formats:
|
28
28
|
default: "%d-%m-%YT%H:%M:%S%Z"
|
29
|
-
|
29
|
+
|
30
30
|
am: 'am'
|
31
31
|
pm: 'pm'
|
32
32
|
|
data/lib/padrino-core/logger.rb
CHANGED
@@ -5,24 +5,24 @@ module Padrino
|
|
5
5
|
|
6
6
|
##
|
7
7
|
# Returns the padrino logger
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# ==== Examples
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# logger.debug "foo"
|
12
12
|
# logger.warn "bar"
|
13
|
-
#
|
13
|
+
#
|
14
14
|
def self.logger
|
15
15
|
Thread.current[:padrino_logger] ||= Padrino::Logger.setup!
|
16
16
|
end
|
17
17
|
|
18
18
|
##
|
19
19
|
# Extensions to the built in Ruby logger.
|
20
|
-
#
|
20
|
+
#
|
21
21
|
# ==== Examples
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# logger.debug "foo"
|
24
24
|
# logger.warn "bar"
|
25
|
-
#
|
25
|
+
#
|
26
26
|
class Logger
|
27
27
|
|
28
28
|
attr_accessor :level
|
@@ -33,13 +33,13 @@ module Padrino
|
|
33
33
|
|
34
34
|
##
|
35
35
|
# Ruby (standard) logger levels:
|
36
|
-
#
|
36
|
+
#
|
37
37
|
# :fatal:: An unhandleable error that results in a program crash
|
38
38
|
# :error:: A handleable error condition
|
39
39
|
# :warn:: A warning
|
40
40
|
# :info:: generic (useful) information about system operation
|
41
41
|
# :debug:: low-level information for developers
|
42
|
-
#
|
42
|
+
#
|
43
43
|
Levels = {
|
44
44
|
:fatal => 7,
|
45
45
|
:error => 6,
|
@@ -52,7 +52,7 @@ module Padrino
|
|
52
52
|
|
53
53
|
##
|
54
54
|
# Configuration for a given environment, possible options are:
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# :log_level:: Once of [:fatal, :error, :warn, :info, :debug]
|
57
57
|
# :stream:: Once of [:to_file, :null, :stdout, :stderr] our your custom stream
|
58
58
|
# :log_level::
|
@@ -63,21 +63,21 @@ module Padrino
|
|
63
63
|
# added. Defaults to true.
|
64
64
|
# :format_datetime:: Format of datetime. Defaults to: "%d/%b/%Y %H:%M:%S"
|
65
65
|
# :format_message:: Format of message. Defaults to: ""%s - - [%s] \"%s\"""
|
66
|
-
#
|
66
|
+
#
|
67
67
|
# ==== Examples
|
68
|
-
#
|
68
|
+
#
|
69
69
|
# Padrino::Logger::Config[:development] = { :log_level => :debug, :to_file }
|
70
70
|
# # or you can edit our defaults
|
71
71
|
# Padrino::Logger::Config[:development][:log_level] = :error
|
72
72
|
# # or you can use your stream
|
73
73
|
# Padrino::Logger::Config[:development][:stream] = StringIO.new
|
74
|
-
#
|
74
|
+
#
|
75
75
|
# Defaults are:
|
76
|
-
#
|
76
|
+
#
|
77
77
|
# :production => { :log_level => :warn, :stream => :to_file }
|
78
78
|
# :development => { :log_level => :debug, :stream => :stdout }
|
79
79
|
# :test => { :log_level => :fatal, :stream => :null }
|
80
|
-
#
|
80
|
+
#
|
81
81
|
Config = {
|
82
82
|
:production => { :log_level => :warn, :stream => :to_file },
|
83
83
|
:development => { :log_level => :debug, :stream => :stdout },
|
@@ -86,7 +86,7 @@ module Padrino
|
|
86
86
|
|
87
87
|
##
|
88
88
|
# Setup a new logger
|
89
|
-
#
|
89
|
+
#
|
90
90
|
def self.setup!
|
91
91
|
config_level = (PADRINO_LOG_LEVEL || Padrino.env || :test).to_sym # need this for PADRINO_LOG_LEVEL
|
92
92
|
config = Config[config_level]
|
@@ -108,7 +108,7 @@ module Padrino
|
|
108
108
|
# To initialize the logger you create a new object, proxies to set_log.
|
109
109
|
#
|
110
110
|
# ==== Options
|
111
|
-
#
|
111
|
+
#
|
112
112
|
# :stream:: Either an IO object or a name of a logfile. Defaults to $stdout
|
113
113
|
# :log_level::
|
114
114
|
# The log level from, e.g. :fatal or :info. Defaults to :debug in the
|
@@ -118,7 +118,7 @@ module Padrino
|
|
118
118
|
# added. Defaults to true.
|
119
119
|
# :format_datetime:: Format of datetime. Defaults to: "%d/%b/%Y %H:%M:%S"
|
120
120
|
# :format_message:: Format of message. Defaults to: ""%s - - [%s] \"%s\"""
|
121
|
-
#
|
121
|
+
#
|
122
122
|
def initialize(options={})
|
123
123
|
@buffer = []
|
124
124
|
@auto_flush = options.has_key?(:auto_flush) ? options[:auto_flush] : true
|
@@ -132,7 +132,7 @@ module Padrino
|
|
132
132
|
|
133
133
|
##
|
134
134
|
# Flush the entire buffer to the log object.
|
135
|
-
#
|
135
|
+
#
|
136
136
|
def flush
|
137
137
|
return unless @buffer.size > 0
|
138
138
|
@mutex.synchronize do
|
@@ -142,7 +142,7 @@ module Padrino
|
|
142
142
|
|
143
143
|
##
|
144
144
|
# Close and remove the current log object.
|
145
|
-
#
|
145
|
+
#
|
146
146
|
def close
|
147
147
|
flush
|
148
148
|
@log.close if @log.respond_to?(:close) && !@log.tty?
|
@@ -159,7 +159,7 @@ module Padrino
|
|
159
159
|
|
160
160
|
##
|
161
161
|
# Directly append message to the log.
|
162
|
-
#
|
162
|
+
#
|
163
163
|
def <<(message = nil)
|
164
164
|
message << "\n" unless message[-1] == ?\n
|
165
165
|
@buffer << message
|
@@ -169,7 +169,7 @@ module Padrino
|
|
169
169
|
|
170
170
|
##
|
171
171
|
# Generate the logging methods for Padrino.logger for each log level.
|
172
|
-
#
|
172
|
+
#
|
173
173
|
Levels.each_pair do |name, number|
|
174
174
|
class_eval <<-LEVELMETHODS, __FILE__, __LINE__
|
175
175
|
|
@@ -219,13 +219,13 @@ module Padrino
|
|
219
219
|
# Padrino::Loggger::Rack forwards every request to an +app+ given, and
|
220
220
|
# logs a line in the Apache common log format to the +logger+, or
|
221
221
|
# rack.errors by default.
|
222
|
-
#
|
222
|
+
#
|
223
223
|
class Rack
|
224
224
|
##
|
225
225
|
# Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
|
226
226
|
# "lilith.local - - GET / HTTP/1.1 500 -"
|
227
227
|
# %{%s - %s %s %s%s %s - %d %s %0.4f}
|
228
|
-
#
|
228
|
+
#
|
229
229
|
FORMAT = %{%s - %s %s %s%s %s - %d %s %0.4f}
|
230
230
|
|
231
231
|
def initialize(app)
|
@@ -271,7 +271,7 @@ end # Padrino
|
|
271
271
|
module Kernel #:nodoc:
|
272
272
|
##
|
273
273
|
# Define a logger available every where in our app
|
274
|
-
#
|
274
|
+
#
|
275
275
|
def logger
|
276
276
|
Padrino.logger
|
277
277
|
end
|