[DRE-commits] [ruby-sinatra-contrib] 01/08: Imported Upstream version 1.4.6

Jérémy Bobbio lunar at moszumanska.debian.org
Wed Sep 9 20:25:39 UTC 2015


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch master
in repository ruby-sinatra-contrib.

commit 1d72f35e89f108f7804e7550f9dc3399dba90dfe
Author: Lunar <lunar at kittens>
Date:   Wed Sep 9 15:34:25 2015 +0200

    Imported Upstream version 1.4.6
---
 LICENSE                        |   2 +
 README.md                      |   3 +
 Rakefile                       |   6 +-
 checksums.yaml.gz              | Bin 266 -> 0 bytes
 lib/sinatra/capture.rb         |   2 +-
 lib/sinatra/config_file.rb     |   7 +-
 lib/sinatra/contrib/version.rb |   2 +-
 lib/sinatra/cookies.rb         |   6 +-
 lib/sinatra/custom_logger.rb   |  60 +++++++++
 lib/sinatra/decompile.rb       |   8 +-
 lib/sinatra/namespace.rb       |  13 +-
 lib/sinatra/reloader.rb        |  10 +-
 lib/sinatra/respond_with.rb    |  43 +++++--
 lib/sinatra/streaming.rb       |   2 +-
 metadata.yml                   | 274 ++++++++++++++++++++++++++++++++++++-----
 sinatra-contrib.gemspec        |  45 ++++++-
 spec/capture_spec.rb           |  11 +-
 spec/config_file_spec.rb       |   3 +-
 spec/content_for_spec.rb       |   3 +-
 spec/cookies_spec.rb           |  43 ++++---
 spec/custom_logger_spec.rb     |  43 +++++++
 spec/decompile_spec.rb         |   3 +-
 spec/extension_spec.rb         |   5 +-
 spec/json_spec.rb              |   5 +-
 spec/link_header_spec.rb       |   3 +-
 spec/multi_route_spec.rb       |   3 +-
 spec/namespace_spec.rb         | 185 +++++++++++++++++++---------
 spec/reloader_spec.rb          |   3 +-
 spec/respond_with/bar.erb      |   2 +-
 spec/respond_with_spec.rb      |   7 +-
 spec/spec_helper.rb            |   2 +-
 spec/streaming_spec.rb         |   6 +-
 32 files changed, 636 insertions(+), 174 deletions(-)

diff --git a/LICENSE b/LICENSE
index ec9cc42..048cbbd 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,3 +1,5 @@
+The MIT License (MIT)
+
 Copyright (c) 2008-2011 Nicolas Sanguinetti, entp.com, Konstantin Haase
 
 Permission is hereby granted, free of charge, to any person obtaining
diff --git a/README.md b/README.md
index 2a1fd7a..99f43e1 100644
--- a/README.md
+++ b/README.md
@@ -45,6 +45,9 @@ Currently included:
   depending on the incoming request. Adds helpers `respond_to` and
   `respond_with`.
 
+* `sinatra/custom_logger`: This extension allows you to define your own
+  logger instance using +logger+ setting. That logger then will
+  be available as #logger helper method in your routes and views.
 
 ## Custom Extensions
 
diff --git a/Rakefile b/Rakefile
index b3d2a76..e71fe62 100644
--- a/Rakefile
+++ b/Rakefile
@@ -4,7 +4,7 @@ require 'yaml'
 require 'sinatra/contrib/version'
 
 desc "run specs"
-task(:spec) { ruby '-S rspec spec -c' }
+task(:spec) { ruby '-S rspec spec -cw' }
 task(:test => :spec)
 task(:default => :spec)
 
@@ -67,8 +67,8 @@ task :release => :gemspec do
     git commit --allow-empty -a -m '#{Sinatra::Contrib::VERSION} release'  &&
     git tag -s v#{Sinatra::Contrib::VERSION} -m '#{Sinatra::Contrib::VERSION} release'  &&
     git tag -s #{Sinatra::Contrib::VERSION} -m '#{Sinatra::Contrib::VERSION} release'  &&
-    git push && (git push sinatra || true) &&
-    git push --tags && (git push sinatra --tags || true)
+    git push && (git push origin master || true) &&
+    git push --tags && (git push origin --tags || true)
   SH
 end
 
diff --git a/checksums.yaml.gz b/checksums.yaml.gz
deleted file mode 100644
index 03617f0..0000000
Binary files a/checksums.yaml.gz and /dev/null differ
diff --git a/lib/sinatra/capture.rb b/lib/sinatra/capture.rb
index 1f742ef..e219a93 100644
--- a/lib/sinatra/capture.rb
+++ b/lib/sinatra/capture.rb
@@ -95,7 +95,7 @@ module Sinatra
       @capture = nil
       if current_engine == :ruby
         result = block[*args]
-      elsif current_engine == :erb
+      elsif current_engine == :erb || current_engine == :slim
         @_out_buf, _buf_was = '', @_out_buf
         block[*args]
         result = eval('@_out_buf', block.binding)
diff --git a/lib/sinatra/config_file.rb b/lib/sinatra/config_file.rb
index 400f12a..ed9082d 100644
--- a/lib/sinatra/config_file.rb
+++ b/lib/sinatra/config_file.rb
@@ -69,8 +69,9 @@ module Sinatra
   #       b: 2
   #
   # But it also can provide specific environment configuration.  There are two
-  # ways to do that: at the file level and at the setting level.  They are
-  # illustrated, repsectively, as follows:
+  # ways to do that: at the file level and at the settings level.
+  #
+  # At the settings level (e.g. in 'path/to/config.yml'):
   #
   #     development:
   #       foo: development
@@ -82,7 +83,7 @@ module Sinatra
   #       foo: production
   #       bar: bar
   #
-  # and
+  # Or at the file level:
   #
   #     foo:
   #       development: development
diff --git a/lib/sinatra/contrib/version.rb b/lib/sinatra/contrib/version.rb
index 7606b4c..dbc6851 100644
--- a/lib/sinatra/contrib/version.rb
+++ b/lib/sinatra/contrib/version.rb
@@ -4,7 +4,7 @@ module Sinatra
       VERSION
     end
 
-    SIGNATURE = [1, 4, 2]
+    SIGNATURE = [1, 4, 6]
     VERSION   = SIGNATURE.join('.')
 
     VERSION.extend Comparable
