protobuf 1.4.2 → 2.0.0.rc1

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 (198) hide show
  1. data/.gitignore +4 -0
  2. data/Rakefile +7 -7
  3. data/bin/rpc_server +2 -188
  4. data/bin/rprotoc +44 -38
  5. data/examples/addressbook.pb.rb +2 -2
  6. data/ext/Makefile +11 -0
  7. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/code_generator.h +142 -0
  8. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/command_line_interface.h +318 -0
  9. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum.h +99 -0
  10. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum_field.h +103 -0
  11. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_extension.h +85 -0
  12. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_field.h +167 -0
  13. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_file.h +98 -0
  14. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  15. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_helpers.h +159 -0
  16. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message.h +170 -0
  17. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message_field.h +102 -0
  18. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +103 -0
  19. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  20. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_string_field.h +104 -0
  21. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +2721 -0
  22. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/importer.h +303 -0
  23. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum.h +84 -0
  24. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum_field.h +121 -0
  25. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_extension.h +77 -0
  26. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_field.h +108 -0
  27. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_file.h +101 -0
  28. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_generator.h +72 -0
  29. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_helpers.h +213 -0
  30. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message.h +109 -0
  31. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message_field.h +134 -0
  32. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_primitive_field.h +121 -0
  33. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_service.h +113 -0
  34. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_string_field.h +120 -0
  35. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/mock_code_generator.h +113 -0
  36. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/package_info.h +64 -0
  37. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/parser.h +434 -0
  38. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.h +73 -0
  39. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.pb.h +790 -0
  40. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/python/python_generator.h +156 -0
  41. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/subprocess.h +108 -0
  42. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/zip_writer.h +93 -0
  43. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.h +1367 -0
  44. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.pb.h +5223 -0
  45. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor_database.h +366 -0
  46. data/ext/protobuf-2.4.1/src/google/protobuf/dynamic_message.h +136 -0
  47. data/ext/protobuf-2.4.1/src/google/protobuf/extension_set.h +904 -0
  48. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_reflection.h +424 -0
  49. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_util.h +82 -0
  50. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream.h +1102 -0
  51. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream_inl.h +64 -0
  52. data/ext/protobuf-2.4.1/src/google/protobuf/io/gzip_stream.h +207 -0
  53. data/ext/protobuf-2.4.1/src/google/protobuf/io/package_info.h +54 -0
  54. data/ext/protobuf-2.4.1/src/google/protobuf/io/printer.h +136 -0
  55. data/ext/protobuf-2.4.1/src/google/protobuf/io/tokenizer.h +313 -0
  56. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream.h +238 -0
  57. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl.h +357 -0
  58. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl_lite.h +340 -0
  59. data/ext/protobuf-2.4.1/src/google/protobuf/message.h +692 -0
  60. data/ext/protobuf-2.4.1/src/google/protobuf/message_lite.h +239 -0
  61. data/ext/protobuf-2.4.1/src/google/protobuf/package_info.h +64 -0
  62. data/ext/protobuf-2.4.1/src/google/protobuf/reflection_ops.h +80 -0
  63. data/ext/protobuf-2.4.1/src/google/protobuf/repeated_field.h +1295 -0
  64. data/ext/protobuf-2.4.1/src/google/protobuf/service.h +291 -0
  65. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/common.h +1211 -0
  66. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/hash.h +220 -0
  67. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/map-util.h +119 -0
  68. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/once.h +123 -0
  69. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/stl_util-inl.h +121 -0
  70. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/strutil.h +457 -0
  71. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/substitute.h +170 -0
  72. data/ext/protobuf-2.4.1/src/google/protobuf/test_util.h +174 -0
  73. data/ext/protobuf-2.4.1/src/google/protobuf/test_util_lite.h +101 -0
  74. data/ext/protobuf-2.4.1/src/google/protobuf/testing/file.h +83 -0
  75. data/ext/protobuf-2.4.1/src/google/protobuf/testing/googletest.h +98 -0
  76. data/ext/protobuf-2.4.1/src/google/protobuf/text_format.h +285 -0
  77. data/ext/protobuf-2.4.1/src/google/protobuf/unittest.pb.h +11915 -0
  78. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_custom_options.pb.h +2895 -0
  79. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +211 -0
  80. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_empty.pb.h +56 -0
  81. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import.pb.h +188 -0
  82. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import_lite.pb.h +151 -0
  83. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite.pb.h +4752 -0
  84. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +150 -0
  85. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_mset.pb.h +816 -0
  86. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_no_generic_services.pb.h +197 -0
  87. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_optimize_for.pb.h +403 -0
  88. data/ext/protobuf-2.4.1/src/google/protobuf/unknown_field_set.h +268 -0
  89. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format.h +304 -0
  90. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite.h +620 -0
  91. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite_inl.h +774 -0
  92. data/ext/ruby_generator/RubyGenerator.cpp +435 -0
  93. data/ext/ruby_generator/RubyGenerator.h +180 -0
  94. data/ext/ruby_generator/extconf.rb +24 -0
  95. data/lib/protobuf.rb +55 -33
  96. data/lib/protobuf/cli.rb +176 -0
  97. data/lib/protobuf/common/logger.rb +11 -11
  98. data/lib/protobuf/{message/enum.rb → enum.rb} +0 -10
  99. data/lib/protobuf/evented.rb +22 -0
  100. data/lib/protobuf/field.rb +57 -0
  101. data/lib/protobuf/field/base_field.rb +210 -0
  102. data/lib/protobuf/field/bool_field.rb +24 -0
  103. data/lib/protobuf/field/bytes_field.rb +38 -0
  104. data/lib/protobuf/field/double_field.rb +19 -0
  105. data/lib/protobuf/field/enum_field.rb +58 -0
  106. data/lib/protobuf/field/extension_fields.rb +24 -0
  107. data/lib/protobuf/field/field_array.rb +55 -0
  108. data/lib/protobuf/field/fixed32_field.rb +19 -0
  109. data/lib/protobuf/field/fixed64_field.rb +22 -0
  110. data/lib/protobuf/field/float_field.rb +29 -0
  111. data/lib/protobuf/field/int32_field.rb +10 -0
  112. data/lib/protobuf/field/int64_field.rb +10 -0
  113. data/lib/protobuf/field/integer_field.rb +19 -0
  114. data/lib/protobuf/field/message_field.rb +51 -0
  115. data/lib/protobuf/field/sfixed32_field.rb +21 -0
  116. data/lib/protobuf/field/sfixed64_field.rb +24 -0
  117. data/lib/protobuf/field/signed_integer_field.rb +23 -0
  118. data/lib/protobuf/field/sint32_field.rb +10 -0
  119. data/lib/protobuf/field/sint64_field.rb +10 -0
  120. data/lib/protobuf/field/string_field.rb +14 -0
  121. data/lib/protobuf/field/uint32_field.rb +10 -0
  122. data/lib/protobuf/field/uint64_field.rb +10 -0
  123. data/lib/protobuf/field/varint_field.rb +63 -0
  124. data/lib/protobuf/message.rb +376 -0
  125. data/lib/protobuf/message/message.rb +1 -475
  126. data/lib/protobuf/rpc/buffer.rb +1 -1
  127. data/lib/protobuf/rpc/client.rb +26 -26
  128. data/lib/protobuf/rpc/connector.rb +15 -14
  129. data/lib/protobuf/rpc/connectors/eventmachine.rb +13 -13
  130. data/lib/protobuf/rpc/rpc.pb.rb +39 -28
  131. data/lib/protobuf/rpc/server.rb +7 -28
  132. data/lib/protobuf/rpc/servers/evented_runner.rb +15 -15
  133. data/lib/protobuf/rpc/servers/socket/server.rb +2 -1
  134. data/lib/protobuf/rpc/servers/socket_runner.rb +5 -6
  135. data/lib/protobuf/rpc/servers/zmq_runner.rb +4 -5
  136. data/lib/protobuf/socket.rb +22 -0
  137. data/lib/protobuf/version.rb +2 -1
  138. data/lib/protobuf/zmq.rb +21 -0
  139. data/proto/rpc.pb.rb +48 -0
  140. data/protobuf.gemspec +14 -6
  141. data/spec/benchmark/tasks.rb +42 -23
  142. data/spec/functional/evented_server_spec.rb +2 -0
  143. data/spec/functional/socket_server_spec.rb +22 -26
  144. data/spec/functional/zmq_server_spec.rb +22 -26
  145. data/spec/lib/protobuf/cli_spec.rb +182 -0
  146. data/spec/{unit → lib/protobuf}/common/logger_spec.rb +0 -0
  147. data/spec/{unit → lib/protobuf/message}/enum_spec.rb +0 -0
  148. data/spec/{unit → lib/protobuf/message}/message_spec.rb +0 -0
  149. data/spec/{unit → lib/protobuf}/rpc/client_spec.rb +6 -4
  150. data/spec/lib/protobuf/rpc/connector_spec.rb +41 -0
  151. data/spec/{unit → lib/protobuf}/rpc/connectors/base_spec.rb +18 -18
  152. data/spec/{unit → lib/protobuf}/rpc/connectors/common_spec.rb +20 -20
  153. data/spec/{unit → lib/protobuf}/rpc/connectors/socket_spec.rb +9 -8
  154. data/spec/{unit → lib/protobuf}/rpc/connectors/zmq_spec.rb +1 -1
  155. data/spec/{unit → lib/protobuf}/rpc/servers/evented_server_spec.rb +4 -4
  156. data/spec/{unit → lib/protobuf}/rpc/servers/socket_server_spec.rb +11 -23
  157. data/spec/{unit → lib/protobuf}/rpc/servers/zmq/broker_spec.rb +5 -0
  158. data/spec/{unit → lib/protobuf}/rpc/servers/zmq/server_spec.rb +5 -0
  159. data/spec/{unit → lib/protobuf}/rpc/servers/zmq/util_spec.rb +5 -0
  160. data/spec/{unit → lib/protobuf}/rpc/servers/zmq/worker_spec.rb +5 -0
  161. data/spec/{unit → lib/protobuf}/rpc/service_spec.rb +0 -0
  162. data/spec/proto/test.pb.rb +48 -25
  163. data/spec/spec_helper.rb +9 -15
  164. data/spec/support/all.rb +7 -0
  165. data/spec/{helper → support}/server.rb +5 -7
  166. data/spec/{helper → support}/silent_constants.rb +4 -0
  167. data/spec/support/test_app_file.rb +2 -0
  168. data/spec/{helper → support}/tolerance_matcher.rb +0 -0
  169. data/test/proto/types.pb.rb +1 -1
  170. data/test/test_addressbook.rb +1 -1
  171. data/test/test_enum_value.rb +1 -1
  172. data/test/test_standard_message.rb +1 -1
  173. metadata +243 -107
  174. data/lib/protobuf/common/util.rb +0 -59
  175. data/lib/protobuf/compiler/compiler.rb +0 -52
  176. data/lib/protobuf/compiler/nodes.rb +0 -323
  177. data/lib/protobuf/compiler/proto.y +0 -216
  178. data/lib/protobuf/compiler/proto2.ebnf +0 -79
  179. data/lib/protobuf/compiler/proto_parser.rb +0 -1425
  180. data/lib/protobuf/compiler/template/rpc_service_implementation.erb +0 -42
  181. data/lib/protobuf/compiler/visitors.rb +0 -282
  182. data/lib/protobuf/descriptor/descriptor.proto +0 -286
  183. data/lib/protobuf/descriptor/descriptor.rb +0 -55
  184. data/lib/protobuf/descriptor/descriptor_builder.rb +0 -143
  185. data/lib/protobuf/descriptor/descriptor_proto.rb +0 -138
  186. data/lib/protobuf/descriptor/enum_descriptor.rb +0 -33
  187. data/lib/protobuf/descriptor/field_descriptor.rb +0 -49
  188. data/lib/protobuf/descriptor/file_descriptor.rb +0 -37
  189. data/lib/protobuf/message/field.rb +0 -684
  190. data/lib/protobuf/message/protoable.rb +0 -38
  191. data/spec/helper/all.rb +0 -7
  192. data/spec/unit/common/util_spec.rb +0 -17
  193. data/spec/unit/rpc/connector_spec.rb +0 -31
  194. data/spec/unit/rpc/connectors/eventmachine_client_spec.rb +0 -32
  195. data/spec/unit/rpc/connectors/eventmachine_spec.rb +0 -0
  196. data/test/check_unbuild.rb +0 -30
  197. data/test/test_compiler.rb +0 -325
  198. data/test/test_descriptor.rb +0 -122
