padrino-core 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -1,20 +1,9 @@
1
1
  module Padrino
2
2
 
3
- # Setup a new logger
4
- def self.setup_logger!
5
- case Padrino.env
6
- when :production
7
- FileUtils.mkdir_p("#{Padrino.root}/log") unless File.exists?("#{Padrino.root}/log")
8
- log = File.new("#{Padrino.root}/log/#{PADRINO_ENV.downcase}.log", "a+")
9
- Thread.current[:padrino_logger] = Padrino::Logger.new(:log_level => :error, :stream => log)
10
- when :development
11
- Thread.current[:padrino_logger] = Padrino::Logger.new
12
- when :test
13
- Thread.current[:padrino_logger] = Padrino::Logger.new(:stream => StringIO.new)
14
- end
15
- Thread.current[:padrino_logger]
3
+ def self.logger
4
+ Thread.current[:padrino_logger] ||= Padrino::Logger.setup!
16
5
  end
17
-
6
+
18
7
  class Logger
19
8
 
20
9
  attr_accessor :level
@@ -41,6 +30,55 @@ module Padrino
41
30
 
42
31
  @@mutex = {}
43
32
 
33
+ # ==== Notes
34
+ # Configuration for a given environment, possible options are:
35
+ #
36
+ # :log_level:: Once of [:fatal, :error, :warn, :info, :debug]
37
+ # :stream:: Once of [:to_file, :null, :stdout, :stderr] our your custom stream
38
+ # :log_level::
39
+ # The log level from, e.g. :fatal or :info. Defaults to :debug in the
40
+ # production environment and :debug otherwise.
41
+ # :auto_flush::
42
+ # Whether the log should automatically flush after new messages are
43
+ # added. Defaults to true.
44
+ # :format_datetime:: Format of datetime. Defaults to: "%d/%b/%Y %H:%M:%S"
45
+ # :format_message:: Format of message. Defaults to: ""%s - - [%s] \"%s\"""
46
+ #
47
+ # Example:
48
+ #
49
+ # Padrino::Logger::Config[:development] = { :log_level => :debug, :to_file }
50
+ # # or you can edit our defaults
51
+ # Padrino::Logger::Config[:development][:log_level] = :error
52
+ # # or you can use your stream
53
+ # Padrino::Logger::Config[:development][:stream] = StringIO.new
54
+ #
55
+ # Defaults are:
56
+ #
57
+ # :production => { :log_level => :warn, :stream => :to_file }
58
+ # :development => { :log_level => :debug, :stream => :stdout }
59
+ # :test => { :log_level => :fatal, :stream => :null }
60
+ Config = {
61
+ :production => { :log_level => :warn, :stream => :to_file },
62
+ :development => { :log_level => :debug, :stream => :stdout },
63
+ :test => { :log_level => :debug, :stream => :null }
64
+ } unless const_defined?(:Config)
65
+
66
+
67
+ # Setup a new logger
68
+ def self.setup!
69
+ config = Config[Padrino.env] || Config[:test]
70
+ stream = case config[:stream]
71
+ when :to_file
72
+ FileUtils.mkdir_p(Padrino.root("log")) unless File.exists?(Padrino.root("log"))
73
+ File.new(Padrino.root("log", "#{Padrino.env}.log"), "a+")
74
+ when :null then StringIO.new
75
+ when :stdout then $stdout
76
+ when :stderr then $stderr
77
+ else config[:stream] # return itself, probabilly is a custom stream.
78
+ end
79
+ Thread.current[:padrino_logger] = Padrino::Logger.new(config.merge(:stream => stream))
80
+ end
81
+
44
82
  public
45
83
 
46
84
  # To initialize the logger you create a new object, proxies to set_log.
@@ -175,7 +213,7 @@ module Padrino
175
213
  now = Time.now
176
214
  length = extract_content_length(header)
177
215
 
