rack_csrf 2.4.0 → 2.5.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 347ff3179f58ae9f50ba7ea21ced84f4e79ce39a
4
+ data.tar.gz: ae43acbd043e920ae4aa0f19bf9607f4c8775fb2
5
+ SHA512:
6
+ metadata.gz: f57f414196810efbb0fde60593cb889e2e4c9897e714afb10c8d44e232b522fa068820f9c9fbb461dd19eefaf56553063fdd1c195363ad41a6eef686d77bb14c
7
+ data.tar.gz: ffe85c09c9da3ffec3d39d1e30f88ddeb46558505f8f2d87fb56a6a1b31eb1c2706ca4a9b59a262ac2af87665d4871ac39d521ccfd3e8d5bf84acb8ded360a78
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ .rvmrc
@@ -0,0 +1,15 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.8.7
5
+ - 1.9.2
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - 2.1.0
9
+
10
+ env:
11
+ - TEST_WITH_RACK=1.1.0
12
+ - TEST_WITH_RACK=1.2.0
13
+ - TEST_WITH_RACK=1.3.0
14
+ - TEST_WITH_RACK=1.4.0
15
+ - TEST_WITH_RACK=1.5.0
@@ -1,3 +1,15 @@
1
+ # v2.5.0 (2014-06-15)
2
+
3
+ * Fixed/improved the examples.
4
+ * Added basic Travis setup.
5
+ * Dropped support for Rack versions older than 1.1.0.
6
+ * Lazy generation of the CSRF token.
7
+ * Left Jeweler; totally embraced Bundler.
8
+ * Dropped support for Ruby 1.8.6.
9
+ * Fixed Cucumber's step for Ruby 1.8.*.
10
+
11
+
12
+
1
13
  # v2.4.0 (2012-02-28)
2
14
 
3
15
  * Updated examples' Gemfiles.
data/Gemfile CHANGED
@@ -1,12 +1,2 @@
1
- source 'http://rubygems.org'
2
-
3
- gem 'rack', '>= 0.9'
4
-
5
- group :development do
6
- gem 'bundler', '>= 1.0.0'
7
- gem 'cucumber', '>= 1.1.1'
8
- gem 'rack-test'
9
- gem 'rspec', '>= 2.0.0'
10
- gem 'rdoc', '>= 2.4.2'
11
- gem 'jeweler'
12
- end
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -2,7 +2,7 @@
2
2
 
3
3
  (The MIT License)
4
4
 
5
- Copyright (c) 2009, 2010, 2011, 2012 Emanuele Vicentini
5
+ Copyright (c) 2009, 2010, 2011, 2012, 2014 Emanuele Vicentini
6
6
 
7
7
  Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  of this software and associated documentation files (the 'Software'), to deal
