capn_proto-rpc 0.1.1.alpha.rpc

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +19 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +19 -0
  6. data/README.md +249 -0
  7. data/Rakefile +44 -0
  8. data/capn_proto.gemspec +37 -0
  9. data/examples/addressbook.bin +0 -0
  10. data/examples/addressbook.capnp +31 -0
  11. data/examples/create_test_data.py +39 -0
  12. data/examples/example.rb +38 -0
  13. data/ext/capn_proto/.ycm_extra_conf.py +65 -0
  14. data/ext/capn_proto/EzRpc_client.cc +52 -0
  15. data/ext/capn_proto/EzRpc_client.h +21 -0
  16. data/ext/capn_proto/EzRpc_server.cc +79 -0
  17. data/ext/capn_proto/EzRpc_server.h +32 -0
  18. data/ext/capn_proto/call_context.cc +67 -0
  19. data/ext/capn_proto/call_context.h +25 -0
  20. data/ext/capn_proto/capability_client.cc +47 -0
  21. data/ext/capn_proto/capability_client.h +21 -0
  22. data/ext/capn_proto/class_builder.cc +80 -0
  23. data/ext/capn_proto/class_builder.h +72 -0
  24. data/ext/capn_proto/cxx_compiler.rb +126 -0
  25. data/ext/capn_proto/dynamic_capability_client.cc +73 -0
  26. data/ext/capn_proto/dynamic_capability_client.h +22 -0
  27. data/ext/capn_proto/dynamic_list_builder.cc +123 -0
  28. data/ext/capn_proto/dynamic_list_builder.h +27 -0
  29. data/ext/capn_proto/dynamic_list_reader.cc +63 -0
  30. data/ext/capn_proto/dynamic_list_reader.h +25 -0
  31. data/ext/capn_proto/dynamic_object_builder.cc +57 -0
  32. data/ext/capn_proto/dynamic_object_builder.h +22 -0
  33. data/ext/capn_proto/dynamic_object_reader.cc +56 -0
  34. data/ext/capn_proto/dynamic_object_reader.h +22 -0
  35. data/ext/capn_proto/dynamic_struct_builder.cc +180 -0
  36. data/ext/capn_proto/dynamic_struct_builder.h +34 -0
  37. data/ext/capn_proto/dynamic_struct_reader.cc +69 -0
  38. data/ext/capn_proto/dynamic_struct_reader.h +25 -0
  39. data/ext/capn_proto/dynamic_value_builder.cc +53 -0
  40. data/ext/capn_proto/dynamic_value_builder.h +13 -0
  41. data/ext/capn_proto/dynamic_value_reader.cc +55 -0
  42. data/ext/capn_proto/dynamic_value_reader.h +13 -0
  43. data/ext/capn_proto/exception.cc +34 -0
  44. data/ext/capn_proto/exception.h +20 -0
  45. data/ext/capn_proto/extconf.rb +32 -0
  46. data/ext/capn_proto/field_list.cc +51 -0
  47. data/ext/capn_proto/field_list.h +23 -0
  48. data/ext/capn_proto/flat_array_message_reader.cc +61 -0
  49. data/ext/capn_proto/flat_array_message_reader.h +21 -0
  50. data/ext/capn_proto/init.cc +71 -0
  51. data/ext/capn_proto/interface_method.cc +38 -0
  52. data/ext/capn_proto/interface_method.h +21 -0
  53. data/ext/capn_proto/interface_schema.cc +51 -0
  54. data/ext/capn_proto/interface_schema.h +26 -0
  55. data/ext/capn_proto/list_nested_node_reader.cc +53 -0
  56. data/ext/capn_proto/list_nested_node_reader.h +24 -0
  57. data/ext/capn_proto/malloc_message_builder.cc +51 -0
  58. data/ext/capn_proto/malloc_message_builder.h +21 -0
  59. data/ext/capn_proto/message_builder.cc +22 -0
  60. data/ext/capn_proto/message_builder.h +17 -0
  61. data/ext/capn_proto/message_reader.cc +30 -0
  62. data/ext/capn_proto/message_reader.h +17 -0
  63. data/ext/capn_proto/nested_node_reader.cc +42 -0
  64. data/ext/capn_proto/nested_node_reader.h +21 -0
  65. data/ext/capn_proto/parsed_schema.cc +65 -0
  66. data/ext/capn_proto/parsed_schema.h +24 -0
  67. data/ext/capn_proto/rb.cc +0 -0
  68. data/ext/capn_proto/rb.h +0 -0
  69. data/ext/capn_proto/remote_promise.cc +116 -0
  70. data/ext/capn_proto/remote_promise.h +30 -0
  71. data/ext/capn_proto/ruby_capability_server.cc +23 -0
  72. data/ext/capn_proto/ruby_capability_server.h +21 -0
  73. data/ext/capn_proto/ruby_capn_proto.cc +4 -0
  74. data/ext/capn_proto/ruby_capn_proto.h +42 -0
  75. data/ext/capn_proto/schema_node_reader.cc +59 -0
  76. data/ext/capn_proto/schema_node_reader.h +23 -0
  77. data/ext/capn_proto/schema_parser.cc +61 -0
  78. data/ext/capn_proto/schema_parser.h +20 -0
  79. data/ext/capn_proto/stream_fd_message_reader.cc +59 -0
  80. data/ext/capn_proto/stream_fd_message_reader.h +21 -0
  81. data/ext/capn_proto/struct_schema.cc +59 -0
  82. data/ext/capn_proto/struct_schema.h +23 -0
  83. data/ext/capn_proto/util.cc +30 -0
  84. data/ext/capn_proto/util.h +17 -0
  85. data/lib/capn_proto.rb +231 -0
  86. data/lib/capn_proto/version.rb +3 -0
  87. data/media/captain_proto.png +0 -0
  88. data/media/captain_proto_small.png +0 -0
  89. data/spec/addressbook.bin +0 -0
  90. data/spec/addressbook.capnp +31 -0
  91. data/spec/capn_proto_spec.rb +80 -0
  92. data/spec/create_test_data.py +38 -0
  93. data/spec/spec_helper.rb +8 -0
  94. data/tests/hidraCordatus.capnp +16 -0
  95. data/tests/hidraCordatusEmployer.rb +33 -0
  96. data/tests/hidraCordatusMaster.rb +51 -0
  97. metadata +216 -0