data/.gitignore CHANGED
@@ -8,5 +8,9 @@ coverage
8
8
  doc
9
9
  .yardoc
10
10
  .DS_Store
11
+ *.so
11
12
  *.bin
12
13
  Gemfile.lock
14
+ tmp/*
15
+ ext/defs
16
+ ext/out
data/Rakefile CHANGED
@@ -4,13 +4,6 @@ $:.push File.expand_path("./spec", File.dirname(__FILE__))
4
4
  require "bundler/gem_tasks"
5
5
  require "benchmark/tasks"
6
6
 
7
- require 'rake/testtask'
8
- Rake::TestTask.new(:test) do |test|
9
- test.libs << 'test:.'
10
- test.pattern = 'test/**/test_*.rb'
11
- test.verbose = true
12
- end
13
-
14
7
  require 'rspec/core/rake_task'
15
8
 
16
9
  desc 'Default: run specs.'
@@ -18,3 +11,10 @@ task :default => :spec
18
11
 
19
12
  desc "Run specs"
20
13
  RSpec::Core::RakeTask.new(:spec)
14
+
15
+ ##
16
+ # Rake-compiler
17
+ #
18
+ require 'rake/extensiontask'
19
+
20
+ Rake::ExtensionTask.new("ruby_generator")
@@ -1,191 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'optparse'
4
- require 'ostruct'
5
- require 'logger'
6
- require 'protobuf/version'
7
- require 'protobuf/rpc/servers/evented_runner'
8
- require 'protobuf/rpc/servers/socket_runner'
9
- require 'protobuf/rpc/servers/zmq_runner'
3
+ require 'protobuf/cli'
4
+ ::Protobuf::CLI.start(ARGV)
10
5
 
