railsful 0.2.0 → 0.3.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 +4 -4
- data/README.md +11 -0
- data/lib/railsful/serializer.rb +28 -3
- data/lib/railsful/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cd2f4395f88962e11a4335a4bf967c227211ecf1cd0ebc8a08f6a874e776789
|
4
|
+
data.tar.gz: fa6dd976d49839ac1ba66059338511e9531cdf07cedbba0d984024145b9b5d11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b497801b60386efe403923d63ca2e77f0df7c899bec213dda0a332df117342d0dd92a1ad8e353bab72a478725afdb0249d674b646152a7b39b6ed3dd8c3aa17
|
7
|
+
data.tar.gz: 0ce44ea6f1a17ed26b9b3d7a77b1ac5e062365d2f13aa70190e1e4816cf00012c7c8594206b8ceb2fd70f2565e2603d6fa3a4c29eb91cb5f42fb20d78b5bce54
|
data/README.md
CHANGED
@@ -77,6 +77,17 @@ GET /some_module/users
|
|
77
77
|
}
|
78
78
|
```
|
79
79
|
|
80
|
+
If you want to use another serializer you can do this by specifying a
|
81
|
+
`serializer` key inside the options:
|
82
|
+
|
83
|
+
``` ruby
|
84
|
+
render json: User.first, serializer: 'author'
|
85
|
+
|
86
|
+
# or
|
87
|
+
|
88
|
+
render json: User.first, serializer: AuthorSerializer
|
89
|
+
```
|
90
|
+
|
80
91
|
### Deserialization
|
81
92
|
For deserialization of jsonapi compliant request all controllers that
|
82
93
|
inherit from `ActionController` can use the `#deserialized_params` method.
|
data/lib/railsful/serializer.rb
CHANGED
@@ -39,7 +39,7 @@ module Railsful
|
|
39
39
|
return options unless renderable
|
40
40
|
|
41
41
|
# Try to fetch the right serializer for given renderable.
|
42
|
-
serializer = serializer_for(renderable)
|
42
|
+
serializer = serializer_for(renderable, options)
|
43
43
|
|
44
44
|
# When no serializer is found just pass the original options hash.
|
45
45
|
return options unless serializer
|
@@ -49,12 +49,37 @@ module Railsful
|
|
49
49
|
end
|
50
50
|
|
51
51
|
# Find the right serializer for given object.
|
52
|
+
# First we will look if the options hash includes a serializer. If not,
|
53
|
+
# we try to guess the right serializer from the model/class name.
|
52
54
|
#
|
53
|
-
# @param [ApplicationRecord, ActiveRecord::Relation]
|
55
|
+
# @param renderable [ApplicationRecord, ActiveRecord::Relation]
|
56
|
+
# @param options [Hash]
|
54
57
|
# @return [Class] The serializer class.
|
55
58
|
#
|
56
59
|
# :reek:UtilityFunction
|
57
|
-
def serializer_for(renderable)
|
60
|
+
def serializer_for(renderable, options = {})
|
61
|
+
serializer_by_options(options) || serializer_by_renderable(renderable)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Check the options hash for a serializer key.
|
65
|
+
#
|
66
|
+
# @return [Class] The serializer class.
|
67
|
+
#
|
68
|
+
# :reek:UtilityFunction
|
69
|
+
def serializer_by_options(options)
|
70
|
+
serializer = options[:serializer]
|
71
|
+
return unless serializer
|
72
|
+
|
73
|
+
# If the given serializer is a class return it.
|
74
|
+
return serializer if serializer.is_a? Class
|
75
|
+
|
76
|
+
"#{serializer.to_s.classify}Serializer".safe_constantize
|
77
|
+
end
|
78
|
+
|
79
|
+
# @return [Class] The serializer class.
|
80
|
+
#
|
81
|
+
# :reek:UtilityFunction
|
82
|
+
def serializer_by_renderable(renderable)
|
58
83
|
# Get the class in order to find the right serializer.
|
59
84
|
klass = if renderable.is_a?(ActiveRecord::Relation)
|
60
85
|
renderable.model.name
|
data/lib/railsful/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: railsful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henning Vogt
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: deep_merge
|