padrino-cookies 0.1.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.
- data/.gitignore +6 -0
- data/.rspec +2 -0
- data/.yardopts +9 -0
- data/Gemfile +2 -0
- data/LICENSE +19 -0
- data/README.md +38 -0
- data/Rakefile +30 -0
- data/lib/padrino-cookies.rb +14 -0
- data/lib/padrino-cookies/helpers.rb +23 -0
- data/lib/padrino-cookies/jar.rb +236 -0
- data/lib/padrino-cookies/version.rb +6 -0
- data/padrino-cookies.gemspec +24 -0
- data/spec/cookies_spec.rb +178 -0
- data/spec/spec.rb +28 -0
- metadata +106 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.yardopts
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2012 Benjamin Bloch
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
Overview
|
2
|
+
--------
|
3
|
+
|
4
|
+
Padrino Cookies is a plugin for the [Padrino](https://github.com/padrino/padrino-framework) web framework which adds support for [Rails](https://github.com/rails/rails) like cookie manipulation.
|
5
|
+
|
6
|
+
Setup & Installation
|
7
|
+
--------------------
|
8
|
+
|
9
|
+
Include it in your project's `Gemfile`:
|
10
|
+
|
11
|
+
``` ruby
|
12
|
+
gem 'padrino-cookies'
|
13
|
+
```
|
14
|
+
|
15
|
+
Modify your `app/app.rb` file to register the plugin:
|
16
|
+
|
17
|
+
``` ruby
|
18
|
+
class ExampleApplication < Padrino::Application
|
19
|
+
register Padrino::Cookies
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
Dependencies
|
24
|
+
------------
|
25
|
+
|
26
|
+
* [Padrino-Core](https://github.com/padrino/padrino-framework)
|
27
|
+
* [Ruby](http://www.ruby-lang.org/en) >= 1.9.2
|
28
|
+
|
29
|
+
TODO
|
30
|
+
-----
|
31
|
+
|
32
|
+
* Additional documentation
|
33
|
+
* Signed cookies
|
34
|
+
|
35
|
+
Copyright
|
36
|
+
---------
|
37
|
+
|
38
|
+
Copyright © 2012 Benjamin Bloch (Cirex). See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require 'padrino-cookies/version'
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
require 'yard'
|
6
|
+
require 'rspec'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
|
9
|
+
RSpec::Core::RakeTask.new do |task|
|
10
|
+
task.pattern = 'spec/**/*_spec.rb'
|
11
|
+
end
|
12
|
+
|
13
|
+
YARD::Rake::YardocTask.new
|
14
|
+
|
15
|
+
task :build do
|
16
|
+
`gem build padrino-cookies.gemspec`
|
17
|
+
end
|
18
|
+
|
19
|
+
task :install => :build do
|
20
|
+
`gem install padrino-cookies-#{Padrino::Cookies::VERSION}.gem`
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'Releases the current version into the wild'
|
24
|
+
task :release => :build do
|
25
|
+
`git tag -a v#{Padrino::Cookies::VERSION} -m "Version #{Padrino::Cookies::VERSION}"`
|
26
|
+
`gem push padrino-cookies-#{Padrino::Cookies::VERSION}.gem`
|
27
|
+
`git push --tags`
|
28
|
+
end
|
29
|
+
|
30
|
+
task :default => :spec
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'padrino-core'
|
3
|
+
FileSet.glob_require('padrino-cookies/**/*.rb', __FILE__)
|
4
|
+
|
5
|
+
module Padrino
|
6
|
+
module Cookies
|
7
|
+
class << self
|
8
|
+
# @private
|
9
|
+
def registered(app)
|
10
|
+
app.helpers Helpers
|
11
|
+
end
|
12
|
+
end # self
|
13
|
+
end # Cookies
|
14
|
+
end # Padrino
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Padrino
|
3
|
+
module Cookies
|
4
|
+
module Helpers
|
5
|
+
###
|
6
|
+
# Returns the cookie storage object
|
7
|
+
#
|
8
|
+
# @return [Jar]
|
9
|
+
# ...Nom ....Nom ....Nom
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# cookie[:remembrance] = '71ab53190d2f863b5f3b12381d2d5986512f8e15b34d439e6b66e3daf41b5e35'
|
13
|
+
# cookies.delete :remembrance
|
14
|
+
#
|
15
|
+
# since 0.1.0
|
16
|
+
# @api public
|
17
|
+
def cookies
|
18
|
+
@cookie_jar ||= Jar.new(self)
|
19
|
+
end
|
20
|
+
alias_method :cookie, :cookies
|
21
|
+
end # Helpers
|
22
|
+
end # Cookies
|
23
|
+
end # Padrino
|
@@ -0,0 +1,236 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'active_support/core_ext/integer/time'
|
3
|
+
require 'active_support/core_ext/numeric/time'
|
4
|
+
require 'active_support/core_ext/numeric/bytes'
|
5
|
+
require 'active_support/core_ext/date/calculations'
|
6
|
+
|
7
|
+
module Padrino
|
8
|
+
module Cookies
|
9
|
+
class Jar
|
10
|
+
include Enumerable
|
11
|
+
|
12
|
+
# @private
|
13
|
+
def initialize(app)
|
14
|
+
@response = app.response
|
15
|
+
@request = app.request
|
16
|
+
@cookies = app.request.cookies
|
17
|
+
|
18
|
+
@options = {
|
19
|
+
path: '/',
|
20
|
+
httponly: true,
|
21
|
+
secure: @request.secure?
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
###
|
26
|
+
# Returns the value of the specified cookie
|
27
|
+
#
|
28
|
+
# @return [String]
|
29
|
+
# Value of the cookie
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# cookies[:remembrance]
|
33
|
+
# # => '71ab53190d2f863b5f3b12381d2d5986512f8e15b34d439e6b66e3daf41b5e35'
|
34
|
+
#
|
35
|
+
# @since 0.1.0
|
36
|
+
# @api public
|
37
|
+
def [](name)
|
38
|
+
@cookies[name.to_s]
|
39
|
+
end
|
40
|
+
|
41
|
+
###
|
42
|
+
# Sets the specified cookie
|
43
|
+
#
|
44
|
+
# @overload []=(name, value)
|
45
|
+
# @param [Symbol] name
|
46
|
+
# The name of the cookie being set
|
47
|
+
# @param [String] value
|
48
|
+
# The value of the cookie being set
|
49
|
+
#
|
50
|
+
# @overload []=(name, options)
|
51
|
+
# @param [Symbol] name
|
52
|
+
# The name of the cookie being set
|
53
|
+
# @param [Hash] options
|
54
|
+
# The options to set along with this cookie
|
55
|
+
#
|
56
|
+
# @option options [String] :value
|
57
|
+
# The value of the cookie being set
|
58
|
+
# @option options [Time] :expires
|
59
|
+
# The time when this cookie expires
|
60
|
+
# @option options [Boolean] :httponly (true)
|
61
|
+
# Should the cookie be accessible to the HTTP protocol only
|
62
|
+
# @option options [Boolean] :secure
|
63
|
+
# Should the cookie only be sent over secure connections such as HTTPS
|
64
|
+
# @option options [String] :path ('/')
|
65
|
+
# The scope in which this cookie is accessible
|
66
|
+
# @option options [String] :domain
|
67
|
+
# The scope in which this cookie is accessible
|
68
|
+
#
|
69
|
+
# @example
|
70
|
+
# cookies[:remembrance] = '71ab53190d2f863b5f3b12381d2d5986512f8e15b34d439e6b66e3daf41b5e35'
|
71
|
+
#
|
72
|
+
# @since 0.1.0
|
73
|
+
# @api public
|
74
|
+
def []=(name, options)
|
75
|
+
unless options.is_a?(Hash)
|
76
|
+
options = { value: options }
|
77
|
+
end
|
78
|
+
|
79
|
+
@response.set_cookie(name, @options.merge(options))
|
80
|
+
@cookies[name.to_s] = options[:value]
|
81
|
+
end
|
82
|
+
|
83
|
+
###
|
84
|
+
# Returns an array of cookies that have been set
|
85
|
+
#
|
86
|
+
# @return [Array<String>]
|
87
|
+
# Cookies set
|
88
|
+
#
|
89
|
+
# @example
|
90
|
+
# cookies.keys
|
91
|
+
# # => ['remembrance']
|
92
|
+
#
|
93
|
+
# @since 0.1.0
|
94
|
+
# @api public
|
95
|
+
def keys
|
96
|
+
@cookies.keys
|
97
|
+
end
|
98
|
+
|
99
|
+
###
|
100
|
+
# Returns whether or not the specified cookie is set
|
101
|
+
#
|
102
|
+
# @return [Boolean]
|
103
|
+
# *true* if it is, *false* otherwise
|
104
|
+
#
|
105
|
+
# @example
|
106
|
+
# cookie.key?(:remembrance)
|
107
|
+
# # => true
|
108
|
+
#
|
109
|
+
# @since 0.1.0
|
110
|
+
# @api public
|
111
|
+
def key?(name)
|
112
|
+
@cookies.key?(name.to_s)
|
113
|
+
end
|
114
|
+
alias_method :has_key?, :key?
|
115
|
+
alias_method :include?, :key?
|
116
|
+
|
117
|
+
###
|
118
|
+
# Deletes the specified cookie
|
119
|
+
#
|
120
|
+
# @return [String]
|
121
|
+
# Value of the deleted cookie
|
122
|
+
#
|
123
|
+
# @example
|
124
|
+
# cookies.delete :remembrance
|
125
|
+
#
|
126
|
+
# @since 0.1.0
|
127
|
+
# @api public
|
128
|
+
def delete(name)
|
129
|
+
@response.delete_cookie(name)
|
130
|
+
@cookies.delete(name.to_s)
|
131
|
+
end
|
132
|
+
|
133
|
+
###
|
134
|
+
# Deletes all cookies that are currently set
|
135
|
+
#
|
136
|
+
# @example
|
137
|
+
# cookies.clear
|
138
|
+
#
|
139
|
+
# @since 0.1.0
|
140
|
+
# @api public
|
141
|
+
def clear
|
142
|
+
@cookies.each_key { |name| delete(name) }
|
143
|
+
end
|
144
|
+
|
145
|
+
###
|
146
|
+
# Returns whether or not any cookies have been set
|
147
|
+
#
|
148
|
+
# @return [Boolean]
|
149
|
+
# *true* if cookies are set, *false* otherwise
|
150
|
+
#
|
151
|
+
# @example
|
152
|
+
# cookies.empty?
|
153
|
+
# # => true
|
154
|
+
#
|
155
|
+
# @since 0.1.0
|
156
|
+
# @api public
|
157
|
+
def empty?
|
158
|
+
@cookies.empty?
|
159
|
+
end
|
160
|
+
|
161
|
+
###
|
162
|
+
# Returns the total amount of cookies that have been set
|
163
|
+
#
|
164
|
+
# @return [Integer]
|
165
|
+
# Total cookies set
|
166
|
+
#
|
167
|
+
# @example
|
168
|
+
# cookies.length
|
169
|
+
# # => 2
|
170
|
+
#
|
171
|
+
# @since 0.1.0
|
172
|
+
# @api public
|
173
|
+
def length
|
174
|
+
@cookies.length
|
175
|
+
end
|
176
|
+
alias_method :size, :length
|
177
|
+
|
178
|
+
###
|
179
|
+
# Iterates through set cookies
|
180
|
+
#
|
181
|
+
# @example
|
182
|
+
# cookies.each do |key, value|
|
183
|
+
# # ...
|
184
|
+
# end
|
185
|
+
#
|
186
|
+
# @since 0.1.0
|
187
|
+
# @api public
|
188
|
+
def each(&block)
|
189
|
+
@cookies.each(&block)
|
190
|
+
end
|
191
|
+
|
192
|
+
# @since 0.1.0
|
193
|
+
# @api public
|
194
|
+
def to_hash
|
195
|
+
@cookies.dup
|
196
|
+
end
|
197
|
+
|
198
|
+
# @since 0.1.0
|
199
|
+
# @api public
|
200
|
+
def to_s
|
201
|
+
@cookies.to_s
|
202
|
+
end
|
203
|
+
|
204
|
+
###
|
205
|
+
# Sets a permanent cookie
|
206
|
+
#
|
207
|
+
# @example
|
208
|
+
# cookies.permanent[:remembrance] = '71ab53190d2f863b5f3b12381d2d5986512f8e15b34d439e6b66e3daf41b5e35'
|
209
|
+
#
|
210
|
+
# @since 0.1.0
|
211
|
+
# @api public
|
212
|
+
def permanent
|
213
|
+
@permanent ||= PermanentJar.new(self)
|
214
|
+
end
|
215
|
+
end # Jar
|
216
|
+
|
217
|
+
class PermanentJar # @private
|
218
|
+
def initialize(parent_jar)
|
219
|
+
@parent_jar = parent_jar
|
220
|
+
end
|
221
|
+
|
222
|
+
def []=(key, options)
|
223
|
+
unless options.is_a?(Hash)
|
224
|
+
options = { value: options }
|
225
|
+
end
|
226
|
+
|
227
|
+
options[:expires] = 1.year.from_now
|
228
|
+
@parent_jar[key] = options
|
229
|
+
end
|
230
|
+
|
231
|
+
def method_missing(method, *args, &block)
|
232
|
+
@parent_jar.send(method, *args, &block)
|
233
|
+
end
|
234
|
+
end # PermanentJar
|
235
|
+
end # Cookies
|
236
|
+
end # Padrino
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'padrino-cookies/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'padrino-cookies'
|
7
|
+
s.version = Padrino::Cookies::VERSION
|
8
|
+
s.authors = ['Benjamin Bloch']
|
9
|
+
s.email = ['cirex@gamesol.org']
|
10
|
+
s.homepage = 'https://github.com/Cirex/padrino-cookies'
|
11
|
+
s.description = 'A plugin for the Padrino web framework which adds support for Rails like cookie manipulation'
|
12
|
+
s.summary = s.description
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ['lib']
|
18
|
+
|
19
|
+
s.add_dependency 'padrino-core'
|
20
|
+
|
21
|
+
s.add_development_dependency 'rspec', '>= 2.0.0'
|
22
|
+
s.add_development_dependency 'rspec-html-matchers'
|
23
|
+
s.add_development_dependency 'rack-test'
|
24
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
require_relative 'spec'
|
2
|
+
|
3
|
+
describe Padrino::Cookies do
|
4
|
+
let :cookies do
|
5
|
+
route('foo=bar', 'bar=foo') { cookies }
|
6
|
+
end
|
7
|
+
|
8
|
+
context :[] do
|
9
|
+
it 'can retrieve existing cookies' do
|
10
|
+
cookies['foo'].should == 'bar'
|
11
|
+
cookies['bar'].should == 'foo'
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should allow symbols to be used as keys' do
|
15
|
+
cookies[:foo].should == 'bar'
|
16
|
+
cookies['foo'].should == 'bar'
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should return nil when the cookie is not found' do
|
20
|
+
cookies[:nom_nom].should be_nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context :[]= do
|
25
|
+
it 'should add the cookie to the jar' do
|
26
|
+
cookies['test'] = 'test'
|
27
|
+
cookies['test'].should == 'test'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should allow symbols to be used as keys' do
|
31
|
+
cookies[:test] = 'test'
|
32
|
+
cookies[:test].should == 'test'
|
33
|
+
cookies['test'].should == 'test'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should set the response headers when setting a cookie' do
|
37
|
+
result = route do
|
38
|
+
cookies['foo'] = 'bar'
|
39
|
+
response['Set-Cookie']
|
40
|
+
end
|
41
|
+
result.should == 'foo=bar; path=/; HttpOnly'
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should set the path to / by default' do
|
45
|
+
result = route do
|
46
|
+
cookies['foo'] = 'bar'
|
47
|
+
response['Set-Cookie']
|
48
|
+
end
|
49
|
+
|
50
|
+
result.should include('path=/')
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should set HttpOnly by default' do
|
54
|
+
result = route do
|
55
|
+
cookies['foo'] = 'bar'
|
56
|
+
response['Set-Cookie']
|
57
|
+
end
|
58
|
+
|
59
|
+
result.should include('HttpOnly')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context :delete do
|
64
|
+
it 'should remove the cookie from the jar' do
|
65
|
+
cookies['foo'].should == 'bar'
|
66
|
+
cookies.delete 'foo'
|
67
|
+
cookies['foo'].should be_nil
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should allow symbols to be used as keys' do
|
71
|
+
cookies.delete :foo
|
72
|
+
cookies['foo'].should be_nil
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should set the response headers when deleting a cookie' do
|
76
|
+
result = route('foo=bar') do
|
77
|
+
cookies.delete 'foo'
|
78
|
+
response['Set-Cookie']
|
79
|
+
end
|
80
|
+
|
81
|
+
result.should == 'foo=; expires=Thu, 01-Jan-1970 00:00:00 GMT'
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should return the cookie value when deleting a cookie' do
|
85
|
+
cookies.delete('foo').should == 'bar'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe :clear do
|
90
|
+
it 'can delete all cookies that are set' do
|
91
|
+
cookies['foo'].should == 'bar'
|
92
|
+
cookies['bar'].should == 'foo'
|
93
|
+
cookies.clear
|
94
|
+
cookies['foo'].should be_nil
|
95
|
+
cookies['bar'].should be_nil
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context :length do
|
100
|
+
it 'can tell you how many cookies are set' do
|
101
|
+
cookies.length.should == 2
|
102
|
+
cookies['baz'] = 'foo'
|
103
|
+
cookies.length.should == 3
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should return 0 when no cookies are set' do
|
107
|
+
cookies.length.should == 2
|
108
|
+
cookies.clear
|
109
|
+
cookies.length.should == 0
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe :keys do
|
114
|
+
it 'can give you a list of cookies that are set' do
|
115
|
+
cookies.keys.should == ['bar', 'foo']
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context :key? do
|
120
|
+
it 'should return true when a cookie is set' do
|
121
|
+
cookies.key?('foo').should be_true
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should return false when a cookie is not set' do
|
125
|
+
cookies.key?('nom_nom').should be_false
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should allow symbols to be used as keys' do
|
129
|
+
cookies.key?(:foo).should be_true
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
context :empty? do
|
134
|
+
it 'should return true when no cookies are set' do
|
135
|
+
cookies.clear
|
136
|
+
cookies.empty?.should be_true
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'should return false when cookies are set' do
|
140
|
+
cookies.empty?.should be_false
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context :each do
|
145
|
+
it 'can iterate through cookies' do
|
146
|
+
result = []
|
147
|
+
cookies.each do |key, value|
|
148
|
+
result << [key, value]
|
149
|
+
end
|
150
|
+
result[0].should == ['bar', 'foo']
|
151
|
+
result[1].should == ['foo', 'bar']
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'should allow enumeration' do
|
155
|
+
result = cookies.collect do |key, value|
|
156
|
+
[key, value]
|
157
|
+
end
|
158
|
+
result[0].should == ['bar', 'foo']
|
159
|
+
result[1].should == ['foo', 'bar']
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
context :permanent do
|
164
|
+
it 'should add cookies to the parent jar' do
|
165
|
+
cookies.permanent['baz'] = 'foo'
|
166
|
+
cookies['baz'].should == 'foo'
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'should set a cookie that expires in the distant future' do
|
170
|
+
result = route do
|
171
|
+
cookies.permanent['baz'] = 'foo'
|
172
|
+
response['Set-Cookie']
|
173
|
+
end
|
174
|
+
|
175
|
+
result.should =~ /#{1.year.from_now.year}/
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
data/spec/spec.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
PADRINO_ENV = 'test'
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require 'rack/test'
|
5
|
+
require 'padrino-cookies'
|
6
|
+
|
7
|
+
module TestHelpers
|
8
|
+
def app
|
9
|
+
@app ||= Sinatra.new(Padrino::Application) do
|
10
|
+
register Padrino::Cookies
|
11
|
+
disable :logging
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def route(*cookies, &block)
|
16
|
+
result = nil
|
17
|
+
set_cookie(cookies)
|
18
|
+
app.get('cookies') { result = instance_eval(&block) }
|
19
|
+
get 'cookies'
|
20
|
+
result
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
RSpec.configure do |configuration|
|
25
|
+
configuration.include TestHelpers
|
26
|
+
configuration.include Rack::Test::Methods
|
27
|
+
end
|
28
|
+
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: padrino-cookies
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Benjamin Bloch
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: padrino-core
|
16
|
+
requirement: &15464784 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *15464784
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &15464232 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.0.0
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *15464232
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec-html-matchers
|
38
|
+
requirement: &15463920 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *15463920
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rack-test
|
49
|
+
requirement: &15463500 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *15463500
|
58
|
+
description: A plugin for the Padrino web framework which adds support for Rails like
|
59
|
+
cookie manipulation
|
60
|
+
email:
|
61
|
+
- cirex@gamesol.org
|
62
|
+
executables: []
|
63
|
+
extensions: []
|
64
|
+
extra_rdoc_files: []
|
65
|
+
files:
|
66
|
+
- .gitignore
|
67
|
+
- .rspec
|
68
|
+
- .yardopts
|
69
|
+
- Gemfile
|
70
|
+
- LICENSE
|
71
|
+
- README.md
|
72
|
+
- Rakefile
|
73
|
+
- lib/padrino-cookies.rb
|
74
|
+
- lib/padrino-cookies/helpers.rb
|
75
|
+
- lib/padrino-cookies/jar.rb
|
76
|
+
- lib/padrino-cookies/version.rb
|
77
|
+
- padrino-cookies.gemspec
|
78
|
+
- spec/cookies_spec.rb
|
79
|
+
- spec/spec.rb
|
80
|
+
homepage: https://github.com/Cirex/padrino-cookies
|
81
|
+
licenses: []
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options: []
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ! '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
requirements: []
|
99
|
+
rubyforge_project:
|
100
|
+
rubygems_version: 1.8.15
|
101
|
+
signing_key:
|
102
|
+
specification_version: 3
|
103
|
+
summary: A plugin for the Padrino web framework which adds support for Rails like
|
104
|
+
cookie manipulation
|
105
|
+
test_files: []
|
106
|
+
has_rdoc:
|