@@ -1,4 +1,4 @@
1
- = Rack::Csrf
1
+ = Rack::Csrf {<img src="https://travis-ci.org/baldowl/rack_csrf.png?branch=master" alt="Build Status" />}[https://travis-ci.org/baldowl/rack_csrf] {<img src="https://badge.fury.io/rb/rack_csrf.png" alt="Gem Version" />}[http://badge.fury.io/rb/rack_csrf]
2
2
 
3
3
  This is just a small Rack middleware whose only goal is to lessen the hazards
4
4
  posed by CSRF attacks by trying to ensure that all requests of particular
@@ -20,9 +20,6 @@ immediately replies with an empty response.
20
20
 
21
21
  The anti-forging token can be passed as a request parameter or a header.
22
22
 
23
- I have not tested Rack::Csrf with Rack 0.4.0 or earlier versions, but it could
24
- possibly work.
25
-
26
23
  == Options
27
24
 
28
25
  The following options allow you to tweak Rack::Csrf.
@@ -79,6 +76,9 @@ The following options allow you to tweak Rack::Csrf.
79
76
  This option is useful if a guarded resource can be accessed by clients who
80
77
  support CSRF token (e.g. browsers) and by ones who don't (e.g. API clients).
81
78
 
79
+ Don't try to check the CSRF token: it could exist or not at this stage and
80
+ you should always let it alone.
81
+
82
82
  Default value: empty.
83
83
 
84
84
  [<tt>:field</tt>]
@@ -154,6 +154,10 @@ token.
154
154
  Returns the name of the key used to store/retrieve the token from the Rack
155
155
  session.
156
156
 
157
+ Despite this class method, you should never try to retrieve the token with
158
+ code like <tt>env['rack.session'][Rack::Csrf.key]</tt>. See the `token`
159
+ method below.
160
+
157
161
  [<tt>Rack::Csrf.field</tt> (also <tt>Rack::Csrf.csrf_field</tt>)]
158
162
  Returns the name of the field that must be present in the request.
159
163
 
@@ -208,5 +212,5 @@ forgo responsibilities for keeping your application as safe as possible.
208
212
 
209
213
  == Copyright
210
214
 
211
- Copyright (c) 2009, 2010, 2011, 2012 Emanuele Vicentini. See LICENSE.rdoc for
212
- details.
215
+ Copyright (c) 2009, 2010, 2011, 2012, 2014 Emanuele Vicentini. See
216
+ LICENSE.rdoc for details.
data/Rakefile CHANGED
@@ -1,52 +1,30 @@
1
1
  require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
2
+ require 'bundler/setup'
10
3
 
11
4
  require 'rake/clean'
12
- require 'cucumber/rake/task'
13
- require 'rspec/core/rake_task'
14
- require 'rdoc/task'
15
- require 'jeweler'
16
5
 
6
+ require 'cucumber/rake/task'
17
7
  Cucumber::Rake::Task.new :features
18
8
  task :default => :features
19
9
 
10
+ require 'rspec/core/rake_task'
20
11
  RSpec::Core::RakeTask.new :spec
21
12
  task :default => :spec
22
13
 
23
- version = File.exists?('VERSION') ? File.read('VERSION').strip : ''
14
+ require 'rack/csrf/version'
24
15
 
16
+ require 'rdoc/task'
25
17
  RDoc::Task.new :doc do |rdoc|
26
18
  rdoc.rdoc_dir = 'doc'
27
- rdoc.title = "Rack::Csrf #{version}"
19
+ rdoc.title = "Rack::Csrf #{Rack::Csrf::VERSION}"
28
20
  rdoc.main = 'README.rdoc'
29
21
  rdoc.rdoc_files.include('README.rdoc', 'LICENSE.rdoc')
30
22
  rdoc.rdoc_files.include('lib/**/*.rb')
31
23
  end
32
24
 
33
- Jeweler::Tasks.new do |gem|
34
- gem.name = 'rack_csrf'
35
- gem.summary = 'Anti-CSRF Rack middleware'
36
- gem.description = 'Anti-CSRF Rack middleware'
37
- gem.license = 'MIT'
38
- gem.authors = 'Emanuele Vicentini'
39
- gem.email = 'emanuele.vicentini@gmail.com'
40
- gem.homepage = 'https://github.com/baldowl/rack_csrf'
41
- gem.rubyforge_project = 'rackcsrf'
42
- # dependencies defined in Gemfile
43
- gem.rdoc_options << '--line-numbers' << '--inline-source' << '--title' <<
44
- "Rack::Csrf #{version}" << '--main' << 'README.rdoc'
45
- gem.test_files.clear
46
- end
47
-
48
- Jeweler::GemcutterTasks.new
25
+ require 'bundler/gem_tasks'
49
26
 
27
+ require 'git'
50
28
  desc <<-EOD
51
29
  Shows the changelog in Git between the given points.
52
30
 
@@ -54,9 +32,9 @@ start -- defaults to the current version tag
54
32
  end -- defaults to HEAD
55
33
  EOD
56
34
  task :changes, [:start, :end] do |t, args|
57
- args.with_defaults :start => "v#{Rake.application.jeweler.version}",
35
+ args.with_defaults :start => "v#{Rack::Csrf::VERSION}",
58
36
  :end => 'HEAD'
59
- repo = Git.open Rake.application.jeweler.git_base_dir
37
+ repo = Git.open Dir.pwd
60
38
  repo.log(nil).between(args.start, args.end).each do |c|
61
39
  puts c.message.split($/).first
62
40
  end
@@ -1,4 +1,6 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
+ gem 'rack_csrf', :path => File.expand_path('../../..', __FILE__)
4
+ gem 'rack', '~> 1.4.0'
3
5
  gem 'camping', '>= 2.1', '<= 2.1.467'
4
6
  gem 'markaby', '>= 0.7.1', '<= 0.7.2'
@@ -1,7 +1,5 @@
1
1
  require 'camping'
2
2
  require 'camping/session'
3
-
4
- $: << File.join(File.dirname(__FILE__), '../../lib')
5
3
  require 'rack/csrf'
6
4
 
7
5
  Camping.goes :LittleApp
@@ -1,3 +1,4 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
+ gem 'rack_csrf', :path => File.expand_path('../../..', __FILE__)
3
4
  gem 'cuba', '>= 2.1.0', '<= 2.2.1'
@@ -1,5 +1,7 @@
1
1
  Cuba.define do
2
2
  on get do
3
+ res['Content-Type'] = 'text/html'
4
+
3
5
  on '' do
4
6
  res.write render('views/form.erb')
5
7
  end
@@ -1,11 +1,10 @@
1
1
  require 'cuba'
2
- $: << File.join(File.dirname(__FILE__), '../../lib')
3
2
  require 'rack/csrf'
4
3
 
5
4
  Cuba.use Rack::ShowExceptions
6
5
  Cuba.use Rack::Session::Cookie
7
6
  Cuba.use Rack::Csrf, :raise => true
8
7
 
9
- require 'app'
8
+ require './app'
10
9
 
11
10
  run Cuba
@@ -1,10 +1,9 @@
1
1
  require 'cuba'
2
- $: << File.join(File.dirname(__FILE__), '../../lib')
3
2
  require 'rack/csrf'
4
3
 
5
4
  Cuba.use Rack::Session::Cookie
6
5
  Cuba.use Rack::Csrf
7
6
 
8
- require 'app'
7
+ require './app'
9
8
 
10
9
  run Cuba
@@ -1,3 +1,4 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
+ gem 'rack_csrf', :path => File.expand_path('../../..', __FILE__)
3
4
  gem 'innate', '>= 2009.07', '<= 2011.12'
@@ -1,10 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'innate'
3
-
4
- $: << File.join(File.dirname(__FILE__), '../../lib')
5
3
  require 'rack/csrf'
6
4
 
7
- require 'app'
5
+ require './app'
8
6
 
9
7
  Innate.start do |m|
10
8
  m.use Rack::ShowExceptions
@@ -1,10 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'innate'
3
-
4
- $: << File.join(File.dirname(__FILE__), '../../lib')
5
3
  require 'rack/csrf'
6
4
 
7
- require 'app'
5
+ require './app'
8
6
 
9
7
  Innate.start do |m|
10
8
  m.use Rack::Session::Cookie
@@ -1,3 +1,4 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'rack', '>= 1.0.0', '<= 1.4.1'
3
+ gem 'rack_csrf', :path => File.expand_path('../../..', __FILE__)
4
+ gem 'rack', '<= 1.5.2'
@@ -30,16 +30,21 @@ class LittleApp
30
30
 
31
31
  def self.call env
32
32
  req = Rack::Request.new env
33
+ res = Rack::Response.new
34
+
33
35
  if req.get?
34
36
  if req.path_info == '/notworking'
35
- Rack::Response.new(@form_not_working.result(binding)).finish
37
+ res.write @form_not_working.result(binding)
36
38
  else
37
- Rack::Response.new(@form.result(binding)).finish
39
+ res.write @form.result(binding)
38
40
  end
39
41
  elsif req.post?
40
42
  utterance = req['utterance']
41
43
  csrf = req[Rack::Csrf.field]
42
- Rack::Response.new(@response.result(binding)).finish
44
+ res.write @response.result(binding)
43
45
  end
46
+
47
+ res['Content-Type'] = 'text/html'
48
+ res.finish
44
49
  end
45
50
  end
@@ -1,8 +1,7 @@
1
- $: << File.join(File.dirname(__FILE__), '../../lib')
2
1
  require 'rack/csrf'
3
2
 
4
3
  require 'erb'
5
- require 'app'
4
+ require './app'
6
5
 
7
6
  use Rack::ShowExceptions
8
7
  use Rack::Session::Cookie
@@ -1,8 +1,7 @@
1
- $: << File.join(File.dirname(__FILE__), '../../lib')
2
1
  require 'rack/csrf'
3
2
 
4
3
  require 'erb'
5
- require 'app'
4
+ require './app'
6
5
 
7
6
  use Rack::Session::Cookie
8
7
  use Rack::Csrf
@@ -1,3 +1,4 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'sinatra', '>= 0.9.4', '<= 1.3.2'
3
+ gem 'rack_csrf', :path => File.expand_path('../../..', __FILE__)
4
+ gem 'sinatra', '>= 0.9.4', '<= 1.4.4'
@@ -1,14 +1,11 @@
1
1
  require 'sinatra'
2
- $: << File.join(File.dirname(__FILE__), '../../lib')
3
2
  require 'rack/csrf'
4
3
 
5
4
  require 'erb'
6
- require 'app'
5
+ require './app'
7
6
 
8
7
  use Rack::ShowExceptions
9
8
  use Rack::Session::Cookie
10
9
  use Rack::Csrf, :raise => true
11
10
 
12
- set :app_file, 'app.rb'
13
-
14
11
  run Sinatra::Application
@@ -1,13 +1,10 @@
1
1
  require 'sinatra'
2
- $: << File.join(File.dirname(__FILE__), '../../lib')
3
2
  require 'rack/csrf'
4
3
 
5
4
  require 'erb'
6
- require 'app'
5
+ require './app'
7
6
 
8
7
  use Rack::Session::Cookie
9
8
  use Rack::Csrf
10
9
 
11
- set :app_file, 'app.rb'
12
-
13
10
  run Sinatra::Application
@@ -80,7 +80,8 @@ When /^I insert the anti\-CSRF middleware with the :skip option$/ do |table|
80
80
  end
81
81
 
82
82
  When /^I insert the anti\-CSRF middleware with the :skip_if option$/ do |table|
83
- skippable = table.hashes.collect {|t| t.values}
83
+ skippable = {}
84
+ table.hashes.each {|row| skippable[row['name']] = row['value']}
84
85
  @rack_builder.use Rack:: Csrf, :skip_if => Proc.new { |request|
85
86
  skippable.any? { |name, value| request.env[name] == value }
86
87
  }
@@ -89,12 +90,15 @@ When /^I insert the anti\-CSRF middleware with the :skip_if option$/ do |table|
89
90
  end
90
91
 
91
92
  When /^I insert the anti\-CSRF middleware with the :skip and :skip_if options$/ do |table|
92
- data = table.hashes.collect {|t| t.values}[0]
93
- headers = data[0..1]
94
- skippable = data[2]
95
-
96
- @rack_builder.use Rack:: Csrf, :skip => [skippable], :skip_if => Proc.new { |request|
97
- skippable.any? { |name, value| request.env[name] == value }
93
+ skip_option_arguments = []
94
+ skip_if_option_arguments = {}
95
+ table.hashes.each do |row|
96
+ skip_option_arguments << row['path']
97
+ skip_if_option_arguments[row['name']] = row['value']
98
+ end
99
+
100
+ @rack_builder.use Rack:: Csrf, :skip => skip_option_arguments, :skip_if => Proc.new { |request|
101
+ skip_if_option_arguments.any? { |name, value| request.env[name] == value }
98
102
  }
99
103
  @app = toy_app
100
104
  @browser = Rack::Test::Session.new(Rack::MockSession.new(@app))
@@ -1,9 +1,5 @@
1
1
  require 'rack'
2
- begin
3
- require 'securerandom'
4
- rescue LoadError
5
- require File.dirname(__FILE__) + '/vendor/securerandom'
6
- end
2
+ require 'securerandom'
7
3
 
8
4
  module Rack
9
5
  class Csrf
@@ -34,12 +30,11 @@ module Rack
34
30
  unless env['rack.session']
35
31
  raise SessionUnavailable.new('Rack::Csrf depends on session middleware')
36
32
  end
37
- self.class.token(env)
38
33
  req = Rack::Request.new(env)
39
34
  untouchable = skip_checking(req) ||
40
35
  !@http_methods.include?(req.request_method) ||
41
- req.params[self.class.field] == env['rack.session'][self.class.key] ||
42
- req.env[self.class.rackified_header] == env['rack.session'][self.class.key]
36
+ req.params[self.class.field] == self.class.token(env) ||
37
+ req.env[self.class.rackified_header] == self.class.token(env)
43
38
  if untouchable
44
39
  @app.call(env)
45
40
  else
@@ -0,0 +1,5 @@
1
+ module Rack
2
+ class Csrf
3
+ VERSION = '2.5.0'
4
+ end
5
+ end
@@ -1,121 +1,50 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rack/csrf/version'
5
5
 
6
- Gem::Specification.new do |s|
7
- s.name = "rack_csrf"
8
- s.version = "2.4.0"
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'rack_csrf'
8
+ spec.version = Rack::Csrf::VERSION
9
+ spec.authors = ['Emanuele Vicentini']
10
+ spec.email = ['emanuele.vicentini@gmail.com']
11
+ spec.description = 'Anti-CSRF Rack middleware'
12
+ spec.summary = 'Anti-CSRF Rack middleware'
13
+ spec.homepage = 'https://github.com/baldowl/rack_csrf'
14
+ spec.license = 'MIT'
9
15
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Emanuele Vicentini"]
12
- s.date = "2012-02-28"
13
- s.description = "Anti-CSRF Rack middleware"
14
- s.email = "emanuele.vicentini@gmail.com"
15
- s.extra_rdoc_files = [
16
- "LICENSE.rdoc",
17
- "README.rdoc"
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename f}
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.rdoc_options = [
22
+ '--line-numbers',
23
+ '--inline-source',
24
+ '--title',
25
+ "Rack::Csrf #{Rack::Csrf::VERSION}",
26
+ '--main',
27
+ 'README.rdoc'
18
28
  ]
19
- s.files = [
20
- ".rspec",
21
- "Changelog.md",
22
- "Gemfile",
23
- "LICENSE.rdoc",
24
- "README.rdoc",
25
- "Rakefile",
26
- "VERSION",
27
- "cucumber.yml",
28
- "examples/camping/Gemfile",
29
- "examples/camping/README.rdoc",
30
- "examples/camping/app.rb",
31
- "examples/camping/config.ru",
32
- "examples/cuba/Gemfile",
33
- "examples/cuba/README.rdoc",
34
- "examples/cuba/app.rb",
35
- "examples/cuba/config-with-raise.ru",
36
- "examples/cuba/config.ru",
37
- "examples/cuba/views/form.erb",
38
- "examples/cuba/views/form_not_working.erb",
39
- "examples/cuba/views/response.erb",
40
- "examples/innate/Gemfile",
41
- "examples/innate/README.rdoc",
42
- "examples/innate/app.rb",
43
- "examples/innate/start-with-raise.rb",
44
- "examples/innate/start.rb",
45
- "examples/innate/view/index.erb",
46
- "examples/innate/view/notworking.erb",
47
- "examples/innate/view/response.erb",
48
- "examples/rack/Gemfile",
49
- "examples/rack/README.rdoc",
50
- "examples/rack/app.rb",
51
- "examples/rack/config-with-raise.ru",
52
- "examples/rack/config.ru",
53
- "examples/sinatra/Gemfile",
54
- "examples/sinatra/README.rdoc",
55
- "examples/sinatra/app.rb",
56
- "examples/sinatra/config-with-raise.ru",
57
- "examples/sinatra/config.ru",
58
- "examples/sinatra/views/form.erb",
59
- "examples/sinatra/views/form_not_working.erb",
60
- "examples/sinatra/views/response.erb",
61
- "features/check_only_some_specific_requests.feature",
62
- "features/custom_http_methods.feature",
63
- "features/empty_responses.feature",
64
- "features/inspecting_also_get_requests.feature",
65
- "features/raising_exception.feature",
66
- "features/setup.feature",
67
- "features/skip_if_block_passes.feature",
68
- "features/skip_some_routes.feature",
69
- "features/step_definitions/request_steps.rb",
70
- "features/step_definitions/response_steps.rb",
71
- "features/step_definitions/setup_steps.rb",
72
- "features/support/env.rb",
73
- "features/support/fake_session.rb",
74
- "features/variation_on_field_name.feature",
75
- "features/variation_on_header_name.feature",
76
- "features/variation_on_key_name.feature",
77
- "lib/rack/csrf.rb",
78
- "lib/rack/vendor/securerandom.rb",
79
- "rack_csrf.gemspec",
80
- "spec/csrf_spec.rb",
81
- "spec/spec_helper.rb"
29
+ spec.extra_rdoc_files = [
30
+ 'LICENSE.rdoc',
31
+ 'README.rdoc'
82
32
  ]
83
- s.homepage = "https://github.com/baldowl/rack_csrf"
84
- s.licenses = ["MIT"]
85
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rack::Csrf 2.4.0", "--main", "README.rdoc"]
86
- s.require_paths = ["lib"]
87
- s.rubyforge_project = "rackcsrf"
88
- s.rubygems_version = "1.8.17"
89
- s.summary = "Anti-CSRF Rack middleware"
90
33
 
91
- if s.respond_to? :specification_version then
92
- s.specification_version = 3
34
+ spec.required_ruby_version = '>= 1.8.7'
93
35
 
94
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
95
- s.add_runtime_dependency(%q<rack>, [">= 0.9"])
96
- s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
97
- s.add_development_dependency(%q<cucumber>, [">= 1.1.1"])
98
- s.add_development_dependency(%q<rack-test>, [">= 0"])
99
- s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
100
- s.add_development_dependency(%q<rdoc>, [">= 2.4.2"])
101
- s.add_development_dependency(%q<jeweler>, [">= 0"])
102
- else
103
- s.add_dependency(%q<rack>, [">= 0.9"])
104
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
105
- s.add_dependency(%q<cucumber>, [">= 1.1.1"])
106
- s.add_dependency(%q<rack-test>, [">= 0"])
107
- s.add_dependency(%q<rspec>, [">= 2.0.0"])
108
- s.add_dependency(%q<rdoc>, [">= 2.4.2"])
109
- s.add_dependency(%q<jeweler>, [">= 0"])
110
- end
36
+ if ENV['TEST_WITH_RACK']
37
+ spec.add_runtime_dependency 'rack', "~> #{ENV['TEST_WITH_RACK']}"
111
38
  else
112
- s.add_dependency(%q<rack>, [">= 0.9"])
113
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
114
- s.add_dependency(%q<cucumber>, [">= 1.1.1"])
115
- s.add_dependency(%q<rack-test>, [">= 0"])
116
- s.add_dependency(%q<rspec>, [">= 2.0.0"])
117
- s.add_dependency(%q<rdoc>, [">= 2.4.2"])
118
- s.add_dependency(%q<jeweler>, [">= 0"])
39
+ spec.add_runtime_dependency 'rack', '>= 1.1.0'
119
40
  end
120
- end
121
41
 
42
+ spec.add_development_dependency 'bundler', '>= 1.0.0'
43
+ spec.add_development_dependency 'rake'
44
+ spec.add_development_dependency 'cucumber', '>= 1.1.1'
45
+ spec.add_development_dependency 'rack-test', '>= 0'
46
+ spec.add_development_dependency 'rspec', '~> 3.0'
47
+ spec.add_development_dependency 'rspec-collection_matchers'
48
+ spec.add_development_dependency 'rdoc', '>= 2.4.2'
49
+ spec.add_development_dependency 'git', '>= 1.2.5'
50
+ end