ror-rubycas-server 1.0.a

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/CHANGELOG +292 -0
  2. data/Gemfile +2 -0
  3. data/LICENSE +26 -0
  4. data/README.textile +129 -0
  5. data/Rakefile +1 -0
  6. data/bin/rubycas-server +16 -0
  7. data/lib/casserver.rb +11 -0
  8. data/lib/casserver/authenticators/active_directory_ldap.rb +19 -0
  9. data/lib/casserver/authenticators/authlogic_crypto_providers/aes256.rb +43 -0
  10. data/lib/casserver/authenticators/authlogic_crypto_providers/bcrypt.rb +92 -0
  11. data/lib/casserver/authenticators/authlogic_crypto_providers/md5.rb +34 -0
  12. data/lib/casserver/authenticators/authlogic_crypto_providers/sha1.rb +59 -0
  13. data/lib/casserver/authenticators/authlogic_crypto_providers/sha512.rb +50 -0
  14. data/lib/casserver/authenticators/base.rb +67 -0
  15. data/lib/casserver/authenticators/client_certificate.rb +47 -0
  16. data/lib/casserver/authenticators/google.rb +58 -0
  17. data/lib/casserver/authenticators/ldap.rb +147 -0
  18. data/lib/casserver/authenticators/ntlm.rb +88 -0
  19. data/lib/casserver/authenticators/open_id.rb +22 -0
  20. data/lib/casserver/authenticators/sql.rb +133 -0
  21. data/lib/casserver/authenticators/sql_authlogic.rb +93 -0
  22. data/lib/casserver/authenticators/sql_encrypted.rb +75 -0
  23. data/lib/casserver/authenticators/sql_md5.rb +19 -0
  24. data/lib/casserver/authenticators/sql_rest_auth.rb +85 -0
  25. data/lib/casserver/authenticators/test.rb +22 -0
  26. data/lib/casserver/cas.rb +315 -0
  27. data/lib/casserver/localization.rb +91 -0
  28. data/lib/casserver/model.rb +270 -0
  29. data/lib/casserver/options_hash.rb +44 -0
  30. data/lib/casserver/server.rb +706 -0
  31. data/lib/casserver/utils.rb +32 -0
  32. data/lib/casserver/views/_login_form.erb +42 -0
  33. data/lib/casserver/views/layout.erb +18 -0
  34. data/lib/casserver/views/login.erb +30 -0
  35. data/lib/casserver/views/proxy.builder +12 -0
  36. data/lib/casserver/views/proxy_validate.builder +25 -0
  37. data/lib/casserver/views/service_validate.builder +18 -0
  38. data/lib/casserver/views/validate.erb +2 -0
  39. data/po/de_DE/rubycas-server.po +127 -0
  40. data/po/es_ES/rubycas-server.po +123 -0
  41. data/po/fr_FR/rubycas-server.po +128 -0
  42. data/po/ja_JP/rubycas-server.po +126 -0
  43. data/po/pl_PL/rubycas-server.po +123 -0
  44. data/po/pt_BR/rubycas-server.po +123 -0
  45. data/po/ru_RU/rubycas-server.po +118 -0
  46. data/po/rubycas-server.pot +112 -0
  47. data/po/zh_CN/rubycas-server.po +113 -0
  48. data/po/zh_TW/rubycas-server.po +113 -0
  49. data/public/themes/cas.css +121 -0
  50. data/public/themes/notice.png +0 -0
  51. data/public/themes/ok.png +0 -0
  52. data/public/themes/simple/bg.png +0 -0
  53. data/public/themes/simple/favicon.png +0 -0
  54. data/public/themes/simple/login_box_bg.png +0 -0
  55. data/public/themes/simple/logo.png +0 -0
  56. data/public/themes/simple/theme.css +28 -0
  57. data/public/themes/urbacon/bg.png +0 -0
  58. data/public/themes/urbacon/login_box_bg.png +0 -0
  59. data/public/themes/urbacon/logo.png +0 -0
  60. data/public/themes/urbacon/theme.css +33 -0
  61. data/public/themes/warning.png +0 -0
  62. data/resources/init.d.sh +58 -0
  63. data/rubycas-server.gemspec +57 -0
  64. data/setup.rb +1585 -0
  65. data/spec/alt_config.yml +50 -0
  66. data/spec/authenticators/ldap_spec.rb +53 -0
  67. data/spec/casserver_spec.rb +141 -0
  68. data/spec/database.yml +5 -0
  69. data/spec/default_config.yml +73 -0
  70. data/spec/model_spec.rb +42 -0
  71. data/spec/options_hash_spec.rb +146 -0
  72. data/spec/spec.opts +4 -0
  73. data/spec/spec_helper.rb +90 -0
  74. data/spec/utils_spec.rb +53 -0
  75. data/tasks/bundler.rake +4 -0
  76. data/tasks/db/migrate.rake +12 -0
  77. data/tasks/localization.rake +13 -0
  78. data/tasks/spec.rake +10 -0
  79. metadata +356 -0
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format nested
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,90 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+ require 'rack/test'
4
+ require 'rspec'
5
+ #require 'spec/autorun'
6
+ #require 'spec/interop/test'
7
+ require 'logger'
8
+ require 'ostruct'
9
+
10
+ require 'capybara'
11
+ require 'capybara/dsl'
12
+ require "active_record"
13
+ require "active_record/base"
14
+
15
+ # set test environment
16
+ set :environment, :test
17
+ set :run, false
18
+ set :raise_errors, true
19
+ set :logging, false
20
+
21
+
22
+ if Dir.getwd =~ /\/spec$/
23
+ # Avoid potential weirdness by changing the working directory to the CASServer root
24
+ FileUtils.cd('..')
25
+ end
26
+
27
+ def silence_warnings
28
+ old_verbose, $VERBOSE = $VERBOSE, nil
29
+ yield
30
+ ensure
31
+ $VERBOSE = old_verbose
32
+ end
33
+
34
+ # Ugly monkeypatch to allow us to test for correct redirection to
35
+ # external services.
36
+ #
37
+ # This will likely break in the future when Capybara or RackTest are upgraded.
38
+ class Capybara::Driver::RackTest
39
+ alias_method :original_follow_redirects!, :follow_redirects!
40
+ alias_method :original_current_url, :current_url
41
+
42
+ def current_url
43
+ if @redirected_to_external_url
44
+ @redirected_to_external_url
45
+ else
46
+ original_current_url
47
+ end
48
+ end
49
+
50
+ def follow_redirects!
51
+ if response['Location'] =~ /^http:/
52
+ @redirected_to_external_url = response['Location']
53
+ else
54
+ original_follow_redirects!
55
+ end
56
+ end
57
+ end
58
+
59
+ # This called in specs' `before` block.
60
+ # Due to the way Sinatra applications are loaded,
61
+ # we're forced to delay loading of the server code
62
+ # until the start of each test so that certain
63
+ # configuraiton options can be changed (e.g. `uri_path`)
64
+ def load_server(config_file)
65
+ ENV['CONFIG_FILE'] = config_file
66
+
67
+ silence_warnings do
68
+ load File.dirname(__FILE__) + '/../lib/casserver/server.rb'
69
+ end
70
+
71
+ CASServer::Server.enable(:raise_errors)
72
+ CASServer::Server.disable(:show_exceptions)
73
+
74
+ #Capybara.current_driver = :selenium
75
+ Capybara.app = CASServer::Server
76
+ end
77
+
78
+ # Deletes the sqlite3 database specified in the app's config
79
+ # and runs the db:migrate rake tasks to rebuild the database schema.
80
+ def reset_spec_database
81
+ raise "Cannot reset the spec database because config[:database][:database] is not defined." unless
82
+ CASServer::Server.config[:database] && CASServer::Server.config[:database][:database]
83
+
84
+ FileUtils.rm_f(CASServer::Server.config[:database][:database])
85
+
86
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
87
+ ActiveRecord::Base.logger.level = Logger::ERROR
88
+ ActiveRecord::Migration.verbose = false
89
+ ActiveRecord::Migrator.migrate("db/migrate")
90
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: UTF-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ module CASServer
5
+ end
6
+ require 'casserver/utils'
7
+
8
+ describe CASServer::Utils, '#random_string(max_length = 29)' do
9
+ before do
10
+ load_server(File.dirname(__FILE__) + "/default_config.yml")
11
+ reset_spec_database
12
+ end
13
+
14
+ context 'when max length is not passed in' do
15
+ it 'should return a random string of length 29' do
16
+ subject.random_string.length.should == 29
17
+ end
18
+ end
19
+
20
+ context 'when max length is passed in' do
21
+ it 'should return a random string of the desired length' do
22
+ subject.random_string(30).length.should == 30
23
+ end
24
+ end
25
+
26
+ it 'should include the letter r in the random string' do
27
+ subject.random_string.should include 'r'
28
+ end
29
+
30
+ it 'should return a random string' do
31
+ random_string = subject.random_string
32
+ another_random_string = subject.random_string
33
+ random_string.should_not == another_random_string
34
+ end
35
+ end
36
+
37
+ describe CASServer::Utils, '#log_controller_action(controller, params)' do
38
+ let(:params) { {} }
39
+ let(:params_with_password) { { 'password' => 'test' } }
40
+ let(:params_with_password_filtered) { { 'password' => '******' } }
41
+
42
+ it 'should log the controller action' do
43
+ $LOG.should_receive(:debug).with 'Processing application::instance_eval {}'
44
+
45
+ subject.log_controller_action('application', params)
46
+ end
47
+
48
+ it 'should filter password parameters in the log' do
49
+ $LOG.should_receive(:debug).with "Processing application::instance_eval #{params_with_password_filtered.inspect}"
50
+
51
+ subject.log_controller_action('application', params_with_password)
52
+ end
53
+ end
@@ -0,0 +1,4 @@
1
+ require 'bundler'
2
+ namespace :bundler do
3
+ Bundler::GemHelper.install_tasks(:name => 'rubycas-server')
4
+ end
@@ -0,0 +1,12 @@
1
+ namespace :db do
2
+ desc "bring your CAS server database schema up to date (options CONFIG=/path/to/config.yml)"
3
+ task :migrate do |t|
4
+ $:.unshift File.dirname(__FILE__) + "/../../lib"
5
+
6
+ require 'casserver/server'
7
+
8
+ CASServer::Model::Base.logger = Logger.new(STDOUT)
9
+ ActiveRecord::Migration.verbose = true
10
+ ActiveRecord::Migrator.migrate("db/migrate")
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ namespace :localization do
2
+ desc 'Scans the code for translatable strings and generates/updates the .po files'
3
+ task :po do
4
+ require 'gettext/utils'
5
+ GetText.update_pofiles("rubycas-server", Dir.glob("{lib,bin}/**/*.{rb}"), "rubycas-server ")
6
+ end
7
+
8
+ desc 'Creates .mo files from .po files and puts them in the locale dir'
9
+ task :mo do
10
+ require 'gettext/utils'
11
+ GetText.create_mofiles(true, "po", "locale")
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ #begin
2
+ require 'rspec/core/rake_task'
3
+ desc 'Run RSpecs to confirm that all functionality is working as expected'
4
+ RSpec::Core::RakeTask.new('spec') do |t|
5
+ t.rspec_opts = ['--colour', '--format nested']
6
+ t.pattern = 'spec/**/*_spec.rb'
7
+ end
8
+ #rescue LoadError
9
+ # puts "Hiding spec tasks because RSpec is not available"
10
+ #end
metadata ADDED
@@ -0,0 +1,356 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ror-rubycas-server
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.a
5
+ prerelease: 4
6
+ platform: ruby
7
+ authors:
8
+ - Matt Zukowski
9
+ - Christopher Small
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-12-28 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activerecord
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 3.0.0
31
+ - !ruby/object:Gem::Dependency
32
+ name: activesupport
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 3.0.0
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 3.0.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: sinatra
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '1.0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: gettext
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: 2.1.0
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 2.1.0
79
+ - !ruby/object:Gem::Dependency
80
+ name: crypt-isaac
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ version: 0.9.1
87
+ type: :runtime
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 0.9.1
95
+ - !ruby/object:Gem::Dependency
96
+ name: rack-test
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: capybara
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: rspec
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: rspec-core
145
+ requirement: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: sqlite3
161
+ requirement: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ~>
165
+ - !ruby/object:Gem::Version
166
+ version: 1.3.1
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ~>
173
+ - !ruby/object:Gem::Version
174
+ version: 1.3.1
175
+ - !ruby/object:Gem::Dependency
176
+ name: ruby-debug
177
+ requirement: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ - !ruby/object:Gem::Dependency
192
+ name: net-ldap
193
+ requirement: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ~>
197
+ - !ruby/object:Gem::Version
198
+ version: 0.1.1
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ~>
205
+ - !ruby/object:Gem::Version
206
+ version: 0.1.1
207
+ description: Provides single sign-on authentication for web applications using the
208
+ CAS protocol. Modified to run on read only file systems.
209
+ email:
210
+ - matt@zukowski.ca
211
+ - chris@thoughtnode.com
212
+ executables:
213
+ - rubycas-server
214
+ extensions: []
215
+ extra_rdoc_files:
216
+ - CHANGELOG
217
+ - LICENSE
218
+ - README.textile
219
+ files:
220
+ - CHANGELOG
221
+ - LICENSE
222
+ - README.textile
223
+ - Rakefile
224
+ - setup.rb
225
+ - bin/rubycas-server
226
+ - lib/casserver/authenticators/active_directory_ldap.rb
227
+ - lib/casserver/authenticators/authlogic_crypto_providers/aes256.rb
228
+ - lib/casserver/authenticators/authlogic_crypto_providers/bcrypt.rb
229
+ - lib/casserver/authenticators/authlogic_crypto_providers/md5.rb
230
+ - lib/casserver/authenticators/authlogic_crypto_providers/sha1.rb
231
+ - lib/casserver/authenticators/authlogic_crypto_providers/sha512.rb
232
+ - lib/casserver/authenticators/base.rb
233
+ - lib/casserver/authenticators/client_certificate.rb
234
+ - lib/casserver/authenticators/google.rb
235
+ - lib/casserver/authenticators/ldap.rb
236
+ - lib/casserver/authenticators/ntlm.rb
237
+ - lib/casserver/authenticators/open_id.rb
238
+ - lib/casserver/authenticators/sql.rb
239
+ - lib/casserver/authenticators/sql_authlogic.rb
240
+ - lib/casserver/authenticators/sql_encrypted.rb
241
+ - lib/casserver/authenticators/sql_md5.rb
242
+ - lib/casserver/authenticators/sql_rest_auth.rb
243
+ - lib/casserver/authenticators/test.rb
244
+ - lib/casserver/cas.rb
245
+ - lib/casserver/localization.rb
246
+ - lib/casserver/model.rb
247
+ - lib/casserver/options_hash.rb
248
+ - lib/casserver/server.rb
249
+ - lib/casserver/utils.rb
250
+ - lib/casserver.rb
251
+ - public/themes/cas.css
252
+ - public/themes/notice.png
253
+ - public/themes/ok.png
254
+ - public/themes/simple/bg.png
255
+ - public/themes/simple/favicon.png
256
+ - public/themes/simple/login_box_bg.png
257
+ - public/themes/simple/logo.png
258
+ - public/themes/simple/theme.css
259
+ - public/themes/urbacon/bg.png
260
+ - public/themes/urbacon/login_box_bg.png
261
+ - public/themes/urbacon/logo.png
262
+ - public/themes/urbacon/theme.css
263
+ - public/themes/warning.png
264
+ - po/de_DE/rubycas-server.po
265
+ - po/es_ES/rubycas-server.po
266
+ - po/fr_FR/rubycas-server.po
267
+ - po/ja_JP/rubycas-server.po
268
+ - po/pl_PL/rubycas-server.po
269
+ - po/pt_BR/rubycas-server.po
270
+ - po/ru_RU/rubycas-server.po
271
+ - po/rubycas-server.pot
272
+ - po/zh_CN/rubycas-server.po
273
+ - po/zh_TW/rubycas-server.po
274
+ - resources/init.d.sh
275
+ - tasks/bundler.rake
276
+ - tasks/db/migrate.rake
277
+ - tasks/localization.rake
278
+ - tasks/spec.rake
279
+ - lib/casserver/views/_login_form.erb
280
+ - lib/casserver/views/layout.erb
281
+ - lib/casserver/views/login.erb
282
+ - lib/casserver/views/validate.erb
283
+ - lib/casserver/views/proxy.builder
284
+ - lib/casserver/views/proxy_validate.builder
285
+ - lib/casserver/views/service_validate.builder
286
+ - Gemfile
287
+ - rubycas-server.gemspec
288
+ - spec/alt_config.yml
289
+ - spec/authenticators/ldap_spec.rb
290
+ - spec/casserver_spec.rb
291
+ - spec/database.yml
292
+ - spec/default_config.yml
293
+ - spec/model_spec.rb
294
+ - spec/options_hash_spec.rb
295
+ - spec/spec.opts
296
+ - spec/spec_helper.rb
297
+ - spec/utils_spec.rb
298
+ homepage: http://github.com/metasoarous/read_only_rubycas_server
299
+ licenses: []
300
+ post_install_message: ! '
301
+
302
+ For more information on RubyCAS-Server, see http://code.google.com/p/rubycas-server
303
+
304
+
305
+ If you plan on using RubyCAS-Server with languages other than English, please cd
306
+ into the
307
+
308
+ RubyCAS-Server installation directory (where the gem is installed) and type `rake
309
+ localization:mo`
310
+
311
+ to build the LOCALE_LC files.
312
+
313
+
314
+ '
315
+ rdoc_options:
316
+ - --quiet
317
+ - --title
318
+ - RubyCAS-Server Documentation
319
+ - --opname
320
+ - index.html
321
+ - --line-numbers
322
+ - --main
323
+ - README.md
324
+ - --inline-source
325
+ require_paths:
326
+ - lib
327
+ required_ruby_version: !ruby/object:Gem::Requirement
328
+ none: false
329
+ requirements:
330
+ - - ! '>='
331
+ - !ruby/object:Gem::Version
332
+ version: '0'
333
+ required_rubygems_version: !ruby/object:Gem::Requirement
334
+ none: false
335
+ requirements:
336
+ - - ! '>'
337
+ - !ruby/object:Gem::Version
338
+ version: 1.3.1
339
+ requirements: []
340
+ rubyforge_project:
341
+ rubygems_version: 1.8.24
342
+ signing_key:
343
+ specification_version: 3
344
+ summary: Provides single sign-on authentication for web applications using the CAS
345
+ protocol.
346
+ test_files:
347
+ - spec/alt_config.yml
348
+ - spec/authenticators/ldap_spec.rb
349
+ - spec/casserver_spec.rb
350
+ - spec/database.yml
351
+ - spec/default_config.yml
352
+ - spec/model_spec.rb
353
+ - spec/options_hash_spec.rb
354
+ - spec/spec.opts
355
+ - spec/spec_helper.rb
356
+ - spec/utils_spec.rb