rack_csrf 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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