11
- # Default options
12
- server = OpenStruct.new({
13
- :app => nil,
14
- :env => ENV['RPC_SERVER_ENV'] || 'development',
15
- :pre_cache_definitions => false,
16
- :gc_pause_during_request => false,
17
- :gc_pause_during_serialization => false,
18
- :host => '127.0.0.1',
19
- :port => 9595,
20
- :backlog => 100,
21
- :threshold => 100,
22
- :log => File.expand_path('./protobuf.log'),
23
- :level => ::Logger::INFO,
24
- :runner => ::Protobuf::Rpc::EventedRunner,
25
- :debug => false,
26
- :stopped_during_startup => false
27
- })
28
-
29
- class ClientServerParse
30
- def self.parse_client(value)
31
- end
32
-
33
- def self.parse_server(value)
34
- end
35
- end
36
-
37
- parser = OptionParser.new do |opts|
38
- opts.banner = "Usage: rpc_server [options] app_file.rb"
39
-
40
- opts.on("-e ENVIRONMENT", "--env=ENVIRONMENT", "Environment to run the server") do |v|
41
- server.env = ENV['RACK_ENV'] = ENV['RAILS_ENV'] = ENV['APP_ENV'] = v
42
- end
43
-
44
- opts.on("-o HOST", "--host=HOST", "Server host") do |v|
45
- server.host = v
46
- end
47
-
48
- opts.on("-p PORT", "--port=PORT", Integer, "Server port") do |v|
49
- server.port = v
50
- end
51
-
52
- opts.on("-l LOG_FILE", "--log=LOG_FILE", "Log file or device") do |v|
53
- server.log = v
54
- end
55
-
56
- opts.on("-v N", "--level=N", Integer, "Log level to use, 0-5 (see http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/)") do |v|
57
- server.level = v.to_i
58
- end
59
-
60
- opts.on("-b N", "--backlog=N", Integer, "Backlog for listening socket when using Socket Server") do |v|
61
- server.backlog = v.to_i
62
- end
63
-
64
- opts.on("-t N", "--threshold=N", Integer, "Multi-threaded Socket Server cleanup threshold") do |v|
65
- server.threshold = v.to_i
66
- end
67
-
68
- opts.on("-c", "--client_socket", "Socket Mode for client connections (No EventMachine)") do |v|
69
- ENV['PB_CLIENT_TYPE'] = "Socket"
70
- end
71
-
72
- opts.on("-s", "--socket", "Socket Server Mode (No EventMachine)") do |v|
73
- ENV['PB_SERVER_TYPE'] = "Socket"
74
- server.runner = ::Protobuf::Rpc::SocketRunner
75
- end
76
-
77
- opts.on("-z", "--zmq", "ZeroMQ Socket Mode for client and server connections (they must be used together)") do |v|
78
- ENV['PB_CLIENT_TYPE'] = 'Zmq'
79
- ENV['PB_SERVER_TYPE'] = 'Zmq'
80
-
81
- server.runner = ::Protobuf::Rpc::ZmqRunner
82
- end
83
-
84
- opts.on("--[no-]pre-cache-definitions", "Enable/Disable Message class pre-caching") do |v|
85
- server.pre_cache_definitions = v
86
- end
87
-
88
- opts.on("--[no-]gc-pause-request", "Enable/Disable GC pause during request.") do |v|
89
- server.gc_pause_during_request = v
90
- end
91
-
92
- opts.on("--[no-]gc-pause-serialization", "Enable/Disable GC pause during serialization.") do |v|
93
- server.gc_pause_during_serialization = v
94
- end
95
-
96
- opts.on("-d", "--[no-]debug", "Debug Mode. Override log level to DEBUG.") do |v|
97
- server.debug = v
98
- server.level = ::Logger::DEBUG if v === true
99
- end
100
-
101
- opts.on("--client-type=PB_CLIENT_TYPE", String, "Client Type to use (Socket or Zmq)") do |v|
102
- ENV['PB_CLIENT_TYPE'] = v
103
- end
104
-
105
- opts.on("--server-type=PB_SERVER_TYPE", String, "Server Type to use (Socket or Zmq)") do |v|
106
- ENV['PB_SERVER_TYPE'] = v
107
- end
108
-
109
- opts.separator ""
110
- opts.separator "Common options:"
111
-
112
- opts.on_tail("-h", "--help", "Show this message") do
113
- puts opts
114
- exit
115
- end
116
-
117
- opts.on_tail("--version", "Show version") do
118
- puts ::Protobuf::VERSION
119
- exit
120
- end
121
- end
122
-
123
- parser.parse!
124
-
125
- # Used to ensure we set the PB_CLIENT_TYPE and PB_SERVER_TYPE to the same thing
126
- # if one of them is set to Zmq
127
- if(ENV['PB_CLIENT_TYPE'] =~ /zmq/i)
128
- # make server and client types the same if we're using Zmq
129
- ENV['PB_SERVER_TYPE'] = ENV['PB_CLIENT_TYPE']
130
- server.runner = ::Protobuf::Rpc::ZmqRunner
131
- elsif(ENV['PB_SERVER_TYPE'] =~ /zmq/i)
132
- # make server and client types the same if we're using Zmq
133
- ENV['PB_CLIENT_TYPE'] = ENV['PB_SERVER_TYPE']
134
- server.runner = ::Protobuf::Rpc::ZmqRunner
135
- elsif(ENV['PB_SERVER_TYPE'] =~ /socket/i)
136
- server.runner = ::Protobuf::Rpc::SocketRunner
137
- end
138
-
139
- ##
140
- # Setup GC settings
141
- #
142
- ::Protobuf::Rpc::GC_PAUSE_REQUEST = server.gc_pause_during_request
143
- # If we pause during request we don't need to pause in serialization
144
- ::Protobuf::Rpc::GC_PAUSE_SERIALIZATION = (!server.gc_pause_during_request && server.gc_pause_during_serialization)
145
-
146
- # protobuf.rb picks up PB_CLIENT_TYPE and PB_SERVER_TYPE and does something
147
- # useful with them
148
- require 'protobuf'
149
-
150
- [:INT, :QUIT, :TERM].each do |sig|
151
- trap(sig) do
152
- server.stopped_during_startup = true
153
- server.runner.stop
154
- end
155
- end
156
-
157
- begin
158
- if ARGV.empty?
159
- puts 'You must specify an app file to use.'
160
- puts parser.help
161
- exit
162
- else
163
- server.app = ARGV.pop
164
- raise 'Invalid app file specified (%s).' % server.app unless File.exists?(server.app)
165
- end
166
-
167
- # Configure the ::Protobuf::Logger
168
- ::Protobuf::Logger.configure(:file => server.log, :level => server.debug ? ::Logger::DEBUG : server.level)
169
-
170
- # Output the server opts
171
- ::Protobuf::Logger.debug { 'Debugging options:' }
172
- ::Protobuf::Logger.debug { server.inspect }
173
-
174
- # Set the name of the process
175
- $0 = 'rpc_server %s:%d %s' % [server.host, server.port, server.app]
176
-
177
- # Require the given application file
178
- require server.app unless server.stopped_during_startup
179
-
180
- if server.pre_cache_definitions && !server.stopped_during_startup
181
- ::Protobuf::Message.pre_cache_class_definitions
182
- end
183
-
184
- server.runner.run(server) unless server.stopped_during_startup
185
- rescue
186
- msg = 'ERROR: RPC Server failed to start. %s' % $!.inspect
187
- $stderr.puts(msg, *($!.backtrace))
188
- ::Protobuf::Logger.error { msg }
189
- ::Protobuf::Logger.error { $!.backtrace.join("\n") }
190
- exit 1
191
- end
@@ -1,46 +1,52 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'optparse'
3
+ require 'rubygems'
4
+ require 'ffi'
5
+
6
+ GENERATOR_FILE_PATH = File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "ruby_generator.so"))
7
+ unless File.exists?(GENERATOR_FILE_PATH)
8
+ $stdout << <<-WARNING
9
+ Cannot locate shared object to plugin to protocol buffers generator.
10
+ Thought the file would be located at #{GENERATOR_FILE_PATH}
11
+
12
+ If you are running on Windows you should compile protocol buffer
13
+ definitions on another VM and then use those definitions locally.
14
+
15
+ Only the compiler is restricted by this. The definitions should work without issue.
16
+ WARNING
17
+ $stdout << $/
4
18
 
