pbbuilder 0.2.0 → 0.6.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/.github/workflows/test.yml +22 -0
- data/.gitignore +1 -0
- data/README.md +2 -1
- data/lib/pbbuilder.rb +25 -4
- data/lib/pbbuilder/handler.rb +1 -1
- data/lib/pbbuilder/protobuf_extension.rb +7 -0
- data/pbbuilder.gemspec +1 -1
- data/test/pbbuilder_test.rb +20 -3
- data/test/protobuf_extension_test.rb +18 -0
- data/test/test_helper.rb +6 -0
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz: '
|
3
|
+
metadata.gz: d3f417c956ceb3a2123489021f4cc401b7bf56399355fb6bb0d4ebaa437d1cb2
|
4
|
+
data.tar.gz: '0408c3174481e7aa7e22f129829a973f822a7245d57c3e93bad2ef564d3ee05f'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7476c24846d78dd0dc011372998bb54301a673510ccc8cffe540714db1a991ba6b36c14ec0eb45572aef1880e9cb638870be38a7a510c4edb501eb0da670278
|
7
|
+
data.tar.gz: 3027ae2509d083bd9da6a02bf9732c43038534992790017a3bdb00ba1bb80179d650d1a12d6f136af036854a5944125cad64d7b17268b084609f3642e8f7dbfc
|
@@ -0,0 +1,22 @@
|
|
1
|
+
name: ruby
|
2
|
+
on: push
|
3
|
+
|
4
|
+
jobs:
|
5
|
+
test:
|
6
|
+
runs-on: ubuntu-latest
|
7
|
+
strategy:
|
8
|
+
matrix:
|
9
|
+
ruby: ["2.7", "3.0.1"]
|
10
|
+
name: tests for ruby-${{ matrix.ruby }}
|
11
|
+
steps:
|
12
|
+
- name: Checkout code
|
13
|
+
uses: actions/checkout@v2
|
14
|
+
|
15
|
+
- name: Setup Ruby
|
16
|
+
uses: ruby/setup-ruby@v1
|
17
|
+
with:
|
18
|
+
bundler-cache: true
|
19
|
+
ruby-version: ${{ matrix.ruby }}
|
20
|
+
|
21
|
+
- name: Run tests
|
22
|
+
run: bin/test
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -22,7 +22,8 @@ $ gem install pbbuilder
|
|
22
22
|
```
|
23
23
|
|
24
24
|
## Contributing
|
25
|
-
|
25
|
+
|
26
|
+
When debugging, make sure you're prepending `::Kernel` to any calls such as `puts` as otherwise the code will think you're trying to add another attribute onto the protobuf.
|
26
27
|
|
27
28
|
## License
|
28
29
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/pbbuilder.rb
CHANGED
@@ -44,7 +44,7 @@ class Pbbuilder < BasicObject
|
|
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,29 @@ class Pbbuilder < BasicObject
|
|
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_hash)
|
62
|
+
# pb.fields {"one" => "two"}
|
63
|
+
arg.to_hash.each do |k, v|
|
64
|
+
@message[name][k] = v
|
65
|
+
end
|
66
|
+
elsif arg.respond_to?(:to_ary)
|
67
|
+
# pb.fields ["one", "two"]
|
68
|
+
# Using concat so it behaves the same as _append_repeated
|
69
|
+
@message[name].concat arg.to_ary
|
70
|
+
else
|
71
|
+
# pb.fields "one"
|
72
|
+
@message[name].push arg
|
73
|
+
end
|
74
|
+
else
|
75
|
+
# pb.field "value"
|
76
|
+
@message[name] = arg
|
77
|
+
end
|
60
78
|
else
|
61
79
|
# pb.field @value, :id, :name, :url
|
62
80
|
element = args.shift
|
@@ -68,7 +86,9 @@ class Pbbuilder < BasicObject
|
|
68
86
|
extract!(item, *args)
|
69
87
|
end
|
70
88
|
else
|
71
|
-
|
89
|
+
set!(name) do
|
90
|
+
extract!(element, *args)
|
91
|
+
end
|
72
92
|
end
|
73
93
|
end
|
74
94
|
end
|
@@ -115,4 +135,5 @@ class Pbbuilder < BasicObject
|
|
115
135
|
end
|
116
136
|
end
|
117
137
|
|
138
|
+
require "pbbuilder/protobuf_extension"
|
118
139
|
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
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,25 @@ 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
|
17
|
+
pb.favourite_foods({
|
18
|
+
"Breakfast" => "Eggs",
|
19
|
+
"Lunch" => "Shawarma",
|
20
|
+
"Dinner" => "Pizza"
|
21
|
+
})
|
11
22
|
end.target!
|
12
|
-
|
13
|
-
assert_equal person.
|
23
|
+
|
24
|
+
assert_equal "Hello world", person.name
|
25
|
+
assert_equal "Friend #1", person.friends.first.name
|
26
|
+
assert_equal ["ok", "that's", "cool"], person.field_mask.paths
|
27
|
+
assert_equal "Manuelo", person.best_friend.name
|
28
|
+
assert_equal "Eggs", person.favourite_foods["Breakfast"]
|
14
29
|
end
|
15
30
|
|
16
31
|
test "it can extract fields in a nice way" do
|
@@ -19,11 +34,13 @@ class PbbuilderTest < ActiveSupport::TestCase
|
|
19
34
|
person = Pbbuilder.new(API::Person.new) do |pb|
|
20
35
|
pb.name "Hello world"
|
21
36
|
pb.friends friends, :name
|
37
|
+
pb.best_friend friends[0], :name
|
22
38
|
end.target!
|
23
39
|
|
24
40
|
assert_equal person.name, "Hello world"
|
25
41
|
assert_equal person.friends.size, 2
|
26
42
|
assert_equal person.friends.first.name, "Friend 1"
|
27
43
|
assert_equal person.friends.last.name, "Friend 2"
|
44
|
+
assert_equal person.best_friend.name, "Friend 1"
|
28
45
|
end
|
29
46
|
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,22 @@ 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"
|
22
|
+
map :favourite_foods, :string, :string, 6
|
17
23
|
end
|
18
24
|
end
|
19
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pbbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bouke van der Bijl
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-protobuf
|
@@ -24,13 +24,14 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.15.5
|
27
|
-
description:
|
27
|
+
description:
|
28
28
|
email:
|
29
29
|
- bouke@cheddar.me
|
30
30
|
executables: []
|
31
31
|
extensions: []
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
|
+
- ".github/workflows/test.yml"
|
34
35
|
- ".gitignore"
|
35
36
|
- Gemfile
|
36
37
|
- MIT-LICENSE
|
@@ -39,16 +40,18 @@ files:
|
|
39
40
|
- bin/test
|
40
41
|
- lib/pbbuilder.rb
|
41
42
|
- lib/pbbuilder/handler.rb
|
43
|
+
- lib/pbbuilder/protobuf_extension.rb
|
42
44
|
- lib/pbbuilder/railtie.rb
|
43
45
|
- lib/tasks/pbbuilder_tasks.rake
|
44
46
|
- pbbuilder.gemspec
|
45
47
|
- test/pbbuilder_test.rb
|
48
|
+
- test/protobuf_extension_test.rb
|
46
49
|
- test/test_helper.rb
|
47
50
|
homepage: https://github.com/cheddar-me/pbbuilder
|
48
51
|
licenses:
|
49
52
|
- MIT
|
50
53
|
metadata: {}
|
51
|
-
post_install_message:
|
54
|
+
post_install_message:
|
52
55
|
rdoc_options: []
|
53
56
|
require_paths:
|
54
57
|
- lib
|
@@ -63,10 +66,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
66
|
- !ruby/object:Gem::Version
|
64
67
|
version: '0'
|
65
68
|
requirements: []
|
66
|
-
rubygems_version: 3.
|
67
|
-
signing_key:
|
69
|
+
rubygems_version: 3.1.4
|
70
|
+
signing_key:
|
68
71
|
specification_version: 4
|
69
72
|
summary: Generate Protobuf messages via a Builder-style DSL
|
70
73
|
test_files:
|
71
74
|
- test/pbbuilder_test.rb
|
75
|
+
- test/protobuf_extension_test.rb
|
72
76
|
- test/test_helper.rb
|