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.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.travis.yml +15 -0
- data/Changelog.md +12 -0
- data/Gemfile +2 -12
- data/LICENSE.rdoc +1 -1
- data/README.rdoc +10 -6
- data/Rakefile +10 -32
- data/examples/camping/Gemfile +2 -0
- data/examples/camping/app.rb +0 -2
- data/examples/cuba/Gemfile +1 -0
- data/examples/cuba/app.rb +2 -0
- data/examples/cuba/config-with-raise.ru +1 -2
- data/examples/cuba/config.ru +1 -2
- data/examples/innate/Gemfile +1 -0
- data/examples/innate/start-with-raise.rb +1 -3
- data/examples/innate/start.rb +1 -3
- data/examples/rack/Gemfile +2 -1
- data/examples/rack/app.rb +8 -3
- data/examples/rack/config-with-raise.ru +1 -2
- data/examples/rack/config.ru +1 -2
- data/examples/sinatra/Gemfile +2 -1
- data/examples/sinatra/config-with-raise.ru +1 -4
- data/examples/sinatra/config.ru +1 -4
- data/features/step_definitions/setup_steps.rb +11 -7
- data/lib/rack/csrf.rb +3 -8
- data/lib/rack/csrf/version.rb +5 -0
- data/rack_csrf.gemspec +41 -112
- data/spec/csrf_spec.rb +6 -6
- data/spec/spec_helper.rb +7 -0
- metadata +164 -143
- data/VERSION +0 -1
- data/lib/rack/vendor/securerandom.rb +0 -256
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Changelog.md
CHANGED
@@ -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 '
|
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
|
data/LICENSE.rdoc
CHANGED
@@ -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
|
data/README.rdoc
CHANGED
@@ -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
|
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
|
-
|
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 #{
|
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
|
-
|
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#{
|
35
|
+
args.with_defaults :start => "v#{Rack::Csrf::VERSION}",
|
58
36
|
:end => 'HEAD'
|
59
|
-
repo = Git.open
|
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
|
data/examples/camping/Gemfile
CHANGED
data/examples/camping/app.rb
CHANGED
data/examples/cuba/Gemfile
CHANGED
data/examples/cuba/app.rb
CHANGED
data/examples/cuba/config.ru
CHANGED
data/examples/innate/Gemfile
CHANGED
data/examples/innate/start.rb
CHANGED
data/examples/rack/Gemfile
CHANGED
data/examples/rack/app.rb
CHANGED
@@ -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
|
-
|
37
|
+
res.write @form_not_working.result(binding)
|
36
38
|
else
|
37
|
-
|
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
|
-
|
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
|
data/examples/rack/config.ru
CHANGED
data/examples/sinatra/Gemfile
CHANGED
@@ -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
|
data/examples/sinatra/config.ru
CHANGED
@@ -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 =
|
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
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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))
|
data/lib/rack/csrf.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
require 'rack'
|
2
|
-
|
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] ==
|
42
|
-
req.env[self.class.rackified_header] ==
|
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
|
data/rack_csrf.gemspec
CHANGED
@@ -1,121 +1,50 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
|
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 |
|
7
|
-
|
8
|
-
|
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
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
92
|
-
s.specification_version = 3
|
34
|
+
spec.required_ruby_version = '>= 1.8.7'
|
93
35
|
|
94
|
-
|
95
|
-
|
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
|
-
|
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
|