5
- if File.directory?("#{File.dirname(__FILE__)}/../lib")
6
- $: << "#{File.dirname(__FILE__)}/../lib"
7
- else
8
- require 'rubygems'
9
- gem 'protobuf'
10
- end
11
- require 'protobuf'
12
- require 'protobuf/version'
13
- require 'protobuf/compiler/compiler'
14
-
15
- ::Version = Protobuf::VERSION
16
-
17
- options = {
18
- :proto_path => '.',
19
- :out => '.',
20
- }
21
- opts = OptionParser.new("#{$0} [OPTIONS] PROTO_FILE")
22
- opts.on('-p', '--proto_path <PATH>', 'Specify the directory in which to search for imports. The current directory is default.'){|v| options[:proto_path] = v}
23
- opts.on('-o', '--out <OUT_DIR>', 'Specify the directory in which Ruby source file is generated. The current directory is default.'){|v| options[:out] = v}
24
- opts.on_tail('-v', '--version', 'Show version.'){ puts(opts.ver); exit }
25
- opts.on_tail('-h', '--help', 'Show this message.'){ puts(opts.help); exit }
26
-
27
- begin
28
- opts.order!
29
- rescue OptionParser::ParseError
30
- $stderr.puts $!.to_s
31
19
  exit 1
32
20
  end
