skinny_controllers 0.5.6 → 0.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +21 -2
- data/lib/skinny_controllers/diet.rb +1 -1
- data/lib/skinny_controllers/operation/base.rb +11 -5
- data/lib/skinny_controllers/operation/default.rb +3 -3
- data/lib/skinny_controllers/operation/model_helpers.rb +1 -14
- data/lib/skinny_controllers/version.rb +1 -1
- data/lib/skinny_controllers.rb +0 -7
- metadata +2 -5
- data/lib/skinny_controllers/json_api_document.rb +0 -29
- data/lib/skinny_controllers/params/json.rb +0 -20
- data/lib/skinny_controllers/params/json_api.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33cb5420fdc28bbd364bb6016c4d6aead5d6a0ae
|
4
|
+
data.tar.gz: 0e9f8d8868d29ae0dac511c30e82dd9f06120cc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 557258742889bd97ad31e7c27db3a04fec56406d0eb08f59341f59c4736ce54e77f6d59bf7676009f5174cb50b984ec4cfbf1704411085efbb3f2ecb9683261c
|
7
|
+
data.tar.gz: 8986b7e99959fd999bd3a5891e73c78f55b06eb7ab0e3aec53d960d4393eadaec9e3d29de15e7e3e467f62247edd23379f347e6543420817750874f03c04dc22
|
data/README.md
CHANGED
@@ -87,7 +87,7 @@ end
|
|
87
87
|
private
|
88
88
|
|
89
89
|
def host_from_subdomain
|
90
|
-
@host ||= HostOperations::Read.new(current_user, host_params).run
|
90
|
+
@host ||= HostOperations::Read.new(current_user, params, host_params).run
|
91
91
|
end
|
92
92
|
|
93
93
|
def host_params
|
@@ -95,6 +95,26 @@ def host_params
|
|
95
95
|
end
|
96
96
|
```
|
97
97
|
|
98
|
+
### For JSON-API
|
99
|
+
|
100
|
+
Strong parameters must be used on create/update actions.
|
101
|
+
|
102
|
+
Here is an example params method
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
private
|
106
|
+
|
107
|
+
def event_params
|
108
|
+
params
|
109
|
+
.require(:data)
|
110
|
+
.require(:attributes)
|
111
|
+
.permit(:name)
|
112
|
+
end
|
113
|
+
```
|
114
|
+
|
115
|
+
Note that we don't need the id under the data hash, because in a RESTful api, the id will be available to us through the top level params hash.
|
116
|
+
|
117
|
+
|
98
118
|
## Defining Operations
|
99
119
|
|
100
120
|
Operations should be placed in `app/operations` of your rails app.
|
@@ -219,7 +239,6 @@ The following options are available:
|
|
219
239
|
|`accessible_to_method`|`is_accessible_to?`| method to call an the object that the user might be able to access |
|
220
240
|
|`accessible_to_scope`| `accessible_to`| scope / class method on an object that the user might be able to access |
|
221
241
|
|`action_map`| see [skinny_controllers.rb](./lib/skinny_controllers.rb#L61)| |
|
222
|
-
|`params_format`|`:json`| or `:json_api`|
|
223
242
|
|
224
243
|
## TODO
|
225
244
|
|
@@ -10,7 +10,7 @@ module SkinnyControllers
|
|
10
10
|
#
|
11
11
|
# @return an instance of the operation with default parameters
|
12
12
|
def operation
|
13
|
-
@operation ||= operation_class.new(current_user, params_for_action)
|
13
|
+
@operation ||= operation_class.new(current_user, params, params_for_action, action_name)
|
14
14
|
end
|
15
15
|
|
16
16
|
# Assumes the operation name from the controller name
|
@@ -15,22 +15,28 @@ module SkinnyControllers
|
|
15
15
|
class Base
|
16
16
|
include ModelHelpers
|
17
17
|
|
18
|
-
attr_accessor :params, :current_user, :authorized_via_parent
|
18
|
+
attr_accessor :params, :current_user, :authorized_via_parent, :action, :params_for_action
|
19
19
|
|
20
20
|
def self.run(current_user, params)
|
21
21
|
object = new(current_user, params)
|
22
22
|
object.run
|
23
23
|
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
# @param [Model] current_user the logged in user
|
26
|
+
# @param [Hash] controller_params the params hash raw from the controller
|
27
|
+
# @param [Hash] params_for_action optional params hash, generally the result of strong parameters
|
28
|
+
# @param [string] action the current action on the controller
|
29
|
+
def initialize(current_user, controller_params, params_for_action = nil, action = nil)
|
28
30
|
self.authorized_via_parent = false
|
31
|
+
self.current_user = current_user
|
32
|
+
self.action = action || controller_params[:action]
|
33
|
+
self.params = controller_params
|
34
|
+
self.params_for_action = params_for_action || controller_params
|
29
35
|
end
|
30
36
|
|
31
37
|
def id_from_params
|
32
38
|
unless @id_from_params
|
33
|
-
@id_from_params = params[:
|
39
|
+
@id_from_params = params[:id]
|
34
40
|
if filter = params[:filter]
|
35
41
|
@id_from_params = filter[:id].split(',')
|
36
42
|
end
|
@@ -27,15 +27,15 @@ module SkinnyControllers
|
|
27
27
|
private
|
28
28
|
|
29
29
|
def creating?
|
30
|
-
|
30
|
+
action == 'create'
|
31
31
|
end
|
32
32
|
|
33
33
|
def updating?
|
34
|
-
|
34
|
+
action == 'update'
|
35
35
|
end
|
36
36
|
|
37
37
|
def destroying?
|
38
|
-
|
38
|
+
action == 'destroy'
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -28,20 +28,7 @@ module SkinnyControllers
|
|
28
28
|
# for mass-assignment, rails doesn't accept
|
29
29
|
# stringified keys.
|
30
30
|
# TODO: why did the params hash lose its indifferent access
|
31
|
-
@model_params ||=
|
32
|
-
end
|
33
|
-
|
34
|
-
def param_parser
|
35
|
-
unless @param_parser
|
36
|
-
@param_parser =
|
37
|
-
if SkinnyControllers.params_format == :json
|
38
|
-
Params::Json.new(params, model_param_name)
|
39
|
-
else
|
40
|
-
Params::JsonApi.new(params, model_param_name)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
@param_parser
|
31
|
+
@model_params ||= (params_for_action[model_param_name] || params_for_action).symbolize_keys
|
45
32
|
end
|
46
33
|
|
47
34
|
def model_param_name
|
data/lib/skinny_controllers.rb
CHANGED
@@ -7,9 +7,6 @@ require 'active_support/core_ext/string/inflections'
|
|
7
7
|
|
8
8
|
# files for this gem
|
9
9
|
require 'skinny_controllers/default_verbs'
|
10
|
-
require 'skinny_controllers/json_api_document'
|
11
|
-
require 'skinny_controllers/params/json'
|
12
|
-
require 'skinny_controllers/params/json_api'
|
13
10
|
require 'skinny_controllers/lookup/controller'
|
14
11
|
require 'skinny_controllers/lookup/model'
|
15
12
|
require 'skinny_controllers/lookup/operation'
|
@@ -64,10 +61,6 @@ module SkinnyControllers
|
|
64
61
|
:accessible_to
|
65
62
|
end
|
66
63
|
|
67
|
-
cattr_accessor :params_format do
|
68
|
-
:json # or :json_api
|
69
|
-
end
|
70
|
-
|
71
64
|
# the diet uses ActionController::Base's
|
72
65
|
# `action_name` method to get the current action.
|
73
66
|
# From that action, we map what verb we want to use for our operation
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skinny_controllers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- L. Preston Sego III
|
@@ -189,7 +189,6 @@ files:
|
|
189
189
|
- lib/skinny_controllers.rb
|
190
190
|
- lib/skinny_controllers/default_verbs.rb
|
191
191
|
- lib/skinny_controllers/diet.rb
|
192
|
-
- lib/skinny_controllers/json_api_document.rb
|
193
192
|
- lib/skinny_controllers/lookup/controller.rb
|
194
193
|
- lib/skinny_controllers/lookup/model.rb
|
195
194
|
- lib/skinny_controllers/lookup/operation.rb
|
@@ -197,8 +196,6 @@ files:
|
|
197
196
|
- lib/skinny_controllers/operation/base.rb
|
198
197
|
- lib/skinny_controllers/operation/default.rb
|
199
198
|
- lib/skinny_controllers/operation/model_helpers.rb
|
200
|
-
- lib/skinny_controllers/params/json.rb
|
201
|
-
- lib/skinny_controllers/params/json_api.rb
|
202
199
|
- lib/skinny_controllers/policy/allow_all.rb
|
203
200
|
- lib/skinny_controllers/policy/base.rb
|
204
201
|
- lib/skinny_controllers/policy/default.rb
|
@@ -227,5 +224,5 @@ rubyforge_project:
|
|
227
224
|
rubygems_version: 2.4.8
|
228
225
|
signing_key:
|
229
226
|
specification_version: 4
|
230
|
-
summary: SkinnyControllers-0.5.
|
227
|
+
summary: SkinnyControllers-0.5.7
|
231
228
|
test_files: []
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module SkinnyControllers
|
2
|
-
# currently copied from NullVoxPopuli/json-api-document
|
3
|
-
# Not sure if this should be its own gem or not
|
4
|
-
class JsonApiDocument
|
5
|
-
attr_accessor :data, :id, :attributes
|
6
|
-
|
7
|
-
# @param [Hash] json the json api document
|
8
|
-
# @param [Symbol] key_formatter converts the attribute keys
|
9
|
-
def initialize(json, key_formatter: nil)
|
10
|
-
json = JSON.parse(json) if json.is_a?(String)
|
11
|
-
|
12
|
-
self.data = json['data']
|
13
|
-
self.id = json['id'] || data.try(:[], 'id')
|
14
|
-
self.attributes = format_keys(data.try(:[], 'attributes'), key_formatter)
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
# TODO: how to handle nested hashes
|
20
|
-
def format_keys(hash, key_format_method)
|
21
|
-
return hash unless key_format_method
|
22
|
-
|
23
|
-
hash.each_with_object({}) do | (k, v), result |
|
24
|
-
new_key = k.send(key_format_method)
|
25
|
-
result[new_key] = v
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module SkinnyControllers
|
2
|
-
module Params
|
3
|
-
class Json
|
4
|
-
attr_accessor :document, :model_key
|
5
|
-
# @param [Params] params from controller
|
6
|
-
def initialize(params, model_key)
|
7
|
-
self.document = params
|
8
|
-
self.model_key = model_key
|
9
|
-
end
|
10
|
-
|
11
|
-
def model_params
|
12
|
-
document[model_key].symbolize_keys
|
13
|
-
end
|
14
|
-
|
15
|
-
def id
|
16
|
-
document[:id]
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module SkinnyControllers
|
2
|
-
module Params
|
3
|
-
class JsonApi
|
4
|
-
attr_accessor :document, :model_key
|
5
|
-
|
6
|
-
# @param [Params] params from controller
|
7
|
-
def initialize(params, model_key)
|
8
|
-
self.document = JsonApiDocument.new(params)
|
9
|
-
self.model_key = model_key
|
10
|
-
end
|
11
|
-
|
12
|
-
def model_params
|
13
|
-
document.attributes
|
14
|
-
end
|
15
|
-
|
16
|
-
def id
|
17
|
-
document.id
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|