adequate_serializer 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.hound.yml +3 -0
- data/.rubocop.yml +258 -0
- data/README.md +23 -0
- data/lib/adequate_serializer/base.rb +8 -5
- data/lib/adequate_serializer/collection.rb +6 -8
- data/lib/adequate_serializer/controller.rb +44 -0
- data/lib/adequate_serializer/helper.rb +11 -6
- data/lib/adequate_serializer/railtie.rb +1 -1
- data/lib/adequate_serializer/version.rb +1 -1
- data/lib/adequate_serializer.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41bf0c76c529a67b403e18abe9130b3f45c67212
|
4
|
+
data.tar.gz: 01f9a35b1d5b2563b1798915173144e89d5a7ea1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a837ae3287a6b6b38e3dd35c17a5705f19dcfde73c02a3045ab3fb2879bf53f3c620ef0bdb2c4d29c378110cadd5ad2c16903feb91798999a0eb5c2551e2c83d
|
7
|
+
data.tar.gz: 905b0dca87e74872e8618b4a511f896cbb369c261854e71dcaec3857187c7e2b3c2a1c423ddc3fb9ea80dee00e4160b6472d4796df5778277914217d50174c5d
|
data/.hound.yml
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
AccessorMethodName:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
ActionFilter:
|
5
|
+
Enabled: false
|
6
|
+
|
7
|
+
Alias:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
ArrayJoin:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
AsciiComments:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
AsciiIdentifiers:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Attr:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
BlockNesting:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
CaseEquality:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
CharacterLiteral:
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
ClassAndModuleChildren:
|
32
|
+
Enabled: false
|
33
|
+
|
34
|
+
ClassLength:
|
35
|
+
Enabled: false
|
36
|
+
|
37
|
+
ClassVars:
|
38
|
+
Enabled: false
|
39
|
+
|
40
|
+
CollectionMethods:
|
41
|
+
PreferredMethods:
|
42
|
+
find: detect
|
43
|
+
reduce: inject
|
44
|
+
collect: map
|
45
|
+
find_all: select
|
46
|
+
|
47
|
+
ColonMethodCall:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
CommentAnnotation:
|
51
|
+
Enabled: false
|
52
|
+
|
53
|
+
CyclomaticComplexity:
|
54
|
+
Enabled: false
|
55
|
+
|
56
|
+
Delegate:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
DeprecatedHashMethods:
|
60
|
+
Enabled: false
|
61
|
+
|
62
|
+
Documentation:
|
63
|
+
Enabled: false
|
64
|
+
|
65
|
+
DotPosition:
|
66
|
+
EnforcedStyle: leading
|
67
|
+
|
68
|
+
DoubleNegation:
|
69
|
+
Enabled: false
|
70
|
+
|
71
|
+
EachWithObject:
|
72
|
+
Enabled: false
|
73
|
+
|
74
|
+
EmptyLiteral:
|
75
|
+
Enabled: false
|
76
|
+
|
77
|
+
Encoding:
|
78
|
+
Enabled: false
|
79
|
+
|
80
|
+
EvenOdd:
|
81
|
+
Enabled: false
|
82
|
+
|
83
|
+
FileName:
|
84
|
+
Enabled: false
|
85
|
+
|
86
|
+
FlipFlop:
|
87
|
+
Enabled: false
|
88
|
+
|
89
|
+
FormatString:
|
90
|
+
Enabled: false
|
91
|
+
|
92
|
+
GlobalVars:
|
93
|
+
Enabled: false
|
94
|
+
|
95
|
+
GuardClause:
|
96
|
+
Enabled: false
|
97
|
+
|
98
|
+
IfUnlessModifier:
|
99
|
+
Enabled: false
|
100
|
+
|
101
|
+
IfWithSemicolon:
|
102
|
+
Enabled: false
|
103
|
+
|
104
|
+
InlineComment:
|
105
|
+
Enabled: false
|
106
|
+
|
107
|
+
Lambda:
|
108
|
+
Enabled: false
|
109
|
+
|
110
|
+
LambdaCall:
|
111
|
+
Enabled: false
|
112
|
+
|
113
|
+
LineEndConcatenation:
|
114
|
+
Enabled: false
|
115
|
+
|
116
|
+
LineLength:
|
117
|
+
Max: 85
|
118
|
+
|
119
|
+
MethodLength:
|
120
|
+
Enabled: false
|
121
|
+
|
122
|
+
ModuleFunction:
|
123
|
+
Enabled: false
|
124
|
+
|
125
|
+
MultilineOperationIndentation:
|
126
|
+
EnforcedStyle: indented
|
127
|
+
|
128
|
+
NegatedIf:
|
129
|
+
Enabled: false
|
130
|
+
|
131
|
+
NegatedWhile:
|
132
|
+
Enabled: false
|
133
|
+
|
134
|
+
Next:
|
135
|
+
Enabled: false
|
136
|
+
|
137
|
+
NilComparison:
|
138
|
+
Enabled: false
|
139
|
+
|
140
|
+
Not:
|
141
|
+
Enabled: false
|
142
|
+
|
143
|
+
NumericLiterals:
|
144
|
+
Enabled: false
|
145
|
+
|
146
|
+
OneLineConditional:
|
147
|
+
Enabled: false
|
148
|
+
|
149
|
+
OpMethod:
|
150
|
+
Enabled: false
|
151
|
+
|
152
|
+
ParameterLists:
|
153
|
+
Enabled: false
|
154
|
+
|
155
|
+
PercentLiteralDelimiters:
|
156
|
+
Enabled: false
|
157
|
+
|
158
|
+
PerlBackrefs:
|
159
|
+
Enabled: false
|
160
|
+
|
161
|
+
PredicateName:
|
162
|
+
NamePrefixBlacklist:
|
163
|
+
- is_
|
164
|
+
|
165
|
+
Proc:
|
166
|
+
Enabled: false
|
167
|
+
|
168
|
+
RaiseArgs:
|
169
|
+
Enabled: false
|
170
|
+
|
171
|
+
RegexpLiteral:
|
172
|
+
Enabled: false
|
173
|
+
|
174
|
+
SelfAssignment:
|
175
|
+
Enabled: false
|
176
|
+
|
177
|
+
SingleLineBlockParams:
|
178
|
+
Enabled: false
|
179
|
+
|
180
|
+
SingleLineMethods:
|
181
|
+
Enabled: false
|
182
|
+
|
183
|
+
SignalException:
|
184
|
+
Enabled: false
|
185
|
+
|
186
|
+
SpecialGlobalVars:
|
187
|
+
Enabled: false
|
188
|
+
|
189
|
+
StringLiterals:
|
190
|
+
EnforcedStyle: single_quotes
|
191
|
+
|
192
|
+
VariableInterpolation:
|
193
|
+
Enabled: false
|
194
|
+
|
195
|
+
TrailingComma:
|
196
|
+
Enabled: false
|
197
|
+
|
198
|
+
TrivialAccessors:
|
199
|
+
Enabled: false
|
200
|
+
|
201
|
+
VariableInterpolation:
|
202
|
+
Enabled: false
|
203
|
+
|
204
|
+
WhenThen:
|
205
|
+
Enabled: false
|
206
|
+
|
207
|
+
WhileUntilModifier:
|
208
|
+
Enabled: false
|
209
|
+
|
210
|
+
WordArray:
|
211
|
+
Enabled: false
|
212
|
+
|
213
|
+
# Lint
|
214
|
+
|
215
|
+
AmbiguousOperator:
|
216
|
+
Enabled: false
|
217
|
+
|
218
|
+
AmbiguousRegexpLiteral:
|
219
|
+
Enabled: false
|
220
|
+
|
221
|
+
AssignmentInCondition:
|
222
|
+
Enabled: false
|
223
|
+
|
224
|
+
ConditionPosition:
|
225
|
+
Enabled: false
|
226
|
+
|
227
|
+
DeprecatedClassMethods:
|
228
|
+
Enabled: false
|
229
|
+
|
230
|
+
ElseLayout:
|
231
|
+
Enabled: false
|
232
|
+
|
233
|
+
HandleExceptions:
|
234
|
+
Enabled: false
|
235
|
+
|
236
|
+
InvalidCharacterLiteral:
|
237
|
+
Enabled: false
|
238
|
+
|
239
|
+
LiteralInCondition:
|
240
|
+
Enabled: false
|
241
|
+
|
242
|
+
LiteralInInterpolation:
|
243
|
+
Enabled: false
|
244
|
+
|
245
|
+
Loop:
|
246
|
+
Enabled: false
|
247
|
+
|
248
|
+
ParenthesesAsGroupedExpression:
|
249
|
+
Enabled: false
|
250
|
+
|
251
|
+
RequireParentheses:
|
252
|
+
Enabled: false
|
253
|
+
|
254
|
+
UnderscorePrefixedVariableName:
|
255
|
+
Enabled: false
|
256
|
+
|
257
|
+
Void:
|
258
|
+
Enabled: false
|
data/README.md
CHANGED
@@ -139,6 +139,29 @@ class UserSerializer::Base
|
|
139
139
|
end
|
140
140
|
```
|
141
141
|
|
142
|
+
#### Scope
|
143
|
+
|
144
|
+
By default, the `current_user` is available in the serializer as `scope`.
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
class UserSerializer::Base
|
148
|
+
attributes :id, :created_at, :updated_at
|
149
|
+
associations :posts
|
150
|
+
|
151
|
+
def posts
|
152
|
+
Post.where(user_id: scope.id).published
|
153
|
+
end
|
154
|
+
end
|
155
|
+
```
|
156
|
+
|
157
|
+
The scope can be customized in the controller.
|
158
|
+
|
159
|
+
```ruby
|
160
|
+
serialization_scope :user_id
|
161
|
+
```
|
162
|
+
|
163
|
+
In this example the `user_id` will be available as `scope`.
|
164
|
+
|
142
165
|
## Development
|
143
166
|
|
144
167
|
After checking out the repo, run `bin/setup` to install dependencies.
|
@@ -29,12 +29,13 @@ module AdequateSerializer
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
attr_accessor :object, :includes, :root
|
32
|
+
attr_accessor :object, :includes, :root, :scope
|
33
33
|
|
34
|
-
def initialize(object,
|
34
|
+
def initialize(object, options = {})
|
35
35
|
@object = object
|
36
|
-
@includes = includes
|
37
|
-
@root = root
|
36
|
+
@includes = options[:includes]
|
37
|
+
@root = options[:root]
|
38
|
+
@scope = options[:scope]
|
38
39
|
end
|
39
40
|
|
40
41
|
def as_json(options = {})
|
@@ -98,7 +99,9 @@ module AdequateSerializer
|
|
98
99
|
associated_objects = associated_objects(association_key)
|
99
100
|
|
100
101
|
unless associated_objects.nil?
|
101
|
-
serialize(
|
102
|
+
serialize(
|
103
|
+
associated_objects, root: false, includes: includes, scope: scope
|
104
|
+
)
|
102
105
|
end
|
103
106
|
end
|
104
107
|
|
@@ -5,19 +5,17 @@ module AdequateSerializer
|
|
5
5
|
class Collection
|
6
6
|
include Helper
|
7
7
|
|
8
|
-
attr_accessor :collection, :
|
8
|
+
attr_accessor :collection, :root, :collection_options
|
9
9
|
|
10
|
-
def initialize(collection,
|
10
|
+
def initialize(collection, options = {})
|
11
11
|
@collection = collection
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@
|
12
|
+
@root = options.delete(:root)
|
13
|
+
@collection_options = options
|
14
|
+
@collection_options[:root] = false
|
15
15
|
end
|
16
16
|
|
17
17
|
def as_json(options = {})
|
18
|
-
data = collection.map
|
19
|
-
serialize(item, includes: includes, root: false, serializer: serializer)
|
20
|
-
end
|
18
|
+
data = collection.map { |item| serialize(item, collection_options) }
|
21
19
|
|
22
20
|
if root == false
|
23
21
|
data
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'adequate_serializer/helper'
|
2
|
+
|
3
|
+
module AdequateSerializer
|
4
|
+
module Controller
|
5
|
+
include Helper
|
6
|
+
|
7
|
+
alias_method :helper_serialize, :serialize
|
8
|
+
|
9
|
+
def self.included(base)
|
10
|
+
base.extend ClassMethods
|
11
|
+
base.class_eval do
|
12
|
+
self._serialization_scope = :current_user
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
attr_accessor :_serialization_scope
|
18
|
+
|
19
|
+
def inherited(base)
|
20
|
+
base._serialization_scope = _serialization_scope
|
21
|
+
end
|
22
|
+
|
23
|
+
def serialization_scope(scope)
|
24
|
+
self._serialization_scope = scope
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def serialize(entity, options = {})
|
29
|
+
options[:scope] = serialization_scope
|
30
|
+
|
31
|
+
helper_serialize(entity, options)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def serialization_scope
|
37
|
+
scope = self.class._serialization_scope
|
38
|
+
|
39
|
+
if scope && respond_to?(scope, true)
|
40
|
+
send(scope)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,14 +1,19 @@
|
|
1
1
|
module AdequateSerializer
|
2
2
|
module Helper
|
3
|
-
def serialize(entity,
|
3
|
+
def serialize(entity, options = {})
|
4
4
|
if entity.respond_to?(:each)
|
5
|
-
Collection
|
6
|
-
entity, includes: includes, root: root, serializer: serializer
|
7
|
-
).as_json
|
5
|
+
serializer = Collection
|
8
6
|
else
|
9
|
-
serializer
|
10
|
-
serializer.new(entity, includes: includes, root: root).as_json
|
7
|
+
serializer = options[:serializer] || serializer_klass(entity)
|
11
8
|
end
|
9
|
+
|
10
|
+
serializer.new(entity, options).as_json
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def serializer_klass(entity)
|
16
|
+
Object.const_get("#{entity.class}Serializer")
|
12
17
|
end
|
13
18
|
end
|
14
19
|
end
|
data/lib/adequate_serializer.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adequate_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bastian Bartmann
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -74,6 +74,8 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
|
+
- ".hound.yml"
|
78
|
+
- ".rubocop.yml"
|
77
79
|
- ".travis.yml"
|
78
80
|
- CODE_OF_CONDUCT.md
|
79
81
|
- Gemfile
|
@@ -86,6 +88,7 @@ files:
|
|
86
88
|
- lib/adequate_serializer.rb
|
87
89
|
- lib/adequate_serializer/base.rb
|
88
90
|
- lib/adequate_serializer/collection.rb
|
91
|
+
- lib/adequate_serializer/controller.rb
|
89
92
|
- lib/adequate_serializer/helper.rb
|
90
93
|
- lib/adequate_serializer/railtie.rb
|
91
94
|
- lib/adequate_serializer/version.rb
|