33
21
 
34
- unless ARGV.size > 0
35
- puts opts
36
- exit
37
- end
22
+ module Protobuf
23
+ module RProtoC
24
+ extend FFI::Library
25
+ ffi_lib ::GENERATOR_FILE_PATH
26
+ attach_function :_rprotoc_extern, [:int, :pointer], :int32
27
+
28
+ def self.compile_proto(args)
29
+ GC.disable # Don't want strings to be GC'd while protoc has them
30
+ args = args.dup
31
+ args.unshift("rprotoc")
32
+ args << "--help" if args.size == 1
38
33
 
39
- begin
40
- ARGV.each do |proto_file|
41
- Protobuf::Compiler.compile(proto_file, options[:proto_path], options[:out])
34
+ ptr_params = []
35
+ args.each do |param|
36
+ ptr_params << ::FFI::MemoryPointer.from_string(param.dup)
37
+ end
38
+ ptr_params << nil
39
+
40
+ argv = ::FFI::MemoryPointer.new(:pointer, ptr_params.size)
41
+ ptr_params.each_with_index do |param_pointer, index|
42
+ argv[index].put_pointer(0, param_pointer)
43
+ end
44
+
45
+ self._rprotoc_extern(ptr_params.compact.size, argv)
46
+ ensure
47
+ GC.enable
48
+ end
42
49
  end
