protobuffy 3.1.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.
Files changed (192) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.travis.yml +12 -0
  4. data/.yardopts +5 -0
  5. data/CHANGES.md +261 -0
  6. data/CONTRIBUTING.md +16 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE.txt +14 -0
  9. data/README.md +58 -0
  10. data/Rakefile +61 -0
  11. data/bin/protoc-gen-ruby +17 -0
  12. data/bin/rpc_server +4 -0
  13. data/examples/bin/reverse-client-http +4 -0
  14. data/examples/bin/reverse-client-socket +4 -0
  15. data/examples/bin/reverse-client-zmq +4 -0
  16. data/examples/config.ru +6 -0
  17. data/examples/definitions/example/reverse.proto +12 -0
  18. data/examples/lib/example/reverse-client.rb +23 -0
  19. data/examples/lib/example/reverse-service.rb +9 -0
  20. data/examples/lib/example/reverse.pb.rb +36 -0
  21. data/lib/protobuf.rb +106 -0
  22. data/lib/protobuf/cli.rb +249 -0
  23. data/lib/protobuf/code_generator.rb +41 -0
  24. data/lib/protobuf/decoder.rb +74 -0
  25. data/lib/protobuf/deprecator.rb +42 -0
  26. data/lib/protobuf/descriptors.rb +3 -0
  27. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +52 -0
  28. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +249 -0
  29. data/lib/protobuf/encoder.rb +62 -0
  30. data/lib/protobuf/enum.rb +319 -0
  31. data/lib/protobuf/exceptions.rb +9 -0
  32. data/lib/protobuf/field.rb +74 -0
  33. data/lib/protobuf/field/base_field.rb +280 -0
  34. data/lib/protobuf/field/bool_field.rb +53 -0
  35. data/lib/protobuf/field/bytes_field.rb +81 -0
  36. data/lib/protobuf/field/double_field.rb +26 -0
  37. data/lib/protobuf/field/enum_field.rb +57 -0
  38. data/lib/protobuf/field/field_array.rb +86 -0
  39. data/lib/protobuf/field/fixed32_field.rb +25 -0
  40. data/lib/protobuf/field/fixed64_field.rb +29 -0
  41. data/lib/protobuf/field/float_field.rb +38 -0
  42. data/lib/protobuf/field/int32_field.rb +22 -0
  43. data/lib/protobuf/field/int64_field.rb +22 -0
  44. data/lib/protobuf/field/integer_field.rb +24 -0
  45. data/lib/protobuf/field/message_field.rb +66 -0
  46. data/lib/protobuf/field/sfixed32_field.rb +28 -0
  47. data/lib/protobuf/field/sfixed64_field.rb +29 -0
  48. data/lib/protobuf/field/signed_integer_field.rb +30 -0
  49. data/lib/protobuf/field/sint32_field.rb +22 -0
  50. data/lib/protobuf/field/sint64_field.rb +22 -0
  51. data/lib/protobuf/field/string_field.rb +35 -0
  52. data/lib/protobuf/field/uint32_field.rb +22 -0
  53. data/lib/protobuf/field/uint64_field.rb +22 -0
  54. data/lib/protobuf/field/varint_field.rb +68 -0
  55. data/lib/protobuf/generators/base.rb +71 -0
  56. data/lib/protobuf/generators/enum_generator.rb +42 -0
  57. data/lib/protobuf/generators/extension_generator.rb +28 -0
  58. data/lib/protobuf/generators/field_generator.rb +132 -0
  59. data/lib/protobuf/generators/file_generator.rb +140 -0
  60. data/lib/protobuf/generators/group_generator.rb +113 -0
  61. data/lib/protobuf/generators/message_generator.rb +99 -0
  62. data/lib/protobuf/generators/printable.rb +161 -0
  63. data/lib/protobuf/generators/service_generator.rb +27 -0
  64. data/lib/protobuf/http.rb +20 -0
  65. data/lib/protobuf/lifecycle.rb +46 -0
  66. data/lib/protobuf/logger.rb +86 -0
  67. data/lib/protobuf/message.rb +182 -0
  68. data/lib/protobuf/message/fields.rb +122 -0
  69. data/lib/protobuf/message/serialization.rb +84 -0
  70. data/lib/protobuf/optionable.rb +23 -0
  71. data/lib/protobuf/rpc/buffer.rb +79 -0
  72. data/lib/protobuf/rpc/client.rb +168 -0
  73. data/lib/protobuf/rpc/connector.rb +21 -0
  74. data/lib/protobuf/rpc/connectors/base.rb +54 -0
  75. data/lib/protobuf/rpc/connectors/common.rb +172 -0
  76. data/lib/protobuf/rpc/connectors/http.rb +90 -0
  77. data/lib/protobuf/rpc/connectors/socket.rb +73 -0
  78. data/lib/protobuf/rpc/connectors/zmq.rb +205 -0
  79. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +47 -0
  80. data/lib/protobuf/rpc/env.rb +58 -0
  81. data/lib/protobuf/rpc/error.rb +28 -0
  82. data/lib/protobuf/rpc/error/client_error.rb +31 -0
  83. data/lib/protobuf/rpc/error/server_error.rb +43 -0
  84. data/lib/protobuf/rpc/middleware.rb +25 -0
  85. data/lib/protobuf/rpc/middleware/exception_handler.rb +36 -0
  86. data/lib/protobuf/rpc/middleware/logger.rb +91 -0
  87. data/lib/protobuf/rpc/middleware/request_decoder.rb +83 -0
  88. data/lib/protobuf/rpc/middleware/response_encoder.rb +88 -0
  89. data/lib/protobuf/rpc/middleware/runner.rb +18 -0
  90. data/lib/protobuf/rpc/rpc.pb.rb +53 -0
  91. data/lib/protobuf/rpc/server.rb +39 -0
  92. data/lib/protobuf/rpc/servers/http/server.rb +101 -0
  93. data/lib/protobuf/rpc/servers/http_runner.rb +34 -0
  94. data/lib/protobuf/rpc/servers/socket/server.rb +113 -0
  95. data/lib/protobuf/rpc/servers/socket/worker.rb +56 -0
  96. data/lib/protobuf/rpc/servers/socket_runner.rb +34 -0
  97. data/lib/protobuf/rpc/servers/zmq/broker.rb +155 -0
  98. data/lib/protobuf/rpc/servers/zmq/server.rb +313 -0
  99. data/lib/protobuf/rpc/servers/zmq/util.rb +47 -0
  100. data/lib/protobuf/rpc/servers/zmq/worker.rb +105 -0
  101. data/lib/protobuf/rpc/servers/zmq_runner.rb +51 -0
  102. data/lib/protobuf/rpc/service.rb +179 -0
  103. data/lib/protobuf/rpc/service_directory.rb +245 -0
  104. data/lib/protobuf/rpc/service_dispatcher.rb +46 -0
  105. data/lib/protobuf/rpc/service_filters.rb +273 -0
  106. data/lib/protobuf/rpc/stat.rb +148 -0
  107. data/lib/protobuf/socket.rb +22 -0
  108. data/lib/protobuf/tasks.rb +1 -0
  109. data/lib/protobuf/tasks/compile.rake +61 -0
  110. data/lib/protobuf/version.rb +3 -0
  111. data/lib/protobuf/wire_type.rb +10 -0
  112. data/lib/protobuf/zmq.rb +21 -0
  113. data/proto/dynamic_discovery.proto +44 -0
  114. data/proto/google/protobuf/compiler/plugin.proto +147 -0
  115. data/proto/google/protobuf/descriptor.proto +620 -0
  116. data/proto/rpc.proto +62 -0
  117. data/protobuffy.gemspec +37 -0
  118. data/spec/benchmark/tasks.rb +113 -0
  119. data/spec/bin/protoc-gen-ruby_spec.rb +18 -0
  120. data/spec/data/data.bin +3 -0
  121. data/spec/data/types.bin +0 -0
  122. data/spec/encoding/all_types_spec.rb +91 -0
  123. data/spec/encoding/extreme_values_spec.rb +0 -0
  124. data/spec/functional/socket_server_spec.rb +59 -0
  125. data/spec/functional/zmq_server_spec.rb +103 -0
  126. data/spec/lib/protobuf/cli_spec.rb +267 -0
  127. data/spec/lib/protobuf/code_generator_spec.rb +60 -0
  128. data/spec/lib/protobuf/enum_spec.rb +239 -0
  129. data/spec/lib/protobuf/field/int32_field_spec.rb +7 -0
  130. data/spec/lib/protobuf/field/string_field_spec.rb +46 -0
  131. data/spec/lib/protobuf/field_spec.rb +194 -0
  132. data/spec/lib/protobuf/generators/base_spec.rb +87 -0
  133. data/spec/lib/protobuf/generators/enum_generator_spec.rb +68 -0
  134. data/spec/lib/protobuf/generators/extension_generator_spec.rb +43 -0
  135. data/spec/lib/protobuf/generators/field_generator_spec.rb +99 -0
  136. data/spec/lib/protobuf/generators/file_generator_spec.rb +29 -0
  137. data/spec/lib/protobuf/generators/message_generator_spec.rb +0 -0
  138. data/spec/lib/protobuf/generators/service_generator_spec.rb +43 -0
  139. data/spec/lib/protobuf/lifecycle_spec.rb +89 -0
  140. data/spec/lib/protobuf/logger_spec.rb +136 -0
  141. data/spec/lib/protobuf/message_spec.rb +368 -0
  142. data/spec/lib/protobuf/optionable_spec.rb +46 -0
  143. data/spec/lib/protobuf/rpc/client_spec.rb +66 -0
  144. data/spec/lib/protobuf/rpc/connector_spec.rb +26 -0
  145. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +50 -0
  146. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +170 -0
  147. data/spec/lib/protobuf/rpc/connectors/connector_spec.rb +13 -0
  148. data/spec/lib/protobuf/rpc/connectors/http_spec.rb +61 -0
  149. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +24 -0
  150. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +129 -0
  151. data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +62 -0
  152. data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +49 -0
  153. data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +115 -0
  154. data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +75 -0
  155. data/spec/lib/protobuf/rpc/servers/http/server_spec.rb +104 -0
  156. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +38 -0
  157. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +41 -0
  158. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +55 -0
  159. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +35 -0
  160. data/spec/lib/protobuf/rpc/service_directory_spec.rb +295 -0
  161. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +52 -0
  162. data/spec/lib/protobuf/rpc/service_filters_spec.rb +484 -0
  163. data/spec/lib/protobuf/rpc/service_spec.rb +161 -0
  164. data/spec/lib/protobuf/rpc/stat_spec.rb +151 -0
  165. data/spec/lib/protobuf_spec.rb +78 -0
  166. data/spec/spec_helper.rb +57 -0
  167. data/spec/support/all.rb +7 -0
  168. data/spec/support/packed_field.rb +22 -0
  169. data/spec/support/server.rb +94 -0
  170. data/spec/support/test/all_types.data.bin +0 -0
  171. data/spec/support/test/all_types.data.txt +119 -0
  172. data/spec/support/test/defaults.pb.rb +25 -0
  173. data/spec/support/test/defaults.proto +9 -0
  174. data/spec/support/test/enum.pb.rb +59 -0
  175. data/spec/support/test/enum.proto +34 -0
  176. data/spec/support/test/extended.pb.rb +22 -0
  177. data/spec/support/test/extended.proto +10 -0
  178. data/spec/support/test/extreme_values.data.bin +0 -0
  179. data/spec/support/test/google_unittest.pb.rb +543 -0
  180. data/spec/support/test/google_unittest.proto +713 -0
  181. data/spec/support/test/google_unittest_import.pb.rb +37 -0
  182. data/spec/support/test/google_unittest_import.proto +64 -0
  183. data/spec/support/test/google_unittest_import_public.pb.rb +8 -0
  184. data/spec/support/test/google_unittest_import_public.proto +38 -0
  185. data/spec/support/test/multi_field_extensions.pb.rb +56 -0
  186. data/spec/support/test/multi_field_extensions.proto +33 -0
  187. data/spec/support/test/resource.pb.rb +117 -0
  188. data/spec/support/test/resource.proto +94 -0
  189. data/spec/support/test/resource_service.rb +26 -0
  190. data/spec/support/test_app_file.rb +2 -0
  191. data/spec/support/tolerance_matcher.rb +40 -0
  192. metadata +367 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 999b239c093eb4031dacb08442959c7c30aa24ee
