skinny_controllers 0.5.3 → 0.5.4
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 +4 -4
- data/README.md +4 -4
- data/lib/skinny_controllers/json_api_document.rb +29 -0
- data/lib/skinny_controllers/operation/base.rb +1 -1
- data/lib/skinny_controllers/operation/model_helpers.rb +14 -1
- data/lib/skinny_controllers/params/json.rb +20 -0
- data/lib/skinny_controllers/params/json_api.rb +21 -0
- data/lib/skinny_controllers/policy/base.rb +1 -1
- data/lib/skinny_controllers/version.rb +1 -1
- data/lib/skinny_controllers.rb +7 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37c23f99827b6f219c4d8c9639047679d50e71c5
|
4
|
+
data.tar.gz: ba943a28a5d56c8f61245d70466fbf071aeb1c98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f17ce4c443b039f831b12eee469de045571fc963aa5f0657363965773427dec8476ea61a9e55cdebdbae8836e3d7d2c0d01ef546d8bbed10cc4e4e69f8d4ee4a
|
7
|
+
data.tar.gz: 3bd1b95c27f8b5fce730bfb7caafa2adf90e1a3b2a9ea0d418baa0411c89dc898cd1ad42a1fdbb186acbd7d20b2d85d9f9f97bfeb09cd5a9553223884bbad4e1
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# skinny_controllers
|
2
2
|
[](https://badge.fury.io/rb/skinny_controllers)
|
3
3
|
[](https://travis-ci.org/NullVoxPopuli/skinny_controllers)
|
4
4
|
[](https://codeclimate.com/github/NullVoxPopuli/skinny_controllers)
|
@@ -89,7 +89,7 @@ private
|
|
89
89
|
def host_from_subdomain
|
90
90
|
@host ||= HostOperations::Read.new(current_user, host_params).run
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
def host_params
|
94
94
|
params.permit(:subdomain)
|
95
95
|
end
|
@@ -149,7 +149,7 @@ end
|
|
149
149
|
### Updating
|
150
150
|
```ruby
|
151
151
|
module UserOperations
|
152
|
-
class
|
152
|
+
class Update < SkinnyControllers::Operation::Base
|
153
153
|
def run
|
154
154
|
return unless allowed?
|
155
155
|
model.update(model_params)
|
@@ -219,7 +219,7 @@ The following options are available:
|
|
219
219
|
|`accessible_to_method`|`is_accessible_to?`| method to call an the object that the user might be able to access |
|
220
220
|
|`accessible_to_scope`| `accessible_to`| scope / class method on an object that the user might be able to access |
|
221
221
|
|`action_map`| see [skinny_controllers.rb](./lib/skinny_controllers.rb#L61)| |
|
222
|
-
|
222
|
+
|`params_format`|`:json`| or `:json_api`|
|
223
223
|
|
224
224
|
## TODO
|
225
225
|
|
@@ -0,0 +1,29 @@
|
|
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 = data['id']
|
14
|
+
self.attributes = format_keys(data['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
|
@@ -30,7 +30,7 @@ module SkinnyControllers
|
|
30
30
|
|
31
31
|
def id_from_params
|
32
32
|
unless @id_from_params
|
33
|
-
@id_from_params = params[:id]
|
33
|
+
@id_from_params = params[:data] ? params[:data][:id] : params[:id]
|
34
34
|
if filter = params[:filter]
|
35
35
|
@id_from_params = filter[:id].split(',')
|
36
36
|
end
|
@@ -28,7 +28,20 @@ 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 ||=
|
31
|
+
@model_params ||= param_parser.model_params.symbolize_keys
|
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
|
32
45
|
end
|
33
46
|
|
34
47
|
def model_param_name
|
@@ -0,0 +1,20 @@
|
|
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
|
@@ -0,0 +1,21 @@
|
|
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
|
@@ -20,7 +20,7 @@ module SkinnyControllers
|
|
20
20
|
def method_missing(method_name, *args, &block)
|
21
21
|
# if the method ends in a question mark, re-route to default
|
22
22
|
if method_name.to_s =~ /(.+)\?/
|
23
|
-
action =
|
23
|
+
action = Regexp.last_match(1)
|
24
24
|
# alias destroy to delete
|
25
25
|
# TODO: this means that a destroy method, if defined,
|
26
26
|
# will never be called.... good or bad?
|
data/lib/skinny_controllers.rb
CHANGED
@@ -7,6 +7,9 @@ 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'
|
10
13
|
require 'skinny_controllers/lookup/controller'
|
11
14
|
require 'skinny_controllers/lookup/model'
|
12
15
|
require 'skinny_controllers/lookup/operation'
|
@@ -61,6 +64,10 @@ module SkinnyControllers
|
|
61
64
|
:accessible_to
|
62
65
|
end
|
63
66
|
|
67
|
+
cattr_accessor :params_format do
|
68
|
+
:json # or :json_api
|
69
|
+
end
|
70
|
+
|
64
71
|
# the diet uses ActionController::Base's
|
65
72
|
# `action_name` method to get the current action.
|
66
73
|
# From that action, we map what verb we want to use for our operation
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- L. Preston Sego III
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -189,6 +189,7 @@ 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
|
192
193
|
- lib/skinny_controllers/lookup/controller.rb
|
193
194
|
- lib/skinny_controllers/lookup/model.rb
|
194
195
|
- lib/skinny_controllers/lookup/operation.rb
|
@@ -196,6 +197,8 @@ files:
|
|
196
197
|
- lib/skinny_controllers/operation/base.rb
|
197
198
|
- lib/skinny_controllers/operation/default.rb
|
198
199
|
- lib/skinny_controllers/operation/model_helpers.rb
|
200
|
+
- lib/skinny_controllers/params/json.rb
|
201
|
+
- lib/skinny_controllers/params/json_api.rb
|
199
202
|
- lib/skinny_controllers/policy/allow_all.rb
|
200
203
|
- lib/skinny_controllers/policy/base.rb
|
201
204
|
- lib/skinny_controllers/policy/default.rb
|
@@ -224,5 +227,5 @@ rubyforge_project:
|
|
224
227
|
rubygems_version: 2.4.8
|
225
228
|
signing_key:
|
226
229
|
specification_version: 4
|
227
|
-
summary: SkinnyControllers-0.5.
|
230
|
+
summary: SkinnyControllers-0.5.4
|
228
231
|
test_files: []
|