tok 0.0.1.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +10 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +62 -0
  8. data/Rakefile +22 -0
  9. data/app/controllers/tok/base_controller.rb +11 -0
  10. data/app/controllers/tok/sessions_controller.rb +21 -0
  11. data/app/controllers/tok/users_controller.rb +14 -0
  12. data/config/routes.rb +5 -0
  13. data/db/migrate/20141011022222_create_users.rb +13 -0
  14. data/lib/generators/tok/install_generator.rb +55 -0
  15. data/lib/generators/tok/templates/migration/create_model.rb +13 -0
  16. data/lib/generators/tok/templates/model.rb +3 -0
  17. data/lib/generators/tok/templates/tok.rb +38 -0
  18. data/lib/tok.rb +19 -0
  19. data/lib/tok/authentication.rb +53 -0
  20. data/lib/tok/configuration.rb +41 -0
  21. data/lib/tok/controller.rb +64 -0
  22. data/lib/tok/engine.rb +26 -0
  23. data/lib/tok/version.rb +3 -0
  24. data/spec/controllers/sessions_controller_spec.rb +62 -0
  25. data/spec/controllers/users_controller_spec.rb +28 -0
  26. data/spec/dummy/README.rdoc +28 -0
  27. data/spec/dummy/Rakefile +6 -0
  28. data/spec/dummy/app/assets/images/.keep +0 -0
  29. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  30. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  31. data/spec/dummy/app/mailers/.keep +0 -0
  32. data/spec/dummy/app/models/.keep +0 -0
  33. data/spec/dummy/app/models/concerns/.keep +0 -0
  34. data/spec/dummy/bin/bundle +3 -0
  35. data/spec/dummy/bin/rails +4 -0
  36. data/spec/dummy/bin/rake +4 -0
  37. data/spec/dummy/config.ru +4 -0
  38. data/spec/dummy/config/application.rb +30 -0
  39. data/spec/dummy/config/boot.rb +4 -0
  40. data/spec/dummy/config/database.yml +85 -0
  41. data/spec/dummy/config/environment.rb +5 -0
  42. data/spec/dummy/config/environments/development.rb +28 -0
  43. data/spec/dummy/config/environments/production.rb +67 -0
  44. data/spec/dummy/config/environments/test.rb +39 -0
  45. data/spec/dummy/config/initializers/secret_token.rb +19 -0
  46. data/spec/dummy/config/initializers/wrap_parameters.rb +13 -0
  47. data/spec/dummy/config/locales/en.yml +23 -0
  48. data/spec/dummy/config/routes.rb +56 -0
  49. data/spec/dummy/config/secrets.yml +22 -0
  50. data/spec/dummy/db/schema.rb +29 -0
  51. data/spec/dummy/lib/assets/.keep +0 -0
  52. data/spec/dummy/lib/tasks/.keep +0 -0
  53. data/spec/dummy/log/.keep +0 -0
  54. data/spec/dummy/public/404.html +67 -0
  55. data/spec/dummy/public/422.html +67 -0
  56. data/spec/dummy/public/500.html +66 -0
  57. data/spec/dummy/public/favicon.ico +0 -0
  58. data/spec/dummy/public/robots.txt +5 -0
  59. data/spec/factories/users.rb +6 -0
  60. data/spec/generators/install_generator_spec.rb +30 -0
  61. data/spec/routing/routes_spec.rb +57 -0
  62. data/spec/spec_helper.rb +30 -0
  63. data/spec/support/generator_helpers.rb +21 -0
  64. data/spec/support/json_helpers.rb +7 -0
  65. data/spec/tok/configuration_spec.rb +103 -0
  66. data/spec/tok/controller_spec.rb +24 -0
  67. data/tok.gemspec +32 -0
  68. metadata +279 -0