178
- logger.debug FORMAT % [
216
+ logger.warn FORMAT % [
179
217
  env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-",
180
218
  env["REMOTE_USER"] || "-",
181
219
  env["REQUEST_METHOD"],
@@ -198,7 +236,10 @@ module Padrino
198
236
  end
199
237
  end
200
238
 
201
- # Define a logger available every where in our app
202
- def logger
203
- Thread.current[:padrino_logger] ||= Padrino::setup_logger!
239
+ module Kernel
240
+
241
+ # Define a logger available every where in our app
242
+ def logger
243
+ Padrino.logger
244
+ end
204
245
  end
@@ -0,0 +1,53 @@
1
+ module Padrino
2
+
3
+ def self.run!(*args)
4
+ Padrino.load! unless Padrino.loaded?
5
+ Server.build(*args)
6
+ end
7
+
8
+ module Server
9
+
10
+ class LoadError < RuntimeError; end
11
+
12
+ Handlers = %w[thin mongrel webrick] unless const_defined?(:Handlers)
13
+
14
+ private
15
+ def self.build(host="localhost", port=3000, adapter=nil)
16
+ handler_name = adapter ? adapter.to_s.capitalize : detect_handler.name.gsub(/.*::/, '')
17
+
18
+ begin
19
+ handler = Rack::Handler.get(handler_name.downcase)
20
+ rescue
21
+ raise LoadError, "#{handler_name} not supported yet, available adapters are: #{Handlers.inspect}"
22
+ exit
23
+ end
24
+
25
+ handler.run Padrino.application, :Host => host, :Port => port do |server|
26
+ trap(:INT) do
27
+ # Use thins' hard #stop! if available, otherwise just #stop
28
+ server.respond_to?(:stop!) ? server.stop! : server.stop
29
+ puts "<= Padrino has ended his set (crowd applauds)"
30
+ end
31
+ end
32
+ rescue RuntimeError => e
33
+ if e.message =~ /no acceptor/
34
+ puts "=> Someone is already performing on port #{port}!"
35
+ else
36
+ raise e
37
+ end
38
+ rescue Errno::EADDRINUSE
39
+ puts "=> Someone is already performing on port #{port}!"
40
+ end
41
+
42
+ def self.detect_handler
43
+ Handlers.each do |server_name|
44
+ begin
45
+ return Rack::Handler.get(server_name.downcase)
46
+ rescue LoadError
47
+ rescue NameError
48
+ end
49
+ end
50
+ raise LoadError, "Server handler (#{servers.join(',')}) not found."
51
+ end
52
+ end
53
+ end
@@ -1,12 +1,22 @@
1
1
  # This requires necessary pieces of ActiveSupport for the dependencies required by Padrino
2
2
 
3
+ ## ActiveSupport::Deprecation
4
+ unless defined?(ActiveSupport::Deprecation)
5
+ require 'active_support/core_ext/kernel' unless Kernel.method_defined?(:silence_warnings)
6
+ require 'active_support/core_ext/module' unless Module.method_defined?(:mattr_accessor)
7
+ require 'active_support/deprecation'
8
+ end
3
9
  ## Class#cattr_accessor
4
10
  require 'active_support/core_ext/class/attribute_accessors' unless Class.method_defined?(:cattr_accessor)
5
11
  ## Hash#symbolize_keys, Hash#reverse_merge, Hash#reverse_merge!, Hash#extract_options!, Hash#slice!
6
12
  require 'active_support/core_ext/hash' unless Hash.method_defined?(:reverse_merge)
13
+ ## Hash#to_params
14
+ require 'active_support/core_ext/object' unless Object.method_defined?(:to_query)
15
+ class Hash; alias to_params to_query; end unless Hash.method_defined?(:to_params)
7
16
  ## String#inflectors
8
17
  require 'active_support/inflector' unless String.method_defined?(:constantize)
9
18
  ## Object#blank?, Object#present?
19
+ require 'active_support/core_ext/object' unless Object.method_defined?(:blank?)
10
20
  require 'active_support/core_ext/blank' unless Object.method_defined?(:blank?)
11
21
  ## Array#extract_options!
12
22
  require 'active_support/core_ext/array' unless Array.method_defined?(:extract_options!)
@@ -37,6 +37,11 @@ unless Hash.method_defined?(:slice)
37
37
  end
38
38
  end
39
39
 
40
+ ## Hash#to_params
41
+ unless Hash.method_defined?(:to_params)
42
+ require 'extlib/hash'
43
+ end
44
+
40
45
  ## Hash#reverse_merge, Hash#reverse_merge!
41
46
  unless Hash.method_defined?(:present?)
42
47
  class Hash
@@ -12,6 +12,7 @@ Required for Padrino to run:
12
12
  * Object#blank?
13
13
  * Object#present?
14
14
  * Hash#slice, Hash#slice!
15
+ * Hash#to_params
15
16
  * Hash#symbolize_keys
16
17
  * Hash#reverse_merge, Hash#reverse_merge!
17
18
  * SupportLite::OrderedHash
@@ -3,34 +3,18 @@ module Padrino
3
3
  module Adapter
4
4
 
5
5
  class << self
6
-
7
- ADAPTERS = %w[thin mongrel webrick]
8
-
9
6
  # Start for the given options a rackup handler
10
7
  def start(options)
11
8
 
12
- ENV["PADRINO_ENV"] = options.environment.to_s
13
-
14
- boot = options.chdir ? File.join(options.chdir, options.boot) : options.boot
15
- unless File.exist?(boot)
16
- puts "=> Could not find boot file: #{boot.inspect} !!!"
17
- exit
18
- end
19
- require boot
20
-
21
9
  puts "=> Padrino/#{Padrino.version} has taken the stage #{options.environment} on port #{options.port}"
22
10
 
23
11
  if options.daemonize?
24
- unless fork
25
- puts "=> Daemonized mode is not supported on your platform."
26
- exit
27
- end
28
12
 
29
13
  stop # Need to stop a process if it exists
30
14
 
31
15
  fork do
32
16
  Process.setsid
33
- exit if fork
17
+ return if fork
34
18
  File.umask 0000
35
19
  puts "=> Padrino server has been daemonized with pid #{Process.pid}"
36
20
  STDIN.reopen "/dev/null"
@@ -42,38 +26,15 @@ module Padrino
42
26
 
43
27
  if pid
44
28
  File.open(pid, 'w'){ |f| f.write("#{Process.pid}") }
45
- at_exit { File.delete(pid) if File.exist?(pid) }
29
+ at_return { File.delete(pid) if File.exist?(pid) }
46
30
  end
47
31
 
48
- run_app(options)
32
+ Padrino.run!(options.host, options.port, options.adapter)
49
33
 
50
34
  end
51
35
  else
52
- run_app(options)
53
- end
54
- end
55
-
56
- # Method that run the Padrino.application
57
- def run_app(options)
58
-
59
- handler_name = options.adapter.to_s.capitalize
60
-
61
- begin
62
- handler = Rack::Handler.get(handler_name.downcase)
63
- rescue
64
- puts "#{handler_name} not supported yet, available adapters are: #{ADAPTERS.inspect}"
65
- exit
66
- end
67
-
68
- handler.run Padrino.application, :Host => options.host, :Port => options.port do |server|
69
- trap(:INT) do
70
- # Use thins' hard #stop! if available, otherwise just #stop
71
- server.respond_to?(:stop!) ? server.stop! : server.stop
72
- puts "<= Padrino has ended his set (crowd applauds)"
73
- end
36
+ Padrino.run!(options.host, options.port, options.adapter)
74
37
  end
75
- rescue Errno::EADDRINUSE
76
- puts "=> Someone is already performing on port #{options.port}!"
77
38
  end
78
39
 
79
40
  # Method that stop (if exist) a running Padrino.application
@@ -0,0 +1,19 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ Dir["lib/tasks/**/*.rake"].each { |ext| load(ext) }
6
+
7
+ # TODO: require here padrino-gen rake db:migrate, padrino-routes rake routes etc...
8
+
9
+ class Padrino::Tasks::RakeFile
10
+ cattr_accessor :boot_file
11
+ end
12
+
13
+ task :environment do
14
+ require Padrino::Tasks::RakeFile.boot_file
15
+ Padrino.mounted_apps.each do |app|
16
+ Padrino.require_dependency(app.app_file)
17
+ app.app_object.setup_application!
18
+ end
19
+ end
@@ -8,8 +8,9 @@ module Padrino
8
8
  # It look for any spec/*_spec.rb and test/test_*.rb files in your app root.
9
9
  def start
10
10
  puts "=> Executing Tests..."
11
- tests = Dir['test/**/test_*.rb'] - ['test/test_helper.rb']
12
- tests << Dir['spec/**/*_spec.rb'] - Dir['spec/**/spec_helper.rb']
11
+ tests = Dir['test/**/test_*.rb'] - ['test/test_helper.rb'] # TestUnit
12
+ tests << Dir['test/**/*_test.rb'] - ['test/test_config.rb'] # Bacon
13
+ tests << Dir['spec/**/*_spec.rb'] - Dir['spec/**/spec_helper.rb'] # Rspec
13
14
  cmd = "ruby -rubygems -I.:lib -e'%w( #{tests.join(' ')} ).each { |file| require file }'"
14
15
  system cmd
15
16
  end
@@ -1,10 +1,12 @@
1
1
  require 'thor'
2
+ require 'thor/rake_compat'
2
3
  require File.dirname(__FILE__) + "/tasks/helpers"
3
4
 
4
5
  module Padrino
5
6
  module Tasks
6
7
  class Base < Thor
7
8
  include Thor::Actions
9
+ include Thor::RakeCompat
8
10
  include Padrino::Tasks::Helpers
9
11
 
10
12
  class_option :chdir, :type => :string, :aliases => "-c"
@@ -16,44 +18,66 @@ module Padrino
16
18
  method_option :port, :type => :numeric, :aliases => "-p", :required => true, :default => 3000
17
19
  method_option :boot, :type => :string, :aliases => "-b", :required => true, :default => "config/boot.rb"
18
20
  method_option :daemonize, :type => :boolean, :aliases => "-d"
19
-
20
21
  def start
21
22
  require File.dirname(__FILE__) + "/tasks/adapter"
22
- chdir(options.chdir)
23
+ boot = check_boot
24
+ return unless boot
25
+ require boot
23
26
  Padrino::Tasks::Adapter.start(options)
24
27
  end
25
28
 
26
29
  desc "stop", "Stops the Padrino application"
27
30
  def stop
28
31
  require File.dirname(__FILE__) + "/tasks/adapter"
29
- chdir(options.chdir)
30
32
  Padrino::Tasks::Adapter.stop
31
33
  end
32
34
 
33
35
  desc "test", "Executes all the Padrino test files"
34
36
  def test
35
37
  require File.dirname(__FILE__) + "/tasks/test"
36
- chdir(options.chdir)
37
38
  Padrino::Tasks::Test.start
38
39
  end
39
40
 
40
- desc "console ENVIRONMENT", "Boots up the Padrino application irb console"
41
- method_option :boot, :type => :string, :aliases => "-b", :required => true, :default => "config/boot.rb"
42
- def console(environment="development")
41
+ desc "rake", "Execute rake tasks in {Padrino.root}/lib/tasks"
42
+ method_option :boot, :type => :string, :aliases => "-b", :required => true, :default => "config/boot.rb"
43
+ method_option :environment, :type => :string, :aliases => "-e", :required => true, :default => :development
44
+ def rake
45
+ boot = check_boot
46
+ return unless boot
47
+ require 'rake'
48
+ puts "=> Executing Rake..."
49
+ Rake.application.init
50
+ load(File.dirname(__FILE__) + "/tasks/rake_tasks.rb")
51
+ Padrino::Tasks::RakeFile.boot_file = boot
52
+ Rake.application.top_level
53
+ end
54
+
55
+ desc "console", "Boots up the Padrino application irb console"
56
+ method_option :boot, :type => :string, :aliases => "-b", :required => true, :default => "config/boot.rb"
57
+ method_option :environment, :type => :string, :aliases => "-e", :required => true, :default => :development
58
+ def console
43
59
  require File.dirname(__FILE__) + "/version"
44
- boot = options.chdir ? File.join(options.chdir, options.boot) : options.boot
45
- unless File.exist?(boot)
46
- puts "=> Could not find boot file: #{boot.inspect} !!!"
47
- exit
48
- end
49
- ENV["PADRINO_ENV"] ||= environment
50
- puts "=> Loading #{environment} console (Padrino v.#{Padrino.version})"
60
+ boot = check_boot
61
+ return unless boot
62
+ ARGV.clear
63
+ puts "=> Loading #{options.environment} console (Padrino v.#{Padrino.version})"
51
64
  require 'irb'
52
65
  require "irb/completion"
53
66
  require boot
54
67
  require File.dirname(__FILE__) + '/tasks/console'
55
68
  IRB.start
56
69
  end
70
+
71
+ private
72
+ def check_boot
73
+ ENV["PADRINO_ENV"] ||= options.environment.to_s
74
+ chdir(options.chdir)
75
+ unless File.exist?(options.boot)
76
+ puts "=> Could not find boot file: #{options.boot.inspect} !!!"
77
+ return
78
+ end
79
+ options.boot
80
+ end
57
81
  end
58
82
  end
59
- end
83
+ end
data/padrino-core.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{padrino-core}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Padrino Team", "Nathan Esquenazi", "Davide D'Agostino", "Arthur Chiu"]
12
- s.date = %q{2009-11-24}
12
+ s.date = %q{2009-11-30}
13
13
  s.default_executable = %q{padrino}
14
14
  s.description = %q{The Padrino core gem required for use of this framework}
15
15
  s.email = %q{nesquena@gmail.com}
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
32
32
  "lib/padrino-core/logger.rb",
33
33
  "lib/padrino-core/mounter.rb",
34
34
  "lib/padrino-core/reloader.rb",
35
+ "lib/padrino-core/server.rb",
35
36
  "lib/padrino-core/stat.rb",
36
37
  "lib/padrino-core/support_lite.rb",
37
38
  "lib/padrino-core/support_lite/as_support.rb",
@@ -40,6 +41,7 @@ Gem::Specification.new do |s|
40
41
  "lib/padrino-core/tasks/adapter.rb",
41
42
  "lib/padrino-core/tasks/console.rb",
42
43
  "lib/padrino-core/tasks/helpers.rb",
44
+ "lib/padrino-core/tasks/rake_tasks.rb",
43
45
  "lib/padrino-core/tasks/test.rb",
44
46
  "lib/padrino-core/version.rb",
45
47
  "padrino-core.gemspec",
@@ -49,10 +51,12 @@ Gem::Specification.new do |s|
49
51
  "test/fixtures/apps/simple.rb",
50
52
  "test/helper.rb",
51
53
  "test/test_application.rb",
54
+ "test/test_logger.rb",
52
55
  "test/test_padrino_core.rb",
53
56
  "test/test_padrino_mounter.rb",
54
57
  "test/test_reloader_complex.rb",
55
- "test/test_reloader_simple.rb"
58
+ "test/test_reloader_simple.rb",
59
+ "test/test_server.rb"
56
60
  ]
57
61
  s.homepage = %q{http://github.com/padrino/padrino-framework/tree/master/padrino-core}
58
62
  s.rdoc_options = ["--charset=UTF-8"]
@@ -23,7 +23,7 @@ Complex1Demo.controllers do
23
23
  end
24
24
 
25
25
  Complex2Demo.controllers do
26
- get(""){ "The magick number is: 88!" } # Change only the number!!!
26
+ get(""){ "The magick number is: 65!" } # Change only the number!!!
27
27
  end
28
28
 
29
29
  Padrino.load!
@@ -3,12 +3,7 @@ PADRINO_ROOT = File.dirname(__FILE__) unless defined? PADRINO_ROOT
3
3
  #
4
4
  # require 'rubygems'
5
5
  # require 'lib/padrino-core'
6
- #
7
- # Use this for prevent (when reload is in use) to re run the server.
8
- #
9
- # if Padrino.load!
10
- # SingleDemo.run!
11
- # end
6
+ #
12
7
 
13
8
  class SimpleDemo < Padrino::Application
14
9
  set :reload, true
@@ -16,8 +11,8 @@ end
16
11
 
17
12
  SimpleDemo.controllers do
18
13
  get "/" do
19
- 'The magick number is: 66!' # Change only the number!!!
14
+ 'The magick number is: 60!' # Change only the number!!!
20
15
  end
21
16
  end
22
17
 
23
- Padrino.load! # Remove this if you will run the app standalone
18
+ Padrino.load! # Replace this with Parino.run! unless Padrino.loaded? if you want to run the app standalone
data/test/helper.rb CHANGED
@@ -11,6 +11,18 @@ require 'rack/test'
11
11
  require 'rack'
12
12
  require 'shoulda'
13
13
 
14
+ module Kernel
15
+ # Silences the output by redirecting to stringIO
16
+ # silence_logger { ...commands... } => "...output..."
17
+ def silence_logger(&block)
18
+ $stdout = log_buffer = StringIO.new
19
+ block.call
20
+ $stdout = STDOUT
21
+ log_buffer.string
22
+ end
23
+ alias :silence_stdout :silence_logger
24
+ end
25
+
14
26
  class Padrino::Application
15
27
  # Allow assertions in request context
16
28
  include Test::Unit::Assertions
@@ -55,16 +67,4 @@ class Test::Unit::TestCase
55
67
  end
56
68
 
57
69
  alias :response :last_response
58
- end
59
- #
60
- # class Object
61
- # # Silences the output by redirecting to stringIO
62
- # # silence_logger { ...commands... } => "...output..."
63
- # def silence_logger(&block)
64
- # orig_stdout = $stdout
65
- # $stdout = log_buffer = StringIO.new
66
- # block.call
67
- # $stdout = orig_stdout
68
- # log_buffer.rewind && log_buffer.read
69
- # end
70
- # end
70
+ end
@@ -0,0 +1,55 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestPadrinoLogger < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Padrino::Logger::Config[:test][:stream] = :null # The default
7
+ Padrino::Logger.setup!
8
+ end
9
+
10
+ def setup_logger(options={})
11
+ @log = StringIO.new
12
+ @logger = Padrino::Logger.new(options.merge(:stream => @log))
13
+ end
14
+
15
+ context 'for logger functionality' do
16
+
17
+ context 'check stream config' do
18
+
19
+ should 'use stdout if stream is nil' do
20
+ Padrino::Logger::Config[:test][:stream] = nil
21
+ Padrino::Logger.setup!
22
+ assert_equal $stdout, Padrino.logger.log
23
+ end
24
+
25
+ should 'use StringIO as default for test' do
26
+ assert_instance_of StringIO, Padrino.logger.log
27
+ end
28
+
29
+ should 'use a custom stream' do
30
+ my_stream = StringIO.new
31
+ Padrino::Logger::Config[:test][:stream] = my_stream
32
+ Padrino::Logger.setup!
33
+ assert_equal my_stream, Padrino.logger.log
34
+ end
35
+ end
36
+
37
+ should 'log something' do
38
+ setup_logger(:log_level => :error)
39
+ @logger.error "You log this error?"
40
+ assert_match(/You log this error?/, @log.string)
41
+ @logger.debug "You don't log this error!"
42
+ assert_no_match(/You don't log this error!/, @log.string)
43
+ @logger << "Yep this can be logged"
44
+ assert_match(/Yep this can be logged/, @log.string)
45
+ end
46
+
47
+ should 'log an application' do
48
+ mock_app { get("/"){ "Foo" } }
49
+ get "/"
50
+ assert_equal "Foo", body
51
+ assert_match /GET \/ - 200/, Padrino.logger.log.string
52
+ end
53
+
54
+ end
55
+ end
@@ -19,9 +19,7 @@ class TestPadrinoCore < Test::Unit::TestCase
19
19
 
20
20
  should 'raise application error if I instantiate a new padrino application without mounted apps' do
21
21
  Padrino.mounted_apps.clear
22
- assert_raise Padrino::ApplicationLoadError do
23
- Padrino.application.tap { }
24
- end
22
+ assert_raise(Padrino::ApplicationLoadError) { Padrino.application.new }
25
23
  end
26
24
  end
27
25
  end
@@ -35,9 +35,10 @@ class TestComplexReloader < Test::Unit::TestCase
35
35
  get "/complex_2_demo/old"
36
36
  assert_equal 200, status
37
37
 
38
- new_phrase = "The magick number is: #{rand(100)}!"
39
- buffer = File.read(Complex1Demo.app_file).gsub!(/The magick number is: \d+!/, new_phrase)
40
- File.open(Complex1Demo.app_file, "w") { |f| f.write(buffer) }
38
+ new_phrase = "The magick number is: #{rand(100)}!"
39
+ buffer = File.read(Complex1Demo.app_file)
40
+ new_buffer = buffer.gsub(/The magick number is: \d+!/, new_phrase)
41
+ File.open(Complex1Demo.app_file, "w") { |f| f.write(new_buffer) }
41
42
  sleep 1.2 # We need at least a cooldown of 1 sec.
42
43
  get "/complex_2_demo"
43
44
  assert_equal new_phrase, body
@@ -54,6 +55,9 @@ class TestComplexReloader < Test::Unit::TestCase
54
55
 
55
56
  get "/complex_2_demo/old"
56
57
  assert_equal 200, status
58
+
59
+ # Now we need to prevent to commit a new changed file so we revert it
60
+ File.open(Complex1Demo.app_file, "w") { |f| f.write(buffer) }
57
61
  end
58
62
  end
59
63
  end
@@ -37,12 +37,16 @@ class TestSimpleReloader < Test::Unit::TestCase
37
37
  @app = SimpleDemo
38
38
  get "/"
39
39
  assert_equal 200, status
40
- new_phrase = "The magick number is: #{rand(100)}!"
41
- buffer = File.read(SimpleDemo.app_file).gsub!(/The magick number is: \d+!/, new_phrase)
42
- File.open(SimpleDemo.app_file, "w") { |f| f.write(buffer) }
40
+ new_phrase = "The magick number is: #{rand(100)}!"
41
+ buffer = File.read(SimpleDemo.app_file)
42
+ new_buffer = buffer.gsub(/The magick number is: \d+!/, new_phrase)
43
+ File.open(SimpleDemo.app_file, "w") { |f| f.write(new_buffer) }
43
44
  sleep 1.2 # We need at least a cooldown of 1 sec.
44
45
  get "/"
45
46
  assert_equal new_phrase, body
47
+
48
+ # Now we need to prevent to commit a new changed file so we revert it
49
+ File.open(SimpleDemo.app_file, "w") { |f| f.write(buffer) }
46
50
  end
47
51
  end
48
52
  end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ module Rack::Handler
4
+ class Mock
5
+ extend Test::Unit::Assertions
6
+
7
+ def self.run(app, options={})
8
+ assert_equal 9001, options[:Port]
9
+ assert_equal 'foo.local', options[:Host]
10
+ yield new
11
+ end
12
+
13
+ def stop
14
+ end
15
+ end
16
+
17
+ register 'mock', 'Rack::Handler::Mock'
18
+ Padrino::Server::Handlers << 'mock'
19
+ end
20
+
21
+ class ServerApp < Padrino::Application; end
22
+
23
+ class ServerTest < Test::Unit::TestCase
24
+ def setup
25
+ Padrino.mount_core("server_app")
26
+ end
27
+
28
+ context 'for server functionality' do
29
+ should "locates the appropriate Rack handler and calls ::run" do
30
+ Padrino.run!('foo.local', 9001, 'mock')
31
+ end
32
+
33
+ should "falls back on the next server handler when not found" do
34
+ assert_raise(Padrino::Server::LoadError) { Padrino.run!('foo.local', 9001, 'foo') }
35
+ end
36
+ end
37
+ end
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.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Padrino Team
@@ -12,7 +12,7 @@ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
14
 
15
- date: 2009-11-24 00:00:00 -08:00
15
+ date: 2009-11-30 00:00:00 -08:00
16
16
  default_executable: padrino
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
@@ -118,6 +118,7 @@ files:
118
118
  - lib/padrino-core/logger.rb
119
119
  - lib/padrino-core/mounter.rb
120
120
  - lib/padrino-core/reloader.rb
121
+ - lib/padrino-core/server.rb
121
122
  - lib/padrino-core/stat.rb
122
123
  - lib/padrino-core/support_lite.rb
123
124
  - lib/padrino-core/support_lite/as_support.rb
@@ -126,6 +127,7 @@ files:
126
127
  - lib/padrino-core/tasks/adapter.rb
127
128
  - lib/padrino-core/tasks/console.rb
128
129
  - lib/padrino-core/tasks/helpers.rb
130
+ - lib/padrino-core/tasks/rake_tasks.rb
129
131
  - lib/padrino-core/tasks/test.rb
130
132
  - lib/padrino-core/version.rb
131
133
  - padrino-core.gemspec
@@ -135,10 +137,12 @@ files:
135
137
  - test/fixtures/apps/simple.rb
136
138
  - test/helper.rb
137
139
  - test/test_application.rb
140
+ - test/test_logger.rb
138
141
  - test/test_padrino_core.rb
139
142
  - test/test_padrino_mounter.rb
140
143
  - test/test_reloader_complex.rb
141
144
  - test/test_reloader_simple.rb
145
+ - test/test_server.rb
142
146
  has_rdoc: true
143
147
  homepage: http://github.com/padrino/padrino-framework/tree/master/padrino-core
144
148
  licenses: []