padrino-core 0.13.0.beta3 → 0.13.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ada2a90b4ae422b001c76fd0c1975cdc8eb83fb0
4
- data.tar.gz: f02e786a62c645f53a0c099954a80e21c3123793
3
+ metadata.gz: df73d4a14b1d5ad90c0cee78699bfb08addd30f4
4
+ data.tar.gz: 7307777a18f4d046f27bbc3296afcb26bab98757
5
5
  SHA512:
6
- metadata.gz: e6e7e61f93b09177a0347b1eff272a91cdacb9d3a55f1b5e65bb9902bcc4c4f6a0fd335f6be3c3b683e8fa2a0c2164bad2dcdfe7e3705b955dd5bd428d12e7d6
7
- data.tar.gz: ea1d049f1f85e47f84c8b197af9c5e75d0bb21fbca7b867af1ed0c874c84a864cff2ab9952b2aa93203c8f3b8fcb4e5033a16093b8dab875c56febeb1e59c718
6
+ metadata.gz: c951c3160d9354c1d0cef4c195f90cfc9e725661d235033ce930cc0fc2a3c47f34db0dda0dc02d9ee23fd6af7485f3c87e2389554f7330ac1df41572dbd21582
7
+ data.tar.gz: bd1cd61aec6fd3de5c26c1f1e52695fb7dd4649f5d18a89a943f695b6b11f566483ec227362876800a987a7889f818fee8a74cd55bb0f3356735ae1b30b8fa9a
@@ -1,6 +1,7 @@
1
1
  require 'sinatra/base'
2
2
  require 'padrino-core/version'
3
3
  require 'padrino-support'
4
+ require 'padrino-core/configuration'
4
5
  require 'padrino-core/application'
5
6
 
6
7
  require 'padrino-core/caller'
@@ -25,6 +26,7 @@ module Padrino
25
26
  class ApplicationLoadError < RuntimeError # @private
26
27
  end
27
28
 
29
+ extend Configuration
28
30
  extend Loader
29
31
 
30
32
  class << self
@@ -407,7 +407,7 @@ module Padrino
407
407
  replace_instance_variable(:@_controller, args)
408
408
  replace_instance_variable(:@_defaults, options)
409
409
  replace_instance_variable(:@filters, :before => @filters[:before].dup, :after => @filters[:after].dup)
410
- replace_instance_variable(:@layout, nil)
410
+ replace_instance_variable(:@layout, @layout)
411
411
 
412
412
  yield
413
413
 
@@ -731,7 +731,7 @@ module Padrino
731
731
 
732
732
  accept_format = CONTENT_TYPE_ALIASES[type] || type
733
733
  if types.include?(accept_format)
734
- content_type(accept_format || :html, :charset => 'utf-8')
734
+ content_type(accept_format || :html)
735
735
  else
736
736
  catch_all ? true : halt(406)
737
737
  end
@@ -751,7 +751,7 @@ module Padrino
751
751
  mime_types = types.map{ |type| mime_type(CONTENT_TYPE_ALIASES[type] || type) }
752
752
  condition do
753
753
  halt 406 unless mime_types.include?(request.media_type)
754
- content_type(mime_symbol(request.media_type), :charset => 'utf-8')
754
+ content_type(mime_symbol(request.media_type))
755
755
  end
756
756
  end
757
757
 
@@ -894,7 +894,6 @@ module Padrino
894
894
  #
895
895
  def content_type(type=nil, params={})
896
896
  return @_content_type unless type
897
- params.delete(:charset) if type == :json
898
897
  super(type, params)
899
898
  @_content_type = type
900
899
  end
@@ -904,7 +903,7 @@ module Padrino
904
903
  def provides_any?(formats)
905
904
  accepted_format = formats.first
906
905
  type = accepted_format ? mime_symbol(accepted_format) : :html
907
- content_type(CONTENT_TYPE_ALIASES[type] || type, :charset => 'utf-8')
906
+ content_type(CONTENT_TYPE_ALIASES[type] || type)
908
907
  end
909
908
 
910
909
  def provides_format?(types, format)
@@ -914,7 +913,7 @@ module Padrino
914
913
  halt 406 if settings.respond_to?(:treat_format_as_accept) && settings.treat_format_as_accept
915
914
  false
916
915
  else
917
- content_type(format || :html, :charset => 'utf-8')
916
+ content_type(format || :html)
918
917
  end
919
918
  end
920
919
 
@@ -18,7 +18,8 @@ module Padrino
18
18
  %r{rake_test_loader\.rb},
19
19
  %r{custom_require\.rb$},
20
20
  %r{active_support},
21
- %r{/thor}
21
+ %r{/thor},
22
+ %r{/lib/bundler},
22
23
  ] unless defined?(PADRINO_IGNORE_CALLERS)
23
24
 
24
25
  ##
@@ -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
@@ -264,6 +264,9 @@ module Padrino
264
264
  #