@@ -0,0 +1,57 @@
1
+ describe 'Tok routes' do
2
+ context "with default routes used" do
3
+ describe "/signup" do
4
+ it { expect(post: 'signup').to be_routable }
5
+ it { expect(post: 'signup').to route_to(controller: "tok/users", action: "create") }
6
+ end
7
+
8
+ describe "/login" do
9
+ it { expect(post: 'login').to be_routable }
10
+ it { expect(post: 'login').to route_to(controller: "tok/sessions", action: "create") }
11
+ end
12
+
13
+ describe "/logout" do
14
+ it { expect(delete: '/logout').to be_routable }
15
+ it { expect(delete: '/logout').to route_to(controller: "tok/sessions", action: "destroy") }
16
+ end
17
+ end
18
+
19
+ context "with different route for /signup" do
20
+ before do
21
+ Tok.configure do |config|
22
+ config.signup_route = "register"
23
+ end
24
+
25
+ Rails.application.routes_reloader.reload!
26
+ end
27
+
28
+ it { expect(post: 'register').to be_routable }
29
+ it { expect(post: 'register').to route_to(controller: "tok/users", action: "create") }
30
+ end
31
+
32
+ context "with different route for /login" do
33
+ before do
34
+ Tok.configure do |config|
35
+ config.login_route = "signin"
36
+ end
37
+
38
+ Rails.application.routes_reloader.reload!
39
+ end
40
+
41
+ it { expect(post: 'signin').to be_routable }
42
+ it { expect(post: 'signin').to route_to(controller: "tok/sessions", action: "create") }
43
+ end
44
+
45
+ context "with different route for /logout" do
46
+ before do
47
+ Tok.configure do |config|
48
+ config.logout_route = "signout"
49
+ end
50
+
51
+ Rails.application.routes_reloader.reload!
52
+ end
53
+
54
+ it { expect(delete: 'signout').to be_routable }
55
+ it { expect(delete: 'signout').to route_to(controller: "tok/sessions", action: "destroy") }
56
+ end
57
+ end
@@ -0,0 +1,30 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
+
5
+ require 'rails/all'
6
+ require 'tok'
7
+
8
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
9
+ require 'rspec/rails'
10
+ require 'ammeter/init'
11
+ require 'factory_girl_rails'
12
+ require 'rails-api'
13
+
14
+ Dir[File.expand_path('../../app/**/**/*.rb', __FILE__)].each { |f| require f }
15
+ Dir[File.expand_path('../../spec/support/**/*.rb', __FILE__)].each { |f| require f }
16
+
17
+ ActiveRecord::Migration.maintain_test_schema!
18
+
19
+ RSpec.configure do |config|
20
+ config.include FactoryGirl::Syntax::Methods
21
+ config.include Tok::GeneratorHelpers
22
+ config.include Tok::JsonHelpers
23
+ config.use_transactional_fixtures = true
24
+ config.infer_spec_type_from_file_location!
25
+ end
26
+
27
+ def reset_configuration
28
+ Tok.configuration = nil
29
+ Tok.configure {}
30
+ end
@@ -0,0 +1,21 @@
1
+ module Tok
2
+ module GeneratorHelpers
3
+ def generate_tmp_files
4
+ files = %w(
5
+ app/controllers/application_controller.rb
6
+ app/models/user.rb
7
+ )
8
+
9
+ files.each { |f| FileUtils.mkdir_p(File.join(destination_root, File.dirname(f))) }
10
+
11
+ File.open(File.join(destination_root, files[0]), 'w') do |f|
12
+ f.write "class ApplicationController < ActionController::API\n"
13
+ f.write "end"
14
+ end
15
+ end
16
+
17
+ def reset_destination
18
+ FileUtils.rm_rf(destination_root)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ module Tok
2
+ module JsonHelpers
3
+ def json
4
+ @json ||= JSON.parse(response.body)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,103 @@
1
+ describe Tok::Configuration do
2
+ before :all do
3
+ class Account < ActiveRecord::Base; end
4
+ class User < ActiveRecord::Base; end
5
+ end
6
+
7
+ describe ".model" do
8
+ context "by default" do
9
+ it { expect(Tok::Configuration.new.model).to eq ::User }
10
+ end
11
+
12
+ context "when specified" do
13
+ before do
14
+ Tok.configure do |config|
15
+ config.model = Account
16
+ end
17
+ end
18
+
19
+ it { expect(Tok.configuration.model).to eq Account }
20
+ end
21
+ end
22
+
23
+ describe ".bcrypt_cost" do
24
+ context "by default" do
25
+ subject { Tok::Configuration.new.bcrypt_cost }
26
+
27
+ context "while in test environment" do
28
+ it { expect(subject).to eq BCrypt::Engine::MIN_COST }
29
+ end
30
+
31
+ context "while in other environments" do
32
+ before do
33
+ # Stub Rails.env
34
+ allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new('development'))
35
+
36
+ Tok.configure {}
37
+ end
38
+
39
+ it { expect(subject).to eq BCrypt::Engine::DEFAULT_COST }
40
+ end
41
+ end
42
+
43
+ context "when specified" do
44
+ before do
45
+ allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new('development'))
46
+
47
+ Tok.configure do |config|
48
+ config.bcrypt_cost = 20
49
+ end
50
+ end
51
+
52
+ it { expect(Tok.configuration.bcrypt_cost).to eq 20 }
53
+ end
54
+ end
55
+
56
+ describe ".signup_route" do
57
+ context "by default" do
58
+ it { expect(Tok::Configuration.new.signup_route).to eq "signup" }
59
+ end
60
+
61
+ context "when specified" do
62
+ before do
63
+ Tok.configure do |config|
64
+ config.signup_route = "register"
65
+ end
66
+ end
67
+
68
+ it { expect(Tok.configuration.signup_route).to eq "register" }
69
+ end
70
+ end
71
+
72
+ describe ".login_route" do
73
+ context "by default" do
74
+ it { expect(Tok::Configuration.new.login_route).to eq "login" }
75
+ end
76
+
77
+ context "when specified" do
78
+ before do
79
+ Tok.configure do |config|
80
+ config.login_route = "signin"
81
+ end
82
+ end
83
+
84
+ it { expect(Tok.configuration.login_route).to eq "signin" }
85
+ end
86
+ end
87
+
88
+ describe ".logout_route" do
89
+ context "by default" do
90
+ it { expect(Tok::Configuration.new.logout_route).to eq "logout" }
91
+ end
92
+
93
+ context "when specified" do
94
+ before do
95
+ Tok.configure do |config|
96
+ config.logout_route = "signout"
97
+ end
98
+ end
99
+
100
+ it { expect(Tok.configuration.logout_route).to eq "signout" }
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,24 @@
1
+ describe Tok::Controller do
2
+ subject { Tok::BaseController.new }
3
+
4
+ before do
5
+ Tok.configure do |config|
6
+ config.model = Account
7
+ end
8
+ end
9
+
10
+ describe ".model" do
11
+ it { expect(subject).to respond_to :model }
12
+ it { expect(subject.model).to eq Tok.configuration.model.to_s }
13
+ end
14
+
15
+ describe ".model_name" do
16
+ it { expect(subject).to respond_to :model_name }
17
+ it { expect(subject.model_name).to eq Tok.configuration.model.to_s.downcase }
18
+ end
19
+
20
+ describe ".model_class" do
21
+ it { expect(subject).to respond_to :model_class }
22
+ it { expect(subject.model_class).to eq Tok.configuration.model.to_s.constantize }
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'tok/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "tok"
9
+ spec.version = Tok::VERSION
10
+ spec.authors = ["Ahmed Hazem"]
11
+ spec.email = ["ahazemm@gmail.com"]
12
+ spec.summary = %q{No-frills token-based authentication for modern Rails applications.}
13
+ spec.description = %q{The token-based authentication library for the ambitious.}
14
+ spec.homepage = "https://github.com/ahazem/tok"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "rails", "~> 4.0"
23
+ spec.add_dependency "rails-api", "~> 0.2"
24
+ spec.add_dependency "bcrypt"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.7"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rspec-rails", "~> 3.1"
29
+ spec.add_development_dependency "factory_girl_rails", "~> 4.4"
30
+ spec.add_development_dependency "pg", "~> 0.17"
31
+ spec.add_development_dependency "ammeter", "~> 1.1"
32
+ end
metadata ADDED
@@ -0,0 +1,279 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tok
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.pre
5
+ platform: ruby
6
+ authors:
7
+ - Ahmed Hazem
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails-api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bcrypt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: factory_girl_rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '4.4'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '4.4'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pg
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.17'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.17'
125
+ - !ruby/object:Gem::Dependency
126
+ name: ammeter
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.1'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.1'
139
+ description: The token-based authentication library for the ambitious.
140
+ email:
141
+ - ahazemm@gmail.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".gitignore"
147
+ - ".rspec"
148
+ - ".travis.yml"
149
+ - Gemfile
150
+ - LICENSE.txt
151
+ - README.md
152
+ - Rakefile
153
+ - app/controllers/tok/base_controller.rb
154
+ - app/controllers/tok/sessions_controller.rb
155
+ - app/controllers/tok/users_controller.rb
156
+ - config/routes.rb
157
+ - db/migrate/20141011022222_create_users.rb
158
+ - lib/generators/tok/install_generator.rb
159
+ - lib/generators/tok/templates/migration/create_model.rb
160
+ - lib/generators/tok/templates/model.rb
161
+ - lib/generators/tok/templates/tok.rb
162
+ - lib/tok.rb
163
+ - lib/tok/authentication.rb
164
+ - lib/tok/configuration.rb
165
+ - lib/tok/controller.rb
166
+ - lib/tok/engine.rb
167
+ - lib/tok/version.rb
168
+ - spec/controllers/sessions_controller_spec.rb
169
+ - spec/controllers/users_controller_spec.rb
170
+ - spec/dummy/README.rdoc
171
+ - spec/dummy/Rakefile
172
+ - spec/dummy/app/assets/images/.keep
173
+ - spec/dummy/app/controllers/application_controller.rb
174
+ - spec/dummy/app/controllers/concerns/.keep
175
+ - spec/dummy/app/mailers/.keep
176
+ - spec/dummy/app/models/.keep
177
+ - spec/dummy/app/models/concerns/.keep
178
+ - spec/dummy/bin/bundle
179
+ - spec/dummy/bin/rails
180
+ - spec/dummy/bin/rake
181
+ - spec/dummy/config.ru
182
+ - spec/dummy/config/application.rb
183
+ - spec/dummy/config/boot.rb
184
+ - spec/dummy/config/database.yml
185
+ - spec/dummy/config/environment.rb
186
+ - spec/dummy/config/environments/development.rb
187
+ - spec/dummy/config/environments/production.rb
188
+ - spec/dummy/config/environments/test.rb
189
+ - spec/dummy/config/initializers/secret_token.rb
190
+ - spec/dummy/config/initializers/wrap_parameters.rb
191
+ - spec/dummy/config/locales/en.yml
192
+ - spec/dummy/config/routes.rb
193
+ - spec/dummy/config/secrets.yml
194
+ - spec/dummy/db/schema.rb
195
+ - spec/dummy/lib/assets/.keep
196
+ - spec/dummy/lib/tasks/.keep
197
+ - spec/dummy/log/.keep
198
+ - spec/dummy/public/404.html
199
+ - spec/dummy/public/422.html
200
+ - spec/dummy/public/500.html
201
+ - spec/dummy/public/favicon.ico
202
+ - spec/dummy/public/robots.txt
203
+ - spec/factories/users.rb
204
+ - spec/generators/install_generator_spec.rb
205
+ - spec/routing/routes_spec.rb
206
+ - spec/spec_helper.rb
207
+ - spec/support/generator_helpers.rb
208
+ - spec/support/json_helpers.rb
209
+ - spec/tok/configuration_spec.rb
210
+ - spec/tok/controller_spec.rb
211
+ - tok.gemspec
212
+ homepage: https://github.com/ahazem/tok
213
+ licenses:
214
+ - MIT
215
+ metadata: {}
216
+ post_install_message:
217
+ rdoc_options: []
218
+ require_paths:
219
+ - lib
220
+ required_ruby_version: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
225
+ required_rubygems_version: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">"
228
+ - !ruby/object:Gem::Version
229
+ version: 1.3.1
230
+ requirements: []
231
+ rubyforge_project:
232
+ rubygems_version: 2.2.2
233
+ signing_key:
234
+ specification_version: 4
235
+ summary: No-frills token-based authentication for modern Rails applications.
236
+ test_files:
237
+ - spec/controllers/sessions_controller_spec.rb
238
+ - spec/controllers/users_controller_spec.rb
239
+ - spec/dummy/README.rdoc
240
+ - spec/dummy/Rakefile
241
+ - spec/dummy/app/assets/images/.keep
242
+ - spec/dummy/app/controllers/application_controller.rb
243
+ - spec/dummy/app/controllers/concerns/.keep
244
+ - spec/dummy/app/mailers/.keep
245
+ - spec/dummy/app/models/.keep
246
+ - spec/dummy/app/models/concerns/.keep
247
+ - spec/dummy/bin/bundle
248
+ - spec/dummy/bin/rails
249
+ - spec/dummy/bin/rake
250
+ - spec/dummy/config.ru
251
+ - spec/dummy/config/application.rb
252
+ - spec/dummy/config/boot.rb
253
+ - spec/dummy/config/database.yml
254
+ - spec/dummy/config/environment.rb
255
+ - spec/dummy/config/environments/development.rb
256
+ - spec/dummy/config/environments/production.rb
257
+ - spec/dummy/config/environments/test.rb
258
+ - spec/dummy/config/initializers/secret_token.rb
259
+ - spec/dummy/config/initializers/wrap_parameters.rb
260
+ - spec/dummy/config/locales/en.yml
261
+ - spec/dummy/config/routes.rb
262
+ - spec/dummy/config/secrets.yml
263
+ - spec/dummy/db/schema.rb
264
+ - spec/dummy/lib/assets/.keep
265
+ - spec/dummy/lib/tasks/.keep
266
+ - spec/dummy/log/.keep
267
+ - spec/dummy/public/404.html
268
+ - spec/dummy/public/422.html
269
+ - spec/dummy/public/500.html
270
+ - spec/dummy/public/favicon.ico
271
+ - spec/dummy/public/robots.txt
272
+ - spec/factories/users.rb
273
+ - spec/generators/install_generator_spec.rb
274
+ - spec/routing/routes_spec.rb
275
+ - spec/spec_helper.rb
276
+ - spec/support/generator_helpers.rb
277
+ - spec/support/json_helpers.rb
278
+ - spec/tok/configuration_spec.rb
279
+ - spec/tok/controller_spec.rb