43
- rescue
44
- $stderr.puts $!.message
45
- exit 1
46
- end
50
+ end
51
+
52
+ ::Protobuf::RProtoC.compile_proto(ARGV)
@@ -26,7 +26,7 @@
26
26
  # }
27
27
 
28
28
  require 'protobuf/message/message'
29
- require 'protobuf/message/enum'
29
+ require 'protobuf/enum'
30
30
  require 'protobuf/message/extend'
31
31
 
32
32
  module Tutorial
@@ -52,4 +52,4 @@ module Tutorial
52
52
  defined_in __FILE__
53
53
  repeated :Person, :person, 1
54
54
  end
55
- end
55
+ end
@@ -0,0 +1,11 @@
1
+ all: \
2
+ RubyGenerator.h \
3
+ RubyGenerator.cpp \
4
+ main.cpp
5
+ g++ -Wall -I/code/src/utilities/protobuf-2.4.1/src -lprotoc -lprotobuf -lpthread -o protoc-ruby RubyGenerator.cpp main.cpp
6
+
7
+ test:
8
+ rm -rf test/out/*
9
+ ./protoc-ruby --proto_path=defs --ruby_out=out defs/atlas/util.proto defs/atlas/newman/*.proto
10
+
11
+ .PHONY: all test
@@ -0,0 +1,142 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // http://code.google.com/p/protobuf/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // Author: kenton@google.com (Kenton Varda)
32
+ // Based on original Protocol Buffers design by
33
+ // Sanjay Ghemawat, Jeff Dean, and others.
34
+ //
35
+ // Defines the abstract interface implemented by each of the language-specific
36
+ // code generators.
37
+
38
+ #ifndef GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__
39
+ #define GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__
40
+
41
+ #include <google/protobuf/stubs/common.h>
42
+ #include <string>
43
+ #include <vector>
44
+ #include <utility>
45
+
46
+ namespace google {
47
+ namespace protobuf {
48
+
49
+ namespace io { class ZeroCopyOutputStream; }
50
+ class FileDescriptor;
51
+
52
+ namespace compiler {
53
+
54
+ // Defined in this file.
55
+ class CodeGenerator;
56
+ class GeneratorContext;
57
+
58
+ // The abstract interface to a class which generates code implementing a
59
+ // particular proto file in a particular language. A number of these may
60
+ // be registered with CommandLineInterface to support various languages.
61
+ class LIBPROTOC_EXPORT CodeGenerator {
62
+ public:
63
+ inline CodeGenerator() {}
64
+ virtual ~CodeGenerator();
65
+
66
+ // Generates code for the given proto file, generating one or more files in
67
+ // the given output directory.
68
+ //
69
+ // A parameter to be passed to the generator can be specified on the
70
+ // command line. This is intended to be used by Java and similar languages
71
+ // to specify which specific class from the proto file is to be generated,
72
+ // though it could have other uses as well. It is empty if no parameter was
73
+ // given.
74
+ //
75
+ // Returns true if successful. Otherwise, sets *error to a description of
76
+ // the problem (e.g. "invalid parameter") and returns false.
77
+ virtual bool Generate(const FileDescriptor* file,
78
+ const string& parameter,
79
+ GeneratorContext* generator_context,
80
+ string* error) const = 0;
81
+
82
+ private:
83
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CodeGenerator);
84
+ };
85
+
86
+ // CodeGenerators generate one or more files in a given directory. This
87
+ // abstract interface represents the directory to which the CodeGenerator is
88
+ // to write and other information about the context in which the Generator
89
+ // runs.
90
+ class LIBPROTOC_EXPORT GeneratorContext {
91
+ public:
92
+ inline GeneratorContext() {}
93
+ virtual ~GeneratorContext();
94
+
95
+ // Opens the given file, truncating it if it exists, and returns a
96
+ // ZeroCopyOutputStream that writes to the file. The caller takes ownership
97
+ // of the returned object. This method never fails (a dummy stream will be
98
+ // returned instead).
99
+ //
100
+ // The filename given should be relative to the root of the source tree.
101
+ // E.g. the C++ generator, when generating code for "foo/bar.proto", will
102
+ // generate the files "foo/bar.pb.h" and "foo/bar.pb.cc"; note that
103
+ // "foo/" is included in these filenames. The filename is not allowed to
104
+ // contain "." or ".." components.
105
+ virtual io::ZeroCopyOutputStream* Open(const string& filename) = 0;
106
+
107
+ // Creates a ZeroCopyOutputStream which will insert code into the given file
108
+ // at the given insertion point. See plugin.proto (plugin.pb.h) for more
109
+ // information on insertion points. The default implementation
110
+ // assert-fails -- it exists only for backwards-compatibility.
111
+ //
112
+ // WARNING: This feature is currently EXPERIMENTAL and is subject to change.
113
+ virtual io::ZeroCopyOutputStream* OpenForInsert(
114
+ const string& filename, const string& insertion_point);
115
+
116
+ // Returns a vector of FileDescriptors for all the files being compiled
117
+ // in this run. Useful for languages, such as Go, that treat files
118
+ // differently when compiled as a set rather than individually.
119
+ virtual void ListParsedFiles(vector<const FileDescriptor*>* output);
120
+
121
+ private:
122
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GeneratorContext);
123
+ };
124
+
125
+ // The type GeneratorContext was once called OutputDirectory. This typedef
126
+ // provides backward compatibility.
127
+ typedef GeneratorContext OutputDirectory;
128
+
129
+ // Several code generators treat the parameter argument as holding a
130
+ // list of options separated by commas. This helper function parses
131
+ // a set of comma-delimited name/value pairs: e.g.,
132
+ // "foo=bar,baz,qux=corge"
133
+ // parses to the pairs:
134
+ // ("foo", "bar"), ("baz", ""), ("qux", "corge")
135
+ extern void ParseGeneratorParameter(const string&,
136
+ vector<pair<string, string> >*);
137
+
138
+ } // namespace compiler
139
+ } // namespace protobuf
140
+
141
+ } // namespace google
142
+ #endif // GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__