pbbuilder 0.1.0 → 0.5.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/.gitignore +2 -0
- data/Gemfile +3 -0
- data/lib/pbbuilder.rb +21 -5
- data/lib/pbbuilder/handler.rb +1 -1
- data/lib/pbbuilder/protobuf_extension.rb +7 -0
- data/pbbuilder.gemspec +1 -2
- data/test/pbbuilder_test.rb +13 -3
- data/test/protobuf_extension_test.rb +18 -0
- data/test/test_helper.rb +5 -0
- metadata +5 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ef756425a57d8ea7b70338e5d15f4de645a0fe43c6429a7bc83e601c3ae7730
|
4
|
+
data.tar.gz: 5c7579092048ee2b38f4aca3fa02c0c1490bb2f87a0ae58e9120672ca78b2de7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f963451d5430510700378384d0a996ad6eb15e311dc3669d8246122c2db7e65a0bb9b50b63855b18da1cf5f1484a57f85ad3eda95b3647f09438d04fc78d0e9
|
7
|
+
data.tar.gz: 52d88436c2f78dbe307f2ce87935a03c293a6ee68d2c471c993ef753166f7450380bf600f759b2d4d5467c5167a50d93dcb63d145085f8bf50acbcdc43531bd1
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/lib/pbbuilder.rb
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
# It basically works exactly like jbuilder. The main difference is that it can use introspection to figure out what kind
|
22
22
|
# of protobuf message it needs to create.
|
23
23
|
|
24
|
-
class Pbbuilder
|
24
|
+
class Pbbuilder < BasicObject
|
25
25
|
def initialize(message)
|
26
26
|
@message = message
|
27
27
|
|
@@ -44,7 +44,7 @@ class Pbbuilder
|
|
44
44
|
raise ::ArgumentError, "can't pass block to non-message field" unless descriptor.type == :message
|
45
45
|
|
46
46
|
if descriptor.label == :repeated
|
47
|
-
# pb.field @array { |element| pb.name
|
47
|
+
# pb.field @array { |element| pb.name element.name }
|
48
48
|
raise ::ArgumentError, "wrong number of arguments (expected 1)" unless args.length == 1
|
49
49
|
collection = args.first
|
50
50
|
_append_repeated(name, descriptor, collection, &block)
|
@@ -52,11 +52,24 @@ class Pbbuilder
|
|
52
52
|
end
|
53
53
|
|
54
54
|
raise ::ArgumentError, "wrong number of arguments (expected 0)" unless args.empty?
|
55
|
-
# pb.field { pb.name
|
55
|
+
# pb.field { pb.name "hello" }
|
56
56
|
message = (@message[name] ||= _new_message_from_descriptor(descriptor))
|
57
57
|
_scope(message, &block)
|
58
58
|
elsif args.length == 1
|
59
|
-
|
59
|
+
arg = args.first
|
60
|
+
if descriptor.label == :repeated
|
61
|
+
if arg.respond_to?(:to_ary)
|
62
|
+
# pb.fields ["one", "two"]
|
63
|
+
# Using concat so it behaves the same as _append_repeated
|
64
|
+
@message[name].concat arg.to_ary
|
65
|
+
else
|
66
|
+
# pb.fields "one"
|
67
|
+
@message[name].push arg
|
68
|
+
end
|
69
|
+
else
|
70
|
+
# pb.field "value"
|
71
|
+
@message[name] = arg
|
72
|
+
end
|
60
73
|
else
|
61
74
|
# pb.field @value, :id, :name, :url
|
62
75
|
element = args.shift
|
@@ -68,7 +81,9 @@ class Pbbuilder
|
|
68
81
|
extract!(item, *args)
|
69
82
|
end
|
70
83
|
else
|
71
|
-
|
84
|
+
set!(name) do
|
85
|
+
extract!(element, *args)
|
86
|
+
end
|
72
87
|
end
|
73
88
|
end
|
74
89
|
end
|
@@ -115,4 +130,5 @@ class Pbbuilder
|
|
115
130
|
end
|
116
131
|
end
|
117
132
|
|
133
|
+
require "pbbuilder/protobuf_extension"
|
118
134
|
require "pbbuilder/railtie" if defined?(Rails)
|
data/lib/pbbuilder/handler.rb
CHANGED
@@ -6,7 +6,7 @@ class PbbuilderHandler
|
|
6
6
|
def self.call(template, source = nil)
|
7
7
|
source ||= template.source
|
8
8
|
# We need to keep `source` on the first line, so line numbers are correct if there's an error
|
9
|
-
%{pb=Pbbuilder.new(
|
9
|
+
%{pb=Pbbuilder.new(@_response_class.new); #{source}
|
10
10
|
pb.target!}
|
11
11
|
end
|
12
12
|
end
|
data/pbbuilder.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "pbbuilder"
|
3
|
-
spec.version = "0.
|
3
|
+
spec.version = "0.5.0"
|
4
4
|
spec.authors = ["Bouke van der Bijl"]
|
5
5
|
spec.email = ["bouke@cheddar.me"]
|
6
6
|
spec.homepage = "https://github.com/cheddar-me/pbbuilder"
|
@@ -10,6 +10,5 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.files = `git ls-files`.split("\n")
|
11
11
|
spec.test_files = `git ls-files -- test/*`.split("\n")
|
12
12
|
|
13
|
-
spec.add_dependency "rails", "~> 6.1.3"
|
14
13
|
spec.add_dependency "google-protobuf", "~> 3.15.5"
|
15
14
|
end
|
data/test/pbbuilder_test.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "test_helper"
|
2
|
-
require "pbbuilder"
|
3
2
|
|
4
3
|
class PbbuilderTest < ActiveSupport::TestCase
|
5
4
|
test "it makes it possible to create a person" do
|
@@ -8,9 +7,18 @@ class PbbuilderTest < ActiveSupport::TestCase
|
|
8
7
|
pb.friends 1..3 do |number|
|
9
8
|
pb.name "Friend ##{number}"
|
10
9
|
end
|
10
|
+
pb.best_friend do
|
11
|
+
pb.name "Manuelo"
|
12
|
+
end
|
13
|
+
pb.field_mask do
|
14
|
+
pb.paths ["ok", "that's"]
|
15
|
+
pb.paths "cool"
|
16
|
+
end
|
11
17
|
end.target!
|
12
|
-
assert_equal
|
13
|
-
assert_equal person.friends.first.name
|
18
|
+
assert_equal "Hello world", person.name
|
19
|
+
assert_equal "Friend #1", person.friends.first.name
|
20
|
+
assert_equal ["ok", "that's", "cool"], person.field_mask.paths
|
21
|
+
assert_equal "Manuelo", person.best_friend.name
|
14
22
|
end
|
15
23
|
|
16
24
|
test "it can extract fields in a nice way" do
|
@@ -19,11 +27,13 @@ class PbbuilderTest < ActiveSupport::TestCase
|
|
19
27
|
person = Pbbuilder.new(API::Person.new) do |pb|
|
20
28
|
pb.name "Hello world"
|
21
29
|
pb.friends friends, :name
|
30
|
+
pb.best_friend friends[0], :name
|
22
31
|
end.target!
|
23
32
|
|
24
33
|
assert_equal person.name, "Hello world"
|
25
34
|
assert_equal person.friends.size, 2
|
26
35
|
assert_equal person.friends.first.name, "Friend 1"
|
27
36
|
assert_equal person.friends.last.name, "Friend 2"
|
37
|
+
assert_equal person.best_friend.name, "Friend 1"
|
28
38
|
end
|
29
39
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class ProtobufExtensionTest < ActiveSupport::TestCase
|
4
|
+
test ".build" do
|
5
|
+
person = API::Person.build(name: "Hello world!") do |pb|
|
6
|
+
pb.best_friend do
|
7
|
+
pb.name "Johnny"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
assert_equal "Hello world!", person.name
|
11
|
+
assert_equal "Johnny", person.best_friend.name
|
12
|
+
end
|
13
|
+
|
14
|
+
test ".build without block" do
|
15
|
+
person = API::Person.build
|
16
|
+
assert_equal "", person.name
|
17
|
+
end
|
18
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -4,16 +4,21 @@ ENV["RAILS_ENV"] = "test"
|
|
4
4
|
require "rails"
|
5
5
|
require "rails/test_help"
|
6
6
|
require "rails/test_unit/reporter"
|
7
|
+
require "pbbuilder"
|
7
8
|
|
8
9
|
Rails::TestUnitReporter.executable = "bin/test"
|
9
10
|
|
10
11
|
require "google/protobuf"
|
12
|
+
require "google/protobuf/field_mask_pb"
|
11
13
|
|
12
14
|
Google::Protobuf::DescriptorPool.generated_pool.build do
|
13
15
|
add_file("pbbuilder.proto", syntax: :proto3) do
|
14
16
|
add_message "pbbuildertest.Person" do
|
15
17
|
optional :name, :string, 1
|
16
18
|
repeated :friends, :message, 2, "pbbuildertest.Person"
|
19
|
+
optional :best_friend, :message, 3, "pbbuildertest.Person"
|
20
|
+
repeated :nicknames, :string, 4
|
21
|
+
optional :field_mask, :message, 5, "google.protobuf.FieldMask"
|
17
22
|
end
|
18
23
|
end
|
19
24
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pbbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bouke van der Bijl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rails
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 6.1.3
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 6.1.3
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: google-protobuf
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,10 +39,12 @@ files:
|
|
53
39
|
- bin/test
|
54
40
|
- lib/pbbuilder.rb
|
55
41
|
- lib/pbbuilder/handler.rb
|
42
|
+
- lib/pbbuilder/protobuf_extension.rb
|
56
43
|
- lib/pbbuilder/railtie.rb
|
57
44
|
- lib/tasks/pbbuilder_tasks.rake
|
58
45
|
- pbbuilder.gemspec
|
59
46
|
- test/pbbuilder_test.rb
|
47
|
+
- test/protobuf_extension_test.rb
|
60
48
|
- test/test_helper.rb
|
61
49
|
homepage: https://github.com/cheddar-me/pbbuilder
|
62
50
|
licenses:
|
@@ -83,4 +71,5 @@ specification_version: 4
|
|
83
71
|
summary: Generate Protobuf messages via a Builder-style DSL
|
84
72
|
test_files:
|
85
73
|
- test/pbbuilder_test.rb
|
74
|
+
- test/protobuf_extension_test.rb
|
86
75
|
- test/test_helper.rb
|