daylight 0.9.0.rc1
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/README.md +113 -0
- data/app/controllers/daylight_documentation/documentation_controller.rb +27 -0
- data/app/helpers/daylight_documentation/documentation_helper.rb +57 -0
- data/app/views/daylight_documentation/documentation/_header.haml +4 -0
- data/app/views/daylight_documentation/documentation/index.haml +12 -0
- data/app/views/daylight_documentation/documentation/model.haml +114 -0
- data/app/views/layouts/documentation.haml +22 -0
- data/config/routes.rb +8 -0
- data/doc/actions.md +70 -0
- data/doc/benchmarks.md +17 -0
- data/doc/contribute.md +80 -0
- data/doc/develop.md +1205 -0
- data/doc/environment.md +109 -0
- data/doc/example.md +3 -0
- data/doc/framework.md +31 -0
- data/doc/install.md +128 -0
- data/doc/principles.md +42 -0
- data/doc/testing.md +107 -0
- data/doc/usage.md +970 -0
- data/lib/daylight/api.rb +293 -0
- data/lib/daylight/associations.rb +247 -0
- data/lib/daylight/client_reloader.rb +45 -0
- data/lib/daylight/collection.rb +161 -0
- data/lib/daylight/errors.rb +94 -0
- data/lib/daylight/inflections.rb +7 -0
- data/lib/daylight/mock.rb +282 -0
- data/lib/daylight/read_only.rb +88 -0
- data/lib/daylight/refinements.rb +63 -0
- data/lib/daylight/reflection_ext.rb +67 -0
- data/lib/daylight/resource_proxy.rb +226 -0
- data/lib/daylight/version.rb +10 -0
- data/lib/daylight.rb +27 -0
- data/rails/daylight/api_controller.rb +354 -0
- data/rails/daylight/documentation.rb +13 -0
- data/rails/daylight/helpers.rb +32 -0
- data/rails/daylight/params.rb +23 -0
- data/rails/daylight/refiners.rb +186 -0
- data/rails/daylight/server.rb +29 -0
- data/rails/daylight/tasks.rb +37 -0
- data/rails/extensions/array_ext.rb +9 -0
- data/rails/extensions/autosave_association_fix.rb +49 -0
- data/rails/extensions/has_one_serializer_ext.rb +111 -0
- data/rails/extensions/inflections.rb +6 -0
- data/rails/extensions/nested_attributes_ext.rb +94 -0
- data/rails/extensions/read_only_attributes.rb +35 -0
- data/rails/extensions/render_json_meta.rb +99 -0
- data/rails/extensions/route_options.rb +47 -0
- data/rails/extensions/versioned_url_for.rb +22 -0
- data/spec/config/dependencies.rb +2 -0
- data/spec/config/factory_girl.rb +4 -0
- data/spec/config/simplecov_rcov.rb +26 -0
- data/spec/config/test_api.rb +1 -0
- data/spec/controllers/documentation_controller_spec.rb +24 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config/application.rb +24 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/daylight.rb +1 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +59 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/helpers/documentation_helper_spec.rb +82 -0
- data/spec/lib/daylight/api_spec.rb +178 -0
- data/spec/lib/daylight/associations_spec.rb +325 -0
- data/spec/lib/daylight/collection_spec.rb +235 -0
- data/spec/lib/daylight/errors_spec.rb +111 -0
- data/spec/lib/daylight/mock_spec.rb +144 -0
- data/spec/lib/daylight/read_only_spec.rb +118 -0
- data/spec/lib/daylight/refinements_spec.rb +80 -0
- data/spec/lib/daylight/reflection_ext_spec.rb +50 -0
- data/spec/lib/daylight/resource_proxy_spec.rb +325 -0
- data/spec/rails/daylight/api_controller_spec.rb +421 -0
- data/spec/rails/daylight/helpers_spec.rb +41 -0
- data/spec/rails/daylight/params_spec.rb +45 -0
- data/spec/rails/daylight/refiners_spec.rb +178 -0
- data/spec/rails/extensions/array_ext_spec.rb +51 -0
- data/spec/rails/extensions/has_one_serializer_ext_spec.rb +135 -0
- data/spec/rails/extensions/nested_attributes_ext_spec.rb +177 -0
- data/spec/rails/extensions/render_json_meta_spec.rb +140 -0
- data/spec/rails/extensions/route_options_spec.rb +309 -0
- data/spec/rails/extensions/versioned_url_for_spec.rb +46 -0
- data/spec/spec_helper.rb +43 -0
- data/spec/support/migration_helper.rb +40 -0
- metadata +422 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class TestAssociatedRouteController < ActionController::Base
|
|
4
|
+
def associated
|
|
5
|
+
render text: [params[:controller], params[:id], params[:associated]].join('/')
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class TestAssociatedRoutesController < TestAssociatedRouteController
|
|
10
|
+
def associated
|
|
11
|
+
render text: [params[:controller], params[:associated]].join('/')
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class TestMethodRoute < ActiveRecord::Base;
|
|
16
|
+
def foo; end
|
|
17
|
+
def bar; end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class TestMethodRouteController < ActionController::Base
|
|
21
|
+
def remoted
|
|
22
|
+
render text: [params[:controller], params[:id], params[:remoted]].join('/')
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class TestAltModel < ActiveRecord::Base;
|
|
27
|
+
def foo; end
|
|
28
|
+
def bar; end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class TestMethodRouteAltModelController < ActionController::Base
|
|
32
|
+
def self.model
|
|
33
|
+
TestAltModel
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def remoted
|
|
37
|
+
render text: [params[:controller], params[:id], params[:remoted]].join('/')
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe RouteOptions, type: [:controller, :routing] do
|
|
42
|
+
|
|
43
|
+
after :all do
|
|
44
|
+
Rails.application.reload_routes!
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe 'associated on resources' do
|
|
48
|
+
# rspec's controller temporarily wipes out routes and recreates
|
|
49
|
+
# routes for the anonymnous controller, we don't want to do that
|
|
50
|
+
# also, rspec-rails does not honor the tests(controller) function
|
|
51
|
+
def self.controller_class
|
|
52
|
+
TestAssociatedRouteController
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe 'with one route' do
|
|
56
|
+
|
|
57
|
+
before do
|
|
58
|
+
@routes.draw do
|
|
59
|
+
resources :test_associated_route, associated: %w[bars]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'adds associated route' do
|
|
64
|
+
expect(get: '/test_associated_route/1/bars').to route_to(
|
|
65
|
+
|
|
66
|
+
controller: 'test_associated_route',
|
|
67
|
+
action: 'associated',
|
|
68
|
+
id: '1',
|
|
69
|
+
associated: 'bars'
|
|
70
|
+
)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'respsonds to associated with expected params' do
|
|
74
|
+
get :associated, id: 1, associated: 'bars'
|
|
75
|
+
|
|
76
|
+
assert_response :success
|
|
77
|
+
|
|
78
|
+
response.body.should == 'test_associated_route/1/bars'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'sets up named link helpers' do
|
|
82
|
+
bars_test_associated_route_path(10).should == '/test_associated_route/10/bars'
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe 'with multiple routes' do
|
|
87
|
+
|
|
88
|
+
before do
|
|
89
|
+
@routes.draw do
|
|
90
|
+
resources :test_associated_route, associated: %w[bars wibbles]
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'adds first associated route' do
|
|
95
|
+
expect(get: '/test_associated_route/1/bars').to route_to(
|
|
96
|
+
|
|
97
|
+
controller: 'test_associated_route',
|
|
98
|
+
action: 'associated',
|
|
99
|
+
id: '1',
|
|
100
|
+
associated: 'bars'
|
|
101
|
+
)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it 'respsonds to first associated with expected params' do
|
|
105
|
+
get :associated, id: 1, associated: 'bars'
|
|
106
|
+
|
|
107
|
+
assert_response :success
|
|
108
|
+
response.body.should == 'test_associated_route/1/bars'
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'sets up first named link helpers' do
|
|
112
|
+
bars_test_associated_route_path(11).should == '/test_associated_route/11/bars'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
it 'adds last associated route' do
|
|
117
|
+
expect(get: '/test_associated_route/1/wibbles').to route_to(
|
|
118
|
+
|
|
119
|
+
controller: 'test_associated_route',
|
|
120
|
+
action: 'associated',
|
|
121
|
+
id: '1',
|
|
122
|
+
associated: 'wibbles'
|
|
123
|
+
)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'respsonds to last associated with expected params' do
|
|
127
|
+
get :associated, id: 1, associated: 'wibbles'
|
|
128
|
+
|
|
129
|
+
assert_response :success
|
|
130
|
+
response.body.should == 'test_associated_route/1/wibbles'
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it 'sets up last named link helpers' do
|
|
134
|
+
wibbles_test_associated_route_path(11).should == '/test_associated_route/11/wibbles'
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
describe 'associated on resource' do
|
|
140
|
+
# rspec's controller temporarily wipes out routes and recreates
|
|
141
|
+
# routes for the anonymnous controller, we don't want to do that
|
|
142
|
+
# also, rspec-rails does not honor the tests(controller) function
|
|
143
|
+
def self.controller_class
|
|
144
|
+
TestAssociatedRoutesController
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
describe 'with one route' do
|
|
149
|
+
|
|
150
|
+
before do
|
|
151
|
+
@routes.draw do
|
|
152
|
+
resource :test_associated_route, associated: %w[bars]
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it 'adds associated route' do
|
|
157
|
+
expect(get: '/test_associated_route/bars').to route_to(
|
|
158
|
+
|
|
159
|
+
controller: 'test_associated_routes',
|
|
160
|
+
action: 'associated',
|
|
161
|
+
associated: 'bars'
|
|
162
|
+
)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it 'respsonds to associated with expected params' do
|
|
166
|
+
get :associated, associated: 'bars'
|
|
167
|
+
|
|
168
|
+
assert_response :success
|
|
169
|
+
|
|
170
|
+
response.body.should == 'test_associated_routes/bars'
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it 'sets up named link helpers' do
|
|
174
|
+
bars_test_associated_route_path.should == '/test_associated_route/bars'
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
describe 'with multiple routes' do
|
|
179
|
+
|
|
180
|
+
before do
|
|
181
|
+
@routes.draw do
|
|
182
|
+
resource :test_associated_route, associated: %w[bars wibbles]
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it 'adds first associated route' do
|
|
187
|
+
expect(get: '/test_associated_route/bars').to route_to(
|
|
188
|
+
|
|
189
|
+
controller: 'test_associated_routes',
|
|
190
|
+
action: 'associated',
|
|
191
|
+
associated: 'bars'
|
|
192
|
+
)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
it 'respsonds to first associated with expected params' do
|
|
196
|
+
get :associated, associated: 'bars'
|
|
197
|
+
|
|
198
|
+
assert_response :success
|
|
199
|
+
response.body.should == 'test_associated_routes/bars'
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it 'sets up first named link helpers' do
|
|
203
|
+
bars_test_associated_route_path.should == '/test_associated_route/bars'
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
it 'adds last associated route' do
|
|
208
|
+
expect(get: '/test_associated_route/wibbles').to route_to(
|
|
209
|
+
|
|
210
|
+
controller: 'test_associated_routes',
|
|
211
|
+
action: 'associated',
|
|
212
|
+
associated: 'wibbles'
|
|
213
|
+
)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it 'respsonds to last associated with expected params' do
|
|
217
|
+
get :associated, associated: 'wibbles'
|
|
218
|
+
|
|
219
|
+
assert_response :success
|
|
220
|
+
response.body.should == 'test_associated_routes/wibbles'
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it 'sets up last named link helpers' do
|
|
224
|
+
wibbles_test_associated_route_path.should == '/test_associated_route/wibbles'
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
describe "remoted resource" do
|
|
230
|
+
# rspec's controller temporarily wipes out routes and recreates
|
|
231
|
+
# routes for the anonymnous controller, we don't want to do that
|
|
232
|
+
# also, rspec-rails does not honor the tests(controller) function
|
|
233
|
+
def self.controller_class
|
|
234
|
+
TestMethodRouteController
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
before do
|
|
238
|
+
@routes.draw do
|
|
239
|
+
resources :test_method_route, remoted: %w[foo]
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
it 'adds associated route' do
|
|
244
|
+
expect(get: '/test_method_route/1/foo').to route_to(
|
|
245
|
+
controller: 'test_method_route',
|
|
246
|
+
action: 'remoted',
|
|
247
|
+
id: '1',
|
|
248
|
+
remoted: 'foo'
|
|
249
|
+
)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it 'respsonds to method with expected params' do
|
|
253
|
+
get :remoted, id: 1, remoted: 'foo'
|
|
254
|
+
|
|
255
|
+
assert_response :success
|
|
256
|
+
|
|
257
|
+
response.body.should == 'test_method_route/1/foo'
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
it 'sets up named link helpers' do
|
|
261
|
+
foo_test_method_route_path(10).should == '/test_method_route/10/foo'
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
it 'keeps track for remoted methods on the controller' do
|
|
265
|
+
TestMethodRoute.remoted?(:foo).should be_true
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
describe "remoted resource with alternate model" do
|
|
270
|
+
# rspec's controller temporarily wipes out routes and recreates
|
|
271
|
+
# routes for the anonymnous controller, we don't want to do that
|
|
272
|
+
# also, rspec-rails does not honor the tests(controller) function
|
|
273
|
+
def self.controller_class
|
|
274
|
+
TestMethodRouteAltModelController
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
before do
|
|
278
|
+
@routes.draw do
|
|
279
|
+
resources :test_method_route_alt_model, remoted: %w[bar]
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
it 'adds associated route' do
|
|
284
|
+
expect(get: '/test_method_route_alt_model/1/bar').to route_to(
|
|
285
|
+
controller: 'test_method_route_alt_model',
|
|
286
|
+
action: 'remoted',
|
|
287
|
+
id: '1',
|
|
288
|
+
remoted: 'bar'
|
|
289
|
+
)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
it 'respsonds to method with expected params' do
|
|
293
|
+
get :remoted, id: 1, remoted: 'bar'
|
|
294
|
+
|
|
295
|
+
assert_response :success
|
|
296
|
+
|
|
297
|
+
response.body.should == 'test_method_route_alt_model/1/bar'
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
it 'sets up named link helpers' do
|
|
301
|
+
bar_test_method_route_alt_model_path(10).should == '/test_method_route_alt_model/10/bar'
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it 'keeps track for remoted methods on the controller' do
|
|
305
|
+
TestAltModel.remoted?(:bar).should be_true
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe VersionedUrlFor do
|
|
4
|
+
|
|
5
|
+
class VersionedModelTest
|
|
6
|
+
attr_accessor :to_param
|
|
7
|
+
def initialize(id)
|
|
8
|
+
@to_param = id
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def to_model
|
|
12
|
+
self
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module API
|
|
17
|
+
module V1
|
|
18
|
+
class TestVersionsController < ActionController::Base
|
|
19
|
+
include VersionedUrlFor
|
|
20
|
+
|
|
21
|
+
def api_v1_test_version_path model
|
|
22
|
+
"/v1/test/#{model.to_param}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
let(:controller) { API::V1::TestVersionsController.new }
|
|
29
|
+
let(:model) { VersionedModelTest.new(1) }
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
it 'defines versioned name / path based on controller name' do
|
|
33
|
+
controller.send(:versioned_name).should == 'api_v1_test_version'
|
|
34
|
+
controller.send(:versioned_path).should == 'api_v1_test_version_path'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'uses overriden url_for for models' do
|
|
38
|
+
controller.send(:versioned_url_for, model).should == '/v1/test/1'
|
|
39
|
+
controller.send(:url_for, model).should == '/v1/test/1'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'uses regular url_for if not a model' do
|
|
43
|
+
controller.should_receive(:url_for).with(action: 'foo').and_return('/path')
|
|
44
|
+
controller.send(:url_for, action: 'foo').should == '/path'
|
|
45
|
+
end
|
|
46
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
|
2
|
+
|
|
3
|
+
# Simplecov must be loaded before environment
|
|
4
|
+
require File.expand_path('spec/config/simplecov_rcov')
|
|
5
|
+
|
|
6
|
+
# load the dummy rails environment
|
|
7
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
8
|
+
|
|
9
|
+
require 'rspec/rails'
|
|
10
|
+
require 'rspec/autorun'
|
|
11
|
+
|
|
12
|
+
require 'webmock/rspec'
|
|
13
|
+
|
|
14
|
+
WebMock.disable_net_connect!
|
|
15
|
+
|
|
16
|
+
# Load additional rspec configuration files first
|
|
17
|
+
Dir.glob(File.expand_path('../config/**/*.rb', __FILE__)).each { |f| require f }
|
|
18
|
+
|
|
19
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
20
|
+
# in spec/support/ and its subdirectories.
|
|
21
|
+
Dir.glob(File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require f }
|
|
22
|
+
|
|
23
|
+
# make unpermitted parameters raise exceptions so we can test them!
|
|
24
|
+
# See https://github.com/att-cloud/daylight/issues/8
|
|
25
|
+
ActionController::Parameters.action_on_unpermitted_parameters = :raise
|
|
26
|
+
|
|
27
|
+
RSpec.configure do |config|
|
|
28
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
|
29
|
+
# examples within a transaction, remove the following line or assign false
|
|
30
|
+
# instead of true.
|
|
31
|
+
config.use_transactional_fixtures = true
|
|
32
|
+
|
|
33
|
+
# If true, the base class of anonymous controllers will be inferred
|
|
34
|
+
# automatically. This will be the default behavior in future versions of
|
|
35
|
+
# rspec-rails.
|
|
36
|
+
config.infer_base_class_for_anonymous_controllers = false
|
|
37
|
+
|
|
38
|
+
# Run specs in random order to surface order dependencies. If you find an
|
|
39
|
+
# order dependency and want to debug it, you can fix the order by providing
|
|
40
|
+
# the seed, which is printed after each run.
|
|
41
|
+
# --seed 1234
|
|
42
|
+
config.order = "random"
|
|
43
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module MigrationHelper
|
|
2
|
+
extend ActiveSupport::Concern
|
|
3
|
+
|
|
4
|
+
module ClassMethods
|
|
5
|
+
attr_accessor :migrations
|
|
6
|
+
|
|
7
|
+
def migrate &block
|
|
8
|
+
migrations << Class.new(ActiveRecord::Migration) do
|
|
9
|
+
define_method :change, &block
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def migrations
|
|
14
|
+
@migrations ||= []
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
included do
|
|
19
|
+
before(:all) do
|
|
20
|
+
self.class.migrations.each do |migration|
|
|
21
|
+
ActiveRecord::Migration.suppress_messages do
|
|
22
|
+
migration.migrate(:up)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
after(:all) do
|
|
28
|
+
self.class.migrations.each do |migration|
|
|
29
|
+
ActiveRecord::Migration.suppress_messages do
|
|
30
|
+
migration.migrate(:down)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
RSpec.configure do |config|
|
|
39
|
+
config.include MigrationHelper
|
|
40
|
+
end
|