265
265
  # :log_level:: Once of [:fatal, :error, :warn, :info, :debug]
266
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'
267
270
  # :log_level::
268
271
  # The log level from, e.g. :fatal or :info. Defaults to :warn in the
269
272
  # production environment and :debug otherwise.
@@ -279,6 +282,10 @@ module Padrino
279
282
  # Padrino::Logger::Config[:development] = { :log_level => :debug, :stream => :to_file }
280
283
  # # or you can edit our defaults
281
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'
282
289
  # # or you can use your stream
283
290
  # Padrino::Logger::Config[:development][:stream] = StringIO.new
284
291
  #
@@ -329,8 +336,18 @@ module Padrino
329
336
 
330
337
  stream = case config[:stream]
331
338
  when :to_file
332
- FileUtils.mkdir_p(Padrino.root('log')) unless File.exist?(Padrino.root('log'))
333
- File.new(Padrino.root('log', "#{Padrino.env}.log"), 'a+')
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
334
351
  when :null then StringIO.new
335
352
  when :stdout then $stdout
336
353
  when :stderr then $stderr
@@ -96,20 +96,23 @@ module Padrino
96
96
  def map_onto(router)
97
97
  app_data = self
98
98
  app_obj = @app_obj
99
+
100
+ uri_root = app_data.uri_root
101
+ public_folder_exists = File.exist?(app_obj.public_folder)
102
+
99
103
  if padrino_application?
100
- app_obj.set :uri_root, app_data.uri_root
101
- app_obj.set :app_name, app_data.app_obj.app_name.to_s
102
- app_obj.set :app_file, app_data.app_file unless File.exist?(app_obj.app_file)
103
- app_obj.set :root, app_data.app_root unless app_data.app_root.blank?
104
- app_obj.set :public_folder, Padrino.root('public', app_data.uri_root) unless File.exist?(app_obj.public_folder)
105
- app_obj.set :static, File.exist?(app_obj.public_folder) if app_obj.nil?
104
+ app_obj.set :uri_root, uri_root
105
+ app_obj.set :app_name, app_obj.app_name.to_s
106
+ app_obj.set :root, app_data.app_root
107
+ app_obj.set :public_folder, Padrino.root('public', uri_root) unless public_folder_exists
108
+ app_obj.set :static, public_folder_exists
106
109
  app_obj.set :cascade, app_data.cascade
107
110
  else
108
- app_obj.uri_root = app_data.uri_root
109
- app_obj.public_folder = Padrino.root('public', app_data.uri_root) unless File.exist?(app_obj.public_folder)
111
+ app_obj.uri_root = uri_root
112
+ app_obj.public_folder = Padrino.root('public', uri_root) unless public_folder_exists
110
113
  end
111
114
  app_obj.setup_application! # Initializes the app here with above settings.
112
- router.map(:to => app_obj, :path => app_data.uri_root, :host => app_data.app_host)
115
+ router.map(:to => app_obj, :path => uri_root, :host => app_data.app_host)
113
116
  end
114
117
 
115
118
  ###
@@ -185,8 +188,10 @@ module Padrino
185
188
  # Returns the determined location of the mounted application main file.
186
189
  #
187
190
  def locate_app_file
191
+ app_const = app_constant
192
+
188
193
  candidates = []
189
- candidates << app_constant.app_file if app_constant.respond_to?(:app_file) && File.exist?(app_constant.app_file.to_s)
194
+ candidates << app_const.app_file if app_const.respond_to?(:app_file)
190
195
  candidates << Padrino.first_caller if File.identical?(Padrino.first_caller.to_s, Padrino.called_from.to_s)
191
196
  candidates << Padrino.mounted_root(name.downcase, "app.rb")
192
197
  simple_name = name.split("::").last.downcase
@@ -6,7 +6,7 @@
6
6
  #
7
7
  module Padrino
8
8
  # The version constant for the current version of Padrino.
9
- VERSION = '0.13.0.beta3' unless defined?(Padrino::VERSION)
9
+ VERSION = '0.13.0' unless defined?(Padrino::VERSION)
10
10
 
11
11
  #
12
12
  # The current Padrino version.
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ describe "PadrinoConfiguration" do
4
+ it 'should be able to store values' do
5
+ Padrino.config.val1 = 12345
6
+ assert_equal 12345, Padrino.config.val1
7
+ end
8
+
9
+ it 'should be able to configure with block' do
10
+ Padrino.configure do |config|
11
+ config.val2 = 54321
12
+ end
13
+ assert_equal 54321, Padrino.config.val2
14
+ end
15
+
16
+ it 'should be able to configure with block' do
17
+ Padrino.configure :test do |config|
18
+ config.test1 = 54321
19
+ end
20
+ Padrino.configure :development do |config|
21
+ config.test1 = 12345
22
+ end
23
+ Padrino.configure :test, :development do |config|
24
+ config.both1 = 54321
25
+ end
26
+ assert_equal 54321, Padrino.config.test1
27
+ assert_equal 54321, Padrino.config.both1
28
+ end
29
+ end
@@ -1,6 +1,7 @@
1
1
  #coding:utf-8