4
+ data.tar.gz: 3e8287f3fccbb2d9bef79df4dc92bdebe2f94ad6
5
+ SHA512:
6
+ metadata.gz: 3b305e8fd6659fe6ef2a7e8d18ec6962badc47217ddde2fbcd84bf6f18ab0ee0fafee6bb655773f6d59b53909d4e4269123a3505a178f1bcd600e78571699d97
7
+ data.tar.gz: 7c898d816504ac183035b16d41d16ad71910597efa5be4a634a4e69284c26a8881c1153110c15327f093dff527dfda42770b5e40fb9356fc9381afaf80782636
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.swp
3
+ pkg/*
4
+ .bundle
5
+ .rvmrc
6
+ .rspec
7
+ *.log
8
+ coverage
9
+ doc
10
+ .yardoc
11
+ .DS_Store
12
+ *.so
13
+ Gemfile.lock
14
+ tmp/*
15
+ ext/defs
16
+ ext/out
17
+ ext/ruby_generator/protoc-ruby
18
+ .ruby-gemset
19
+ .ruby-version
20
+ ext/ruby_generator/gdb.run
21
+ ext/ruby_generator/protoc-ruby.dSYM
data/.travis.yml ADDED
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "2.0.0"
5
+ script: NO_COMPILE_TEST_PROTOS=1 bundle exec rake spec/lib
6
+ notifications:
7
+ webhooks:
8
+ urls:
9
+ - https://webhooks.gitter.im/e/51a956bcd2b1854d6756
10
+ on_success: change # options: [always|never|change] default: always
11
+ on_failure: always # options: [always|never|change] default: always
12
+ on_start: false # default: false
data/.yardopts ADDED
@@ -0,0 +1,5 @@
1
+ --no-private
2
+ --hide-void-return
3
+
4
+ --markup-provider=redcarpet
5
+ --markup=markdown
data/CHANGES.md ADDED
@@ -0,0 +1,261 @@
1
+ # Stable (3.x)
2
+
3
+ 3.1.0
4
+ --------
5
+
6
+ - Add Protobuf::Rpc::Stats.statsd_client API to pass statistics on to Statsd. [@dgolombek]
7
+
8
+ 3.0.4
9
+ --------
10
+
11
+ - Raise specific MethodNotFound when service class doesn't respond to (publicly implement)
12
+ the rpc method called from the client. Stop rescuing all NoMethodError's thrown
13
+ by service implementations. [#193, @liveh2o]
14
+
15
+ 3.0.3
16
+ ---------
17
+
18
+ - Fix recursive memory/cpu growth issue when calling class-level `Message.to_json`. [#190]
19
+
20
+ 3.0.2
21
+ ---------
22
+
23
+ - Queue requests at the broker when concurrent requests hit the ZMQ server, distribute to
24
+ worker threads on each turn of the read poll loop. [#189, @abrandoned, @liveh2o]
25
+
26
+ 3.0.1
27
+ ---------
28
+
29
+ - Fix NoMethodError that can occur when serializing a message with a missing required field. [#187, @abrandoned]
30
+
31
+ 3.0.0
32
+ ---------
33
+
34
+ A lot has changed since the last stable v2.8.12. For all the relevant changes,
35
+ see the closed [pull requests and issues list in github](https://github.com/localshred/protobuf/issues?milestone=1&state=closed).
36
+ Below is a high-level list of fixes, deprecations, breaking changes, and new APIs.
37
+
38
+ ### EventMachine is dead, Long live EventMachine
39
+
40
+ The EventMachine client and server have been removed from this gem. They code was far
41
+ too error prone and flawed to feasibly support going forward. It's recommended
42
+ to switch to the socket implementation (using `PB_CLIENT_TYPE` and `PB_SERVER_TYPE` of `socket`)
43
+ for a painless switchover. The ZMQ implementation is much more performant but
44
+ does have a dependency on libzmq.
45
+
46
+ ### Server Middlewares
47
+
48
+ The server/dispatcher stack has been converted to the Middleware pattern!
49
+ Exception handling (#162, #164), Request decoding (#160, #166), Response encoding (#161, #167),
50
+ Logging and stats (#163), and Method dispatch (#159) have all been extracted into their
51
+ own Middlewares to greatly simplify testing and further development of the server
52
+ stack, furthering our preparations for removing the socket implementations (zmq, socket)
53
+ into their own gems in version 4.0. Major props to @liveh2o for [tackling this beast](https://github.com/localshred/protobuf/tree/master/lib/protobuf/rpc/middleware).
54
+
55
+ #### Bug Fixes
56
+
57
+ - Resolve DNS names (e.g. localhost) when using ZMQ server. [#46, reported by @reddshack]
58
+ - Switched to hash based value storage for messages to fix large field tag memory issues. [#118, #165]
59
+ - `Enum.fetch` used to return an enum of any type if that is the value passed in. [#168]
60
+
61
+ #### Deprecations
62
+
63
+ __!! NOTE: These deprecated methods will be removed in v3.1. !!__
64
+
65
+ - Deprecated `BaseField#type` in favor of `#type_class`.
66
+ - Deprecated `Message.get_ext_field_by_name` in favor of `.get_extension_field` or `.get_field(name_or_tag, true)`.
67
+ - Deprecated `Message.get_ext_field_by_tag,` in favor of `.get_extension_field` or `.get_field(name_or_tag, true)`.
68
+ - Deprecated `Message.get_field_by_name,` in favor of `.get_field`.
69
+ - Deprecated `Message.get_field_by_tag,` in favor of `.get_field`.
70
+ - Deprecated `Enum.enum_by_value` in favor of `.enum_for_tag`.
71
+ - Deprecated `Enum.name_by_value` in favor of `.name_for_tag`.
72
+ - Deprecated `Enum.get_name_by_tag` in favor of `.name_for_tag`.
73
+ - Deprecated `Enum.value_by_name` in favor of `.enum_for_name`.
74
+ - Deprecated `Enum.values` in favor of `.enums`. Beware that `.enums` returns an array where `.values` returns a hash.
75
+ Use `.all_tags` if you just need all the valid tag numbers. In other words, don't do this anymore: `MyEnum.values.values.map(&:to_i).uniq`.
76
+
77
+ #### Breaking Changes
78
+
79
+ - Require Active Support 3.2+. [#177]
80
+ - All files/classes relating to the EventMachine client and server are gone. Use `PB_CLIENT_TYPE` and `PB_SERVER_TYPE` of `socket` instead. [#116]
81
+ - Cleaned up the `Enum` class, deprecating/renaming most methods. tl;dr, just use `MyEnum.fetch`.
82
+ See #134 for more comprehensive documentation about which methods are going and away and which are being renamed. [#134]
83
+ - Pulled `EnumValue` into `Enum`. The `EnumValue` class no longer exists. Use `Enum` for type-checking instead. [#168].
84
+ - Removed previously deprecated `bin/rprotoc` executable. Use `protoc --ruby_out=...` instead. [13fbdb9]
85
+ - Removed previously deprecated `Service#rpc` method. Use `Service#env#method_name` instead. [f391294]
86
+ - Changed the `Service#initialize` to take an `Env` object instead of separate request, method, and client parameters. [6c61bf72]
87
+ - Removed attribute readers for `Service#method_name` and `Service#client_host`. Use `Service#env` to get them instead.
88
+ - Removed `lib/protobuf/message/message.rb`. Use `lib/protobuf/message.rb` instead.
89
+ - Removed field getters from Message instances (e.g. `Message#get_field_by_name`).
90
+ Use class-level getters instead (see Deprecations section).
91
+ - Moved `lib/protobuf/message/decoder.rb` to `lib/protobuf/decoder.rb`. The module is still named `Protobuf::Decoder`.
92
+ - Removed `Protobuf::Field::ExtensionFields` class.
93
+ - Removed instance-level `max` and `min` methods from all relevant Field classes (e.g. Int32Field, Uint64Field, etc).
94
+ Use class-level methods of the same names instead. [#176, 992eb051]
95
+ - `PbError#to_response` no longer receives an argument, instead returning a new `Socketrpc::Response` object. [#147, @liveh2o]
96
+ - The Server module has been stripped of almost all methods, now simply invokes the Middleware stack for each request. [#159, @liveh2o]
97
+ - Removed `Protobuf::PROTOC_VERSION` constant now that the compiler supports any protoc version.
98
+
99
+ #### New APIs
100
+
101
+ - Added support for [enum `allow_alias` option](https://developers.google.com/protocol-buffers/docs/proto#enum). [#134]
102
+ - `Enum.all_tags` returns an array of unique tags. Use it to replace `Enum.values.values.map(&:to_i)` (`Enum.values` is deprecated).
103
+ - `Enum.enums` returns an array of all defined enums for that class (including any aliased Enums).
104
+ - Reinstated support for symbol primitive field types in generated Message code. [#170]
105
+ - `Message.get_field` accepts a second boolean parameter (default false) to return an extension field if found. [#169]
106
+ - Mirror existing `Decoder#decode_from(stream)` with `Encoder#encode_to(stream)`. [#169]
107
+ - `Server` now invokes the [middleware stack](https://github.com/localshred/protobuf/tree/master/lib/protobuf/rpc/middleware) for request handling. [#159, @liveh2o]
108
+ - Added `protobuf:compile` and `protobuf:clean` rake tasks. Simply `load 'protobuf/tasks/compile.rake'` in your Rakefile (see `compile.rake` for arguments and usage). [#142, #143]
109
+ - Add `Protobuf::Deprecator` module to alias deprecated methods. [#165]
110
+ - Add support for assigning a symbol to a string or bytes field. [#181, @abrandoned]
111
+ - Add `first_alive_load_balance` option to rpc server. Pass `PB_FIRST_ALIVE_LOAD_BALANCE`
112
+ as an env variable to the client process to ensure the client asks the server
113
+ if it is alive (able to server requests to clients). [#183, @abrandoned]
114
+
115
+ 2.8.13
116
+ ---------
117
+
118
+ - Backport #190 to 2.8 stable series. [#192]
119
+
120
+ 2.8.12
121
+ ---------
122
+
123
+ - Fix thread busy access in zmq server/worker. [#151, @abrandoned]
124
+
125
+ 2.8.11
126
+ ---------
127
+
128
+ - Default ZMQ server to use inproc protocol instead of tcp (zero-copy between server-broker-worker). [#145, @brianstien]
129
+ - Add `broadcast_busy` functionality that removes server from cluster if the workers are full. [#149, @abrandoned]
130
+ - Add cli option for `--no-zmq_inproc`. [#149, @abrandoned]
131
+ - Add cli option for `--broadcast_busy`. [#149, @abrandoned]
132
+
133
+ 2.8.10
134
+ ---------
135
+
136
+ - Allow passing a file extension to compile/clean rake tasks. [#143]
137
+
138
+ 2.8.9
139
+ ---------
140
+
141
+ - Deprecated Protobuf::Lifecycle module in favor of using ActiveSupport::Notifications. [#139, @devin-c]
142
+ - Modify `$LOAD_PATH` inside descriptors.rb to make it easier for other libraries to write their own compiler plugins using our pre-compiled descriptors. [#141]
143
+ - Add protobuf:clean and protobuf:compile rake tasks for use in external libraries to compile source definitions to a destination. [#142]
144
+
145
+ 2.8.8
146
+ ---------
147
+
148
+ - ServiceDirectory beacons broadcast on same ip as listening clients. [#133, @devin-c]
149
+
150
+ 2.8.7
151
+ ---------
152
+
153
+ - Fire ActiveSupport load hooks when RPC Server and Client classes are loaded. [#126, @liveh2o]
154
+ - Prevent infinite loop when doing service lookup from directory. [#125, @brianstien]
155
+
156
+ 2.8.6
157
+ ---------
158
+
159
+ - Fix string/byte encoding issue when unicode characters present. Reported by @foxban. This was also backported to v2.7.12. [#120]
160
+
161
+ 2.8.5
162
+ ----------
163
+
164
+ - Fix issue where ServiceDirectory lookups were failing when given a class name, breaking the directory load balancing. (#119)
165
+
166
+ 2.8.4
167
+ ----------
168
+
169
+ - Fix issue where frozen strings assigned in a repeated field would cause encoding runtime errors. (#117)
170
+
171
+ 2.8.3
172
+ ----------
173
+
174
+ - Add Deprecation warning when requiring `protobuf/evented`. Version 3.x will not support the eventmachine transport layer for client or server.
175
+
176
+ 2.8.2
177
+ ----------
178
+
179
+ - Remove the <4.0 version constraint on ActiveSupport.
180
+
181
+ 2.8.1
182
+ ----------
183
+
184
+ - Improve `ServiceDirectory` lookup speed ~10x, lookups now done in constant time (devin-c).
185
+ - Add Timestamp to end of rpc stat log (represents ending time of request processing).
186
+ - Set `request_size` in the rpc stat within ZMQ Worker (previously missing).
187
+ - Ensure `request_size` and `response_size` are set on rpc stat for client requests.
188
+
189
+ 2.8.0
190
+ -----------
191
+
192
+ - New compiler supports protobuf compilation/runtime with protoc <= v2.5.0 (c++ compiler removed). [#109]
193
+ - Deprecated rprotoc in favor of protoc. [0bc9674]
194
+ - Added service dynamic discovery to the ZMQ connector and server. [#91, @devin-c]
195
+ - No longer creating `-java` platform gem due to removal of c++ compiler.
196
+ - Added WTFPL license.
197
+
198
+ 2.7.12
199
+ -----------
200
+
201
+ - Backport string/byte encoding issue when unicode characters present. [code: #122, original issue: #120]
202
+
203
+ 2.0.0
204
+ -----------
205
+
206
+ #### `rprotoc` changes
207
+
208
+ * New option `--ruby_out` to specify the output directory to place generated ruby files. If not provided, ruby code will not be generated.
209
+ * Extends `libprotoc` to hook in directly to google's provided compiler mechanism.
210
+ * Removed all previous compiler code including the racc parser, node visitors, etc.
211
+ * See `protoc --help` for default options.
212
+
213
+ #### `rprotoc` generated files changes
214
+
215
+ * Import `require`s now occur outside of any module or class declaration which solves ruby vm warnings previously seen.
216
+ * Empty inherited Message and Enum classes are pre-defined in the file, then reopened and their fields applied. This solves the issue of recursive field dependencies of two or more types in the same file.
217
+ * Generated DSL lines for message fields include the fully qualified name of the type (e.g. `optional ::Protobuf::Field::StringField, :name, 1`)
218
+ * Support for any combination of `packed`, `deprecated`, and `default` as options to pass to a field definition.
219
+ * Services are now generated in the corresponding `.pb.rb` file instead of their own `*_service.rb` files as before.
220
+
221
+ #### `rpc_server` changes
222
+
223
+ * Removed `--env` option. The running application or program is solely in charge of ensuring it's environment is properly loaded.
224
+ * Removed reading of `PB_CLIENT_TYPE`, `PB_SERVER_TYPE` environment variables. Should use mode switches or custom requires (see below) instead.
225
+ * Removed `--client_socket` in favor of using mode switches. This also means client calls made by the `rpc_server` will run as the same connector type as the given mode (socket, zmq, or evented).
226
+ * Removed `--pre-cache-definitions` switch in favor of always pre-caching for performance.
227
+ * Removed `--gc-pause-serialization` since using `--gc-pause-request` in conjunction was redundant.
228
+ * Removed `--client-type` in favor of mode switches.
229
+ * Removed `--server-type` in favor of mode switches.
230
+ * Added mode switch `--evented`.
231
+ * Added `--threads` to specify number of ZMQ Worker threads to use. Ignored if mode is not zmq.
232
+ * Added `--print-deprecation-warnings` switch to tell the server whether or not to print deprecation warnings on field usage. Enabled by default.
233
+ * See `rpc_server help start` for all options and usage. Note: the `start` task is the default and not necessary when running the `rpc_server`.
234
+
235
+ #### Message changes
236
+
237
+ * `Message#get_field` usage should now specify either `Message#get_field_by_name` or `Message#get_field_by_tag`, depending on your lookup criteria.
238
+ * Support for STDERR output when accessing a message field which has been defined as `[deprecated=true]`. Deprecated warnings can be skipped by running your application or program with `PB_IGNORE_DEPRECATIONS=1`.
239
+ * Significant internal refactoring which provides huge boosts in speed and efficiency both in accessing/writing Message field values, as well as serialization and deserialization routines.
240
+ * Refactor `Message#to_hash` to delegate hash representations to the field values, simply collecting the display values and returning a hash of fields that are set. This also affects `to_json` output.
241
+
242
+ #### Enum changes
243
+
244
+ * Add `Enum.fetch` class method to polymorphically retrieve an `EnumValue` object.
245
+ * Add `Enum.value_by_name` to retrieve the corresponding `EnumValue` to the given symbol name.
246
+ * Add `Enum.enum_by_value` to retrieve the corresponding `EnumValue` to the given integer value.
247
+
248
+ #### RPC Service changes
249
+
250
+ * `async_responder` paradigm is no longer supported.
251
+ * `self.response=` paradigm should be converted to using `respond_with(object)`.
252
+ * Significant internal changes that should not bleed beyond the API but which make maintaining the code much easier.
253
+
254
+ #### RPC Client changes
255
+
256
+ * In the absence of `PB_CLIENT_TYPE` environment var, you should be requiring the specific connector type specifically. For instance, if you wish to run in zmq mode for client requests, update your Gemfile: `gem 'protobuf', :require => 'protobuf/zmq'`.
257
+ * `:async` option on client calls is no longer recognized.
258
+
259
+ #### Other changes
260
+
261
+ * Moved files out of `lib/protobuf/common` folder into `lib/protobuf`. Files affected are logger, wire\_type, util. The only update would need to be the require path to these files since the modules were always `Protobuf::{TYPE}`.
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,16 @@
1
+ # Contributing
2
+
3
+ I love accepting issues and pull requests. I only ask for a few guidelines to
4
+ be followed that will make it much easier for me to solve your issue or get
5
+ your code merged.
6
+
7
+ 1. Use GitHub Issues or Pull Requests over sending an email. It's much easier for me to keep track of your issue through GitHub.
8
+ 2. For __compiler issues__, please provide both a gist for the __source definition(s)__ as well as the __generated output__ (if any).
9
+ 3. For __existing issues or functionality__, please use __`2-8-stable`__ as the base branch for the pull request. This helps us maintain a stable gem release strategy. All commits merged to `2-8-stable` will also be merged down to `master`.
10
+ 4. For __new functionality__, please use __`master`__ as the base branch for the pull request. The `master` branch is used to stage all "next iteration" work.
11
+ 5. Be patient with me as I work on your issue.
12
+
13
+ Following these simple guidelines really will help me help you. And really,
14
+ that's what we're here for. I'm on @localshred on twitter, let's be friends. :)
15
+
16
+ ## Happy Contributing!
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,14 @@
1
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
+ Version 2, December 2004
3
+
4
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
5
+
6
+ Everyone is permitted to copy and distribute verbatim or modified
7
+ copies of this license document, and changing it is allowed as long
8
+ as the name is changed.
9
+
10
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12
+
13
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
14
+
data/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # Protobuffy
2
+
3
+ (the JSON slayer)
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/protobuf.png)](http://badge.fury.io/rb/protobuf)
6
+ [![Build Status](https://secure.travis-ci.org/localshred/protobuf.png?branch=master)](https://travis-ci.org/localshred/protobuf)
7
+ [![Gitter chat](https://badges.gitter.im/localshred/protobuf.png)](https://gitter.im/localshred/protobuf)
8
+
9
+ Protobuffy is an implementation of [Google's protocol buffers][google-pb] in
10
+ ruby, version 2.5.0 is currently supported.
11
+
12
+ ## Install
13
+
14
+ See our [Installation Guide][] on the [wiki][].
15
+
16
+ ## Usage
17
+
18
+ The [wiki][] contains in-depth guides on the various ways to use this gem
19
+ including [compiling definitions][], [object APIs][], [services][], [clients][], and even
20
+ an [API roadmap][].
21
+
22
+ ## Examples
23
+
24
+ In two different terminals run the follow pairs of commands:
25
+
26
+ Socket:
27
+
28
+ bundle exec bin/rpc_server start --socket ./examples/lib/example/reverse-service.rb
29
+ bundle exec examples/bin/reverse-client-socket '!skrow tekcos'
30
+
31
+ ZeroMQ:
32
+
33
+ bundle exec bin/rpc_server start --zmq ./examples/lib/example/reverse-service.rb
34
+ bundle exec examples/bin/reverse-client-zmq '!skrow qmorez'
35
+
36
+ HTTP:
37
+
38
+ bundle exec bin/rpc_server start --http ./examples/lib/example/reverse-service.rb
39
+ bundle exec examples/bin/reverse-client-http '!skrow ptth'
40
+
41
+ Alternatively, start the server as a Rack app using a `rackup` and a standard `config.ru`:
42
+
43
+ bundle exec rackup examples/config.ru -p 9399
44
+
45
+ ## Changelog
46
+
47
+ See recent changes in the [release notes][] or the [changelog][].
48
+
49
+ [google-pb]: http://code.google.com/p/protobuf "Google Protocol Buffers"
50
+ [wiki]: https://github.com/localshred/protobuf/wiki "Wiki home page"
51
+ [Installation Guide]: https://github.com/localshred/protobuf/wiki/Installation "Installation guide"
52
+ [compiling definitions]: https://github.com/localshred/protobuf/wiki/Compiling-Definitions "Compiling guide"
53
+ [object APIs]: https://github.com/localshred/protobuf/wiki/Messages-&-Enums "Message & Enum object APIs guide"
54
+ [services]: https://github.com/localshred/protobuf/wiki/Services "Services object API guide"
55
+ [clients]: https://github.com/localshred/protobuf/wiki/Clients "Client object API guide"
56
+ [API roadmap]: https://github.com/localshred/protobuf/wiki/API-Roadmap "API Roadmap guide"
57
+ [release notes]: https://github.com/localshred/protobuf/releases "Release notes"
58
+ [changelog]: https://github.com/localshred/protobuf/blob/master/CHANGES.md "CHANGES.md"
data/Rakefile ADDED
@@ -0,0 +1,61 @@
1
+ $: << ::File.expand_path('../', __FILE__)
2
+ $: << ::File.expand_path('../spec', __FILE__)
3
+
4
+ require 'fileutils'
5
+ require 'rubygems'
6
+ require 'rubygems/package_task'
7
+ require 'bundler/gem_tasks'
8
+ require 'benchmark/tasks'
9
+
10
+ require 'rspec/core/rake_task'
11
+
12
+ desc 'Default: run specs.'
13
+ task :default => :spec
14
+
15
+ RSpec::Core::RakeTask.new(:spec)
16
+
17
+ desc 'Run specs'
18
+ namespace :compile do
19
+
20
+ desc 'Compile spec protos in spec/supprt/ directory'
21
+ task :spec do |task, args|
22
+ proto_path = ::File.expand_path('../spec/support/', __FILE__)
23
+ cmd = %Q{protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{proto_path} -I #{proto_path} #{File.join(proto_path, '**', '*.proto')}}
24
+
25
+ puts cmd
26
+ exec(cmd)
27
+ end
28
+
29
+ desc 'Compile rpc protos in protos/ directory'
30
+ task :rpc do |task, args|
31
+ proto_path = ::File.expand_path('../proto', __FILE__)
32
+ output_dir = ::File.expand_path('../tmp/rpc', __FILE__)
33
+ ::FileUtils.mkdir_p(output_dir)
34
+
35
+ cmd = %Q{protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{output_dir} -I #{proto_path} #{File.join(proto_path, '**', '*.proto')}}
36
+
37
+ puts cmd
38
+ system(cmd)
39
+
40
+ files = {
41
+ 'tmp/rpc/dynamic_discovery.pb.rb' => 'lib/protobuf/rpc',
42
+ 'tmp/rpc/rpc.pb.rb' => 'lib/protobuf/rpc',
43
+ 'tmp/rpc/google/protobuf/descriptor.pb.rb' => 'lib/protobuf/descriptors/google/protobuf',
44
+ 'tmp/rpc/google/protobuf/compiler/plugin.pb.rb' => 'lib/protobuf/descriptors/google/protobuf/compiler'
45
+ }
46
+
47
+ files.each_pair do |source_file, destination_dir|
48
+ source_file = ::File.expand_path("../#{source_file}", __FILE__)
49
+ destination_dir = ::File.expand_path("../#{destination_dir}", __FILE__)
50
+ ::FileUtils::Verbose.cp(source_file, destination_dir)
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ task :console do
57
+ require 'pry'
58
+ require 'protobuf'
59
+ ARGV.clear
60
+ ::Pry.start
61
+ end