@@ -0,0 +1,3 @@
1
+ module CapnProto
2
+ VERSION = "0.1.1.alpha.rpc"
3
+ end
Binary file
Binary file
@@ -0,0 +1,31 @@
1
+ @0x9eb32e19f86ee174;
2
+
3
+ struct Person {
4
+ id @0 :UInt32;
5
+ name @1 :Text;
6
+ email @2 :Text;
7
+ phones @3 :List(PhoneNumber);
8
+
9
+ struct PhoneNumber {
10
+ number @0 :Text;
11
+ type @1 :Type;
12
+
13
+ enum Type {
14
+ mobile @0;
15
+ home @1;
16
+ work @2;
17
+ }
18
+ }
19
+
20
+ employment :union {
21
+ unemployed @4 :Void;
22
+ employer @5 :Text;
23
+ school @6 :Text;
24
+ selfEmployed @7 :Void;
25
+ # We assume that a person is only one of these.
26
+ }
27
+ }
28
+
29
+ struct AddressBook {
30
+ people @0 :List(Person);
31
+ }
@@ -0,0 +1,80 @@
1
+ require 'tempfile'
2
+ require 'spec_helper'
3
+ require 'capn_proto'
4
+
5
+ ADDRESSBOOK_SCHEMA = File.expand_path("../addressbook.capnp", __FILE__)
6
+
7
+ module AddressBook extend CapnProto::SchemaLoader
8
+ load_schema(ADDRESSBOOK_SCHEMA)
9
+ end
10
+
11
+ describe "reading" do
12
+ describe "Dynamic Structs" do
13
+ let(:file) { open_file("addressbook.bin") }
14
+ let(:addresses) { AddressBook::AddressBook.read_from(file) }
15
+
16
+ it "unkown fields raise exception" do
17
+ expect { addresses.foo }.to raise_error(CapnProto::Exception)
18
+ end
19
+ end
20
+
21
+ describe "Dynamic Lists" do
22
+ let(:file) { open_file("addressbook.bin") }
23
+ let(:addresses) { AddressBook::AddressBook.read_from(file) }
24
+ let(:people) { addresses.people }
25
+
26
+ it "#[] given out-of-bounds index raises" do
27
+ expect { addresses.people[999999] }.to raise_error(CapnProto::Exception)
28
+ end
29
+ end
30
+ end
31
+
32
+ describe "writing" do
33
+ describe "#write" do
34
+ it "full circle" do
35
+ tmp = Tempfile.new('test.bin')
36
+ addresses = AddressBook::AddressBook.new_message
37
+ people = addresses.initPeople(1)
38
+ bob = people[0]
39
+ bob.name = "Bob"
40
+ bob.id = 123
41
+ addresses.write(tmp)
42
+
43
+ tmp.rewind
44
+ addresses = AddressBook::AddressBook.read_from(tmp)
45
+ expect(addresses.people.size).to eq 1
46
+ expect(addresses.people.first.name).to eq "Bob"
47
+ expect(addresses.people.first.id).to eq 123
48
+ end
49
+ end
50
+
51
+ describe "#to_bytes" do
52
+ it "full circle" do
53
+ addresses = AddressBook::AddressBook.new_message
54
+ people = addresses.initPeople(1)
55
+ bob = people[0]
56
+ bob.name = "Bob"
57
+ bob.id = 123
58
+ bytes = addresses.to_bytes
59
+
60
+ addresses = AddressBook::AddressBook.make_from_bytes(bytes)
61
+ expect(addresses.people.size).to eq 1
62
+ expect(addresses.people.first.name).to eq "Bob"
63
+ expect(addresses.people.first.id).to eq 123
64
+ end
65
+ end
66
+
67
+ describe "Dynamic Structs" do
68
+ let(:addresses) { AddressBook::AddressBook.new_message }
69
+
70
+ it "works" do
71
+ people = addresses.initPeople(3)
72
+ bob = people.first
73
+ bob.name = "Bob"
74
+ bob.id = 10
75
+
76
+ people[1] = bob
77
+ x = people[1]
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env python
2
+ from __future__ import print_function
3
+ import os
4
+ import capnp
5
+
6
+ this_dir = os.path.dirname(__file__)
7
+ addressbook = capnp.load(os.path.join(this_dir, 'addressbook.capnp'))
8
+
9
+ def writeAddressBook(file):
10
+ addresses = addressbook.AddressBook.newMessage()
11
+ people = addresses.init('people', 2)
12
+
13
+ alice = people[0]
14
+ alice.id = 123
15
+ alice.name = 'Alice'
16
+ alice.email = 'alice@example.com'
17
+ alicePhones = alice.init('phones', 1)
18
+ alicePhones[0].number = "555-1212"
19
+ alicePhones[0].type = 'mobile'
20
+ alice.employment.school = "MIT"
21
+
22
+ bob = people[1]
23
+ bob.id = 456
24
+ bob.name = 'Bob'
25
+ bob.email = 'bob@example.com'
26
+ bobPhones = bob.init('phones', 2)
27
+ bobPhones[0].number = "555-4567"
28
+ bobPhones[0].type = 'home'
29
+ bobPhones[1].number = "555-7654"
30
+ bobPhones[1].type = 'work'
31
+ bob.employment.unemployed = None
32
+
33
+ addresses.writeTo(file)
34
+
35
+
36
+ if __name__ == '__main__':
37
+ f = open('addressbook.bin', 'w')
38
+ writeAddressBook(f)
@@ -0,0 +1,8 @@
1
+ RSpec.configure do |c|
2
+ c.include(Module.new do
3
+ def open_file(path)
4
+ path = File.join(File.expand_path("../", __FILE__), path)
5
+ File.open(path, "rb")
6
+ end
7
+ end)
8
+ end
@@ -0,0 +1,16 @@
1
+ # made by Felipe Vieira, gsoc 2016 student
2
+
3
+ @0x9dfdcaa625365235;
4
+
5
+ struct Task {
6
+ dataint @0 :Int32;
7
+ madeBy @1 :Text;
8
+ }
9
+
10
+ interface Employer {
11
+ getWorker @0 () -> ( worker :Worker );
12
+ }
13
+
14
+ interface Worker {
15
+ put23 @0 (taskToProcess :Task) -> (taskProcessed :Task);
16
+ }
@@ -0,0 +1,33 @@
1
+ require 'capn_proto'
2
+ require 'minitest/autorun'
3
+
4
+ module Hydra extend CapnProto::SchemaLoader
5
+ load_schema('hidraCordatus.capnp')
6
+ end
7
+
8
+ class Employer < Minitest::Test
9
+ def test_push_a_ton_of_tasks
10
+ employer_schema = Hydra::Employer.schema
11
+ get_worker_method = Hydra::Employer.method! 'getWorker'
12
+ put23method = Hydra::Worker.method! 'put23'
13
+
14
+ ezclient = CapnProto::EzRpcClient.new("127.0.0.1:1337",employer_schema)
15
+ client = ezclient.client
16
+
17
+ 100.times do
18
+
19
+ #set up the request
20
+ request = client.request(get_worker_method)
21
+ pipelinedRequest = request.send
22
+ pipelinedRequest.get('worker').method = put23method
23
+ pipelinedRequest.taskToProcess.dataint(0)
24
+
25
+ #get the results
26
+ results = pipelinedRequest.send.wait(ezclient)
27
+ p results.taskProcessed.dataint
28
+ p results.taskProcessed.madeBy
29
+
30
+ assert results.taskProcessed.dataint == 23
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,51 @@
1
+ require 'capn_proto'
2
+
3
+ module Hydra extend CapnProto::SchemaLoader
4
+ load_schema('hidraCordatus.capnp')
5
+ end
6
+
7
+ class WorkerServer < CapnProto::CapabilityServer
8
+ def initialize(i)
9
+ @madeBy = "made by worker ##{i}"
10
+ super(Hydra::Worker.schema)
11
+ end
12
+
13
+ def put23(context)
14
+ puts "put23 called"
15
+ n = context.getParams.taskToProcess.dataint
16
+ context.getResults.taskProcessed.dataint = n + 23
17
+ context.getResults.taskProcessed.madeBy = @madeBy
18
+ puts "put23 dispatched"
19
+ end
20
+ end
21
+
22
+ class EmployerServer < CapnProto::CapabilityServer
23
+ def initialize(wp)
24
+ @worker_pool = wp
25
+ @currentWorker = 0
26
+ super(Hydra::Employer.schema)
27
+ end
28
+
29
+ def get_a_Worker
30
+ @currentWorker += 1
31
+ @worker_pool[@currentWorker % @worker_pool.size]
32
+ end
33
+
34
+ def getWorker(context)
35
+ puts "getWorker called"
36
+ context.getResults.worker = get_a_Worker
37
+ puts "getWorker dispatched"
38
+ end
39
+
40
+ end
41
+
42
+
43
+ workers = []
44
+ 10.times do |i|
45
+ workers << WorkerServer.new(i)
46
+ end
47
+
48
+
49
+ e = CapnProto::EzRpcServer.new(EmployerServer.new(workers), "*:1337")
50
+ puts "serving EmployerServer on 1337..."
51
+ e.run
metadata ADDED
@@ -0,0 +1,216 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capn_proto-rpc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1.alpha.rpc
5
+ platform: ruby
6
+ authors:
7
+ - Charles Strahan
8
+ - Felipe Vieira
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-08-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '='
19
+ - !ruby/object:Gem::Version
20
+ version: 2.14.1
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '='
26
+ - !ruby/object:Gem::Version
27
+ version: 2.14.1
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake-compiler
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '='
47
+ - !ruby/object:Gem::Version
48
+ version: 0.7.6
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '='
54
+ - !ruby/object:Gem::Version
55
+ version: 0.7.6
56
+ - !ruby/object:Gem::Dependency
57
+ name: awesome_print
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: interactive_editor
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ description: 'This gem wraps the official C++ implementation of Cap''n Proto (libcapnp).
85
+ From the Cap''n Proto documentation: "Cap''n Proto is an insanely fast data interchange
86
+ format and capability-based RPC system. Think JSON, except binary. Or think Protocol
87
+ Buffers, except faster." This is a extended version of the original gem Capnproto
88
+ which adds RPC support visit the homepage to view usage'
89
+ email:
90
+ - charles.c.strahan@gmail.com
91
+ - felipetavres@gmail.com
92
+ executables: []
93
+ extensions:
94
+ - ext/capn_proto/extconf.rb
95
+ extra_rdoc_files: []
96
+ files:
97
+ - ".gitignore"
98
+ - ".travis.yml"
99
+ - Gemfile
100
+ - LICENSE
101
+ - README.md
102
+ - Rakefile
103
+ - capn_proto.gemspec
104
+ - examples/addressbook.bin
105
+ - examples/addressbook.capnp
106
+ - examples/create_test_data.py
107
+ - examples/example.rb
108
+ - ext/capn_proto/.ycm_extra_conf.py
109
+ - ext/capn_proto/EzRpc_client.cc
110
+ - ext/capn_proto/EzRpc_client.h
111
+ - ext/capn_proto/EzRpc_server.cc
112
+ - ext/capn_proto/EzRpc_server.h
113
+ - ext/capn_proto/call_context.cc
114
+ - ext/capn_proto/call_context.h
115
+ - ext/capn_proto/capability_client.cc
116
+ - ext/capn_proto/capability_client.h
117
+ - ext/capn_proto/class_builder.cc
118
+ - ext/capn_proto/class_builder.h
119
+ - ext/capn_proto/cxx_compiler.rb
120
+ - ext/capn_proto/dynamic_capability_client.cc
121
+ - ext/capn_proto/dynamic_capability_client.h
122
+ - ext/capn_proto/dynamic_list_builder.cc
123
+ - ext/capn_proto/dynamic_list_builder.h
124
+ - ext/capn_proto/dynamic_list_reader.cc
125
+ - ext/capn_proto/dynamic_list_reader.h
126
+ - ext/capn_proto/dynamic_object_builder.cc
127
+ - ext/capn_proto/dynamic_object_builder.h
128
+ - ext/capn_proto/dynamic_object_reader.cc
129
+ - ext/capn_proto/dynamic_object_reader.h
130
+ - ext/capn_proto/dynamic_struct_builder.cc
131
+ - ext/capn_proto/dynamic_struct_builder.h
132
+ - ext/capn_proto/dynamic_struct_reader.cc
133
+ - ext/capn_proto/dynamic_struct_reader.h
134
+ - ext/capn_proto/dynamic_value_builder.cc
135
+ - ext/capn_proto/dynamic_value_builder.h
136
+ - ext/capn_proto/dynamic_value_reader.cc
137
+ - ext/capn_proto/dynamic_value_reader.h
138
+ - ext/capn_proto/exception.cc
139
+ - ext/capn_proto/exception.h
140
+ - ext/capn_proto/extconf.rb
141
+ - ext/capn_proto/field_list.cc
142
+ - ext/capn_proto/field_list.h
143
+ - ext/capn_proto/flat_array_message_reader.cc
144
+ - ext/capn_proto/flat_array_message_reader.h
145
+ - ext/capn_proto/init.cc
146
+ - ext/capn_proto/interface_method.cc
147
+ - ext/capn_proto/interface_method.h
148
+ - ext/capn_proto/interface_schema.cc
149
+ - ext/capn_proto/interface_schema.h
150
+ - ext/capn_proto/list_nested_node_reader.cc
151
+ - ext/capn_proto/list_nested_node_reader.h
152
+ - ext/capn_proto/malloc_message_builder.cc
153
+ - ext/capn_proto/malloc_message_builder.h
154
+ - ext/capn_proto/message_builder.cc
155
+ - ext/capn_proto/message_builder.h
156
+ - ext/capn_proto/message_reader.cc
157
+ - ext/capn_proto/message_reader.h
158
+ - ext/capn_proto/nested_node_reader.cc
159
+ - ext/capn_proto/nested_node_reader.h
160
+ - ext/capn_proto/parsed_schema.cc
161
+ - ext/capn_proto/parsed_schema.h
162
+ - ext/capn_proto/rb.cc
163
+ - ext/capn_proto/rb.h
164
+ - ext/capn_proto/remote_promise.cc
165
+ - ext/capn_proto/remote_promise.h
166
+ - ext/capn_proto/ruby_capability_server.cc
167
+ - ext/capn_proto/ruby_capability_server.h
168
+ - ext/capn_proto/ruby_capn_proto.cc
169
+ - ext/capn_proto/ruby_capn_proto.h
170
+ - ext/capn_proto/schema_node_reader.cc
171
+ - ext/capn_proto/schema_node_reader.h
172
+ - ext/capn_proto/schema_parser.cc
173
+ - ext/capn_proto/schema_parser.h
174
+ - ext/capn_proto/stream_fd_message_reader.cc
175
+ - ext/capn_proto/stream_fd_message_reader.h
176
+ - ext/capn_proto/struct_schema.cc
177
+ - ext/capn_proto/struct_schema.h
178
+ - ext/capn_proto/util.cc
179
+ - ext/capn_proto/util.h
180
+ - lib/capn_proto.rb
181
+ - lib/capn_proto/version.rb
182
+ - media/captain_proto.png
183
+ - media/captain_proto_small.png
184
+ - spec/addressbook.bin
185
+ - spec/addressbook.capnp
186
+ - spec/capn_proto_spec.rb
187
+ - spec/create_test_data.py
188
+ - spec/spec_helper.rb
189
+ - tests/hidraCordatus.capnp
190
+ - tests/hidraCordatusEmployer.rb
191
+ - tests/hidraCordatusMaster.rb
192
+ homepage: https://github.com/nemoNoboru/capnp-ruby
193
+ licenses:
194
+ - MIT
195
+ metadata: {}
196
+ post_install_message:
197
+ rdoc_options: []
198
+ require_paths:
199
+ - lib
200
+ required_ruby_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: '2.0'
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">"
208
+ - !ruby/object:Gem::Version
209
+ version: 1.3.1
210
+ requirements: []
211
+ rubyforge_project:
212
+ rubygems_version: 2.5.1
213
+ signing_key:
214
+ specification_version: 4
215
+ summary: Cap'n Proto (libcapnp) bindings for Ruby.
216
+ test_files: []