padrino-core 0.12.8.1 → 0.12.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/Rakefile +1 -5
- data/bin/padrino +1 -1
- data/lib/padrino-core/application/application_setup.rb +2 -0
- data/lib/padrino-core/application/params_protection.rb +1 -7
- data/lib/padrino-core/application/routing.rb +15 -5
- data/lib/padrino-core/caller.rb +2 -1
- data/lib/padrino-core/cli/adapter.rb +11 -2
- data/lib/padrino-core/cli/base.rb +12 -8
- data/lib/padrino-core/cli/launcher.rb +12 -4
- data/lib/padrino-core/cli/rake_tasks.rb +24 -14
- data/lib/padrino-core/configuration.rb +40 -0
- data/lib/padrino-core/loader.rb +1 -2
- data/lib/padrino-core/logger.rb +71 -11
- data/lib/padrino-core/mounter/application_extension.rb +55 -0
- data/lib/padrino-core/mounter.rb +21 -62
- data/lib/padrino-core/reloader/rack.rb +4 -1
- data/lib/padrino-core/reloader/storage.rb +31 -3
- data/lib/padrino-core/reloader.rb +4 -2
- data/lib/padrino-core/version.rb +1 -1
- data/lib/padrino-core.rb +2 -0
- data/padrino-core.gemspec +1 -7
- data/test/fixtures/apps/custom_dependencies/custom_dependencies.rb +11 -0
- data/test/fixtures/apps/custom_dependencies/my_dependencies/my_dependency.rb +0 -0
- data/test/fixtures/apps/external_apps/fake_lib.rb +1 -0
- data/test/fixtures/apps/external_apps/fake_root.rb +2 -0
- data/test/fixtures/apps/rack_apps.rb +4 -0
- data/test/fixtures/apps/simple.rb +0 -1
- data/test/fixtures/apps/system.rb +2 -0
- data/test/helper.rb +4 -26
- data/test/test_application.rb +8 -0
- data/test/test_configuration.rb +29 -0
- data/test/test_core.rb +12 -0
- data/test/test_csrf_protection.rb +7 -6
- data/test/test_logger.rb +93 -0
- data/test/test_mounter.rb +15 -0
- data/test/test_params_protection.rb +15 -15
- data/test/test_reloader_simple.rb +2 -2
- data/test/test_reloader_storage.rb +51 -0
- data/test/test_reloader_system.rb +20 -0
- data/test/test_routing.rb +31 -2
- metadata +49 -46
- data/test/fixtures/apps/helpers/support.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
Zjc3MmQyN2MyYjcyOTU2N2YyYTE0YWJmZTExM2MxODAwZTYwNTEyMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZGYwNjcyNDY1YTRkMjFlOGU5YTUwNjZiNTUwNzhjNTljNDczMzkwOA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YTM0ZjYxOThkNGViZjhmYzI1YzdmYjk4MTBjOTIxOGQzYTYyYWM3ODczMjlj
|
10
|
+
MTkzOTM5ZDQ0YjMzMWQ2Nzg0YjkwN2Q2ZGMyMTE3ZTQ2NzdkMTg5NDA0MTdm
|
11
|
+
N2Y1Mzk0YTgwMmYyN2Y2MTRhODhlNjliMjUzZDI1MjU0NmExNmM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OTRhOTFhZGYzN2M2MmZjYzBjNTIxNzdhNWE2MWFlM2E5MTY1YjExM2ZmNDUw
|
14
|
+
ODgyODU1NmZhNjZlMjZmNTNkMjE3ZTQ1OWUxMGNlY2E2NzFkODU0MWUzNGFi
|
15
|
+
NmZlZjc4NDYyZmY4ODdlNTBkMDZiNGQzNjllYjMzMmM5MDFjYmY=
|
data/Rakefile
CHANGED
data/bin/padrino
CHANGED
@@ -57,6 +57,7 @@ module Padrino
|
|
57
57
|
set :uri_root, '/'
|
58
58
|
set :public_folder, proc { Padrino.root('public', uri_root) }
|
59
59
|
set :images_path, proc { File.join(public_folder, 'images') }
|
60
|
+
set :base_url, 'http://localhost'
|
60
61
|
end
|
61
62
|
|
62
63
|
def default_security
|
@@ -97,6 +98,7 @@ module Padrino
|
|
97
98
|
# Also initializes the application after setting up the middleware.
|
98
99
|
def setup_default_middleware(builder)
|
99
100
|
setup_sessions builder
|
101
|
+
builder.use Sinatra::ExtendedRack if defined?(EventMachine)
|
100
102
|
builder.use Padrino::ShowExceptions if show_exceptions?
|
101
103
|
builder.use Padrino::Logger::Rack, uri_root if Padrino.logger && logging?
|
102
104
|
builder.use Padrino::Reloader::Rack if reload?
|
@@ -1,9 +1,3 @@
|
|
1
|
-
begin
|
2
|
-
require 'active_support/core_ext/object/deep_dup' # AS 4.1
|
3
|
-
rescue LoadError
|
4
|
-
require 'active_support/core_ext/hash/deep_dup' # AS >= 3.1
|
5
|
-
end
|
6
|
-
|
7
1
|
module Padrino
|
8
2
|
##
|
9
3
|
# Padrino application module providing means for mass-assignment protection.
|
@@ -45,7 +39,7 @@ module Padrino
|
|
45
39
|
def params(*allowed_params)
|
46
40
|
allowed_params = prepare_allowed_params(allowed_params)
|
47
41
|
condition do
|
48
|
-
@original_params =
|
42
|
+
@original_params = Utils.deep_dup(params)
|
49
43
|
filter_params!(params, allowed_params)
|
50
44
|
end
|
51
45
|
end
|
@@ -340,6 +340,14 @@ module Padrino
|
|
340
340
|
end
|
341
341
|
alias :url_for :url
|
342
342
|
|
343
|
+
##
|
344
|
+
# Returns absolute url. By default adds 'http://localhost' before generated url.
|
345
|
+
# To change that `set :base_url, 'http://example.com'` in your app.
|
346
|
+
#
|
347
|
+
def absolute_url(*args)
|
348
|
+
base_url + url(*args)
|
349
|
+
end
|
350
|
+
|
343
351
|
def get(path, *args, &block)
|
344
352
|
conditions = @conditions.dup
|
345
353
|
route('GET', path, *args, &block)
|
@@ -562,6 +570,7 @@ module Padrino
|
|
562
570
|
# controllers, parents, 'with' parameters, and other options.
|
563
571
|
#
|
564
572
|
def parse_route(path, options, verb)
|
573
|
+
path = path.dup if path.kind_of?(String)
|
565
574
|
route_options = {}
|
566
575
|
|
567
576
|
if options[:params] == true
|
@@ -714,7 +723,7 @@ module Padrino
|
|
714
723
|
|
715
724
|
accept_format = CONTENT_TYPE_ALIASES[type] || type
|
716
725
|
if types.include?(accept_format)
|
717
|
-
content_type(accept_format || :html
|
726
|
+
content_type(accept_format || :html)
|
718
727
|
else
|
719
728
|
catch_all ? true : halt(406)
|
720
729
|
end
|
@@ -734,7 +743,7 @@ module Padrino
|
|
734
743
|
mime_types = types.map{ |type| mime_type(CONTENT_TYPE_ALIASES[type] || type) }
|
735
744
|
condition do
|
736
745
|
halt 406 unless mime_types.include?(request.media_type)
|
737
|
-
content_type(mime_symbol(request.media_type)
|
746
|
+
content_type(mime_symbol(request.media_type))
|
738
747
|
end
|
739
748
|
end
|
740
749
|
|
@@ -877,7 +886,6 @@ module Padrino
|
|
877
886
|
#
|
878
887
|
def content_type(type=nil, params={})
|
879
888
|
return @_content_type unless type
|
880
|
-
params.delete(:charset) if type == :json
|
881
889
|
super(type, params)
|
882
890
|
@_content_type = type
|
883
891
|
end
|
@@ -887,7 +895,7 @@ module Padrino
|
|
887
895
|
def provides_any?(formats)
|
888
896
|
accepted_format = formats.first
|
889
897
|
type = accepted_format ? mime_symbol(accepted_format) : :html
|
890
|
-
content_type(CONTENT_TYPE_ALIASES[type] || type
|
898
|
+
content_type(CONTENT_TYPE_ALIASES[type] || type)
|
891
899
|
end
|
892
900
|
|
893
901
|
def provides_format?(types, format)
|
@@ -897,7 +905,7 @@ module Padrino
|
|
897
905
|
halt 406 if settings.respond_to?(:treat_format_as_accept) && settings.treat_format_as_accept
|
898
906
|
false
|
899
907
|
else
|
900
|
-
content_type(format || :html
|
908
|
+
content_type(format || :html)
|
901
909
|
end
|
902
910
|
end
|
903
911
|
|
@@ -910,6 +918,8 @@ module Padrino
|
|
910
918
|
end
|
911
919
|
|
912
920
|
def dispatch!
|
921
|
+
@params = defined?(Sinatra::IndifferentHash) ? Sinatra::IndifferentHash[@request.params] : indifferent_params(@request.params)
|
922
|
+
force_encoding(@params)
|
913
923
|
invoke do
|
914
924
|
static! if settings.static? && (request.get? || request.head?)
|
915
925
|
route!
|
data/lib/padrino-core/caller.rb
CHANGED
@@ -12,10 +12,19 @@ module Padrino
|
|
12
12
|
options.symbolize_keys!
|
13
13
|
if File.exist?(options[:pid])
|
14
14
|
pid = File.read(options[:pid]).to_i
|
15
|
-
|
16
|
-
|
15
|
+
puts "=> Sending INT to process with pid #{pid}"
|
16
|
+
begin
|
17
|
+
Process.kill(2, pid)
|
18
|
+
rescue Errno::ESRCH, RangeError => error
|
19
|
+
puts error.message
|
20
|
+
exit
|
21
|
+
rescue Errno::EPERM => error
|
22
|
+
puts error.message
|
23
|
+
abort
|
24
|
+
end
|
17
25
|
else
|
18
26
|
puts "=> #{options[:pid]} not found!"
|
27
|
+
abort
|
19
28
|
end
|
20
29
|
end
|
21
30
|
end
|
@@ -4,7 +4,7 @@ module Padrino
|
|
4
4
|
module Cli
|
5
5
|
class Base < Launcher
|
6
6
|
desc "rake", "Execute rake tasks."
|
7
|
-
method_option :environment, :type => :string, :aliases => "-e"
|
7
|
+
method_option :environment, :type => :string, :aliases => "-e"
|
8
8
|
method_option :list, :type => :string, :aliases => "-T", :desc => "Display the tasks (matching optional PATTERN) with descriptions, then exit."
|
9
9
|
method_option :trace, :type => :boolean, :aliases => "-t", :desc => "Turn on invoke/execute tracing, enable full backtrace."
|
10
10
|
def rake(*args)
|
@@ -28,16 +28,20 @@ module Padrino
|
|
28
28
|
def console(*args)
|
29
29
|
prepare :console
|
30
30
|
require File.expand_path("../../version", __FILE__)
|
31
|
-
ARGV.clear
|
32
|
-
require 'irb'
|
33
|
-
begin
|
34
|
-
require "irb/completion"
|
35
|
-
rescue LoadError
|
36
|
-
end
|
37
31
|
require File.expand_path('config/boot.rb')
|
38
32
|
puts "=> Loading #{Padrino.env} console (Padrino v.#{Padrino.version})"
|
39
33
|
require File.expand_path('../console', __FILE__)
|
40
|
-
|
34
|
+
ARGV.clear
|
35
|
+
if defined? Pry
|
36
|
+
Pry.start
|
37
|
+
else
|
38
|
+
require 'irb'
|
39
|
+
begin
|
40
|
+
require "irb/completion"
|
41
|
+
rescue LoadError
|
42
|
+
end
|
43
|
+
IRB.start
|
44
|
+
end
|
41
45
|
end
|
42
46
|
|
43
47
|
desc "generate", "Executes the Padrino generator with given options (alternatively use 'gen' or 'g')."
|
@@ -6,7 +6,7 @@ module Padrino
|
|
6
6
|
include Thor::Actions
|
7
7
|
|
8
8
|
class_option :chdir, :type => :string, :aliases => "-c", :desc => "Change to dir before starting."
|
9
|
-
class_option :environment, :type => :string, :aliases => "-e", :
|
9
|
+
class_option :environment, :type => :string, :aliases => "-e", :desc => "Padrino Environment."
|
10
10
|
class_option :help, :type => :boolean, :desc => "Show help usage"
|
11
11
|
|
12
12
|
desc "start", "Starts the Padrino application (alternatively use 's')."
|
@@ -70,13 +70,17 @@ module Padrino
|
|
70
70
|
def prepare(task)
|
71
71
|
if options.help?
|
72
72
|
help(task.to_s)
|
73
|
-
|
73
|
+
exit
|
74
|
+
end
|
75
|
+
if options.environment
|
76
|
+
ENV["RACK_ENV"] = options.environment.to_s
|
77
|
+
else
|
78
|
+
ENV["RACK_ENV"] ||= 'development'
|
74
79
|
end
|
75
|
-
ENV["RACK_ENV"] ||= options.environment.to_s
|
76
80
|
chdir(options.chdir)
|
77
81
|
unless File.exist?('config/boot.rb')
|
78
82
|
puts "=> Could not find boot file in: #{options.chdir}/config/boot.rb !!!"
|
79
|
-
|
83
|
+
abort
|
80
84
|
end
|
81
85
|
end
|
82
86
|
|
@@ -90,6 +94,10 @@ module Padrino
|
|
90
94
|
puts "=> Specified Padrino root '#{dir}' cannot be accessed by the current user!"
|
91
95
|
end
|
92
96
|
end
|
97
|
+
|
98
|
+
def self.exit_on_failure?
|
99
|
+
true
|
100
|
+
end
|
93
101
|
end
|
94
102
|
end
|
95
103
|
end
|
@@ -1,11 +1,3 @@
|
|
1
|
-
Dir["{lib/tasks/**,tasks/**,test,spec}/*.rake"].each do |file|
|
2
|
-
begin
|
3
|
-
load(File.expand_path(file))
|
4
|
-
rescue LoadError => e
|
5
|
-
warn "#{file}: #{e.message}"
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
1
|
# Loads the Padrino applications mounted within the project.
|
10
2
|
# Setting up the required environment for Padrino.
|
11
3
|
task :environment do
|
@@ -16,13 +8,10 @@ task :environment do
|
|
16
8
|
end
|
17
9
|
end
|
18
10
|
|
19
|
-
# Loads skeleton Padrino environment, no models, no application settings.
|
20
11
|
task :skeleton do
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
12
|
+
PADRINO_ROOT ||= Rake.application.original_dir
|
13
|
+
require 'padrino-core'
|
14
|
+
Padrino.send(:dependency_paths).reject!{ |path| path.include?('/models/') }
|
26
15
|
require File.expand_path('config/boot.rb', Rake.application.original_dir)
|
27
16
|
end
|
28
17
|
|
@@ -46,6 +35,19 @@ def list_app_routes(app, args)
|
|
46
35
|
end
|
47
36
|
end
|
48
37
|
|
38
|
+
def env_migration_version
|
39
|
+
version = ENV["MIGRATION_VERSION"]
|
40
|
+
if version.nil? && ENV["VERSION"]
|
41
|
+
deprecated = true
|
42
|
+
warn "Environment variable VERSION is deprecated, use MIGRATION_VERSION"
|
43
|
+
version = ENV["VERSION"]
|
44
|
+
end
|
45
|
+
version ? Integer(version) : nil
|
46
|
+
rescue ArgumentError
|
47
|
+
warn "Environment variable #{deprecated ? '' : 'MIGRATION_'}VERSION=#{version} should be non-existant or Integer"
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
|
49
51
|
desc "Displays a listing of the named routes within a project, optionally only those matched by [query]"
|
50
52
|
task :routes, [:query] => :environment do |t, args|
|
51
53
|
Padrino.mounted_apps.each do |app|
|
@@ -60,3 +62,11 @@ namespace :routes do
|
|
60
62
|
list_app_routes(app, args) if app
|
61
63
|
end
|
62
64
|
end
|
65
|
+
|
66
|
+
Dir["{lib/tasks/**,tasks/**,test,spec}/*.rake"].each do |file|
|
67
|
+
begin
|
68
|
+
load(File.expand_path(file))
|
69
|
+
rescue LoadError => e
|
70
|
+
warn "#{file}: #{e.message}"
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Padrino
|
4
|
+
##
|
5
|
+
# Padrino simple configuration module
|
6
|
+
#
|
7
|
+
module Configuration
|
8
|
+
##
|
9
|
+
# Returns the configuration structure allowing to get and set it's values.
|
10
|
+
# Padrino.config is a simple Ruby OpenStruct object with no additional magic.
|
11
|
+
#
|
12
|
+
# Example:
|
13
|
+
#
|
14
|
+
# Padrino.config.value1 = 42
|
15
|
+
# exit if Padrino.config.exiting
|
16
|
+
#
|
17
|
+
def config
|
18
|
+
@config ||= OpenStruct.new
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
# Allows to configure different environments differently. Requires a block.
|
23
|
+
#
|
24
|
+
# Example:
|
25
|
+
#
|
26
|
+
# Padrino.configure :development do |config|
|
27
|
+
# config.value2 = 'only development'
|
28
|
+
# end
|
29
|
+
# Padrino.configure :development, :production do |config|
|
30
|
+
# config.value2 = 'both development and production'
|
31
|
+
# end
|
32
|
+
# Padrino.configure do |config|
|
33
|
+
# config.value2 = 'any environment'
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
def configure(*environments)
|
37
|
+
yield(config) if environments.empty? || environments.include?(Padrino.env)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/padrino-core/loader.rb
CHANGED
@@ -193,8 +193,7 @@ module Padrino
|
|
193
193
|
"#{root}/config/database.rb",
|
194
194
|
"#{root}/lib/**/*.rb",
|
195
195
|
"#{root}/models/**/*.rb",
|
196
|
-
"#{root}/shared
|
197
|
-
"#{root}/shared/models/**/*.rb",
|
196
|
+
"#{root}/shared/**/*.rb",
|
198
197
|
"#{root}/config/apps.rb",
|
199
198
|
]
|
200
199
|
end
|
data/lib/padrino-core/logger.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
1
3
|
# Defines the log level for a Padrino project.
|
2
4
|
PADRINO_LOG_LEVEL = ENV['PADRINO_LOG_LEVEL'] unless defined?(PADRINO_LOG_LEVEL)
|
3
5
|
|
@@ -70,6 +72,9 @@ module Padrino
|
|
70
72
|
if args.size > 1
|
71
73
|
bench(args[0], args[1], args[2], name)
|
72
74
|
else
|
75
|
+
if location = resolve_source_location(caller(1).shift)
|
76
|
+
args.unshift(location)
|
77
|
+
end if enable_source_location?
|
73
78
|
push(args * '', name)
|
74
79
|
end
|
75
80
|
end
|
@@ -79,6 +84,28 @@ module Padrino
|
|
79
84
|
end
|
80
85
|
end
|
81
86
|
|
87
|
+
SOURCE_LOCATION_REGEXP = /^(.*?):(\d+?)(?::in `.+?')?$/.freeze
|
88
|
+
|
89
|
+
##
|
90
|
+
# Returns true if :source_location is set to true.
|
91
|
+
#
|
92
|
+
def enable_source_location?
|
93
|
+
respond_to?(:source_location?) && source_location?
|
94
|
+
end
|
95
|
+
|
96
|
+
##
|
97
|
+
# Resolves a filename and line-number from caller.
|
98
|
+
#
|
99
|
+
def resolve_source_location(message)
|
100
|
+
path, line = *message.scan(SOURCE_LOCATION_REGEXP).first
|
101
|
+
return unless path && line
|
102
|
+
root = Padrino.root
|
103
|
+
path = File.realpath(path) if Pathname.new(path).relative?
|
104
|
+
if path.start_with?(root) && !path.start_with?(Padrino.root("vendor"))
|
105
|
+
"[#{path.gsub("#{root}/", "")}:#{line}] "
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
82
109
|
##
|
83
110
|
# Append a to development logger a given action with time.
|
84
111
|
#
|
@@ -237,6 +264,9 @@ module Padrino
|
|
237
264
|
#
|
238
265
|
# :log_level:: Once of [:fatal, :error, :warn, :info, :debug]
|
239
266
|
# :stream:: Once of [:to_file, :null, :stdout, :stderr] our your custom stream
|
267
|
+
# :log_path:: Defines log file path or directory if :stream is :to_file
|
268
|
+
# If it's a file, its location is created by mkdir_p.
|
269
|
+
# If it's a directory, it must exist. In this case log name is '<env>.log'
|
240
270
|
# :log_level::
|
241
271
|
# The log level from, e.g. :fatal or :info. Defaults to :warn in the
|
242
272
|
# production environment and :debug otherwise.
|
@@ -252,6 +282,10 @@ module Padrino
|
|
252
282
|
# Padrino::Logger::Config[:development] = { :log_level => :debug, :stream => :to_file }
|
253
283
|
# # or you can edit our defaults
|
254
284
|
# Padrino::Logger::Config[:development][:log_level] = :error
|
285
|
+
# # or change log file path
|
286
|
+
# Padrino::Logger::Config[:development][:log_path] = 'logs/app-development.txt'
|
287
|
+
# # or change log file directory
|
288
|
+
# Padrino::Logger::Config[:development][:log_path] = '/var/logs/padrino'
|
255
289
|
# # or you can use your stream
|
256
290
|
# Padrino::Logger::Config[:development][:stream] = StringIO.new
|
257
291
|
#
|
@@ -302,8 +336,18 @@ module Padrino
|
|
302
336
|
|
303
337
|
stream = case config[:stream]
|
304
338
|
when :to_file
|
305
|
-
|
306
|
-
|
339
|
+
if filename = config[:log_path]
|
340
|
+
filename = Padrino.root(filename) unless Pathname.new(filename).absolute?
|
341
|
+
if File.directory?(filename)
|
342
|
+
filename = File.join(filename, "#{Padrino.env}.log")
|
343
|
+
else
|
344
|
+
FileUtils.mkdir_p(File.dirname(filename))
|
345
|
+
end
|
346
|
+
File.new(filename, 'a+')
|
347
|
+
else
|
348
|
+
FileUtils.mkdir_p(Padrino.root('log')) unless File.exist?(Padrino.root('log'))
|
349
|
+
File.new(Padrino.root('log', "#{Padrino.env}.log"), 'a+')
|
350
|
+
end
|
307
351
|
when :null then StringIO.new
|
308
352
|
when :stdout then $stdout
|
309
353
|
when :stderr then $stderr
|
@@ -341,26 +385,42 @@ module Padrino
|
|
341
385
|
# @option options [Symbol] :colorize_logging (true)
|
342
386
|
# Whether or not to colorize log messages. Defaults to: true.
|
343
387
|
#
|
388
|
+
# @option options [Symbol] :sanitize_encoding (false)
|
389
|
+
# Logger will replace undefined or broken characters with
|
390
|
+
# “uFFFD” for Unicode and “?” otherwise.
|
391
|
+
# Can be an encoding, false or true.
|
392
|
+
# If it's true, logger sanitizes to Encoding.default_external.
|
393
|
+
#
|
344
394
|
def initialize(options={})
|
345
|
-
@buffer
|
346
|
-
@auto_flush
|
347
|
-
@level
|
348
|
-
@log
|
349
|
-
@log.sync
|
350
|
-
@format_datetime
|
351
|
-
@format_message
|
352
|
-
@log_static
|
395
|
+
@buffer = []
|
396
|
+
@auto_flush = options.has_key?(:auto_flush) ? options[:auto_flush] : true
|
397
|
+
@level = options[:log_level] ? Padrino::Logger::Levels[options[:log_level]] : Padrino::Logger::Levels[:debug]
|
398
|
+
@log = options[:stream] || $stdout
|
399
|
+
@log.sync = true
|
400
|
+
@format_datetime = options[:format_datetime] || "%d/%b/%Y %H:%M:%S"
|
401
|
+
@format_message = options[:format_message] || "%s - %s %s"
|
402
|
+
@log_static = options.has_key?(:log_static) ? options[:log_static] : false
|
353
403
|
@colorize_logging = options.has_key?(:colorize_logging) ? options[:colorize_logging] : true
|
404
|
+
@source_location = options[:source_location]
|
405
|
+
@sanitize_encoding = options[:sanitize_encoding] || false
|
406
|
+
@sanitize_encoding = Encoding.default_external if @sanitize_encoding == true
|
354
407
|
colorize! if @colorize_logging
|
355
408
|
end
|
356
409
|
|
410
|
+
def source_location?
|
411
|
+
!!@source_location
|
412
|
+
end
|
413
|
+
|
357
414
|
##
|
358
415
|
# Flush the entire buffer to the log object.
|
359
416
|
#
|
360
417
|
def flush
|
361
418
|
return unless @buffer.size > 0
|
362
419
|
@@mutex.synchronize do
|
363
|
-
@
|
420
|
+
@buffer.each do |line|
|
421
|
+
line.encode!(@sanitize_encoding, :invalid => :replace, :undef => :replace) if @sanitize_encoding
|
422
|
+
@log.write(line)
|
423
|
+
end
|
364
424
|
@buffer.clear
|
365
425
|
end
|
366
426
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Padrino
|
2
|
+
class Mounter
|
3
|
+
module ApplicationExtension
|
4
|
+
attr_accessor :uri_root, :mounter_options
|
5
|
+
attr_writer :public_folder
|
6
|
+
|
7
|
+
def dependencies
|
8
|
+
@__dependencies ||= Dir.glob("#{root}/**/*.rb").delete_if { |path| path == app_file }
|
9
|
+
end
|
10
|
+
|
11
|
+
def prerequisites
|
12
|
+
@__prerequisites ||= []
|
13
|
+
end
|
14
|
+
|
15
|
+
def app_file
|
16
|
+
@__app_file ||= trace_method(:app_file) { mounter_options[:app_file] }
|
17
|
+
end
|
18
|
+
|
19
|
+
def root
|
20
|
+
@__root ||= trace_method(:root) { File.expand_path("#{app_file}/../") }
|
21
|
+
end
|
22
|
+
|
23
|
+
def public_folder
|
24
|
+
@public_folder ||= trace_method(:public_folder) { "" }
|
25
|
+
end
|
26
|
+
|
27
|
+
def app_name
|
28
|
+
@__app_name ||= mounter_options[:app_name] || self.to_s.underscore.to_sym
|
29
|
+
end
|
30
|
+
|
31
|
+
def setup_application!
|
32
|
+
@configured ||= trace_method(:setup_application!) do
|
33
|
+
$LOAD_PATH.concat(prerequisites)
|
34
|
+
require_dependencies if root.start_with?(Padrino.root)
|
35
|
+
true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def require_dependencies
|
42
|
+
Padrino.require_dependencies(dependencies, :force => true)
|
43
|
+
end
|
44
|
+
|
45
|
+
def trace_method(method_name)
|
46
|
+
value = baseclass.send(method_name) if baseclass != self && baseclass.respond_to?(method_name)
|
47
|
+
value || yield
|
48
|
+
end
|
49
|
+
|
50
|
+
def baseclass
|
51
|
+
@__baseclass ||= respond_to?(:superclass) ? superclass : self
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|