controller_resources 0.0.6 → 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.
- checksums.yaml +13 -5
- data/.gitignore +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +10 -0
- data/.travis.yml +2 -2
- data/README.md +54 -68
- data/Rakefile +17 -4
- data/bin/coderay +16 -0
- data/bin/pry +16 -0
- data/bin/yard +16 -0
- data/bin/yardoc +16 -0
- data/bin/yri +16 -0
- data/controller_resources.gemspec +16 -13
- data/lib/controller_resources/engine.rb +5 -4
- data/lib/controller_resources/not_defined_error.rb +12 -0
- data/lib/controller_resources/version.rb +2 -2
- data/lib/controller_resources.rb +141 -6
- data/spec/dummy/app/controllers/posts_controller.rb +6 -7
- data/spec/dummy/app/views/posts/_form.html.erb +4 -20
- data/spec/dummy/app/views/posts/edit.html.erb +1 -1
- data/spec/dummy/app/views/posts/index.html.erb +1 -3
- data/spec/dummy/app/views/posts/show.html.erb +3 -8
- data/spec/dummy/config/secrets.yml +0 -12
- data/spec/dummy/db/seeds.rb +2 -0
- data/spec/features/posts_spec.rb +48 -0
- data/spec/lib/controller_resources_spec.rb +44 -0
- data/spec/spec_helper.rb +97 -16
- data/spec/support/posts.rb +31 -0
- metadata +106 -55
- data/lib/controller_resources/extension.rb +0 -111
- data/lib/controller_resources/resource.rb +0 -99
- data/spec/dummy/test/controllers/posts_controller_test.rb +0 -49
- data/spec/dummy/test/fixtures/posts.yml +0 -11
- data/spec/dummy/test/models/post_test.rb +0 -7
- data/spec/lib/controller_resources/extension_spec.rb +0 -42
- data/spec/lib/controller_resources/resource_spec.rb +0 -46
metadata
CHANGED
@@ -1,177 +1,223 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: controller_resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Scott
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rspec-rails
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: pg
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ! '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ! '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: codeclimate-test-reporter
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ! '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ! '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rubocop
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ! '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: capybara
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ! '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
|
-
type: :
|
118
|
+
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ! '>='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: database_cleaner
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ! '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: yard
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rails
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
130
172
|
- !ruby/object:Gem::Version
|
131
173
|
version: '0'
|
132
174
|
type: :runtime
|
133
175
|
prerelease: false
|
134
176
|
version_requirements: !ruby/object:Gem::Requirement
|
135
177
|
requirements:
|
136
|
-
- -
|
178
|
+
- - ! '>='
|
137
179
|
- !ruby/object:Gem::Version
|
138
180
|
version: '0'
|
139
181
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
182
|
+
name: decent_exposure
|
141
183
|
requirement: !ruby/object:Gem::Requirement
|
142
184
|
requirements:
|
143
|
-
- -
|
185
|
+
- - ! '>='
|
144
186
|
- !ruby/object:Gem::Version
|
145
187
|
version: '0'
|
146
188
|
type: :runtime
|
147
189
|
prerelease: false
|
148
190
|
version_requirements: !ruby/object:Gem::Requirement
|
149
191
|
requirements:
|
150
|
-
- -
|
192
|
+
- - ! '>='
|
151
193
|
- !ruby/object:Gem::Version
|
152
194
|
version: '0'
|
153
|
-
description:
|
154
|
-
|
155
|
-
|
195
|
+
description: ! "A controller DSL for Rails that allows you to easily and quickly define
|
196
|
+
both singular and collection model resources that can be operated on within the
|
197
|
+
controller.Attempts to DRY up most of the boilerplate code at the top of\n each
|
198
|
+
controller used to set up its state."
|
156
199
|
email:
|
157
200
|
- tubbo@psychedeli.ca
|
158
201
|
executables: []
|
159
202
|
extensions: []
|
160
203
|
extra_rdoc_files: []
|
161
204
|
files:
|
162
|
-
-
|
163
|
-
-
|
164
|
-
-
|
165
|
-
-
|
205
|
+
- .gitignore
|
206
|
+
- .rspec
|
207
|
+
- .rubocop.yml
|
208
|
+
- .ruby-version
|
209
|
+
- .travis.yml
|
166
210
|
- Gemfile
|
167
211
|
- LICENSE.txt
|
168
212
|
- README.md
|
169
213
|
- Rakefile
|
170
214
|
- bin/cc-tddium-post-worker
|
215
|
+
- bin/coderay
|
171
216
|
- bin/erubis
|
172
217
|
- bin/htmldiff
|
173
218
|
- bin/ldiff
|
174
219
|
- bin/nokogiri
|
220
|
+
- bin/pry
|
175
221
|
- bin/rackup
|
176
222
|
- bin/rails
|
177
223
|
- bin/rake
|
@@ -181,11 +227,13 @@ files:
|
|
181
227
|
- bin/ruby-rewrite
|
182
228
|
- bin/sprockets
|
183
229
|
- bin/thor
|
230
|
+
- bin/yard
|
231
|
+
- bin/yardoc
|
232
|
+
- bin/yri
|
184
233
|
- controller_resources.gemspec
|
185
234
|
- lib/controller_resources.rb
|
186
235
|
- lib/controller_resources/engine.rb
|
187
|
-
- lib/controller_resources/
|
188
|
-
- lib/controller_resources/resource.rb
|
236
|
+
- lib/controller_resources/not_defined_error.rb
|
189
237
|
- lib/controller_resources/version.rb
|
190
238
|
- lib/tasks/controller_resources_tasks.rake
|
191
239
|
- spec/dummy/README.rdoc
|
@@ -234,19 +282,18 @@ files:
|
|
234
282
|
- spec/dummy/config/secrets.yml
|
235
283
|
- spec/dummy/db/migrate/20150614211054_create_posts.rb
|
236
284
|
- spec/dummy/db/schema.rb
|
285
|
+
- spec/dummy/db/seeds.rb
|
237
286
|
- spec/dummy/lib/assets/.keep
|
238
287
|
- spec/dummy/log/.keep
|
239
288
|
- spec/dummy/public/404.html
|
240
289
|
- spec/dummy/public/422.html
|
241
290
|
- spec/dummy/public/500.html
|
242
291
|
- spec/dummy/public/favicon.ico
|
243
|
-
- spec/
|
244
|
-
- spec/dummy/test/fixtures/posts.yml
|
245
|
-
- spec/dummy/test/models/post_test.rb
|
292
|
+
- spec/features/posts_spec.rb
|
246
293
|
- spec/integration/navigation_spec.rb
|
247
|
-
- spec/lib/
|
248
|
-
- spec/lib/controller_resources/resource_spec.rb
|
294
|
+
- spec/lib/controller_resources_spec.rb
|
249
295
|
- spec/spec_helper.rb
|
296
|
+
- spec/support/posts.rb
|
250
297
|
homepage: https://github.com/tubbo/controller_resources
|
251
298
|
licenses:
|
252
299
|
- MIT
|
@@ -257,12 +304,12 @@ require_paths:
|
|
257
304
|
- lib
|
258
305
|
required_ruby_version: !ruby/object:Gem::Requirement
|
259
306
|
requirements:
|
260
|
-
- -
|
307
|
+
- - ! '>='
|
261
308
|
- !ruby/object:Gem::Version
|
262
309
|
version: '0'
|
263
310
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
311
|
requirements:
|
265
|
-
- -
|
312
|
+
- - ! '>='
|
266
313
|
- !ruby/object:Gem::Version
|
267
314
|
version: '0'
|
268
315
|
requirements: []
|
@@ -273,19 +320,22 @@ specification_version: 4
|
|
273
320
|
summary: A controller DSL for Rails that allows you to easily and quickly define both
|
274
321
|
singular and collection model resources that can be operated on within the controller.
|
275
322
|
test_files:
|
276
|
-
-
|
277
|
-
-
|
278
|
-
-
|
279
|
-
-
|
323
|
+
- .gitignore
|
324
|
+
- .rspec
|
325
|
+
- .rubocop.yml
|
326
|
+
- .ruby-version
|
327
|
+
- .travis.yml
|
280
328
|
- Gemfile
|
281
329
|
- LICENSE.txt
|
282
330
|
- README.md
|
283
331
|
- Rakefile
|
284
332
|
- bin/cc-tddium-post-worker
|
333
|
+
- bin/coderay
|
285
334
|
- bin/erubis
|
286
335
|
- bin/htmldiff
|
287
336
|
- bin/ldiff
|
288
337
|
- bin/nokogiri
|
338
|
+
- bin/pry
|
289
339
|
- bin/rackup
|
290
340
|
- bin/rails
|
291
341
|
- bin/rake
|
@@ -295,11 +345,13 @@ test_files:
|
|
295
345
|
- bin/ruby-rewrite
|
296
346
|
- bin/sprockets
|
297
347
|
- bin/thor
|
348
|
+
- bin/yard
|
349
|
+
- bin/yardoc
|
350
|
+
- bin/yri
|
298
351
|
- controller_resources.gemspec
|
299
352
|
- lib/controller_resources.rb
|
300
353
|
- lib/controller_resources/engine.rb
|
301
|
-
- lib/controller_resources/
|
302
|
-
- lib/controller_resources/resource.rb
|
354
|
+
- lib/controller_resources/not_defined_error.rb
|
303
355
|
- lib/controller_resources/version.rb
|
304
356
|
- lib/tasks/controller_resources_tasks.rake
|
305
357
|
- spec/dummy/README.rdoc
|
@@ -348,16 +400,15 @@ test_files:
|
|
348
400
|
- spec/dummy/config/secrets.yml
|
349
401
|
- spec/dummy/db/migrate/20150614211054_create_posts.rb
|
350
402
|
- spec/dummy/db/schema.rb
|
403
|
+
- spec/dummy/db/seeds.rb
|
351
404
|
- spec/dummy/lib/assets/.keep
|
352
405
|
- spec/dummy/log/.keep
|
353
406
|
- spec/dummy/public/404.html
|
354
407
|
- spec/dummy/public/422.html
|
355
408
|
- spec/dummy/public/500.html
|
356
409
|
- spec/dummy/public/favicon.ico
|
357
|
-
- spec/
|
358
|
-
- spec/dummy/test/fixtures/posts.yml
|
359
|
-
- spec/dummy/test/models/post_test.rb
|
410
|
+
- spec/features/posts_spec.rb
|
360
411
|
- spec/integration/navigation_spec.rb
|
361
|
-
- spec/lib/
|
362
|
-
- spec/lib/controller_resources/resource_spec.rb
|
412
|
+
- spec/lib/controller_resources_spec.rb
|
363
413
|
- spec/spec_helper.rb
|
414
|
+
- spec/support/posts.rb
|
@@ -1,111 +0,0 @@
|
|
1
|
-
module ControllerResources
|
2
|
-
# A single macro that combines all controller-level macros we use for
|
3
|
-
# the front-end of this application. Simply use the
|
4
|
-
# `resource :resource_name` macro in your controller class
|
5
|
-
# to make it work.
|
6
|
-
#
|
7
|
-
# Example:
|
8
|
-
#
|
9
|
-
# class ArtistsController < ApplicationController
|
10
|
-
# resource :artist
|
11
|
-
#
|
12
|
-
# def index
|
13
|
-
# respond_with artists
|
14
|
-
# end
|
15
|
-
#
|
16
|
-
# def show
|
17
|
-
# respond_with artist
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
module Extension
|
22
|
-
extend ActiveSupport::Concern
|
23
|
-
|
24
|
-
included do
|
25
|
-
class_attribute :_resource
|
26
|
-
|
27
|
-
# Use the StrongParameters strategy in DecentExposure
|
28
|
-
decent_configuration do
|
29
|
-
strategy DecentExposure::StrongParametersStrategy
|
30
|
-
attributes :edit_params
|
31
|
-
except %w(index)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Use the FlashResponder and HttpCacheResponder to respond to
|
35
|
-
# various requests.
|
36
|
-
responders :flash, :http_cache
|
37
|
-
|
38
|
-
helper_method :current_resource
|
39
|
-
end
|
40
|
-
|
41
|
-
# Macros included into the controller as class methods.
|
42
|
-
module ClassMethods
|
43
|
-
# Initialize this controller as an authenticated resource. You can
|
44
|
-
# optionally specify search_params and edit_params which are
|
45
|
-
# formed into strong parameter hashes.
|
46
|
-
#
|
47
|
-
# Example:
|
48
|
-
#
|
49
|
-
# resource :post do
|
50
|
-
# search :title
|
51
|
-
# modify :title, :body
|
52
|
-
# end
|
53
|
-
#
|
54
|
-
# @param [String] name - The parameterized name of the model
|
55
|
-
# backing this controller.
|
56
|
-
def resource(name = self.name.gsub(/Controller/, '').tableize, &block)
|
57
|
-
self._resource = Resource.new(name, &block)
|
58
|
-
|
59
|
-
expose(
|
60
|
-
_resource.model_name,
|
61
|
-
except: %i(index)
|
62
|
-
)
|
63
|
-
expose(
|
64
|
-
_resource.collection_name,
|
65
|
-
only: %i(index),
|
66
|
-
attributes: :search_params
|
67
|
-
)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# Omit any unpermitted parameters when searching in collections.
|
72
|
-
# Permits all parameters when none are given in the resource block.
|
73
|
-
#
|
74
|
-
# @returns [StrongParameters::Hash]
|
75
|
-
def search_params
|
76
|
-
if resource.search_params.any?
|
77
|
-
params.permit resource.search_params
|
78
|
-
else
|
79
|
-
params.permit!
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# Omit any unpermitted parameters when editing or creating content.
|
84
|
-
# Permits all parameters when none are given in the resource block.
|
85
|
-
#
|
86
|
-
# @returns [StrongParameters::Hash]
|
87
|
-
def edit_params
|
88
|
-
if resource.edit_params.any?
|
89
|
-
params.require(resource.model_name).permit resource.edit_params
|
90
|
-
else
|
91
|
-
params.require(resource.model_name).permit!
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
# The resource object as made available to the controller
|
96
|
-
#
|
97
|
-
# @returns [Resource]
|
98
|
-
def resource
|
99
|
-
fail Resource::NotConfiguredError unless self.class._resource.present?
|
100
|
-
self.class._resource
|
101
|
-
end
|
102
|
-
|
103
|
-
# A helper for engines like Pundit to configure the current
|
104
|
-
# authorizer policy for this controller.
|
105
|
-
#
|
106
|
-
# @returns [Object] the class name of the configured model resource.
|
107
|
-
def current_resource
|
108
|
-
resource.model_class
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
module ControllerResources
|
2
|
-
# The "data model" for the controlled resource. In the controller,
|
3
|
-
# defining the +resource+ block instantiates this class, which is used
|
4
|
-
# to hold all of the data the developer provides inside the block and
|
5
|
-
# used in the +Extension+ to actually do the "heavy lifting" in the
|
6
|
-
# controller. This class is just a way of storing all of the
|
7
|
-
# configured state for a given controller's resource.
|
8
|
-
class Resource
|
9
|
-
# The name of this resource, used to look up the collection and
|
10
|
-
# model names.
|
11
|
-
#
|
12
|
-
# @type [String]
|
13
|
-
attr_reader :name
|
14
|
-
|
15
|
-
# Permitted parameters for searching collections.
|
16
|
-
#
|
17
|
-
# @type [Array]
|
18
|
-
attr_reader :search_params
|
19
|
-
|
20
|
-
# Permitted parameters for editing members.
|
21
|
-
#
|
22
|
-
# @type [Array]
|
23
|
-
attr_reader :edit_params
|
24
|
-
|
25
|
-
# Thrown when a Resource object has not been configured, but we are
|
26
|
-
# attempting to use methods defined by ControllerResources.
|
27
|
-
class NotConfiguredError < StandardError; end
|
28
|
-
|
29
|
-
# Instantiate a new Resource with the given name and a block to
|
30
|
-
# define permitted parameters. The code given in the +resource+
|
31
|
-
# block is passed directly here so that the Resource class can be
|
32
|
-
# set up with its proper state.
|
33
|
-
#
|
34
|
-
# By default, resources are not given any search or edit params. If
|
35
|
-
# none are provided (via the +search+ and +modify+ configuration
|
36
|
-
# methods), all parameters will be permitted on collection and
|
37
|
-
# member resources respectively.
|
38
|
-
#
|
39
|
-
# @param [Symbol] name - The name of this resource, typically given
|
40
|
-
# as a singular symbol.
|
41
|
-
#
|
42
|
-
# @param [Block] &block - A block of code used to set up this
|
43
|
-
# object.
|
44
|
-
def initialize(name, &block)
|
45
|
-
@name = name.to_s
|
46
|
-
@search_params = []
|
47
|
-
@edit_params = []
|
48
|
-
@block = block
|
49
|
-
yield self if block_given?
|
50
|
-
end
|
51
|
-
|
52
|
-
# Singular version of the given resource name.
|
53
|
-
#
|
54
|
-
# @returns [Symbol]
|
55
|
-
def model_name
|
56
|
-
name.singularize.to_sym
|
57
|
-
end
|
58
|
-
|
59
|
-
# Pluralized version of the given resource name.
|
60
|
-
#
|
61
|
-
# @returns [Symbol]
|
62
|
-
def collection_name
|
63
|
-
name.pluralize.to_sym
|
64
|
-
end
|
65
|
-
|
66
|
-
# The model name as a class constant.
|
67
|
-
#
|
68
|
-
# @returns [Object]
|
69
|
-
def model_class
|
70
|
-
@model_class ||= model_name.to_s.classify.constantize
|
71
|
-
end
|
72
|
-
|
73
|
-
# Set the search params for this controller.
|
74
|
-
#
|
75
|
-
# Example:
|
76
|
-
#
|
77
|
-
# resource :post do
|
78
|
-
# search :title, :category, :tag
|
79
|
-
# end
|
80
|
-
#
|
81
|
-
# @param [Array] A collection of params to whitelist.
|
82
|
-
def search(*params)
|
83
|
-
@search_params = params
|
84
|
-
end
|
85
|
-
|
86
|
-
# Set the edit params for this controller.
|
87
|
-
#
|
88
|
-
# Example:
|
89
|
-
#
|
90
|
-
# resource :post do
|
91
|
-
# modify :title, :category, :tag, :body, :is_published
|
92
|
-
# end
|
93
|
-
#
|
94
|
-
# @param [Array] A collection of params to whitelist.
|
95
|
-
def modify(*params)
|
96
|
-
@edit_params = params
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class PostsControllerTest < ActionController::TestCase
|
4
|
-
setup do
|
5
|
-
@post = posts(:one)
|
6
|
-
end
|
7
|
-
|
8
|
-
test "should get index" do
|
9
|
-
get :index
|
10
|
-
assert_response :success
|
11
|
-
assert_not_nil assigns(:posts)
|
12
|
-
end
|
13
|
-
|
14
|
-
test "should get new" do
|
15
|
-
get :new
|
16
|
-
assert_response :success
|
17
|
-
end
|
18
|
-
|
19
|
-
test "should create post" do
|
20
|
-
assert_difference('Post.count') do
|
21
|
-
post :create, post: { body: @post.body, is_published: @post.is_published, title: @post.title }
|
22
|
-
end
|
23
|
-
|
24
|
-
assert_redirected_to post_path(assigns(:post))
|
25
|
-
end
|
26
|
-
|
27
|
-
test "should show post" do
|
28
|
-
get :show, id: @post
|
29
|
-
assert_response :success
|
30
|
-
end
|
31
|
-
|
32
|
-
test "should get edit" do
|
33
|
-
get :edit, id: @post
|
34
|
-
assert_response :success
|
35
|
-
end
|
36
|
-
|
37
|
-
test "should update post" do
|
38
|
-
patch :update, id: @post, post: { body: @post.body, is_published: @post.is_published, title: @post.title }
|
39
|
-
assert_redirected_to post_path(assigns(:post))
|
40
|
-
end
|
41
|
-
|
42
|
-
test "should destroy post" do
|
43
|
-
assert_difference('Post.count', -1) do
|
44
|
-
delete :destroy, id: @post
|
45
|
-
end
|
46
|
-
|
47
|
-
assert_redirected_to posts_path
|
48
|
-
end
|
49
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
# :nodoc:
|
4
|
-
module ControllerResources
|
5
|
-
RSpec.describe Extension do
|
6
|
-
# :nodoc:
|
7
|
-
class MockController < ActionController::Base
|
8
|
-
include Extension
|
9
|
-
|
10
|
-
resource :model do |r|
|
11
|
-
r.search :name
|
12
|
-
r.modify :name, :password
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
subject { MockController }
|
17
|
-
|
18
|
-
let(:controller) { subject.new }
|
19
|
-
|
20
|
-
let(:resource) { subject._resource }
|
21
|
-
|
22
|
-
it 'defines a resource object' do
|
23
|
-
expect(resource).to be_present
|
24
|
-
expect(resource).to be_a(Resource)
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'configures the resource object' do
|
28
|
-
expect(resource.model_name).to eq(:model)
|
29
|
-
expect(resource.collection_name).to eq(:models)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'saves params' do
|
33
|
-
expect(resource.search_params).to eq([:name])
|
34
|
-
expect(resource.edit_params).to eq([:name, :password])
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'publishes params to instance method' do
|
38
|
-
expect(controller).to respond_to(:search_params)
|
39
|
-
expect(controller).to respond_to(:edit_params)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|