pb-serializer 0.2.0 → 0.2.1
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/CHANGELOG.md +19 -0
- data/README.md +6 -6
- data/lib/pb/serializable.rb +14 -14
- data/lib/pb/serializer/attribute.rb +4 -4
- data/lib/pb/serializer/base.rb +3 -2
- data/lib/pb/serializer/oneof.rb +3 -3
- data/lib/pb/serializer/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed65391a95c2c1d8ebdcd7977c8c8992428c062df0f78c1ba7fbf047737e98e1
|
4
|
+
data.tar.gz: 1c6db98b94bde534ebbe2999509791b0e2354b15d5ee5bdde17035081e4bf3e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7989d54a7f8f699f97387b9dee18ae93e93eb80c745af81802454d34c7b3c262c8b849248ec979a7a1e15e30a1a0a5beabfad816dbd78852198a3d09ce8a0652
|
7
|
+
data.tar.gz: b9f1e003472b813316869a643ab0214f59eedf1431a998204a57622dffad4287161ff8c57f746d4106b6263ff5cc366c181e948c7ce787de48c98d390ff4c7df
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
## Unreleased
|
2
|
+
|
3
|
+
## 0.2.1
|
4
|
+
|
5
|
+
- **BREAKING CHANGE** `required` -> `allow_nil` https://github.com/wantedly/pb-serializer/pull/21
|
6
|
+
- Make Serializer's constructors extensible https://github.com/wantedly/pb-serializer/pull/22
|
7
|
+
|
8
|
+
## 0.2.0
|
9
|
+
|
10
|
+
- **BREAKING CHANGE** https://github.com/wantedly/pb-serializer/pull/17
|
11
|
+
- Support loading and serializing arrays
|
12
|
+
- Bump `computed_model` from 0.1.0 to 0.2.1
|
13
|
+
- Change API
|
14
|
+
- Add example specs https://github.com/wantedly/pb-serializer/pull/18
|
15
|
+
|
16
|
+
|
17
|
+
## 0.1.0
|
18
|
+
|
19
|
+
Initial release.
|
data/README.md
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
class UserSerializer < Pb::Serializer::Base
|
5
5
|
message YourApp::User
|
6
6
|
|
7
|
-
attribute :id
|
8
|
-
attribute :name
|
9
|
-
attribute :posts
|
7
|
+
attribute :id
|
8
|
+
attribute :name
|
9
|
+
attribute :posts
|
10
10
|
|
11
11
|
define_primary_loader :user do |subdeps, ids:, **|
|
12
12
|
User.where(id: ids).preload(subdeps).map { |u| new(u) }
|
@@ -29,9 +29,9 @@ class PostSerializer < Pb::Serializer::Base
|
|
29
29
|
Post.where(user_id: user_ids).preload(subdeps).map { |p| new(p) }
|
30
30
|
end
|
31
31
|
|
32
|
-
attribute :id
|
33
|
-
attribute :title
|
34
|
-
attribute :body
|
32
|
+
attribute :id
|
33
|
+
attribute :title
|
34
|
+
attribute :body
|
35
35
|
end
|
36
36
|
|
37
37
|
class UserGrpcService < YourApp::UserService::Service
|
data/lib/pb/serializable.rb
CHANGED
@@ -22,19 +22,19 @@ module Pb
|
|
22
22
|
v = public_send(attr.name)
|
23
23
|
v = attr.convert_to_pb(v)
|
24
24
|
|
25
|
-
if attr.
|
25
|
+
if attr.oneof?
|
26
|
+
if !v.nil?
|
27
|
+
if oneof_set.include?(attr.oneof)
|
28
|
+
raise ::Pb::Serializer::ConflictOneofError, "#{primary_object.class.name}##{attr.name} is oneof attribute"
|
29
|
+
end
|
30
|
+
oneof_set << attr.oneof
|
31
|
+
end
|
32
|
+
elsif !attr.allow_nil? && v.nil?
|
26
33
|
raise ::Pb::Serializer::ValidationError, "#{primary_object.class.name}##{attr.name} is required"
|
27
34
|
end
|
28
35
|
|
29
36
|
next if v.nil?
|
30
37
|
|
31
|
-
if attr.oneof?
|
32
|
-
if oneof_set.include?(attr.oneof)
|
33
|
-
raise ::Pb::Serializer::ConflictOneofError, "#{primary_object.class.name}##{attr.name} is oneof attribute"
|
34
|
-
end
|
35
|
-
oneof_set << attr.oneof
|
36
|
-
end
|
37
|
-
|
38
38
|
if attr.repeated?
|
39
39
|
o.public_send(attr.name).push(*v)
|
40
40
|
else
|
@@ -44,7 +44,7 @@ module Pb
|
|
44
44
|
|
45
45
|
self.class.oneofs.each do |oneof|
|
46
46
|
next if oneof_set.include?(oneof.name)
|
47
|
-
next
|
47
|
+
next if oneof.allow_nil?
|
48
48
|
raise ::Pb::Serializer::ValidationError, "#{primary_object.class.name}##{oneof.name} is required"
|
49
49
|
end
|
50
50
|
|
@@ -91,15 +91,15 @@ module Pb
|
|
91
91
|
end
|
92
92
|
|
93
93
|
# @param name [Symbol] An attribute name
|
94
|
-
# @param
|
94
|
+
# @param allow_nil [Boolean] Set true if this attribute allow to be nil
|
95
95
|
# @param serializer [Class] A serializer class for this attribute
|
96
|
-
def attribute(name,
|
96
|
+
def attribute(name, allow_nil: false, serializer: nil)
|
97
97
|
fd = message_class.descriptor.find { |fd| fd.name.to_sym == name }
|
98
98
|
raise ::Pb::Serializer::UnknownFieldError, "#{name} is not defined in #{message_class.name}" unless fd
|
99
99
|
|
100
100
|
attr = ::Pb::Serializer::Attribute.new(
|
101
101
|
name: name,
|
102
|
-
|
102
|
+
allow_nil: allow_nil,
|
103
103
|
serializer_class: serializer,
|
104
104
|
field_descriptor: fd,
|
105
105
|
oneof: @current_oneof&.name,
|
@@ -126,11 +126,11 @@ module Pb
|
|
126
126
|
bulk_load_and_compute(with, **args)
|
127
127
|
end
|
128
128
|
|
129
|
-
def oneof(name,
|
129
|
+
def oneof(name, allow_nil: false)
|
130
130
|
@oneof_by_name ||= {}
|
131
131
|
@current_oneof = ::Pb::Serializer::Oneof.new(
|
132
132
|
name: name,
|
133
|
-
|
133
|
+
allow_nil: allow_nil,
|
134
134
|
attributes: [],
|
135
135
|
)
|
136
136
|
yield
|
@@ -2,7 +2,7 @@ module Pb
|
|
2
2
|
module Serializer
|
3
3
|
class Attribute < Struct.new(
|
4
4
|
:name,
|
5
|
-
:
|
5
|
+
:allow_nil,
|
6
6
|
:serializer_class,
|
7
7
|
:field_descriptor,
|
8
8
|
:oneof,
|
@@ -10,8 +10,8 @@ module Pb
|
|
10
10
|
)
|
11
11
|
|
12
12
|
# @return [Boolean]
|
13
|
-
def
|
14
|
-
|
13
|
+
def allow_nil?
|
14
|
+
allow_nil
|
15
15
|
end
|
16
16
|
|
17
17
|
# @return [Boolean]
|
@@ -25,6 +25,7 @@ module Pb
|
|
25
25
|
|
26
26
|
# @param v [Object]
|
27
27
|
def convert_to_pb(v, should_repeat: repeated?)
|
28
|
+
return nil if v.nil?
|
28
29
|
return v.map { |i| convert_to_pb(i, should_repeat: false) } if should_repeat
|
29
30
|
|
30
31
|
case field_descriptor.type
|
@@ -41,7 +42,6 @@ module Pb
|
|
41
42
|
when "google.protobuf.BoolValue" then Pb.to_boolval(v)
|
42
43
|
when "google.protobuf.BytesValue" then Pb.to_bytesval(v)
|
43
44
|
else
|
44
|
-
return nil if v.nil?
|
45
45
|
return serializer_class.new(v).to_pb if serializer_class
|
46
46
|
return v.to_pb if v.kind_of?(::Pb::Serializable)
|
47
47
|
|
data/lib/pb/serializer/base.rb
CHANGED
@@ -8,14 +8,15 @@ module Pb
|
|
8
8
|
|
9
9
|
attr_reader :object
|
10
10
|
|
11
|
-
def initialize(object)
|
11
|
+
def initialize(object, *)
|
12
12
|
@object = object
|
13
13
|
end
|
14
14
|
|
15
15
|
module Hook
|
16
16
|
def define_primary_loader(name, &block)
|
17
17
|
class_eval <<~RUBY
|
18
|
-
def initialize(
|
18
|
+
def initialize(*args)
|
19
|
+
super
|
19
20
|
@#{name} = object
|
20
21
|
end
|
21
22
|
RUBY
|
data/lib/pb/serializer/oneof.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pb-serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- izumin5210
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-protobuf
|
@@ -169,6 +169,7 @@ files:
|
|
169
169
|
- ".rspec"
|
170
170
|
- ".rubocop.yml"
|
171
171
|
- ".rubocop_todo.yml"
|
172
|
+
- CHANGELOG.md
|
172
173
|
- CODE_OF_CONDUCT.md
|
173
174
|
- Gemfile
|
174
175
|
- LICENSE.txt
|