diff --git a/lib/sinatra/cookies.rb b/lib/sinatra/cookies.rb
index a77de5d..bd06315 100644
--- a/lib/sinatra/cookies.rb
+++ b/lib/sinatra/cookies.rb
@@ -66,14 +66,12 @@ module Sinatra
         @deleted         = []
 
         @options = {
-          :path     => @request.script_name,
-          :domain   => @request.host,
+          :path => @request.script_name.to_s.empty? ? '/' : @request.script_name,
+          :domain => @request.host == 'localhost' ? nil : @request.host,
           :secure   => @request.secure?,
           :httponly => true
         }
 
-        @options[:path] = '/' if @options[:path].to_s.empty?
-
         if app.settings.respond_to? :cookie_options
           @options.merge! app.settings.cookie_options
         end
diff --git a/lib/sinatra/custom_logger.rb b/lib/sinatra/custom_logger.rb
new file mode 100644
index 0000000..42c0d63
--- /dev/null
+++ b/lib/sinatra/custom_logger.rb
@@ -0,0 +1,60 @@
+module Sinatra
+
+  # = Sinatra::CustomLogger
+  #
+  # CustomLogger extension allows you to define your own logger instance
+  # using +logger+ setting. That logger then will be available
+  # as #logger helper method in your routes and views.
+  #
+  # == Usage
+  #
+  # === Classic Application
+  #
+  # To define your custom logger instance in a classic application:
+  #
+  #     require 'sinatra'
+  #     require 'sinatra/custom_logger'
+  #     require 'logger'
+  #
+  #     set :logger, Logger.new(STDOUT)
+  #
+  #     get '/' do
+  #       logger.info 'Some message' # STDOUT logger is used
+  #       # Other code...
+  #     end
+  #
+  # === Modular Application
+  #
+  # The same for modular application:
+  #
+  #     require 'sinatra/base'
+  #     require 'sinatra/custom_logger'
+  #     require 'logger'
+  #
+  #     class MyApp < Sinatra::Base
+  #       helpers Sinatra::CustomLogger
+  #
+  #       configure :development, :production do
+  #         logger = Logger.new(File.open("#{root}/log/#{environment}.log", 'a'))
+  #         logger.level = Logger::DEBUG if development?
+  #         set :logger, logger
+  #       end
+  #
+  #       get '/' do
+  #         logger.info 'Some message' # File-based logger is used
+  #         # Other code...
+  #       end
+  #     end
+  #
+  module CustomLogger
+    def logger
+      if settings.respond_to?(:logger)
+        settings.logger
+      else
+        request.logger
+      end
+    end
+  end
+
+  helpers CustomLogger
+end
diff --git a/lib/sinatra/decompile.rb b/lib/sinatra/decompile.rb
index b3e9cc5..41bfe3d 100644
--- a/lib/sinatra/decompile.rb
+++ b/lib/sinatra/decompile.rb
@@ -110,11 +110,17 @@ module Sinatra
 
     def encoded(char)
       return super if defined? super
-      enc = URI.escape(char)
+      enc = uri_parser.escape(char)
       enc = "(?:#{escaped(char, enc).join('|')})" if enc == char
       enc = "(?:#{enc}|#{encoded('+')})" if char == " "
       enc
     end
+
+    def uri_parser
+      #TODO: Remove check after dropping support for 1.8.7
+      @_uri_parser ||= defined?(URI::Parser) ? URI::Parser.new : URI
+    end
+
   end
 
   register Decompile
diff --git a/lib/sinatra/namespace.rb b/lib/sinatra/namespace.rb
index 2f7ae67..48203d6 100644
--- a/lib/sinatra/namespace.rb
+++ b/lib/sinatra/namespace.rb
@@ -116,6 +116,8 @@ module Sinatra
   module Namespace
     def self.new(base, pattern, conditions = {}, &block)
       Module.new do
+        #quelch uninitialized variable warnings, since these get used by compile method.
+        @pattern, @conditions = nil, nil
         extend NamespacedMethods
         include InstanceMethods
         @base, @extensions, @errors = base, [], {}
@@ -173,7 +175,7 @@ module Sinatra
       end
 
       def not_found(&block)
-        error(404, &block)
+        error(Sinatra::NotFound, &block)
       end
 
       def errors
@@ -185,9 +187,10 @@ module Sinatra
       end
 
       def error(*codes, &block)
