action_controller_tweaks 0.1 → 0.2.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 +4 -4
- data/.travis.yml +4 -1
- data/Appraisals +2 -2
- data/CHANGELOG.md +5 -1
- data/Rakefile +12 -8
- data/action_controller_tweaks.gemspec +25 -18
- data/gemfiles/rails3_2.gemfile +2 -2
- data/gemfiles/rails4_0.gemfile +2 -2
- data/lib/action_controller_tweaks/session.rb +29 -5
- data/lib/action_controller_tweaks/version.rb +1 -1
- data/spec/action_controller_tweaks_spec.rb +124 -3
- data/spec/spec_helper.rb +4 -2
- metadata +64 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9549506d76d4ea2032b34467b985b9ae3bc173d2
|
4
|
+
data.tar.gz: cf82467af5dc365d2a9638cdc2ee282854a69640
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ceba069ed9da41fd92bf3ab52c1e578929ef38fc059b041d6bd4ee6fd1fee0ac7a1e5fd8db718a2303e6a8335314dca388c2b654d7ecea6a7bd73264c0fbbd1d
|
7
|
+
data.tar.gz: b10c3a0d6a0feb7cf2c30e48ab479856d7dc8052617d5c2959486cfc5119b8aedd4eb08d25250671f91119ab961debe2bf322e50675a5fbe55fcfb93ea47452f
|
data/.travis.yml
CHANGED
data/Appraisals
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
|
2
2
|
appraise "rails3-2" do
|
3
|
-
version = "3.2.
|
3
|
+
version = "3.2.16"
|
4
4
|
gem 'activesupport', version
|
5
5
|
gem 'actionpack', version
|
6
6
|
end
|
7
7
|
|
8
8
|
appraise "rails4-0" do
|
9
|
-
version = "4.0.
|
9
|
+
version = "4.0.2"
|
10
10
|
gem 'activesupport', version
|
11
11
|
gem 'actionpack', version
|
12
12
|
end
|
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
@@ -1,11 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require 'bundler/gem_tasks'
|
5
|
-
require 'rspec/core/rake_task'
|
1
|
+
require "appraisal"
|
2
|
+
require "bundler"
|
3
|
+
require "rspec/core/rake_task"
|
6
4
|
|
7
|
-
|
8
|
-
sh "rake appraisal:install && rake appraisal spec"
|
9
|
-
end
|
5
|
+
Bundler::GemHelper.install_tasks
|
10
6
|
|
11
7
|
RSpec::Core::RakeTask.new(:spec)
|
8
|
+
|
9
|
+
if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
|
10
|
+
task :default do
|
11
|
+
sh "rake appraisal:install && rake appraisal spec"
|
12
|
+
end
|
13
|
+
else
|
14
|
+
task :default => :spec
|
15
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
3
|
|
4
|
-
author_name =
|
5
|
-
gem_name =
|
4
|
+
author_name = "PikachuEXE"
|
5
|
+
gem_name = "action_controller_tweaks"
|
6
6
|
|
7
7
|
require "#{gem_name}/version"
|
8
8
|
|
@@ -10,28 +10,35 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.name = gem_name
|
12
12
|
s.version = ActionControllerTweaks::VERSION
|
13
|
-
s.summary =
|
14
|
-
s.description =
|
13
|
+
s.summary = "Some Tweaks for ActionController"
|
14
|
+
s.description = "ActionController is great, but could be better. Here are some tweaks for it."
|
15
15
|
|
16
|
-
s.license =
|
16
|
+
s.license = "MIT"
|
17
17
|
|
18
18
|
s.authors = [author_name]
|
19
|
-
s.email = [
|
19
|
+
s.email = ["pikachuexe@gmail.com"]
|
20
20
|
s.homepage = "http://github.com/#{author_name}/#{gem_name}"
|
21
21
|
|
22
22
|
s.files = `git ls-files`.split("\n")
|
23
23
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
24
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
25
|
-
s.require_paths = [
|
26
|
-
|
27
|
-
s.add_dependency
|
28
|
-
s.add_dependency
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
s.add_development_dependency
|
33
|
-
s.add_development_dependency
|
34
|
-
s.add_development_dependency
|
35
|
-
s.add_development_dependency
|
36
|
-
s.add_development_dependency
|
25
|
+
s.require_paths = ["lib"]
|
26
|
+
|
27
|
+
s.add_dependency "activesupport", ">= 3.2.0", "< 5.0.0"
|
28
|
+
s.add_dependency "actionpack", ">= 3.2.0", "< 5.0.0"
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
s.add_development_dependency "bundler", ">= 1.0.0"
|
33
|
+
s.add_development_dependency "rake", ">= 0.9.2"
|
34
|
+
s.add_development_dependency "appraisal", ">= 0.5.2"
|
35
|
+
s.add_development_dependency "rspec-rails", "~> 2.6"
|
36
|
+
s.add_development_dependency "activerecord", ">= 3.2.0", "< 5.0.0" # rspec-rails needs activerecord...
|
37
|
+
s.add_development_dependency "sqlite3", ">= 1.3"
|
38
|
+
s.add_development_dependency "database_cleaner", ">= 1.0"
|
39
|
+
s.add_development_dependency "timecop", ">= 0.6"
|
40
|
+
s.add_development_dependency "coveralls", ">= 0.7"
|
41
|
+
s.add_development_dependency "gem-release", ">= 0.7"
|
42
|
+
|
43
|
+
s.required_rubygems_version = ">= 1.4.0"
|
37
44
|
end
|
data/gemfiles/rails3_2.gemfile
CHANGED
data/gemfiles/rails4_0.gemfile
CHANGED
@@ -7,12 +7,21 @@ module ActionControllerTweaks
|
|
7
7
|
|
8
8
|
SPECIAL_KEYS = %w( session_keys_to_expire )
|
9
9
|
|
10
|
+
class InvalidOptionValue < ArgumentError
|
11
|
+
def self.new(option_key, options_value, expected_types)
|
12
|
+
super("option key `#{option_key}` should contain value with type(s): #{expected_types}, " +
|
13
|
+
"but got <#{options_value.inspect}> (#{options_value.class})")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
10
17
|
included do
|
11
18
|
before_filter :delete_expired_session_keys
|
12
19
|
|
13
20
|
private
|
14
21
|
|
15
22
|
def set_session(key, value, options = {})
|
23
|
+
options.symbolize_keys!
|
24
|
+
|
16
25
|
key = key.to_sym
|
17
26
|
|
18
27
|
if SPECIAL_KEYS.include?(key.to_s)
|
@@ -24,9 +33,19 @@ module ActionControllerTweaks
|
|
24
33
|
# Set special session
|
25
34
|
new_session_keys_to_expire = session_keys_to_expire
|
26
35
|
|
27
|
-
expire_in = options.delete(:expire_in)
|
28
|
-
|
29
|
-
|
36
|
+
expire_in, expire_at = options.delete(:expire_in), options.delete(:expire_at)
|
37
|
+
|
38
|
+
if expire_at && expire_at.respond_to?(:to_time)
|
39
|
+
expire_at = expire_at.to_time
|
40
|
+
end
|
41
|
+
|
42
|
+
raise InvalidOptionValue.new(:expire_in, expire_in, Numeric) if expire_in && !expire_in.is_a?(Numeric)
|
43
|
+
raise InvalidOptionValue.new(:expire_at, expire_at, Time) if expire_at && !expire_at.is_a?(Time)
|
44
|
+
|
45
|
+
new_session_keys_to_expire[key] = if expire_in
|
46
|
+
expire_in.from_now
|
47
|
+
elsif expire_at
|
48
|
+
expire_at
|
30
49
|
end
|
31
50
|
|
32
51
|
session[:session_keys_to_expire] = new_session_keys_to_expire
|
@@ -40,7 +59,7 @@ module ActionControllerTweaks
|
|
40
59
|
session.delete(key)
|
41
60
|
session_keys_to_expire.delete(key)
|
42
61
|
end
|
43
|
-
rescue
|
62
|
+
rescue
|
44
63
|
# Parse error
|
45
64
|
# Let's expire it to be safe
|
46
65
|
session.delete(key)
|
@@ -50,7 +69,12 @@ module ActionControllerTweaks
|
|
50
69
|
end
|
51
70
|
|
52
71
|
def session_keys_to_expire
|
53
|
-
session
|
72
|
+
# Check whether session key is a hash to prevent exception
|
73
|
+
unless session[:session_keys_to_expire].is_a?(Hash)
|
74
|
+
session[:session_keys_to_expire] = {}
|
75
|
+
end
|
76
|
+
|
77
|
+
session[:session_keys_to_expire]
|
54
78
|
end
|
55
79
|
end
|
56
80
|
end
|
@@ -24,9 +24,8 @@ describe PostsController, type: :controller do
|
|
24
24
|
let(:session_key) { :key }
|
25
25
|
let(:session_value) { 'value' }
|
26
26
|
let(:expire_in) { 60 * 60 } # 1 hour
|
27
|
-
let
|
28
|
-
let
|
29
|
-
let!(:time_after_expire) { time_now + (expire_in * 2) }
|
27
|
+
let(:expire_at) { Time.new(2014, 1, 1).in_time_zone }
|
28
|
+
let(:time_now) { Time.new(2013, 1, 1).in_time_zone }
|
30
29
|
|
31
30
|
context 'when calling it without option' do
|
32
31
|
before do
|
@@ -47,11 +46,59 @@ describe PostsController, type: :controller do
|
|
47
46
|
end
|
48
47
|
|
49
48
|
context 'when calling it with option expire_in' do
|
49
|
+
let!(:time_before_expire) { time_now + (expire_in / 2) }
|
50
|
+
let!(:time_after_expire) { time_now + (expire_in * 2) }
|
51
|
+
|
50
52
|
before do
|
51
53
|
Timecop.freeze(time_now)
|
52
54
|
controller.send(:set_session, session_key, session_value, expire_in: expire_in)
|
53
55
|
end
|
54
56
|
|
57
|
+
after do
|
58
|
+
Timecop.return
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'set the session' do
|
62
|
+
session[session_key].should eq session_value
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'before expire time' do
|
66
|
+
before do
|
67
|
+
Timecop.travel(time_before_expire)
|
68
|
+
# Runs before_filter
|
69
|
+
get :index
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'keeps the session key' do
|
73
|
+
session[session_key].should eq session_value
|
74
|
+
end
|
75
|
+
end
|
76
|
+
context 'after expire time' do
|
77
|
+
before do
|
78
|
+
Timecop.travel(time_after_expire)
|
79
|
+
# Runs before_filter
|
80
|
+
get :index
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'keeps the session key' do
|
84
|
+
session.key?(session_key).should be_false
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'when calling it with option expire_at' do
|
90
|
+
let!(:time_before_expire) { expire_at - 1 }
|
91
|
+
let!(:time_after_expire) { expire_at + 1 }
|
92
|
+
|
93
|
+
before do
|
94
|
+
Timecop.freeze(time_now)
|
95
|
+
controller.send(:set_session, session_key, session_value, expire_at: expire_at)
|
96
|
+
end
|
97
|
+
|
98
|
+
after do
|
99
|
+
Timecop.return
|
100
|
+
end
|
101
|
+
|
55
102
|
it 'set the session' do
|
56
103
|
session[session_key].should eq session_value
|
57
104
|
end
|
@@ -79,6 +126,80 @@ describe PostsController, type: :controller do
|
|
79
126
|
end
|
80
127
|
end
|
81
128
|
end
|
129
|
+
|
130
|
+
context 'when option value with different types is passed into options' do
|
131
|
+
let(:method_call) do
|
132
|
+
controller.send(:set_session, session_key, session_value, options)
|
133
|
+
end
|
134
|
+
context 'for expire_in' do
|
135
|
+
let(:options) { {expire_in: expire_in.to_s} }
|
136
|
+
|
137
|
+
specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
|
138
|
+
end
|
139
|
+
context 'for expire_at' do
|
140
|
+
context 'with a Hash' do
|
141
|
+
# String#to_time would be nil if format invalid
|
142
|
+
let(:options) { {expire_at: {}} }
|
143
|
+
|
144
|
+
specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
|
145
|
+
end
|
146
|
+
context 'with a blank String' do
|
147
|
+
# String#to_time would be nil if format invalid
|
148
|
+
let(:options) { {expire_at: ''} }
|
149
|
+
|
150
|
+
specify { expect{ method_call }.to_not raise_error }
|
151
|
+
end
|
152
|
+
context 'with a time String' do
|
153
|
+
let(:options) { {expire_at: expire_at.to_s} }
|
154
|
+
|
155
|
+
specify { expect{ method_call }.to_not raise_error }
|
156
|
+
end
|
157
|
+
context 'with a Time' do
|
158
|
+
let(:options) { {expire_at: expire_at.to_time} }
|
159
|
+
|
160
|
+
specify { expect{ method_call }.to_not raise_error }
|
161
|
+
end
|
162
|
+
context 'with a Date' do
|
163
|
+
let(:options) { {expire_at: expire_at.to_date} }
|
164
|
+
|
165
|
+
specify { expect{ method_call }.to_not raise_error }
|
166
|
+
end
|
167
|
+
context 'with a DateTime' do
|
168
|
+
let(:options) { {expire_at: expire_at.in_time_zone} }
|
169
|
+
|
170
|
+
specify { expect{ method_call }.to_not raise_error }
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context 'when someone screw up the special session key' do
|
176
|
+
before do
|
177
|
+
session[session_key] = session_value
|
178
|
+
end
|
179
|
+
|
180
|
+
context 'when someone set non time string in expire_at_str' do
|
181
|
+
before do
|
182
|
+
session['session_keys_to_expire'] = {session_key => ''}
|
183
|
+
|
184
|
+
# Runs before_filter
|
185
|
+
get :index
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'destroys the session key' do
|
189
|
+
session.key?(session_key).should be_false
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context 'when someone set non has to session_keys_to_expire' do
|
194
|
+
before do
|
195
|
+
session['session_keys_to_expire'] = []
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'does not destroy the session key' do
|
199
|
+
session.key?(session_key).should be_true
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
82
203
|
end
|
83
204
|
end
|
84
205
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_controller_tweaks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PikachuEXE
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -51,61 +51,61 @@ dependencies:
|
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 5.0.0
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
54
|
+
name: bundler
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - '>='
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
59
|
+
version: 1.0.0
|
60
60
|
type: :development
|
61
61
|
prerelease: false
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - '>='
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
66
|
+
version: 1.0.0
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
|
-
name:
|
68
|
+
name: rake
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
71
|
- - '>='
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version:
|
73
|
+
version: 0.9.2
|
74
74
|
type: :development
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
78
|
- - '>='
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version:
|
80
|
+
version: 0.9.2
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
82
|
+
name: appraisal
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
85
|
- - '>='
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
87
|
+
version: 0.5.2
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
92
|
- - '>='
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version:
|
94
|
+
version: 0.5.2
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: rspec-rails
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- -
|
99
|
+
- - ~>
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
101
|
+
version: '2.6'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
|
-
- -
|
106
|
+
- - ~>
|
107
107
|
- !ruby/object:Gem::Version
|
108
|
-
version: '
|
108
|
+
version: '2.6'
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
110
|
name: activerecord
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,34 +126,76 @@ dependencies:
|
|
126
126
|
- - <
|
127
127
|
- !ruby/object:Gem::Version
|
128
128
|
version: 5.0.0
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: sqlite3
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '1.3'
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '1.3'
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: database_cleaner
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '1.0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - '>='
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '1.0'
|
129
157
|
- !ruby/object:Gem::Dependency
|
130
158
|
name: timecop
|
131
159
|
requirement: !ruby/object:Gem::Requirement
|
132
160
|
requirements:
|
133
161
|
- - '>='
|
134
162
|
- !ruby/object:Gem::Version
|
135
|
-
version: '0'
|
163
|
+
version: '0.6'
|
136
164
|
type: :development
|
137
165
|
prerelease: false
|
138
166
|
version_requirements: !ruby/object:Gem::Requirement
|
139
167
|
requirements:
|
140
168
|
- - '>='
|
141
169
|
- !ruby/object:Gem::Version
|
142
|
-
version: '0'
|
170
|
+
version: '0.6'
|
143
171
|
- !ruby/object:Gem::Dependency
|
144
172
|
name: coveralls
|
145
173
|
requirement: !ruby/object:Gem::Requirement
|
146
174
|
requirements:
|
147
175
|
- - '>='
|
148
176
|
- !ruby/object:Gem::Version
|
149
|
-
version: '0'
|
177
|
+
version: '0.7'
|
178
|
+
type: :development
|
179
|
+
prerelease: false
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - '>='
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0.7'
|
185
|
+
- !ruby/object:Gem::Dependency
|
186
|
+
name: gem-release
|
187
|
+
requirement: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - '>='
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0.7'
|
150
192
|
type: :development
|
151
193
|
prerelease: false
|
152
194
|
version_requirements: !ruby/object:Gem::Requirement
|
153
195
|
requirements:
|
154
196
|
- - '>='
|
155
197
|
- !ruby/object:Gem::Version
|
156
|
-
version: '0'
|
198
|
+
version: '0.7'
|
157
199
|
description: ActionController is great, but could be better. Here are some tweaks
|
158
200
|
for it.
|
159
201
|
email:
|
@@ -199,10 +241,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
241
|
requirements:
|
200
242
|
- - '>='
|
201
243
|
- !ruby/object:Gem::Version
|
202
|
-
version:
|
244
|
+
version: 1.4.0
|
203
245
|
requirements: []
|
204
246
|
rubyforge_project:
|
205
|
-
rubygems_version: 2.
|
247
|
+
rubygems_version: 2.2.1
|
206
248
|
signing_key:
|
207
249
|
specification_version: 4
|
208
250
|
summary: Some Tweaks for ActionController
|
@@ -211,3 +253,4 @@ test_files:
|
|
211
253
|
- spec/fixtures/application.rb
|
212
254
|
- spec/fixtures/controllers.rb
|
213
255
|
- spec/spec_helper.rb
|
256
|
+
has_rdoc:
|