serializr 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 +37 -9
- data/lib/generators/serializr/serializr_generator.rb +1 -1
- data/lib/serializr/version.rb +1 -1
- data/lib/serializr.rb +8 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 401cb01b0f27931f2a1a2c28c938e4e3990ec529
|
4
|
+
data.tar.gz: 9849952b0cb668f9e5fcbf9d0c1b3fd652bdf65a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3998530017184a7906c166f3dc786c9191c8402edd587e15f279f6317732a30533fbac00d1f5d85a7552f4459fa5643e43d53c9a4a4cb05b195742b6ae2a25b2
|
7
|
+
data.tar.gz: fb27cf00e7093a2cf73d5683e220f775d7a34f567c84ee02caa8021460a9604ee1936111169ce555d5cedfab4d001519fb7918e7f0e2ce91494d5722c41ef11d
|
data/README.md
CHANGED
@@ -93,7 +93,7 @@ You can also render collections of objects:
|
|
93
93
|
```ruby
|
94
94
|
class FriendsController < ApplicationController
|
95
95
|
def index
|
96
|
-
|
96
|
+
friends = User.friends_of(params[:id])
|
97
97
|
|
98
98
|
render json: friends
|
99
99
|
end
|
@@ -108,7 +108,7 @@ cool, you know. 😎
|
|
108
108
|
```ruby
|
109
109
|
class FriendsController < ApplicationController
|
110
110
|
def index
|
111
|
-
|
111
|
+
friends = User.friends_of(params[:id])
|
112
112
|
|
113
113
|
render json: friends, serializer: UserSerializer[]
|
114
114
|
end
|
@@ -120,7 +120,7 @@ And this is how you drop `Action View` off your API's, kids!
|
|
120
120
|
(_Not really, but anyway, I have the stage now, I do the typing. Fuck off and
|
121
121
|
call my therapist!_)
|
122
122
|
|
123
|
-
###
|
123
|
+
### 👆 Last Thing
|
124
124
|
|
125
125
|
To fill the API cliché, we need to go over one last file:
|
126
126
|
`app/serializers/application_serializer.rb`. At first, it looks like this:
|
@@ -144,17 +144,45 @@ class ApplicationSerializer < Serializr
|
|
144
144
|
# JSON responses.
|
145
145
|
inlcude Rails.application.routes.url_helpers
|
146
146
|
|
147
|
-
|
147
|
+
cattr_reader :serializer_class_cache do
|
148
|
+
Hash.new do |hash, cls|
|
149
|
+
hash[cls] = "#{cls}Serializer".constantize
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
# Because I'm sure you gonna ask: how do I render associations. Where are the
|
154
|
+
# `has_one` and `has_many` class macros?
|
155
|
+
#
|
156
|
+
# The answers is: you don't need those macros. You can use similar methods
|
157
|
+
# like the ones below to render the associations with plain old boring Ruby
|
158
|
+
# methods.
|
159
|
+
#
|
160
|
+
# class UserSerializer < ApplicationSerializer
|
161
|
+
# attributes :card
|
162
|
+
#
|
163
|
+
# def card
|
164
|
+
# render_one(object.credit_card)
|
165
|
+
# end
|
166
|
+
# end
|
167
|
+
#
|
168
|
+
# No extra DSL, but still: clean, consise and flexible view code.
|
169
|
+
def render_one(object, serializer: nil)
|
170
|
+
return unless object
|
171
|
+
|
172
|
+
serializer ||= serializer_class_cache[object.class]
|
173
|
+
serializer.new(object)
|
174
|
+
end
|
175
|
+
|
176
|
+
def render_many(objects, serializer: nil)
|
177
|
+
return [] if objects.blank?
|
148
178
|
|
149
|
-
|
150
|
-
|
151
|
-
def render_timestamp(timestamp)
|
152
|
-
timestamp || EPOCH_TIME
|
179
|
+
serializer ||= serializer_class_cache[objects.first.class][]
|
180
|
+
serializer.new(objects)
|
153
181
|
end
|
154
182
|
end
|
155
183
|
```
|
156
184
|
|
157
|
-
###
|
185
|
+
### ✌️ Last Thing
|
158
186
|
|
159
187
|
Serializr? Really? I know. It's fine.
|
160
188
|
|
@@ -28,7 +28,7 @@ class SerializrGenerator < Rails::Generators::NamedBase
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def generate_application_serilzer
|
31
|
-
if
|
31
|
+
if behavior == :invoke && !application_serilzer_exist?
|
32
32
|
template 'application_serializr.rb', application_serilzer_file_name
|
33
33
|
end
|
34
34
|
end
|
data/lib/serializr/version.rb
CHANGED
data/lib/serializr.rb
CHANGED
@@ -31,8 +31,12 @@ class Serializr
|
|
31
31
|
@@collection_class_cache ||= Hash.new do |hash, cls|
|
32
32
|
hash[cls] = Class.new(cls) do
|
33
33
|
def as_json
|
34
|
-
serializer = self.class.superclass
|
35
|
-
|
34
|
+
serializer = self.class.superclass.new(nil, options)
|
35
|
+
|
36
|
+
object.map do |obj|
|
37
|
+
serializer.object = obj
|
38
|
+
serializer.as_json
|
39
|
+
end
|
36
40
|
end
|
37
41
|
end
|
38
42
|
end
|
@@ -56,9 +60,9 @@ class Serializr
|
|
56
60
|
end]
|
57
61
|
end
|
58
62
|
|
59
|
-
|
63
|
+
protected
|
60
64
|
|
61
|
-
|
65
|
+
attr_accessor :object, :options
|
62
66
|
end
|
63
67
|
|
64
68
|
# Let's get the constant, even if we don't explicitly `require 'serializer'`.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serializr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genadi Samokovarov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|