-        args  = Sinatra::Base.send(:compile!, "ERROR", /^#{@pattern}/, block)
+        args  = Sinatra::Base.send(:compile!, "ERROR", regexpify(@pattern), block)
         codes = codes.map { |c| Array(c) }.flatten
         codes << Exception if codes.empty?
+
         codes.each do |c|
           errors = @errors[c] ||= []
           errors << args
@@ -253,7 +256,7 @@ module Sinatra
 
       def regexpify(pattern)
         pattern = Sinatra::Base.send(:compile, pattern).first.inspect
-        pattern.gsub! /^\/(\^|\\A)?|(\$|\\Z)?\/$/, ''
+        pattern.gsub! /^\/(\^|\\A)?|(\$|\\z)?\/$/, ''
         Regexp.new pattern
       end
 
@@ -268,6 +271,10 @@ module Sinatra
       def method_missing(method, *args, &block)
         base.send(method, *args, &block)
       end
+
+      def respond_to?(method, include_private = false)
+        super || base.respond_to?(method, include_private)
+      end
     end
 
     module BaseMethods
diff --git a/lib/sinatra/reloader.rb b/lib/sinatra/reloader.rb
old mode 100644
new mode 100755
index fcfdfb8..a410671
--- a/lib/sinatra/reloader.rb
+++ b/lib/sinatra/reloader.rb
@@ -164,6 +164,7 @@ module Sinatra
 
       # Creates a new +Watcher+ instance for the file located at +path+.
       def initialize(path)
+        @ignore = nil
         @path, @elements = path, []
         update
       end
@@ -202,7 +203,7 @@ module Sinatra
       end
     end
 
-    # When the extension is registed it extends the Sinatra application
+    # When the extension is registered it extends the Sinatra application
     # +klass+ with the modules +BaseMethods+ and +ExtensionMethods+ and
     # defines a before filter to +perform+ the reload of the modified files.
     def self.registered(klass)
@@ -244,7 +245,7 @@ module Sinatra
       Thread and Thread.list.size > 1 and Thread.respond_to?(:exclusive)
     end
 
-    # Contains the methods defined in Sinatra::Base that are overriden.
+    # Contains the methods defined in Sinatra::Base that are overridden.
     module BaseMethods
       # Protects Sinatra::Base.run! from being called more than once.
       def run!(*args)
@@ -369,7 +370,8 @@ module Sinatra
 
     private
 
-      attr_reader :register_path
+      # attr_reader :register_path warn on -w (private attribute)
+      def register_path; @register_path ||= nil; end
 
       # Indicates an extesion is being registered.
       def start_registering_extension
@@ -391,7 +393,7 @@ module Sinatra
       # in the file located at +path+.
       #
       # If an extension is being registered, it also tells the list to
-      # watch it in the file where the extesion has been registered.
+      # watch it in the file where the extension has been registered.
       # This prevents the duplication of the elements added by the
       # extension in its +registered+ method with every reload.
       def watch_element(path, type, representation=nil)
diff --git a/lib/sinatra/respond_with.rb b/lib/sinatra/respond_with.rb
index 62b6b5c..1ff8989 100644
--- a/lib/sinatra/respond_with.rb
+++ b/lib/sinatra/respond_with.rb
@@ -1,6 +1,8 @@
 require 'sinatra/json'
 require 'sinatra/base'
 
+$KCODE = "UTF-8" unless RUBY_VERSION > "1.9.0"
+
 module Sinatra
   #
   # = Sinatra::RespondWith
@@ -174,7 +176,11 @@ module Sinatra
         end
         possible.each do |engine, template|
           # not exactly like Tilt[engine], but does not trigger a require
-          klass = Tilt.mappings[Tilt.normalize(engine)].first
+          if Tilt.respond_to?(:mappings)
+            klass = Tilt.mappings[Tilt.normalize(engine)].first
+          else
+            klass = Tilt[engine]
+          end
           find_template(settings.views, template, klass) do |file|
             next unless File.exist? file
             return settings.rendering_method(engine) << template.to_sym
@@ -221,22 +227,33 @@ module Sinatra
       super
     end
 
-    ENGINES = {
-      :css  => [:less,  :sass, :scss],
-      :xml  => [:builder, :nokogiri],
-      :js   => [:coffee],
-      :json => [:yajl],
-      :html => [:erb, :erubis, :haml, :slim, :liquid, :radius, :mab, :markdown,
-        :textile, :rdoc],
-      :all  => Sinatra::Templates.instance_methods.map(&:to_sym) + [:mab] -
-        [:find_template, :markaby]
-    }
+    def self.jrubyify(engs)
+      not_supported = [:markdown]
+      engs.keys.each do |key|
+        engs[key].collect! { |eng| (eng == :yajl) ? :json_pure : eng }
+        engs[key].delete_if { |eng| not_supported.include?(eng) }
+      end
+      engs
+    end
 
-    ENGINES.default = []
+    def self.engines
+      engines = {
+        :css  => [:less,  :sass, :scss],
+        :xml  => [:builder, :nokogiri],
+        :js   => [:coffee],
+        :html => [:erb, :erubis, :haml, :slim, :liquid, :radius, :mab,
+          :markdown, :textile, :rdoc],
+        :all =>  (Sinatra::Templates.instance_methods.map(&:to_sym) +
+          [:mab] - [:find_template, :markaby]),
+        :json => [:yajl],
+      }
+      engines.default = []
+      (defined? JRUBY_VERSION) ? jrubyify(engines) : engines
+    end  
 
     def self.registered(base)
       base.set :ext_map, Hash.new { |h,k| h[k] = [] }
-      base.set :template_engines, ENGINES.dup
+      base.set :template_engines, engines
       base.remap_extensions
       base.helpers Helpers
     end
diff --git a/lib/sinatra/streaming.rb b/lib/sinatra/streaming.rb
index 2a832da..da2d5da 100644
--- a/lib/sinatra/streaming.rb
+++ b/lib/sinatra/streaming.rb
@@ -6,7 +6,7 @@ module Sinatra
   # = Sinatra::Streaming
   #
   # Sinatra 1.3 introduced the +stream+ helper. This addon improves the
-  # streaming API by making the stream object immitate an IO object, turning
+  # streaming API by making the stream object imitate an IO object, turning
   # it into a real Deferrable and making the body play nicer with middleware
   # unaware of streaming.
   #
diff --git a/metadata.yml b/metadata.yml
index 4a165d7..2ac97f2 100644
--- a/metadata.yml
+++ b/metadata.yml
@@ -1,42 +1,53 @@
 --- !ruby/object:Gem::Specification
 name: sinatra-contrib
 version: !ruby/object:Gem::Version
-  version: 1.4.2
+  version: 1.4.6
 platform: ruby
 authors:
 - Konstantin Haase
 - Gabriel Andretta
-- Trevor Bramble
 - Zachary Scott
+- Trevor Bramble
 - Katrina Owen
+- Ashley Williams
 - Nicolas Sanguinetti
 - Hrvoje Šimić
 - Masahiro Fujiwara
 - Rafael Magana
+- Vipul A M
 - Jack Chu
+- ashley williams
 - Ilya Shindyapin
+- Jake Worth
 - Kashyap
 - Sumeet Singh
 - lest
 - Adrian Pacała
 - Aish
+- Alexey Chernenkov
 - Andrew Crump
+- Anton Davydov
+- Bo Jeanes
 - David Asabina
 - Eliot Shepard
 - Eric Marden
 - Gray Manley
 - Guillaume Bouteille
 - Jamie Hodge
+- Koichi Sasada
 - Kyle Lacy
+- Lars Vonk
 - Martin Frost
 - Mathieu Allaire
 - Matt Lyon
 - Matthew Conway
 - Meck
 - Michi Huber
+- Nic Benders
 - Patricio Mac Adden
 - Reed Lipman
 - Samy Dindane
+- Sergey Nartimov
 - Thibaut Sacreste
 - Uchio KONDO
 - Will Bailey
@@ -44,160 +55,348 @@ authors:
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2013-12-01 00:00:00.000000000 Z
+date: 2015-07-02 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: sinatra
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - ~>
+    - - "~>"
       - !ruby/object:Gem::Version
         version: 1.4.0
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - ~>
+    - - "~>"
       - !ruby/object:Gem::Version
         version: 1.4.0
 - !ruby/object:Gem::Dependency
   name: backports
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '2.0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '2.0'
 - !ruby/object:Gem::Dependency
   name: tilt
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - ~>
+    - - ">="
       - !ruby/object:Gem::Version
         version: '1.3'
+    - - "<"
+      - !ruby/object:Gem::Version
+        version: '3'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - ~>
+    - - ">="
       - !ruby/object:Gem::Version
         version: '1.3'
+    - - "<"
+      - !ruby/object:Gem::Version
+        version: '3'
 - !ruby/object:Gem::Dependency
   name: rack-test
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
 - !ruby/object:Gem::Dependency
   name: rack-protection
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
 - !ruby/object:Gem::Dependency
   name: multi_json
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
 - !ruby/object:Gem::Dependency
   name: rspec
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - ~>
+    - - "~>"
       - !ruby/object:Gem::Version
         version: '2.3'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - ~>
+    - - "~>"
       - !ruby/object:Gem::Version
         version: '2.3'
 - !ruby/object:Gem::Dependency
   name: haml
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
 - !ruby/object:Gem::Dependency
   name: erubis
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
 - !ruby/object:Gem::Dependency
   name: slim
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: less
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: sass
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: builder
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: liquid
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: redcarpet
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: RedCloth
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: asciidoctor
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: radius
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: coffee-script
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: nokogiri
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: creole
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: wikicloth
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: markaby
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
 - !ruby/object:Gem::Dependency
   name: rake
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
 description: Collection of useful Sinatra extensions
@@ -205,38 +404,50 @@ email:
 - konstantin.mailinglists at googlemail.com
 - ohhgabriel at gmail.com
 - inbox at trevorbramble.com
+- e at zzak.io
 - zachary at zacharyscott.net
 - katrina.owen at gmail.com
+- ashley at bocoup.com
 - contacto at nicolassanguinetti.info
 - shime.ferovac at gmail.com
 - m-fujiwara at axsh.net
 - raf.magana at gmail.com
+- vipulnsward at gmail.com
 - jack at jackchu.com
 - konstantin.haase at gmail.com
+- ashley666ashley at gmail.com
 - ilya at shindyapin.com
+- jworth at prevailhs.com
 - kashyap.kmbc at gmail.com
 - ortuna at gmail.com
-- e at zzak.io
+- tbramble at chef.io
 - just.lest at gmail.com
 - altpacala at gmail.com
 - aisha.fenton at visfleet.com
+- laise at pisem.net
 - andrew.crump at ieee.org
+- antondavydov.o at gmail.com
+- me at bjeanes.com
 - david at supr.nu
 - eshepard at slower.net
 - eric.marden at gmail.com
 - g.manley at tukaiz.com
 - duffman at via.ecp.fr
 - jamiehodge at me.com
+- ko1 at atdot.net
 - kylewlacy at me.com
+- lars.vonk at gmail.com
 - blame at kth.se
 - mathieuallaire at gmail.com
 - matt at flowerpowered.com
 - himself at mattonrails.com
 - yesmeck at gmail.com
 - michi.huber at gmail.com
+- nic at newrelic.com
 - patriciomacadden at gmail.com
 - rmlipman at gmail.com
 - samy at dindane.com
+- just.lest at gmail.com
 - thibaut.sacreste at gmail.com
 - udzura at udzura.jp
 - will.bailey at gmail.com
@@ -257,6 +468,7 @@ files:
 - lib/sinatra/contrib/setup.rb
 - lib/sinatra/contrib/version.rb
 - lib/sinatra/cookies.rb
+- lib/sinatra/custom_logger.rb
 - lib/sinatra/decompile.rb
 - lib/sinatra/engine_tracking.rb
 - lib/sinatra/extension.rb
@@ -311,6 +523,7 @@ files:
 - spec/content_for/takes_values.slim
 - spec/content_for_spec.rb
 - spec/cookies_spec.rb
+- spec/custom_logger_spec.rb
 - spec/decompile_spec.rb
 - spec/extension_spec.rb
 - spec/json_spec.rb
@@ -331,7 +544,8 @@ files:
 - spec/spec_helper.rb
 - spec/streaming_spec.rb
 homepage: http://github.com/sinatra/sinatra-contrib
-licenses: []
+licenses:
+- MIT
 metadata: {}
 post_install_message: 
 rdoc_options: []
@@ -339,17 +553,17 @@ require_paths:
 - lib
 required_ruby_version: !ruby/object:Gem::Requirement
   requirements:
-  - - '>='
+  - - ">="
     - !ruby/object:Gem::Version
       version: '0'
 required_rubygems_version: !ruby/object:Gem::Requirement
   requirements:
-  - - '>='
+  - - ">="
     - !ruby/object:Gem::Version
       version: '0'
 requirements: []
 rubyforge_project: 
-rubygems_version: 2.0.6
+rubygems_version: 2.4.6
 signing_key: 
 specification_version: 4
 summary: Collection of useful Sinatra extensions
diff --git a/sinatra-contrib.gemspec b/sinatra-contrib.gemspec
index e9760c7..e164970 100644
--- a/sinatra-contrib.gemspec
+++ b/sinatra-contrib.gemspec
@@ -7,43 +7,55 @@ Gem::Specification.new do |s|
   s.version     = Sinatra::Contrib::VERSION
   s.description = "Collection of useful Sinatra extensions"
   s.homepage    = "http://github.com/sinatra/sinatra-contrib"
+  s.license     = "MIT"
   s.summary     = s.description
 
   # generated from git shortlog -sn
   s.authors = [
     "Konstantin Haase",
     "Gabriel Andretta",
-    "Trevor Bramble",
     "Zachary Scott",
+    "Trevor Bramble",
     "Katrina Owen",
+    "Ashley Williams",
     "Nicolas Sanguinetti",
     "Hrvoje Šimić",
     "Masahiro Fujiwara",
     "Rafael Magana",
+    "Vipul A M",
     "Jack Chu",
+    "ashley williams",
     "Ilya Shindyapin",
+    "Jake Worth",
     "Kashyap",
     "Sumeet Singh",
     "lest",
     "Adrian Pacała",
     "Aish",
+    "Alexey Chernenkov",
     "Andrew Crump",
+    "Anton Davydov",
+    "Bo Jeanes",
     "David Asabina",
     "Eliot Shepard",
     "Eric Marden",
     "Gray Manley",
     "Guillaume Bouteille",
     "Jamie Hodge",
+    "Koichi Sasada",
     "Kyle Lacy",
+    "Lars Vonk",
     "Martin Frost",
     "Mathieu Allaire",
     "Matt Lyon",
     "Matthew Conway",
     "Meck",
     "Michi Huber",
+    "Nic Benders",
     "Patricio Mac Adden",
     "Reed Lipman",
     "Samy Dindane",
+    "Sergey Nartimov",
     "Thibaut Sacreste",
     "Uchio KONDO",
     "Will Bailey",
@@ -55,38 +67,50 @@ Gem::Specification.new do |s|
     "konstantin.mailinglists at googlemail.com",
     "ohhgabriel at gmail.com",
     "inbox at trevorbramble.com",
+    "e at zzak.io",
     "zachary at zacharyscott.net",
     "katrina.owen at gmail.com",
+    "ashley at bocoup.com",
     "contacto at nicolassanguinetti.info",
     "shime.ferovac at gmail.com",
     "m-fujiwara at axsh.net",
     "raf.magana at gmail.com",
+    "vipulnsward at gmail.com",
     "jack at jackchu.com",
     "konstantin.haase at gmail.com",
+    "ashley666ashley at gmail.com",
     "ilya at shindyapin.com",
+    "jworth at prevailhs.com",
     "kashyap.kmbc at gmail.com",
     "ortuna at gmail.com",
-    "e at zzak.io",
+    "tbramble at chef.io",
     "just.lest at gmail.com",
     "altpacala at gmail.com",
     "aisha.fenton at visfleet.com",
+    "laise at pisem.net",
     "andrew.crump at ieee.org",
+    "antondavydov.o at gmail.com",
+    "me at bjeanes.com",
     "david at supr.nu",
     "eshepard at slower.net",
     "eric.marden at gmail.com",
     "g.manley at tukaiz.com",
     "duffman at via.ecp.fr",
     "jamiehodge at me.com",
+    "ko1 at atdot.net",
     "kylewlacy at me.com",
+    "lars.vonk at gmail.com",
     "blame at kth.se",
     "mathieuallaire at gmail.com",
     "matt at flowerpowered.com",
     "himself at mattonrails.com",
     "yesmeck at gmail.com",
     "michi.huber at gmail.com",
+    "nic at newrelic.com",
     "patriciomacadden at gmail.com",
     "rmlipman at gmail.com",
     "samy at dindane.com",
+    "just.lest at gmail.com",
     "thibaut.sacreste at gmail.com",
     "udzura at udzura.jp",
     "will.bailey at gmail.com",
@@ -107,6 +131,7 @@ Gem::Specification.new do |s|
     "lib/sinatra/contrib/setup.rb",
     "lib/sinatra/contrib/version.rb",
     "lib/sinatra/cookies.rb",
+    "lib/sinatra/custom_logger.rb",
     "lib/sinatra/decompile.rb",
     "lib/sinatra/engine_tracking.rb",
     "lib/sinatra/extension.rb",
@@ -161,6 +186,7 @@ Gem::Specification.new do |s|
     "spec/content_for/takes_values.slim",
     "spec/content_for_spec.rb",
     "spec/cookies_spec.rb",
+    "spec/custom_logger_spec.rb",
     "spec/decompile_spec.rb",
     "spec/extension_spec.rb",
     "spec/json_spec.rb",
@@ -184,7 +210,7 @@ Gem::Specification.new do |s|
 
   s.add_dependency "sinatra",   "~> 1.4.0"
   s.add_dependency "backports", ">= 2.0"
-  s.add_dependency "tilt",      "~> 1.3"
+  s.add_dependency "tilt",      ">= 1.3", "< 3"
   s.add_dependency "rack-test"
   s.add_dependency "rack-protection"
   s.add_dependency "multi_json"
@@ -193,5 +219,18 @@ Gem::Specification.new do |s|
   s.add_development_dependency "haml"
   s.add_development_dependency "erubis"
   s.add_development_dependency "slim"
+  s.add_development_dependency "less"
+  s.add_development_dependency "sass"
+  s.add_development_dependency "builder"
+  s.add_development_dependency "liquid"
+  s.add_development_dependency "redcarpet"
+  s.add_development_dependency "RedCloth"
+  s.add_development_dependency "asciidoctor"
+  s.add_development_dependency "radius"
+  s.add_development_dependency "coffee-script"
+  s.add_development_dependency "nokogiri"
+  s.add_development_dependency "creole"
+  s.add_development_dependency "wikicloth"
+  s.add_development_dependency "markaby"
   s.add_development_dependency "rake"
 end
diff --git a/spec/capture_spec.rb b/spec/capture_spec.rb
index d621d3e..f21b6f0 100644
--- a/spec/capture_spec.rb
+++ b/spec/capture_spec.rb
@@ -1,7 +1,6 @@
 # -*- coding: utf-8 -*-
-require 'backports'
 require 'slim'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::Capture do
   subject do
@@ -42,6 +41,10 @@ describe Sinatra::Capture do
     it "handles utf-8 encoding" do
       render(:erb, "utf_8").should == "UTF-8 –"
     end
+
+    it "handles ISO-8859-1 encoding" do
+      render(:erb, "iso_8859_1").should == "ISO-8859-1 -"
+    end if RUBY_VERSION >= '1.9'
   end
 end
 
@@ -91,3 +94,7 @@ Hello #{a.strip}
 @@ utf_8
 <% a = capture do %>–<% end %>
 UTF-8 <%= a %>
+
+@@ iso_8859_1
+<% a = capture do %>-<% end %>
+ISO-8859-1 <%= a.force_encoding("iso-8859-1") %>
diff --git a/spec/config_file_spec.rb b/spec/config_file_spec.rb
index 0508ae5..59404ca 100644
--- a/spec/config_file_spec.rb
+++ b/spec/config_file_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::ConfigFile do
   def config_file(*args, &block)
diff --git a/spec/content_for_spec.rb b/spec/content_for_spec.rb
index ce29b90..d70e625 100644
--- a/spec/content_for_spec.rb
+++ b/spec/content_for_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::ContentFor do
   subject do
diff --git a/spec/cookies_spec.rb b/spec/cookies_spec.rb
index 441cdd4..59e6512 100644
--- a/spec/cookies_spec.rb
+++ b/spec/cookies_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::Cookies do
   def cookie_route(*cookies, &block)
@@ -9,7 +8,7 @@ describe Sinatra::Cookies do
       result = instance_eval(&block)
       "ok"
     end
-    get '/'
+    get '/', {}, @headers || {}
     last_response.should be_ok
     body.should be == "ok"
     result
@@ -33,7 +32,7 @@ describe Sinatra::Cookies do
     it 'runs the block' do
       ran = false
       cookie_route { ran = true }
-      ran.should be_true
+      ran.should be true
     end
 
     it 'returns the block result' do
@@ -97,6 +96,14 @@ describe Sinatra::Cookies do
       end.should include('HttpOnly')
     end
 
+    it 'sets domain to nil if localhost' do
+      @headers = {'HTTP_HOST' => 'localhost'}
+      cookie_route do
+        cookies['foo'] = 'bar'
+        response['Set-Cookie']
+      end.should_not include("domain")
+    end
+
     it 'sets the domain' do
       cookie_route do
         cookies['foo'] = 'bar'
@@ -275,7 +282,7 @@ describe Sinatra::Cookies do
         cookies.each do |key, value|
           key.should   == 'foo'
           value.should == 'baz'
-          seen.should  == false
+          seen.should == false
           seen = true
         end
       end
@@ -435,7 +442,7 @@ describe Sinatra::Cookies do
       cookie_route do
         cookies['foo'] = 'bar'
         cookies.empty?
-      end.should be_false
+      end.should be false
     end
 
     it 'becomes true if response cookies are removed' do
@@ -443,14 +450,14 @@ describe Sinatra::Cookies do
         cookies['foo'] = 'bar'
         cookies.delete :foo
         cookies.empty?
-      end.should be_true
+      end.should be true
     end
 
     it 'becomes true if request cookies are removed' do
       cookie_route('foo=bar') do
         cookies.delete :foo
         cookies.empty?
-      end.should be_true
+      end.should be_truthy
     end
 
     it 'becomes true after clear' do
@@ -458,7 +465,7 @@ describe Sinatra::Cookies do
         cookies['foo'] = 'bar'
         cookies.clear
         cookies.empty?
-      end.should be_true
+      end.should be_truthy
     end
   end
 
@@ -595,19 +602,19 @@ describe Sinatra::Cookies do
 
   describe :key? do
     it 'checks request cookies' do
-      cookies('foo=bar').key?('foo').should be_true
+      cookies('foo=bar').key?('foo').should be true
     end
 
     it 'checks response cookies' do
       jar = cookies
       jar['foo'] = 'bar'
-      jar.key?(:foo).should be_true
+      jar.key?(:foo).should be true
     end
 
     it 'does not use deleted cookies' do
       jar = cookies('foo=bar')
       jar.delete :foo
-      jar.key?('foo').should be_false
+      jar.key?('foo').should be false
     end
   end
 
@@ -622,19 +629,19 @@ describe Sinatra::Cookies do
 
   describe :member? do
     it 'checks request cookies' do
-      cookies('foo=bar').member?('foo').should be_true
+      cookies('foo=bar').member?('foo').should be true
     end
 
     it 'checks response cookies' do
       jar = cookies
       jar['foo'] = 'bar'
-      jar.member?(:foo).should be_true
+      jar.member?(:foo).should be true
     end
 
     it 'does not use deleted cookies' do
       jar = cookies('foo=bar')
       jar.delete :foo
-      jar.member?('foo').should be_false
+      jar.member?('foo').should be false
     end
   end
 
@@ -776,19 +783,19 @@ describe Sinatra::Cookies do
 
   describe :value? do
     it 'checks request cookies' do
-      cookies('foo=bar').value?('bar').should be_true
+      cookies('foo=bar').value?('bar').should be true
     end
 
     it 'checks response cookies' do
       jar = cookies
       jar[:foo] = 'bar'
-      jar.value?('bar').should be_true
+      jar.value?('bar').should be true
     end
 
     it 'does not use deleted cookies' do
       jar = cookies('foo=bar')
       jar.delete :foo
-      jar.value?('bar').should_not be_true
+      jar.value?('bar').should be false
     end
   end
 
diff --git a/spec/custom_logger_spec.rb b/spec/custom_logger_spec.rb
new file mode 100644
index 0000000..cef1f26
--- /dev/null
+++ b/spec/custom_logger_spec.rb
@@ -0,0 +1,43 @@
+require 'spec_helper'
+require 'sinatra/custom_logger'
+
+describe Sinatra::CustomLogger do
+  before do
+    rack_logger = @rack_logger = double
+    mock_app do
+      helpers Sinatra::CustomLogger
+
+      before do
+        env['rack.logger'] = rack_logger
+      end
+
+      get '/' do
+        logger.info 'Logged message'
+        'Response'
+      end
+    end
+  end
+
+  describe '#logger' do
+    it 'falls back to request.logger' do
+      expect(@rack_logger).to receive(:info).with('Logged message')
+      get '/'
+    end
+
+    context 'logger setting is set' do
+      before do
+        custom_logger = @custom_logger = double
+        @app.class_eval do
+          configure do
+            set :logger, custom_logger
+          end
+        end
+      end
+
+      it 'calls custom logger' do
+        expect(@custom_logger).to receive(:info).with('Logged message')
+        get '/'
+      end
+    end
+  end
+end
diff --git a/spec/decompile_spec.rb b/spec/decompile_spec.rb
index ffb2bdb..d3686a1 100644
--- a/spec/decompile_spec.rb
+++ b/spec/decompile_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 RSpec::Matchers.define :decompile do |path|
   match do |app|
diff --git a/spec/extension_spec.rb b/spec/extension_spec.rb
index 0188305..97db575 100644
--- a/spec/extension_spec.rb
+++ b/spec/extension_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::Extension do
   module ExampleExtension
@@ -24,7 +23,7 @@ describe Sinatra::Extension do
   before { mock_app { register ExampleExtension }}
 
   it('allows using set') { settings.foo.should == :bar }
-  it('implements configure') { settings.reload_stuff.should be_false }
+  it('implements configure') { settings.reload_stuff.should be false }
 
   it 'allows defing routes' do
     get('/').should be_ok
diff --git a/spec/json_spec.rb b/spec/json_spec.rb
index 4120aef..d436a12 100644
--- a/spec/json_spec.rb
+++ b/spec/json_spec.rb
@@ -1,8 +1,7 @@
-require 'backports'
 require 'multi_json'
 
-require_relative 'spec_helper'
-require_relative 'okjson'
+require 'spec_helper'
+require 'okjson'
 
 shared_examples_for "a json encoder" do |lib, const|
   before do
diff --git a/spec/link_header_spec.rb b/spec/link_header_spec.rb
index cf8d30b..31f6b34 100644
--- a/spec/link_header_spec.rb
+++ b/spec/link_header_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::LinkHeader do
   before do
diff --git a/spec/multi_route_spec.rb b/spec/multi_route_spec.rb
index 03536b6..e4d747e 100644
--- a/spec/multi_route_spec.rb
+++ b/spec/multi_route_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::MultiRoute do
 
diff --git a/spec/namespace_spec.rb b/spec/namespace_spec.rb
index 95379ac..f10d91b 100644
--- a/spec/namespace_spec.rb
+++ b/spec/namespace_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::Namespace do
   verbs = [:get, :head, :post, :put, :delete, :options]
@@ -44,7 +43,7 @@ describe Sinatra::Namespace do
         it 'accepts the path as a regular expression' do
           namespace('/foo') { send(verb, /\/\d\d/) { 'bar' }}
           send(verb, '/foo/12').should be_ok
-          body.should == 'bar' unless verb == :head
+          body.should eq 'bar' unless verb == :head
           send(verb, '/foo/123').should_not be_ok
         end
       end
@@ -119,14 +118,14 @@ describe Sinatra::Namespace do
           ran = false
           namespace('/foo') { before { ran = true }}
           send(verb, '/foo')
-          ran.should be_true
+          ran.should be true
         end
 
         specify 'are not triggered for a different namespace' do
           ran = false
           namespace('/foo') { before { ran = true }}
           send(verb, '/fox')
-          ran.should be_false
+          ran.should be false
         end
       end
 
@@ -135,14 +134,14 @@ describe Sinatra::Namespace do
           ran = false
           namespace('/foo') { after { ran = true }}
           send(verb, '/foo')
-          ran.should be_true
+          ran.should be true
         end
 
         specify 'are not triggered for a different namespace' do
           ran = false
           namespace('/foo') { after { ran = true }}
           send(verb, '/fox')
-          ran.should be_false
+          ran.should be false
         end
       end
 
@@ -177,13 +176,13 @@ describe Sinatra::Namespace do
               send(verb, '/*') { 'ok' }
             end
             send(verb, '/foo', {}, 'HTTP_HOST' => 'example.org', 'HTTP_ACCEPT' => 'text/plain')
-            ran.should be_false
+            ran.should be false
             send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
-            ran.should be_false
+            ran.should be false
             send(verb, '/bar', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
-            ran.should be_false
+            ran.should be false
             send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
-            ran.should be_true
+            ran.should be true
           end
 
           specify 'are accepted in the after-filter' do
@@ -193,13 +192,13 @@ describe Sinatra::Namespace do
               send(verb, '/*') { 'ok' }
             end
             send(verb, '/foo', {}, 'HTTP_HOST' => 'example.org', 'HTTP_ACCEPT' => 'text/plain')
-            ran.should be_false
+            ran.should be false
             send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
-            ran.should be_false
+            ran.should be false
             send(verb, '/bar', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
-            ran.should be_false
+            ran.should be false
             send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
-            ran.should be_true
+            ran.should be true
           end
         end
 
@@ -232,9 +231,9 @@ describe Sinatra::Namespace do
               send(verb) { 'ok' }
             end
             send(verb, '/foo', {}, 'HTTP_HOST' => 'example.org')
-            ran.should be_false
+            ran.should be false
             send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com')
-            ran.should be_true
+            ran.should be true
           end
 
           specify 'are accepted in the route definition' do
@@ -253,11 +252,11 @@ describe Sinatra::Namespace do
                 send(verb) { 'ok' }
               end
               send(verb, '/', {}, 'HTTP_HOST' => 'example.org', 'HTTP_ACCEPT' => 'text/plain')
-              ran.should be_false
+              ran.should be false
               send(verb, '/', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
-              ran.should be_false
+              ran.should be false
               send(verb, '/', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
-              ran.should be_true
+              ran.should be true
             end
 
             specify 'are accepted in the filters' do
@@ -267,13 +266,13 @@ describe Sinatra::Namespace do
                 send(verb, '/*') { 'ok' }
               end
               send(verb, '/foo', {}, 'HTTP_HOST' => 'example.org', 'HTTP_ACCEPT' => 'text/plain')
-              ran.should be_false
+              ran.should be false
               send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
-              ran.should be_false
+              ran.should be false
               send(verb, '/far', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
-              ran.should be_false
+              ran.should be false
               send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
-              ran.should be_true
+              ran.should be true
             end
           end
         end
@@ -479,24 +478,24 @@ describe Sinatra::Namespace do
           namespace('/de') do
             not_found { 'nicht gefunden' }
           end
-          send(verb, '/foo').status.should == 404
-          last_response.body.should_not    == 'nicht gefunden' unless verb == :head
-          get('/en/foo').status.should     == 404
-          last_response.body.should_not    == 'nicht gefunden' unless verb == :head
-          get('/de/foo').status.should     == 404
-          last_response.body.should        == 'nicht gefunden' unless verb == :head
+          send(verb, '/foo').status.should eq 404
+          last_response.body.should_not    eq 'nicht gefunden' unless verb == :head
+          get('/en/foo').status.should     eq 404
+          last_response.body.should_not    eq 'nicht gefunden' unless verb == :head
+          get('/de/foo').status.should     eq 404
+          last_response.body.should        eq 'nicht gefunden' unless verb == :head
         end
 
         it 'can be customized for specific error codes' do
           namespace('/de') do
             error(404) { 'nicht gefunden' }
           end
-          send(verb, '/foo').status.should == 404
-          last_response.body.should_not    == 'nicht gefunden' unless verb == :head
-          get('/en/foo').status.should     == 404
-          last_response.body.should_not    == 'nicht gefunden' unless verb == :head
-          get('/de/foo').status.should     == 404
-          last_response.body.should        == 'nicht gefunden' unless verb == :head
+          send(verb, '/foo').status.should eq 404
+          last_response.body.should_not    eq 'nicht gefunden' unless verb == :head
+          get('/en/foo').status.should     eq 404
+          last_response.body.should_not    eq 'nicht gefunden' unless verb == :head
+          get('/de/foo').status.should     eq 404
+          last_response.body.should        eq 'nicht gefunden' unless verb == :head
         end
 
         it 'falls back to the handler defined in the base app' do
@@ -508,12 +507,12 @@ describe Sinatra::Namespace do
               error(404) { 'nicht gefunden' }
             end
           end
-          send(verb, '/foo').status.should == 404
-          last_response.body.should        == 'not found...' unless verb == :head
-          get('/en/foo').status.should     == 404
-          last_response.body.should        == 'not found...' unless verb == :head
-          get('/de/foo').status.should     == 404
-          last_response.body.should        == 'nicht gefunden' unless verb == :head
+          send(verb, '/foo').status.should eq 404
+          last_response.body.should        eq 'not found...' unless verb == :head
+          get('/en/foo').status.should     eq 404
+          last_response.body.should        eq 'not found...' unless verb == :head
+          get('/de/foo').status.should     eq 404
+          last_response.body.should        eq 'nicht gefunden' unless verb == :head
         end
 
         it 'can be customized for specific Exception classes' do
@@ -543,10 +542,28 @@ describe Sinatra::Namespace do
               end
             end
           end
-          get('/en/foo').status.should     == 401
-          last_response.body.should        == 'auth failed' unless verb == :head
-          get('/de/foo').status.should     == 406
-          last_response.body.should        == 'methode nicht erlaubt' unless verb == :head
+          get('/en/foo').status.should     eq 401
+          last_response.body.should        eq 'auth failed' unless verb == :head
+          get('/de/foo').status.should     eq 406
+          last_response.body.should        eq 'methode nicht erlaubt' unless verb == :head
+        end
+
+        it "allows custom error handlers when namespace is declared as /en/:id. Issue #119" do
+          mock_app {
+            class CError < StandardError;
+            end
+
+            error { raise "should not come here" }
+
+            namespace('/en/:id') do
+              error(CError) { 201 }
+              get '/?' do
+                raise CError
+              end
+            end
+          }
+
+          get('/en/1').status.should == 201
         end
       end
 
@@ -561,8 +578,8 @@ describe Sinatra::Namespace do
               end
             end
 
-            send(verb, '/').body.should == 'hi'
-            send(verb, '/foo').body.should == 'hi'
+            send(verb, '/').body.should eq 'hi'
+            send(verb, '/foo').body.should eq 'hi'
           end
 
           specify 'can be nested' do
@@ -575,8 +592,8 @@ describe Sinatra::Namespace do
               end
             end
 
-            send(verb, '/').body.should == 'hi'
-            send(verb, '/foo').body.should == 'ho'
+            send(verb, '/').body.should eq 'hi'
+            send(verb, '/foo').body.should eq 'ho'
           end
 
           specify 'can use a custom views directory' do
@@ -589,8 +606,8 @@ describe Sinatra::Namespace do
               end
             end
 
-            send(verb, '/').body.should == "hi\n"
-            send(verb, '/foo').body.should == "ho\n"
+            send(verb, '/').body.should eq "hi\n"
+            send(verb, '/foo').body.should eq "ho\n"
           end
 
           specify 'default to the base app\'s layout' do
@@ -604,8 +621,8 @@ describe Sinatra::Namespace do
               end
             end
 
-            send(verb, '/').body.should == 'he said: hi'
-            send(verb, '/foo').body.should == 'he said: ho'
+            send(verb, '/').body.should eq 'he said: hi'
+            send(verb, '/foo').body.should eq 'he said: ho'
           end
 
           specify 'can define nested layouts' do
@@ -619,8 +636,8 @@ describe Sinatra::Namespace do
               end
             end
 
-            send(verb, '/').body.should == 'Hello World!'
-            send(verb, '/foo').body.should == 'Hi World!'
+            send(verb, '/').body.should eq 'Hello World!'
+            send(verb, '/foo').body.should eq 'Hi World!'
           end
         end
       end
@@ -634,7 +651,7 @@ describe Sinatra::Namespace do
               value = foo
             end
           end
-          value.should == 42
+          value.should eq 42
         end
 
         specify 'can be registered within a namespace' do
@@ -647,8 +664,8 @@ describe Sinatra::Namespace do
             end
             b = views
           end
-          a.should == 'CUSTOM!!!'
-          b.should_not == 'CUSTOM!!!'
+          a.should eq 'CUSTOM!!!'
+          b.should_not eq 'CUSTOM!!!'
         end
 
         specify 'trigger the route_added hook' do
@@ -664,7 +681,7 @@ describe Sinatra::Namespace do
             end
             get('/bar') { }
           end
-          route[1].should == '/foo'
+          route[1].should eq '/foo'
         end
 
         specify 'prevent app-global settings from being changed' do
@@ -673,4 +690,52 @@ describe Sinatra::Namespace do
       end
     end
   end
+
+  describe 'settings' do
+    it 'provides access to top-level settings' do
+      mock_app do
+        set :foo, 'ok'
+
+        namespace '/foo' do
+          get '/bar' do
+            settings.foo
+          end
+        end
+      end
+
+      get('/foo/bar').status.should == 200
+      last_response.body.should == 'ok'
+    end
+
+    it 'uses some repro' do
+      mock_app do
+        set :foo, 42
+
+        namespace '/foo' do
+          get '/bar' do
+            #settings.respond_to?(:foo).to_s
+            settings.foo.to_s
+          end
+        end
+      end
+
+      get('/foo/bar').status.should == 200
+      last_response.body.should == '42'
+    end
+
+    it 'allows checking setting existence with respond_to?' do
+      mock_app do
+        set :foo, 42
+
+        namespace '/foo' do
+          get '/bar' do
+            settings.respond_to?(:foo).to_s
+          end
+        end
+      end
+
+      get('/foo/bar').status.should == 200
+      last_response.body.should == 'true'
+    end
+  end
 end
diff --git a/spec/reloader_spec.rb b/spec/reloader_spec.rb
index 2ec6679..0824608 100644
--- a/spec/reloader_spec.rb
+++ b/spec/reloader_spec.rb
@@ -1,5 +1,4 @@
-require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 require 'fileutils'
 
 describe Sinatra::Reloader do
diff --git a/spec/respond_with/bar.erb b/spec/respond_with/bar.erb
index b497879..fc97158 100644
--- a/spec/respond_with/bar.erb
+++ b/spec/respond_with/bar.erb
@@ -1 +1 @@
-Girl! I wanna take you to a ... bar!
\ No newline at end of file
+guten Tag!
\ No newline at end of file
diff --git a/spec/respond_with_spec.rb b/spec/respond_with_spec.rb
index 4706b3a..18344fc 100644
--- a/spec/respond_with_spec.rb
+++ b/spec/respond_with_spec.rb
@@ -1,8 +1,7 @@
-require 'backports'
 require 'multi_json'
 
-require_relative 'spec_helper'
-require_relative 'okjson'
+require 'spec_helper'
+require 'okjson'
 
 describe Sinatra::RespondWith do
   def provides(*args)
@@ -199,7 +198,7 @@ describe Sinatra::RespondWith do
       it 'looks for templates with name.engine for specific engines' do
         respond_with :bar
         req(:html).should be_ok
-        body.should == "Girl! I wanna take you to a ... bar!"
+        body.should == "guten Tag!"
       end
 
       it 'does not use name.engine for engines producing other formats' do
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 6efe09d..7f1191e 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -2,6 +2,6 @@ ENV['RACK_ENV'] = 'test'
 require 'sinatra/contrib'
 
 RSpec.configure do |config|
-  config.expect_with :rspec#, :stdlib
+  config.expect_with :rspec
   config.include Sinatra::TestHelpers
 end
diff --git a/spec/streaming_spec.rb b/spec/streaming_spec.rb
index 80745b8..a881682 100644
--- a/spec/streaming_spec.rb
+++ b/spec/streaming_spec.rb
@@ -1,5 +1,5 @@
 require 'backports'
-require_relative 'spec_helper'
+require 'spec_helper'
 
 describe Sinatra::Streaming do
   def stream(&block)
@@ -26,7 +26,7 @@ describe Sinatra::Streaming do
     it 'runs the given block' do
       ran = false
       stream { ran = true }
-      ran.should be_true
+      ran.should be true
     end
 
     it 'returns the stream object' do
@@ -334,7 +334,7 @@ describe Sinatra::Streaming do
         fired = false
         out.callback { fired = true }
         out.close
-        fired.should be_true
+        fired.should be true
       end
     end
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/ruby-sinatra-contrib.git



More information about the Pkg-ruby-extras-commits mailing list