resourcerer 0.3.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +35 -43
- data/lib/resourcerer/resource_configuration.rb +8 -0
- data/lib/resourcerer/strategies/default_strategy.rb +6 -6
- data/lib/resourcerer/strategy.rb +6 -0
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b06994a58d730b98de201b5c3da0223f380e2dd5
|
4
|
+
data.tar.gz: cef7fd6af87ee0d92761c70c22f7ce0796da21e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fde5d21d084804512b05fa28cfc7b09e59a54c34d97ac8f95502274b4e262a8b25264f832767ba1b2e63ce5c359e9e6c2d9415b50785b36b4141bffb9cfe8f6b
|
7
|
+
data.tar.gz: 670c8bf4194bf8e3482d1b0cb9c8a9a0acc8e5474a66a63f76bea8d59355826b1621169396ad31b67e134e16bbebc33899790584b036e790e1b222e1291f65af
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Resourcerer
|
1
|
+
Resourcerer [![Gem Version](https://badge.fury.io/rb/resourcerer.svg)](http://badge.fury.io/rb/resourcerer) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/ElMassimo/queryable/blob/master/LICENSE.txt)
|
2
2
|
=====================
|
3
3
|
What `resourcerer` proposes is that you go from this:
|
4
4
|
|
@@ -29,7 +29,7 @@ class PersonController < ApplicationController
|
|
29
29
|
render :edit
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
private
|
34
34
|
def person_params
|
35
35
|
params.require(:person).permit(:name)
|
@@ -41,7 +41,9 @@ To something like this:
|
|
41
41
|
|
42
42
|
```ruby
|
43
43
|
class PersonController < ApplicationController
|
44
|
-
resource :person
|
44
|
+
resource :person do
|
45
|
+
permit [:name]
|
46
|
+
end
|
45
47
|
|
46
48
|
def create
|
47
49
|
if person.save
|
@@ -58,11 +60,6 @@ class PersonController < ApplicationController
|
|
58
60
|
render :edit
|
59
61
|
end
|
60
62
|
end
|
61
|
-
|
62
|
-
private
|
63
|
-
def person_params
|
64
|
-
params.require(:person).permit(:name)
|
65
|
-
end
|
66
63
|
end
|
67
64
|
```
|
68
65
|
|
@@ -103,6 +100,28 @@ resource :person
|
|
103
100
|
|
104
101
|
### Configuration
|
105
102
|
|
103
|
+
### DSL
|
104
|
+
Resourcer also features a nice DSL, which is helpful when you need more control over the resource
|
105
|
+
lifecycle.
|
106
|
+
|
107
|
+
You can also access every configuration option available above:
|
108
|
+
```ruby
|
109
|
+
resource(:employee) do
|
110
|
+
model :person
|
111
|
+
find_by :name
|
112
|
+
find {|name| company.find_employee(name) }
|
113
|
+
build { company.new_employee }
|
114
|
+
assign { params.require(:employee).permit(:name) }
|
115
|
+
permit [:name, :description]
|
116
|
+
end
|
117
|
+
# is the same as:
|
118
|
+
resource(:employee, model: :person, finder_attribute: :name, finder: ->(name){ company.find_employee(name) }, builder: ->{ company.new_employee }, attributes: ->{ params.require(:employee).permit(:name) })
|
119
|
+
```
|
120
|
+
The DSL is more convenient when you have an object oriented design and want to allow an object to handle its collections, or as a quick way to set the StrongParameters method.
|
121
|
+
|
122
|
+
Configuration options play well together, and the defaults try to make intelligent use of them. For example,
|
123
|
+
setting the `finder_attribute` in the example above changes the `finder_param` to `person_name` instead of `person_id`, and the value of that parameter is provided to the finder block.
|
124
|
+
|
106
125
|
Let's take a look at some of the things you can do:
|
107
126
|
|
108
127
|
**Specify the model name:**
|
@@ -133,27 +152,6 @@ resource(:employee, attributes_method: :person_params)
|
|
133
152
|
resource(:person, param_key: :employee)
|
134
153
|
```
|
135
154
|
|
136
|
-
### DSL
|
137
|
-
Resourcer also features a nice DSL, which is helpful when you need more control over the resource
|
138
|
-
lifecycle.
|
139
|
-
|
140
|
-
You can also access every configuration option available above:
|
141
|
-
```ruby
|
142
|
-
resource(:employee) do
|
143
|
-
model :person
|
144
|
-
find_by :name
|
145
|
-
find {|name| company.find_employee(name) }
|
146
|
-
build { company.new_employee }
|
147
|
-
assign { params.require(:employee).permit(:name) }
|
148
|
-
end
|
149
|
-
# is the same as:
|
150
|
-
resource(:employee, model: :person, finder_attribute: :name, finder: ->(name){ company.find_employee(name) }, builder: ->{ company.new_employee }, attributes: ->{ params.require(:employee).permit(:name) })
|
151
|
-
```
|
152
|
-
The DSL is more convenient when you have an object oriented design and want to allow an object to handle its collections, or as a quick way to set the StrongParameters method.
|
153
|
-
|
154
|
-
Configuration options play well together, and the defaults try to make intelligent use of them. For example,
|
155
|
-
setting the `finder_attribute` in the example above changes the `finder_param` to `person_name` instead of `person_id`, and the value of that parameter is provided to the finder block.
|
156
|
-
|
157
155
|
### Setting a distinct object for a single action
|
158
156
|
|
159
157
|
There are times when one action in a controller is different from the
|
@@ -163,12 +161,9 @@ controller's setter methods. This example uses [presenter_rails](https://github.
|
|
163
161
|
```ruby
|
164
162
|
resource(:article)
|
165
163
|
|
166
|
-
def
|
164
|
+
def oldest
|
167
165
|
self.article = Article.find_oldest
|
168
|
-
|
169
|
-
|
170
|
-
present :article do
|
171
|
-
ArticlePresenter.new(article)
|
166
|
+
render :show
|
172
167
|
end
|
173
168
|
```
|
174
169
|
|
@@ -231,7 +226,7 @@ class PersonController < ApplicationController
|
|
231
226
|
render :edit
|
232
227
|
end
|
233
228
|
end
|
234
|
-
|
229
|
+
|
235
230
|
private
|
236
231
|
def person_params
|
237
232
|
params.require(:person).permit(:name)
|
@@ -243,8 +238,10 @@ To something like this by adding [presenter_rails](https://github.com/ElMassimo/
|
|
243
238
|
|
244
239
|
```ruby
|
245
240
|
class PersonController < ApplicationController
|
246
|
-
resource
|
247
|
-
|
241
|
+
resource :person do
|
242
|
+
permit :name
|
243
|
+
end
|
244
|
+
|
248
245
|
present :person do
|
249
246
|
person.decorate
|
250
247
|
end
|
@@ -264,11 +261,6 @@ class PersonController < ApplicationController
|
|
264
261
|
render :edit
|
265
262
|
end
|
266
263
|
end
|
267
|
-
|
268
|
-
private
|
269
|
-
def person_params
|
270
|
-
params.require(:person).permit(:name)
|
271
|
-
end
|
272
264
|
end
|
273
265
|
```
|
274
266
|
|
@@ -280,7 +272,7 @@ Resourcerer is heavily inspired on [decent exposure](https://github.com/voxdolo/
|
|
280
272
|
Both allow you to find or initialize a resource and assign attributes, removing the boilerplate from most CRUD actions.
|
281
273
|
|
282
274
|
#### Differences
|
283
|
-
Resourcerer does not expose an object to the view in any way, scope the query to a collection method if defined, nor deal with collections.
|
275
|
+
Resourcerer does not expose an object to the view in any way, scope the query to a collection method if defined, nor deal with collections. It also has better support for strong parameters.
|
284
276
|
|
285
277
|
|
286
278
|
### Caveats
|
@@ -18,16 +18,12 @@ module Resourcerer
|
|
18
18
|
@id ||= params[finder_param] || params[finder_attribute]
|
19
19
|
end
|
20
20
|
|
21
|
-
def finder_param
|
22
|
-
config.finder_param || inflector.finder_param
|
23
|
-
end
|
24
|
-
|
25
21
|
def find_resource(id)
|
26
|
-
controller_eval(config.finder, id) ||
|
22
|
+
controller_eval(config.finder, id) || collection.find_by(finder_attribute => id)
|
27
23
|
end
|
28
24
|
|
29
25
|
def build_resource
|
30
|
-
controller_eval(config.builder) ||
|
26
|
+
controller_eval(config.builder) || collection.new
|
31
27
|
end
|
32
28
|
|
33
29
|
protected
|
@@ -35,6 +31,10 @@ module Resourcerer
|
|
35
31
|
def controller_eval(proc, *args)
|
36
32
|
controller.instance_exec(*args, &proc) if proc
|
37
33
|
end
|
34
|
+
|
35
|
+
def collection
|
36
|
+
controller_eval(config.collection) || model
|
37
|
+
end
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
data/lib/resourcerer/strategy.rb
CHANGED
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resourcerer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Máximo Mussini
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08
|
11
|
+
date: 2014-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
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: :runtime
|
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: pakiderm
|
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: :runtime
|
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
|
description: Define resources to automate finding a record and assigning attributes.
|
@@ -67,17 +67,17 @@ licenses:
|
|
67
67
|
metadata: {}
|
68
68
|
post_install_message:
|
69
69
|
rdoc_options:
|
70
|
-
-
|
70
|
+
- --charset=UTF-8
|
71
71
|
require_paths:
|
72
72
|
- lib
|
73
73
|
required_ruby_version: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '2.0'
|
78
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
requirements: []
|