2
2
  require File.expand_path(File.dirname(__FILE__) + '/helper')
3
3
  require 'logger'
4
+ require 'tempfile'
4
5
 
5
6
  describe "PadrinoLogger" do
6
7
  before do
@@ -37,6 +38,28 @@ describe "PadrinoLogger" do
37
38
  Padrino::Logger.setup!
38
39
  assert_equal my_stream, Padrino.logger.log
39
40
  end
41
+
42
+ it 'should use a custom file path' do
43
+ tempfile = Tempfile.new('app.txt')
44
+ path = tempfile.path
45
+ tempfile.unlink
46
+ Padrino::Logger::Config[:test][:stream] = :to_file
47
+ Padrino::Logger::Config[:test][:log_path] = path
48
+ Padrino::Logger.setup!
49
+ assert_file_exists path
50
+ File.unlink(path)
51
+ end
52
+
53
+ it 'should use a custom log directory' do
54
+ tmpdir = Dir.mktmpdir
55
+ Padrino::Logger::Config[:test][:stream] = :to_file
56
+ Padrino::Logger::Config[:test][:log_path] = tmpdir
57
+ Padrino::Logger.setup!
58
+ log_path = File.join(tmpdir, 'test.log')
59
+ assert_file_exists log_path
60
+ File.unlink(log_path)
61
+ Dir.rmdir(tmpdir)
62
+ end
40
63
  end
41
64
 
42
65
  it 'should log something' do
@@ -766,12 +766,27 @@ describe "Routing" do
766
766
  assert_equal 'application/json', response["Content-Type"]
767
767
  get "/a.foo"
768
768
  assert_equal "foo", body
769
- assert_equal 'application/foo;charset=utf-8', response["Content-Type"]
769
+ assert_equal 'application/foo', response["Content-Type"]
770
770
  get "/a"
771
771
  assert_equal "html", body
772
772
  assert_equal 'text/html;charset=utf-8', response["Content-Type"]
773
773
  end
774
774
 
775
+ it 'should not drop json charset' do
776
+ mock_app do
777
+ get '/' do
778
+ content_type :json, :charset => 'utf-16'
779
+ end
780
+ get '/a' do
781
+ content_type :json, 'charset' => 'utf-16'
782
+ end
783
+ end
784
+ get '/'
785
+ assert_equal 'application/json;charset=utf-16', response["Content-Type"]
786
+ get '/a'
787
+ assert_equal 'application/json;charset=utf-16', response["Content-Type"]
788
+ end
789
+
775
790
  it 'should use controllers' do
776
791
  mock_app do
777
792
  controller "/admin" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: padrino-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0.beta3
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Padrino Team
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-08-02 00:00:00.000000000 Z
14
+ date: 2015-10-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: padrino-support
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - '='
21
21
  - !ruby/object:Gem::Version
22
- version: 0.13.0.beta3
22
+ version: 0.13.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.13.0.beta3
29
+ version: 0.13.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: sinatra
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -128,6 +128,7 @@ files:
128
128
  - lib/padrino-core/cli/rake.rb
129
129
  - lib/padrino-core/cli/rake_tasks.rb
130
130
  - lib/padrino-core/command.rb
131
+ - lib/padrino-core/configuration.rb
131
132
  - lib/padrino-core/ext/sinatra.rb
132
133
  - lib/padrino-core/filter.rb
133
134
  - lib/padrino-core/images/404.png
@@ -194,6 +195,7 @@ files:
194
195
  - test/fixtures/reloadable_apps/main/app.rb
195
196
  - test/helper.rb
196
197
  - test/test_application.rb
198
+ - test/test_configuration.rb
197
199
  - test/test_core.rb
198
200
  - test/test_csrf_protection.rb
199
201
  - test/test_dependencies.rb
@@ -226,12 +228,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
226
228
  version: '0'
227
229
  required_rubygems_version: !ruby/object:Gem::Requirement
228
230
  requirements:
229
- - - '>'
231
+ - - '>='
230
232
  - !ruby/object:Gem::Version
231
- version: 1.3.1
233
+ version: 1.3.6
232
234
  requirements: []
233
235
  rubyforge_project: padrino-core
234
- rubygems_version: 2.0.6
236
+ rubygems_version: 2.4.8
235
237
  signing_key:
236
238
  specification_version: 4
237
239
  summary: The required Padrino core gem
@@ -280,6 +282,7 @@ test_files:
280
282
  - test/fixtures/reloadable_apps/main/app.rb
281
283
  - test/helper.rb
282
284
  - test/test_application.rb
285
+ - test/test_configuration.rb
283
286
  - test/test_core.rb
284
287
  - test/test_csrf_protection.rb
285
288
  - test/test_dependencies.rb