auser-poolparty 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (424) hide show
  1. data/VERSION.yml +1 -1
  2. data/bin/cloud-compile +6 -1
  3. data/config/jeweler.rb +1 -3
  4. data/lib/cloud_providers/cloud_provider_instance.rb +11 -1
  5. data/lib/dependency_resolvers/chef/resources/chef_recipe.rb +51 -0
  6. data/lib/dependency_resolvers/chef.rb +12 -3
  7. data/lib/mixins/callbacks.rb +6 -2
  8. data/lib/poolparty/plugins/apache2/passenger_site.rb +2 -2
  9. data/test/fixtures/chef/recipes/sudo/attributes/sudoers.rb +30 -0
  10. data/test/fixtures/chef/recipes/sudo/recipes/default.rb +33 -0
  11. data/test/fixtures/chef/recipes/sudo/templates/default/sudoers.erb +22 -0
  12. data/test/lib/dependency_resolvers/chef/resources/chef_recipe_test.rb +21 -0
  13. data/test/lib/dependency_resolvers/chef_test.rb +8 -1
  14. data/vendor/gems/thrift/CHANGELOG +1 -0
  15. data/vendor/gems/thrift/Makefile.am +25 -6
  16. data/vendor/gems/thrift/Manifest +81 -0
  17. data/vendor/gems/thrift/README +17 -111
  18. data/vendor/gems/thrift/Rakefile +104 -0
  19. data/vendor/gems/thrift/{lib/hs/Setup.lhs → benchmark/Benchmark.thrift} +5 -4
  20. data/vendor/gems/thrift/benchmark/benchmark.rb +271 -0
  21. data/vendor/gems/thrift/benchmark/client.rb +74 -0
  22. data/vendor/gems/thrift/benchmark/server.rb +82 -0
  23. data/vendor/gems/thrift/benchmark/thin_server.rb +44 -0
  24. data/vendor/gems/thrift/ext/binary_protocol_accelerated.c +474 -0
  25. data/vendor/gems/thrift/{lib/cocoa/src/protocol/TProtocolException.m → ext/binary_protocol_accelerated.h} +1 -4
  26. data/vendor/gems/thrift/ext/compact_protocol.c +665 -0
  27. data/vendor/gems/thrift/{lib/cocoa/src/protocol/TProtocolException.h → ext/compact_protocol.h} +1 -6
  28. data/vendor/gems/thrift/ext/constants.h +95 -0
  29. data/vendor/gems/thrift/{contrib/fb303/Makefile.am → ext/extconf.rb} +8 -13
  30. data/vendor/gems/thrift/{compiler/cpp/src/platform.h → ext/macros.h} +18 -13
  31. data/vendor/gems/thrift/ext/memory_buffer.c +76 -0
  32. data/vendor/gems/thrift/{lib/csharp/src/Protocol/TMessageType.cs → ext/memory_buffer.h} +2 -13
  33. data/vendor/gems/thrift/ext/protocol.c +185 -0
  34. data/vendor/gems/thrift/{lib/csharp/src/TProcessor.cs → ext/protocol.h} +2 -11
  35. data/vendor/gems/thrift/ext/struct.c +606 -0
  36. data/vendor/gems/thrift/ext/struct.h +67 -0
  37. data/vendor/gems/thrift/ext/thrift_native.c +194 -0
  38. data/vendor/gems/thrift/lib/thrift/client.rb +62 -0
  39. data/vendor/gems/thrift/{contrib/fb303/py/fb303_scripts/__init__.py → lib/thrift/core_ext/fixnum.rb} +13 -4
  40. data/vendor/gems/thrift/{contrib/fb303/global_footer.mk → lib/thrift/core_ext.rb} +4 -2
  41. data/vendor/gems/thrift/lib/thrift/exceptions.rb +82 -0
  42. data/vendor/gems/thrift/lib/thrift/processor.rb +57 -0
  43. data/vendor/gems/thrift/lib/thrift/protocol/base_protocol.rb +290 -0
  44. data/vendor/gems/thrift/lib/thrift/protocol/binary_protocol.rb +225 -0
  45. data/vendor/gems/thrift/{cleanup.sh → lib/thrift/protocol/binary_protocol_accelerated.rb} +19 -42
  46. data/vendor/gems/thrift/lib/thrift/protocol/compact_protocol.rb +422 -0
  47. data/vendor/gems/thrift/lib/thrift/serializer/deserializer.rb +33 -0
  48. data/vendor/gems/thrift/{bootstrap.sh → lib/thrift/serializer/serializer.rb} +17 -18
  49. data/vendor/gems/thrift/lib/thrift/server/base_server.rb +31 -0
  50. data/vendor/gems/thrift/lib/thrift/server/mongrel_http_server.rb +58 -0
  51. data/vendor/gems/thrift/lib/thrift/server/nonblocking_server.rb +296 -0
  52. data/vendor/gems/thrift/lib/thrift/server/simple_server.rb +43 -0
  53. data/vendor/gems/thrift/lib/thrift/server/thread_pool_server.rb +75 -0
  54. data/vendor/gems/thrift/lib/thrift/server/threaded_server.rb +47 -0
  55. data/vendor/gems/thrift/lib/thrift/struct.rb +298 -0
  56. data/vendor/gems/thrift/{contrib/fb303/bootstrap.sh → lib/thrift/thrift_native.rb} +5 -7
  57. data/vendor/gems/thrift/lib/{erl/Makefile → thrift/transport/base_server_transport.rb} +20 -20
  58. data/vendor/gems/thrift/lib/thrift/transport/base_transport.rb +70 -0
  59. data/vendor/gems/thrift/lib/thrift/transport/buffered_transport.rb +77 -0
  60. data/vendor/gems/thrift/lib/thrift/transport/framed_transport.rb +90 -0
  61. data/vendor/gems/thrift/lib/thrift/transport/http_client_transport.rb +45 -0
  62. data/vendor/gems/thrift/lib/thrift/transport/io_stream_transport.rb +39 -0
  63. data/vendor/gems/thrift/lib/thrift/transport/memory_buffer_transport.rb +96 -0
  64. data/vendor/gems/thrift/lib/thrift/transport/server_socket.rb +63 -0
  65. data/vendor/gems/thrift/lib/thrift/transport/socket.rb +136 -0
  66. data/vendor/gems/thrift/lib/{java/Makefile.am → thrift/transport/unix_server_socket.rb} +39 -17
  67. data/vendor/gems/thrift/{contrib/fb303/global_header.mk → lib/thrift/transport/unix_socket.rb} +23 -21
  68. data/vendor/gems/thrift/lib/thrift/types.rb +101 -0
  69. data/vendor/gems/thrift/lib/thrift.rb +59 -0
  70. data/vendor/gems/thrift/script/proto_benchmark.rb +121 -0
  71. data/vendor/gems/thrift/{lib/Makefile.am → script/read_struct.rb} +24 -36
  72. data/vendor/gems/thrift/{contrib/fb303/py/setup.py → script/write_struct.rb} +8 -5
  73. data/vendor/gems/thrift/setup.rb +1585 -0
  74. data/vendor/gems/thrift/spec/ThriftSpec.thrift +84 -0
  75. data/vendor/gems/thrift/spec/base_protocol_spec.rb +160 -0
  76. data/vendor/gems/thrift/spec/base_transport_spec.rb +351 -0
  77. data/vendor/gems/thrift/{contrib/fb303/py/Makefile.am → spec/binary_protocol_accelerated_spec.rb} +22 -25
  78. data/vendor/gems/thrift/spec/binary_protocol_spec.rb +63 -0
  79. data/vendor/gems/thrift/spec/binary_protocol_spec_shared.rb +375 -0
  80. data/vendor/gems/thrift/spec/client_spec.rb +100 -0
  81. data/vendor/gems/thrift/spec/compact_protocol_spec.rb +117 -0
  82. data/vendor/gems/thrift/spec/exception_spec.rb +142 -0
  83. data/vendor/gems/thrift/spec/http_client_spec.rb +49 -0
  84. data/vendor/gems/thrift/spec/mongrel_http_server_spec.rb +117 -0
  85. data/vendor/gems/thrift/spec/nonblocking_server_spec.rb +265 -0
  86. data/vendor/gems/thrift/spec/processor_spec.rb +83 -0
  87. data/vendor/gems/thrift/spec/serializer_spec.rb +69 -0
  88. data/vendor/gems/thrift/spec/server_socket_spec.rb +80 -0
  89. data/vendor/gems/thrift/spec/server_spec.rb +160 -0
  90. data/vendor/gems/thrift/spec/socket_spec.rb +61 -0
  91. data/vendor/gems/thrift/spec/socket_spec_shared.rb +104 -0
  92. data/vendor/gems/thrift/spec/spec_helper.rb +60 -0
  93. data/vendor/gems/thrift/spec/struct_spec.rb +252 -0
  94. data/vendor/gems/thrift/spec/types_spec.rb +116 -0
  95. data/vendor/gems/thrift/spec/unix_socket_spec.rb +108 -0
  96. data/vendor/gems/trollop/FAQ.txt +84 -0
  97. data/vendor/gems/trollop/History.txt +101 -0
  98. data/vendor/gems/trollop/Manifest.txt +7 -0
  99. data/vendor/gems/trollop/README.txt +40 -0
  100. data/vendor/gems/trollop/Rakefile +36 -0
  101. data/vendor/gems/trollop/lib/trollop.rb +739 -0
  102. data/vendor/gems/trollop/release-script.txt +13 -0
  103. data/vendor/gems/trollop/test/test_trollop.rb +1048 -0
  104. data/vendor/gems/trollop/www/index.html +172 -0
  105. metadata +123 -347
  106. data/vendor/gems/thrift/CHANGES +0 -35
  107. data/vendor/gems/thrift/CONTRIBUTORS +0 -77
  108. data/vendor/gems/thrift/DISCLAIMER +0 -6
  109. data/vendor/gems/thrift/LICENSE +0 -202
  110. data/vendor/gems/thrift/NEWS +0 -79
  111. data/vendor/gems/thrift/NOTICE +0 -26
  112. data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +0 -198
  113. data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +0 -107
  114. data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +0 -194
  115. data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +0 -173
  116. data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +0 -127
  117. data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +0 -39
  118. data/vendor/gems/thrift/compiler/cpp/Makefile.am +0 -136
  119. data/vendor/gems/thrift/compiler/cpp/README +0 -39
  120. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +0 -2331
  121. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +0 -3003
  122. data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +0 -1700
  123. data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +0 -932
  124. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +0 -173
  125. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +0 -321
  126. data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +0 -1445
  127. data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +0 -637
  128. data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +0 -3069
  129. data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +0 -1673
  130. data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +0 -77
  131. data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +0 -1812
  132. data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +0 -2281
  133. data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +0 -2310
  134. data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +0 -1114
  135. data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +0 -1071
  136. data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +0 -354
  137. data/vendor/gems/thrift/compiler/cpp/src/globals.h +0 -117
  138. data/vendor/gems/thrift/compiler/cpp/src/main.cc +0 -1207
  139. data/vendor/gems/thrift/compiler/cpp/src/main.h +0 -103
  140. data/vendor/gems/thrift/compiler/cpp/src/md5.c +0 -381
  141. data/vendor/gems/thrift/compiler/cpp/src/md5.h +0 -91
  142. data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +0 -137
  143. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +0 -59
  144. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +0 -121
  145. data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +0 -56
  146. data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +0 -51
  147. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +0 -59
  148. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +0 -64
  149. data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +0 -150
  150. data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +0 -93
  151. data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +0 -56
  152. data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +0 -64
  153. data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +0 -223
  154. data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +0 -86
  155. data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +0 -68
  156. data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +0 -55
  157. data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +0 -127
  158. data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +0 -176
  159. data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +0 -70
  160. data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +0 -303
  161. data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +0 -1140
  162. data/vendor/gems/thrift/configure.ac +0 -255
  163. data/vendor/gems/thrift/contrib/fb303/LICENSE +0 -16
  164. data/vendor/gems/thrift/contrib/fb303/README +0 -37
  165. data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +0 -258
  166. data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +0 -198
  167. data/vendor/gems/thrift/contrib/fb303/configure.ac +0 -115
  168. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +0 -124
  169. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +0 -103
  170. data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +0 -84
  171. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +0 -481
  172. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +0 -215
  173. data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +0 -112
  174. data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +0 -103
  175. data/vendor/gems/thrift/contrib/fb303/java/build.xml +0 -84
  176. data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +0 -89
  177. data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +0 -82
  178. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +0 -195
  179. data/vendor/gems/thrift/contrib/thrift.el +0 -126
  180. data/vendor/gems/thrift/contrib/thrift.spec +0 -206
  181. data/vendor/gems/thrift/contrib/thrift.vim +0 -91
  182. data/vendor/gems/thrift/contrib/thrift_dump.cpp +0 -91
  183. data/vendor/gems/thrift/doc/lgpl-2.1.txt +0 -504
  184. data/vendor/gems/thrift/doc/otp-base-license.txt +0 -20
  185. data/vendor/gems/thrift/doc/thrift.bnf +0 -96
  186. data/vendor/gems/thrift/doc/thrift.tex +0 -1057
  187. data/vendor/gems/thrift/lib/cocoa/README +0 -21
  188. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +0 -44
  189. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +0 -130
  190. data/vendor/gems/thrift/lib/cocoa/src/TException.h +0 -34
  191. data/vendor/gems/thrift/lib/cocoa/src/TException.m +0 -64
  192. data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +0 -29
  193. data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +0 -27
  194. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +0 -27
  195. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +0 -51
  196. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +0 -51
  197. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +0 -477
  198. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +0 -148
  199. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +0 -29
  200. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +0 -29
  201. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +0 -104
  202. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +0 -50
  203. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +0 -153
  204. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +0 -42
  205. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +0 -159
  206. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +0 -35
  207. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +0 -91
  208. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +0 -38
  209. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +0 -89
  210. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +0 -32
  211. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +0 -58
  212. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +0 -36
  213. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +0 -30
  214. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +0 -43
  215. data/vendor/gems/thrift/lib/cpp/Makefile.am +0 -158
  216. data/vendor/gems/thrift/lib/cpp/README +0 -67
  217. data/vendor/gems/thrift/lib/cpp/src/TLogging.h +0 -163
  218. data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +0 -53
  219. data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +0 -96
  220. data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +0 -148
  221. data/vendor/gems/thrift/lib/cpp/src/Thrift.h +0 -191
  222. data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +0 -60
  223. data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +0 -77
  224. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +0 -137
  225. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +0 -84
  226. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +0 -160
  227. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +0 -114
  228. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +0 -314
  229. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +0 -130
  230. data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +0 -125
  231. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +0 -493
  232. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +0 -169
  233. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +0 -284
  234. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +0 -122
  235. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +0 -55
  236. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +0 -100
  237. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +0 -155
  238. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +0 -354
  239. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +0 -379
  240. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +0 -155
  241. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +0 -122
  242. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +0 -77
  243. data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +0 -264
  244. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +0 -79
  245. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +0 -42
  246. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +0 -394
  247. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +0 -254
  248. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +0 -736
  249. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +0 -279
  250. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +0 -346
  251. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +0 -225
  252. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +0 -762
  253. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +0 -253
  254. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +0 -998
  255. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +0 -340
  256. data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +0 -304
  257. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +0 -438
  258. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +0 -104
  259. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +0 -187
  260. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +0 -750
  261. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +0 -435
  262. data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +0 -38
  263. data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +0 -213
  264. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +0 -118
  265. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +0 -70
  266. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +0 -217
  267. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +0 -79
  268. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +0 -243
  269. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +0 -74
  270. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +0 -370
  271. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +0 -667
  272. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +0 -77
  273. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +0 -73
  274. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +0 -953
  275. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +0 -442
  276. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +0 -348
  277. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +0 -111
  278. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +0 -368
  279. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +0 -76
  280. data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +0 -92
  281. data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +0 -96
  282. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +0 -54
  283. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +0 -41
  284. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +0 -591
  285. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +0 -242
  286. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +0 -235
  287. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +0 -191
  288. data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +0 -224
  289. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +0 -31
  290. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +0 -117
  291. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +0 -178
  292. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +0 -287
  293. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +0 -299
  294. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +0 -219
  295. data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +0 -30
  296. data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +0 -30
  297. data/vendor/gems/thrift/lib/cpp/thrift.pc.in +0 -29
  298. data/vendor/gems/thrift/lib/csharp/Makefile.am +0 -70
  299. data/vendor/gems/thrift/lib/csharp/README +0 -26
  300. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +0 -55
  301. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +0 -242
  302. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +0 -62
  303. data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +0 -142
  304. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +0 -34
  305. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +0 -392
  306. data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +0 -58
  307. data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +0 -50
  308. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +0 -58
  309. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +0 -58
  310. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +0 -87
  311. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +0 -61
  312. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +0 -29
  313. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +0 -94
  314. data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +0 -50
  315. data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +0 -42
  316. data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +0 -40
  317. data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +0 -135
  318. data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +0 -148
  319. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +0 -186
  320. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +0 -234
  321. data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +0 -131
  322. data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +0 -73
  323. data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +0 -35
  324. data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +0 -100
  325. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +0 -157
  326. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +0 -39
  327. data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +0 -144
  328. data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +0 -103
  329. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +0 -66
  330. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +0 -64
  331. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +0 -38
  332. data/vendor/gems/thrift/lib/erl/README +0 -56
  333. data/vendor/gems/thrift/lib/erl/build/beamver +0 -59
  334. data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +0 -15
  335. data/vendor/gems/thrift/lib/erl/build/colors.mk +0 -24
  336. data/vendor/gems/thrift/lib/erl/build/docs.mk +0 -12
  337. data/vendor/gems/thrift/lib/erl/build/mime.types +0 -98
  338. data/vendor/gems/thrift/lib/erl/build/otp.mk +0 -146
  339. data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +0 -85
  340. data/vendor/gems/thrift/lib/erl/build/raw_test.mk +0 -29
  341. data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +0 -54
  342. data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +0 -31
  343. data/vendor/gems/thrift/lib/erl/src/Makefile +0 -116
  344. data/vendor/gems/thrift/lib/erl/src/test_handler.erl +0 -26
  345. data/vendor/gems/thrift/lib/erl/src/test_service.erl +0 -29
  346. data/vendor/gems/thrift/lib/erl/src/thrift.app.src +0 -44
  347. data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +0 -1
  348. data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +0 -64
  349. data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +0 -325
  350. data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +0 -180
  351. data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +0 -384
  352. data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +0 -118
  353. data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +0 -87
  354. data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +0 -208
  355. data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +0 -199
  356. data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +0 -164
  357. data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +0 -188
  358. data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +0 -356
  359. data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +0 -183
  360. data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +0 -25
  361. data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +0 -249
  362. data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +0 -119
  363. data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +0 -57
  364. data/vendor/gems/thrift/lib/erl/vsn.mk +0 -1
  365. data/vendor/gems/thrift/lib/hs/README +0 -82
  366. data/vendor/gems/thrift/lib/hs/TODO +0 -2
  367. data/vendor/gems/thrift/lib/hs/Thrift.cabal +0 -20
  368. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +0 -147
  369. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +0 -191
  370. data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +0 -65
  371. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +0 -58
  372. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +0 -60
  373. data/vendor/gems/thrift/lib/hs/src/Thrift.hs +0 -111
  374. data/vendor/gems/thrift/lib/java/README +0 -43
  375. data/vendor/gems/thrift/lib/java/build.xml +0 -195
  376. data/vendor/gems/thrift/lib/java/ivy.xml +0 -8
  377. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +0 -171
  378. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +0 -123
  379. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +0 -66
  380. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +0 -102
  381. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +0 -46
  382. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +0 -94
  383. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +0 -45
  384. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +0 -30
  385. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +0 -32
  386. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +0 -39
  387. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +0 -110
  388. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +0 -69
  389. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +0 -42
  390. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +0 -29
  391. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +0 -31
  392. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +0 -29
  393. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +0 -31
  394. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +0 -128
  395. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +0 -331
  396. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +0 -741
  397. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +0 -48
  398. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +0 -927
  399. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +0 -38
  400. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +0 -40
  401. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +0 -48
  402. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +0 -31
  403. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +0 -146
  404. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +0 -81
  405. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +0 -30
  406. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +0 -158
  407. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +0 -42
  408. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +0 -384
  409. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +0 -36
  410. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +0 -40
  411. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +0 -304
  412. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +0 -772
  413. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +0 -126
  414. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +0 -145
  415. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +0 -271
  416. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +0 -126
  417. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +0 -157
  418. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +0 -159
  419. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +0 -98
  420. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +0 -160
  421. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +0 -31
  422. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +0 -213
  423. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +0 -31
  424. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +0 -145
@@ -1,1114 +0,0 @@
1
- /*
2
- * Licensed to the Apache Software Foundation (ASF) under one
3
- * or more contributor license agreements. See the NOTICE file
4
- * distributed with this work for additional information
5
- * regarding copyright ownership. The ASF licenses this file
6
- * to you under the Apache License, Version 2.0 (the
7
- * "License"); you may not use this file except in compliance
8
- * with the License. You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing,
13
- * software distributed under the License is distributed on an
14
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
- * KIND, either express or implied. See the License for the
16
- * specific language governing permissions and limitations
17
- * under the License.
18
- */
19
-
20
- #include <string>
21
- #include <fstream>
22
- #include <iostream>
23
- #include <vector>
24
-
25
- #include <stdlib.h>
26
- #include <sys/stat.h>
27
- #include <sys/types.h>
28
- #include <sstream>
29
-
30
- #include <boost/tokenizer.hpp>
31
-
32
- #include "t_oop_generator.h"
33
- #include "platform.h"
34
- using namespace std;
35
-
36
-
37
- /**
38
- * Ruby code generator.
39
- *
40
- */
41
- class t_rb_generator : public t_oop_generator {
42
- public:
43
- t_rb_generator(
44
- t_program* program,
45
- const std::map<std::string, std::string>& parsed_options,
46
- const std::string& option_string)
47
- : t_oop_generator(program)
48
- {
49
- out_dir_base_ = "gen-rb";
50
- }
51
-
52
- /**
53
- * Init and close methods
54
- */
55
-
56
- void init_generator();
57
- void close_generator();
58
-
59
- /**
60
- * Program-level generation functions
61
- */
62
-
63
- void generate_typedef (t_typedef* ttypedef);
64
- void generate_enum (t_enum* tenum);
65
- void generate_const (t_const* tconst);
66
- void generate_struct (t_struct* tstruct);
67
- void generate_xception (t_struct* txception);
68
- void generate_service (t_service* tservice);
69
-
70
- std::string render_const_value(t_type* type, t_const_value* value);
71
-
72
- /**
73
- * Struct generation code
74
- */
75
-
76
- void generate_rb_struct(std::ofstream& out, t_struct* tstruct, bool is_exception);
77
- void generate_rb_struct_required_validator(std::ofstream& out, t_struct* tstruct);
78
- void generate_rb_function_helpers(t_function* tfunction);
79
- void generate_rb_simple_constructor(std::ofstream& out, t_struct* tstruct);
80
- void generate_rb_simple_exception_constructor(std::ofstream& out, t_struct* tstruct);
81
- void generate_field_constants (std::ofstream& out, t_struct* tstruct);
82
- void generate_accessors (std::ofstream& out, t_struct* tstruct);
83
- void generate_field_defns (std::ofstream& out, t_struct* tstruct);
84
- void generate_field_data (std::ofstream& out, t_type* field_type, const std::string& field_name, t_const_value* field_value, bool optional);
85
-
86
- /**
87
- * Service-level generation functions
88
- */
89
-
90
- void generate_service_helpers (t_service* tservice);
91
- void generate_service_interface (t_service* tservice);
92
- void generate_service_client (t_service* tservice);
93
- void generate_service_server (t_service* tservice);
94
- void generate_process_function (t_service* tservice, t_function* tfunction);
95
-
96
- /**
97
- * Serialization constructs
98
- */
99
-
100
- void generate_deserialize_field (std::ofstream &out,
101
- t_field* tfield,
102
- std::string prefix="",
103
- bool inclass=false);
104
-
105
- void generate_deserialize_struct (std::ofstream &out,
106
- t_struct* tstruct,
107
- std::string prefix="");
108
-
109
- void generate_deserialize_container (std::ofstream &out,
110
- t_type* ttype,
111
- std::string prefix="");
112
-
113
- void generate_deserialize_set_element (std::ofstream &out,
114
- t_set* tset,
115
- std::string prefix="");
116
-
117
- void generate_deserialize_map_element (std::ofstream &out,
118
- t_map* tmap,
119
- std::string prefix="");
120
-
121
- void generate_deserialize_list_element (std::ofstream &out,
122
- t_list* tlist,
123
- std::string prefix="");
124
-
125
- void generate_serialize_field (std::ofstream &out,
126
- t_field* tfield,
127
- std::string prefix="");
128
-
129
- void generate_serialize_struct (std::ofstream &out,
130
- t_struct* tstruct,
131
- std::string prefix="");
132
-
133
- void generate_serialize_container (std::ofstream &out,
134
- t_type* ttype,
135
- std::string prefix="");
136
-
137
- void generate_serialize_map_element (std::ofstream &out,
138
- t_map* tmap,
139
- std::string kiter,
140
- std::string viter);
141
-
142
- void generate_serialize_set_element (std::ofstream &out,
143
- t_set* tmap,
144
- std::string iter);
145
-
146
- void generate_serialize_list_element (std::ofstream &out,
147
- t_list* tlist,
148
- std::string iter);
149
-
150
- void generate_rdoc (std::ofstream& out,
151
- t_doc* tdoc);
152
-
153
- /**
154
- * Helper rendering functions
155
- */
156
-
157
- std::string rb_autogen_comment();
158
- std::string render_includes();
159
- std::string declare_field(t_field* tfield);
160
- std::string type_name(t_type* ttype);
161
- std::string full_type_name(t_type* ttype);
162
- std::string function_signature(t_function* tfunction, std::string prefix="");
163
- std::string argument_list(t_struct* tstruct);
164
- std::string type_to_enum(t_type* ttype);
165
-
166
-
167
-
168
- std::vector<std::string> ruby_modules(t_program* p) {
169
- std::string ns = p->get_namespace("rb");
170
- boost::tokenizer<> tok(ns);
171
- std::vector<std::string> modules;
172
-
173
- for(boost::tokenizer<>::iterator beg=tok.begin(); beg != tok.end(); ++beg) {
174
- modules.push_back(capitalize(*beg));
175
- }
176
-
177
- return modules;
178
- }
179
-
180
- void begin_namespace(std::ofstream&, std::vector<std::string>);
181
- void end_namespace(std::ofstream&, std::vector<std::string>);
182
-
183
- private:
184
-
185
- /**
186
- * File streams
187
- */
188
-
189
- std::ofstream f_types_;
190
- std::ofstream f_consts_;
191
- std::ofstream f_service_;
192
-
193
- };
194
-
195
-
196
- /**
197
- * Prepares for file generation by opening up the necessary file output
198
- * streams.
199
- *
200
- * @param tprogram The program to generate
201
- */
202
- void t_rb_generator::init_generator() {
203
- // Make output directory
204
- MKDIR(get_out_dir().c_str());
205
-
206
- // Make output file
207
- string f_types_name = get_out_dir()+underscore(program_name_)+"_types.rb";
208
- f_types_.open(f_types_name.c_str());
209
-
210
- string f_consts_name = get_out_dir()+underscore(program_name_)+"_constants.rb";
211
- f_consts_.open(f_consts_name.c_str());
212
-
213
- // Print header
214
- f_types_ <<
215
- rb_autogen_comment() << endl <<
216
- render_includes() << endl;
217
- begin_namespace(f_types_, ruby_modules(program_));
218
-
219
- f_consts_ <<
220
- rb_autogen_comment() << endl <<
221
- "require '" << underscore(program_name_) << "_types'" << endl <<
222
- endl;
223
- begin_namespace(f_consts_, ruby_modules(program_));
224
-
225
- }
226
-
227
- /**
228
- * Renders all the imports necessary for including another Thrift program
229
- */
230
- string t_rb_generator::render_includes() {
231
- const vector<t_program*>& includes = program_->get_includes();
232
- string result = "";
233
- for (size_t i = 0; i < includes.size(); ++i) {
234
- result += "require '" + underscore(includes[i]->get_name()) + "_types'\n";
235
- }
236
- if (includes.size() > 0) {
237
- result += "\n";
238
- }
239
- return result;
240
- }
241
-
242
- /**
243
- * Autogen'd comment
244
- */
245
- string t_rb_generator::rb_autogen_comment() {
246
- return
247
- std::string("#\n") +
248
- "# Autogenerated by Thrift\n" +
249
- "#\n" +
250
- "# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING\n" +
251
- "#\n";
252
- }
253
-
254
- /**
255
- * Closes the type files
256
- */
257
- void t_rb_generator::close_generator() {
258
- // Close types file
259
- end_namespace(f_types_, ruby_modules(program_));
260
- end_namespace(f_consts_, ruby_modules(program_));
261
- f_types_.close();
262
- f_consts_.close();
263
- }
264
-
265
- /**
266
- * Generates a typedef. This is not done in Ruby, types are all implicit.
267
- *
268
- * @param ttypedef The type definition
269
- */
270
- void t_rb_generator::generate_typedef(t_typedef* ttypedef) {}
271
-
272
- /**
273
- * Generates code for an enumerated type. Done using a class to scope
274
- * the values.
275
- *
276
- * @param tenum The enumeration
277
- */
278
- void t_rb_generator::generate_enum(t_enum* tenum) {
279
- indent(f_types_) <<
280
- "module " << capitalize(tenum->get_name()) << endl;
281
- indent_up();
282
-
283
- vector<t_enum_value*> constants = tenum->get_constants();
284
- vector<t_enum_value*>::iterator c_iter;
285
- int value = -1;
286
- for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
287
- if ((*c_iter)->has_value()) {
288
- value = (*c_iter)->get_value();
289
- } else {
290
- ++value;
291
- }
292
-
293
- // Ruby class constants have to be capitalized... omg i am so on the fence
294
- // about languages strictly enforcing capitalization why can't we just all
295
- // agree and play nice.
296
- string name = capitalize((*c_iter)->get_name());
297
-
298
- f_types_ <<
299
- indent() << name << " = " << value << endl;
300
- }
301
-
302
- //Create a hash mapping values back to their names (as strings) since ruby has no native enum type
303
- indent(f_types_) << "VALUE_MAP = {";
304
- bool first = true;
305
- value = -1;
306
- for(c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
307
- //Populate the hash
308
- //If no value is given, use the next available one
309
- if ((*c_iter)->has_value())
310
- value = (*c_iter)->get_value();
311
- else ++value;
312
-
313
- first ? first = false : f_types_ << ", ";
314
- f_types_ << value << " => \"" << capitalize((*c_iter)->get_name()) << "\"";
315
-
316
- }
317
- f_types_ << "}" << endl;
318
-
319
- // Create a set with valid values for this enum
320
- indent(f_types_) << "VALID_VALUES = Set.new([";
321
- first = true;
322
- for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
323
- // Populate the set
324
- first ? first = false: f_types_ << ", ";
325
- f_types_ << capitalize((*c_iter)->get_name());
326
- }
327
- f_types_ << "]).freeze" << endl;
328
-
329
- indent_down();
330
- indent(f_types_) <<
331
- "end" << endl << endl;
332
- }
333
-
334
- /**
335
- * Generate a constant value
336
- */
337
- void t_rb_generator::generate_const(t_const* tconst) {
338
- t_type* type = tconst->get_type();
339
- string name = tconst->get_name();
340
- t_const_value* value = tconst->get_value();
341
-
342
- name[0] = toupper(name[0]);
343
-
344
- indent(f_consts_) << name << " = " << render_const_value(type, value);
345
- f_consts_ << endl << endl;
346
- }
347
-
348
- /**
349
- * Prints the value of a constant with the given type. Note that type checking
350
- * is NOT performed in this function as it is always run beforehand using the
351
- * validate_types method in main.cc
352
- */
353
- string t_rb_generator::render_const_value(t_type* type, t_const_value* value) {
354
- type = get_true_type(type);
355
- std::ostringstream out;
356
- if (type->is_base_type()) {
357
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
358
- switch (tbase) {
359
- case t_base_type::TYPE_STRING:
360
- out << "%q\"" << get_escaped_string(value) << '"';
361
- break;
362
- case t_base_type::TYPE_BOOL:
363
- out << (value->get_integer() > 0 ? "true" : "false");
364
- break;
365
- case t_base_type::TYPE_BYTE:
366
- case t_base_type::TYPE_I16:
367
- case t_base_type::TYPE_I32:
368
- case t_base_type::TYPE_I64:
369
- out << value->get_integer();
370
- break;
371
- case t_base_type::TYPE_DOUBLE:
372
- if (value->get_type() == t_const_value::CV_INTEGER) {
373
- out << value->get_integer();
374
- } else {
375
- out << value->get_double();
376
- }
377
- break;
378
- default:
379
- throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
380
- }
381
- } else if (type->is_enum()) {
382
- indent(out) << value->get_integer();
383
- } else if (type->is_struct() || type->is_xception()) {
384
- out << full_type_name(type) << ".new({" << endl;
385
- indent_up();
386
- const vector<t_field*>& fields = ((t_struct*)type)->get_members();
387
- vector<t_field*>::const_iterator f_iter;
388
- const map<t_const_value*, t_const_value*>& val = value->get_map();
389
- map<t_const_value*, t_const_value*>::const_iterator v_iter;
390
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
391
- t_type* field_type = NULL;
392
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
393
- if ((*f_iter)->get_name() == v_iter->first->get_string()) {
394
- field_type = (*f_iter)->get_type();
395
- }
396
- }
397
- if (field_type == NULL) {
398
- throw "type error: " + type->get_name() + " has no field " + v_iter->first->get_string();
399
- }
400
- out << indent();
401
- out << render_const_value(g_type_string, v_iter->first);
402
- out << " => ";
403
- out << render_const_value(field_type, v_iter->second);
404
- out << "," << endl;
405
- }
406
- indent_down();
407
- indent(out) << "})";
408
- } else if (type->is_map()) {
409
- t_type* ktype = ((t_map*)type)->get_key_type();
410
- t_type* vtype = ((t_map*)type)->get_val_type();
411
- out << "{" << endl;
412
- indent_up();
413
- const map<t_const_value*, t_const_value*>& val = value->get_map();
414
- map<t_const_value*, t_const_value*>::const_iterator v_iter;
415
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
416
- out << indent();
417
- out << render_const_value(ktype, v_iter->first);
418
- out << " => ";
419
- out << render_const_value(vtype, v_iter->second);
420
- out << "," << endl;
421
- }
422
- indent_down();
423
- indent(out) << "}";
424
- } else if (type->is_list() || type->is_set()) {
425
- t_type* etype;
426
- if (type->is_list()) {
427
- etype = ((t_list*)type)->get_elem_type();
428
- } else {
429
- etype = ((t_set*)type)->get_elem_type();
430
- }
431
- if (type->is_set()) {
432
- out << "Set.new([" << endl;
433
- } else {
434
- out << "[" << endl;
435
- }
436
- indent_up();
437
- const vector<t_const_value*>& val = value->get_list();
438
- vector<t_const_value*>::const_iterator v_iter;
439
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
440
- out << indent();
441
- out << render_const_value(etype, *v_iter);
442
- out << "," << endl;
443
- }
444
- indent_down();
445
- if (type->is_set()) {
446
- indent(out) << "])";
447
- } else {
448
- indent(out) << "]";
449
- }
450
- } else {
451
- throw "CANNOT GENERATE CONSTANT FOR TYPE: " + type->get_name();
452
- }
453
- return out.str();
454
- }
455
-
456
- /**
457
- * Generates a ruby struct
458
- */
459
- void t_rb_generator::generate_struct(t_struct* tstruct) {
460
- generate_rb_struct(f_types_, tstruct, false);
461
- }
462
-
463
- /**
464
- * Generates a struct definition for a thrift exception. Basically the same
465
- * as a struct but extends the Exception class.
466
- *
467
- * @param txception The struct definition
468
- */
469
- void t_rb_generator::generate_xception(t_struct* txception) {
470
- generate_rb_struct(f_types_, txception, true);
471
- }
472
-
473
- /**
474
- * Generates a ruby struct
475
- */
476
- void t_rb_generator::generate_rb_struct(std::ofstream& out, t_struct* tstruct, bool is_exception = false) {
477
- generate_rdoc(out, tstruct);
478
- indent(out) << "class " << type_name(tstruct);
479
- if (is_exception) {
480
- out << " < ::Thrift::Exception";
481
- }
482
- out << endl;
483
-
484
- indent_up();
485
- indent(out) << "include ::Thrift::Struct" << endl;
486
-
487
- if (is_exception) {
488
- generate_rb_simple_exception_constructor(out, tstruct);
489
- }
490
-
491
- generate_field_constants(out, tstruct);
492
- generate_accessors(out, tstruct);
493
- generate_field_defns(out, tstruct);
494
- generate_rb_struct_required_validator(out, tstruct);
495
-
496
- indent_down();
497
- indent(out) << "end" << endl << endl;
498
- }
499
-
500
- void t_rb_generator::generate_rb_simple_exception_constructor(std::ofstream& out, t_struct* tstruct) {
501
- const vector<t_field*>& members = tstruct->get_members();
502
-
503
- if (members.size() == 1) {
504
- vector<t_field*>::const_iterator m_iter = members.begin();
505
-
506
- if ((*m_iter)->get_type()->is_string()) {
507
- string name = (*m_iter)->get_name();
508
-
509
- indent(out) << "def initialize(message=nil)" << endl;
510
- indent_up();
511
- indent(out) << "super()" << endl;
512
- indent(out) << "self." << name << " = message" << endl;
513
- indent_down();
514
- indent(out) << "end" << endl << endl;
515
-
516
- if (name != "message") {
517
- indent(out) << "def message; " << name << " end" << endl << endl;
518
- }
519
- }
520
- }
521
- }
522
-
523
- void t_rb_generator::generate_field_constants(std::ofstream& out, t_struct* tstruct) {
524
- const vector<t_field*>& fields = tstruct->get_members();
525
- vector<t_field*>::const_iterator f_iter;
526
-
527
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
528
- std::string field_name = (*f_iter)->get_name();
529
- std::string cap_field_name = upcase_string(field_name);
530
-
531
- indent(out) << cap_field_name << " = " << (*f_iter)->get_key() << endl;
532
- }
533
- out << endl;
534
- }
535
-
536
- void t_rb_generator::generate_accessors(std::ofstream& out, t_struct* tstruct) {
537
- const vector<t_field*>& members = tstruct->get_members();
538
- vector<t_field*>::const_iterator m_iter;
539
-
540
- if (members.size() > 0) {
541
- indent(out) << "::Thrift::Struct.field_accessor self";
542
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
543
- out << ", :" << (*m_iter)->get_name();
544
- }
545
- out << endl;
546
- }
547
- }
548
-
549
- void t_rb_generator::generate_field_defns(std::ofstream& out, t_struct* tstruct) {
550
- const vector<t_field*>& fields = tstruct->get_members();
551
- vector<t_field*>::const_iterator f_iter;
552
-
553
- indent(out) << "FIELDS = {" << endl;
554
- indent_up();
555
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
556
- if (f_iter != fields.begin()) {
557
- out << "," << endl;
558
- }
559
-
560
- // generate the field docstrings within the FIELDS constant. no real better place...
561
- generate_rdoc(out, *f_iter);
562
-
563
- indent(out) <<
564
- upcase_string((*f_iter)->get_name()) << " => ";
565
-
566
- generate_field_data(out, (*f_iter)->get_type(), (*f_iter)->get_name(), (*f_iter)->get_value(),
567
- (*f_iter)->get_req() == t_field::T_OPTIONAL);
568
- }
569
- indent_down();
570
- out << endl;
571
- indent(out) << "}" << endl << endl;
572
-
573
- indent(out) << "def struct_fields; FIELDS; end" << endl << endl;
574
-
575
- }
576
-
577
- void t_rb_generator::generate_field_data(std::ofstream& out, t_type* field_type,
578
- const std::string& field_name = "", t_const_value* field_value = NULL, bool optional = false) {
579
- field_type = get_true_type(field_type);
580
-
581
- // Begin this field's defn
582
- out << "{:type => " << type_to_enum(field_type);
583
-
584
- if (!field_name.empty()) {
585
- out << ", :name => '" << field_name << "'";
586
- }
587
-
588
- if (field_value != NULL) {
589
- out << ", :default => " << render_const_value(field_type, field_value);
590
- }
591
-
592
- if (!field_type->is_base_type()) {
593
- if (field_type->is_struct() || field_type->is_xception()) {
594
- out << ", :class => " << full_type_name((t_struct*)field_type);
595
- } else if (field_type->is_list()) {
596
- out << ", :element => ";
597
- generate_field_data(out, ((t_list*)field_type)->get_elem_type());
598
- } else if (field_type->is_map()) {
599
- out << ", :key => ";
600
- generate_field_data(out, ((t_map*)field_type)->get_key_type());
601
- out << ", :value => ";
602
- generate_field_data(out, ((t_map*)field_type)->get_val_type());
603
- } else if (field_type->is_set()) {
604
- out << ", :element => ";
605
- generate_field_data(out, ((t_set*)field_type)->get_elem_type());
606
- }
607
- }
608
-
609
- if(optional) {
610
- out << ", :optional => true";
611
- }
612
-
613
- if (field_type->is_enum()) {
614
- out << ", :enum_class => " << full_type_name(field_type);
615
- }
616
-
617
- // End of this field's defn
618
- out << "}";
619
- }
620
-
621
- void t_rb_generator::begin_namespace(std::ofstream& out, vector<std::string> modules) {
622
- for (vector<std::string>::iterator m_iter = modules.begin(); m_iter != modules.end(); ++m_iter) {
623
- indent(out) << "module " << *m_iter << endl;
624
- indent_up();
625
- }
626
- }
627
-
628
- void t_rb_generator::end_namespace(std::ofstream& out, vector<std::string> modules) {
629
- for (vector<std::string>::reverse_iterator m_iter = modules.rbegin(); m_iter != modules.rend(); ++m_iter) {
630
- indent_down();
631
- indent(out) << "end" << endl;
632
- }
633
- }
634
-
635
-
636
- /**
637
- * Generates a thrift service.
638
- *
639
- * @param tservice The service definition
640
- */
641
- void t_rb_generator::generate_service(t_service* tservice) {
642
- string f_service_name = get_out_dir()+underscore(service_name_)+".rb";
643
- f_service_.open(f_service_name.c_str());
644
-
645
- f_service_ <<
646
- rb_autogen_comment() << endl <<
647
- "require 'thrift'" << endl;
648
-
649
- if (tservice->get_extends() != NULL) {
650
- f_service_ <<
651
- "require '" << underscore(tservice->get_extends()->get_name()) << "'" << endl;
652
- }
653
-
654
- f_service_ <<
655
- "require '" << underscore(program_name_) << "_types'" << endl <<
656
- endl;
657
-
658
- begin_namespace(f_service_, ruby_modules(tservice->get_program()));
659
-
660
- indent(f_service_) << "module " << capitalize(tservice->get_name()) << endl;
661
- indent_up();
662
-
663
- // Generate the three main parts of the service (well, two for now in PHP)
664
- generate_service_client(tservice);
665
- generate_service_server(tservice);
666
- generate_service_helpers(tservice);
667
-
668
- indent_down();
669
- indent(f_service_) << "end" << endl <<
670
- endl;
671
-
672
- end_namespace(f_service_, ruby_modules(tservice->get_program()));
673
-
674
- // Close service file
675
- f_service_.close();
676
- }
677
-
678
- /**
679
- * Generates helper functions for a service.
680
- *
681
- * @param tservice The service to generate a header definition for
682
- */
683
- void t_rb_generator::generate_service_helpers(t_service* tservice) {
684
- vector<t_function*> functions = tservice->get_functions();
685
- vector<t_function*>::iterator f_iter;
686
-
687
- indent(f_service_) <<
688
- "# HELPER FUNCTIONS AND STRUCTURES" << endl << endl;
689
-
690
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
691
- t_struct* ts = (*f_iter)->get_arglist();
692
- generate_rb_struct(f_service_, ts);
693
- generate_rb_function_helpers(*f_iter);
694
- }
695
- }
696
-
697
- /**
698
- * Generates a struct and helpers for a function.
699
- *
700
- * @param tfunction The function
701
- */
702
- void t_rb_generator::generate_rb_function_helpers(t_function* tfunction) {
703
- t_struct result(program_, tfunction->get_name() + "_result");
704
- t_field success(tfunction->get_returntype(), "success", 0);
705
- if (!tfunction->get_returntype()->is_void()) {
706
- result.append(&success);
707
- }
708
-
709
- t_struct* xs = tfunction->get_xceptions();
710
- const vector<t_field*>& fields = xs->get_members();
711
- vector<t_field*>::const_iterator f_iter;
712
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
713
- result.append(*f_iter);
714
- }
715
- generate_rb_struct(f_service_, &result);
716
- }
717
-
718
- /**
719
- * Generates a service client definition.
720
- *
721
- * @param tservice The service to generate a server for.
722
- */
723
- void t_rb_generator::generate_service_client(t_service* tservice) {
724
- string extends = "";
725
- string extends_client = "";
726
- if (tservice->get_extends() != NULL) {
727
- extends = full_type_name(tservice->get_extends());
728
- extends_client = " < " + extends + "::Client ";
729
- }
730
-
731
- indent(f_service_) <<
732
- "class Client" << extends_client << endl;
733
- indent_up();
734
-
735
- indent(f_service_) <<
736
- "include ::Thrift::Client" << endl << endl;
737
-
738
- // Generate client method implementations
739
- vector<t_function*> functions = tservice->get_functions();
740
- vector<t_function*>::const_iterator f_iter;
741
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
742
- t_struct* arg_struct = (*f_iter)->get_arglist();
743
- const vector<t_field*>& fields = arg_struct->get_members();
744
- vector<t_field*>::const_iterator fld_iter;
745
- string funname = (*f_iter)->get_name();
746
-
747
- // Open function
748
- indent(f_service_) <<
749
- "def " << function_signature(*f_iter) << endl;
750
- indent_up();
751
- indent(f_service_) <<
752
- "send_" << funname << "(";
753
-
754
- bool first = true;
755
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
756
- if (first) {
757
- first = false;
758
- } else {
759
- f_service_ << ", ";
760
- }
761
- f_service_ << (*fld_iter)->get_name();
762
- }
763
- f_service_ << ")" << endl;
764
-
765
- if (!(*f_iter)->is_oneway()) {
766
- f_service_ << indent();
767
- if (!(*f_iter)->get_returntype()->is_void()) {
768
- f_service_ << "return ";
769
- }
770
- f_service_ <<
771
- "recv_" << funname << "()" << endl;
772
- }
773
- indent_down();
774
- indent(f_service_) << "end" << endl;
775
- f_service_ << endl;
776
-
777
- indent(f_service_) <<
778
- "def send_" << function_signature(*f_iter) << endl;
779
- indent_up();
780
-
781
- std::string argsname = capitalize((*f_iter)->get_name() + "_args");
782
-
783
- indent(f_service_) << "send_message('" << funname << "', " << argsname;
784
-
785
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
786
- f_service_ << ", :" << (*fld_iter)->get_name() << " => " << (*fld_iter)->get_name();
787
- }
788
-
789
- f_service_ << ")" << endl;
790
-
791
- indent_down();
792
- indent(f_service_) << "end" << endl;
793
-
794
- if (!(*f_iter)->is_oneway()) {
795
- std::string resultname = capitalize((*f_iter)->get_name() + "_result");
796
- t_struct noargs(program_);
797
-
798
- t_function recv_function((*f_iter)->get_returntype(),
799
- string("recv_") + (*f_iter)->get_name(),
800
- &noargs);
801
- // Open function
802
- f_service_ <<
803
- endl <<
804
- indent() << "def " << function_signature(&recv_function) << endl;
805
- indent_up();
806
-
807
- // TODO(mcslee): Validate message reply here, seq ids etc.
808
-
809
- f_service_ <<
810
- indent() << "result = receive_message(" << resultname << ")" << endl;
811
-
812
- // Careful, only return _result if not a void function
813
- if (!(*f_iter)->get_returntype()->is_void()) {
814
- f_service_ <<
815
- indent() << "return result.success unless result.success.nil?" << endl;
816
- }
817
-
818
- t_struct* xs = (*f_iter)->get_xceptions();
819
- const std::vector<t_field*>& xceptions = xs->get_members();
820
- vector<t_field*>::const_iterator x_iter;
821
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
822
- indent(f_service_) <<
823
- "raise result." << (*x_iter)->get_name() <<
824
- " unless result." << (*x_iter)->get_name() << ".nil?" << endl;
825
- }
826
-
827
- // Careful, only return _result if not a void function
828
- if ((*f_iter)->get_returntype()->is_void()) {
829
- indent(f_service_) <<
830
- "return" << endl;
831
- } else {
832
- f_service_ <<
833
- indent() << "raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, '" << (*f_iter)->get_name() << " failed: unknown result')" << endl;
834
- }
835
-
836
- // Close function
837
- indent_down();
838
- indent(f_service_) << "end" << endl << endl;
839
- }
840
- }
841
-
842
- indent_down();
843
- indent(f_service_) << "end" << endl << endl;
844
- }
845
-
846
- /**
847
- * Generates a service server definition.
848
- *
849
- * @param tservice The service to generate a server for.
850
- */
851
- void t_rb_generator::generate_service_server(t_service* tservice) {
852
- // Generate the dispatch methods
853
- vector<t_function*> functions = tservice->get_functions();
854
- vector<t_function*>::iterator f_iter;
855
-
856
- string extends = "";
857
- string extends_processor = "";
858
- if (tservice->get_extends() != NULL) {
859
- extends = full_type_name(tservice->get_extends());
860
- extends_processor = " < " + extends + "::Processor ";
861
- }
862
-
863
- // Generate the header portion
864
- indent(f_service_) <<
865
- "class Processor" << extends_processor << endl;
866
- indent_up();
867
-
868
- f_service_ <<
869
- indent() << "include ::Thrift::Processor" << endl <<
870
- endl;
871
-
872
- // Generate the process subfunctions
873
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
874
- generate_process_function(tservice, *f_iter);
875
- }
876
-
877
- indent_down();
878
- indent(f_service_) << "end" << endl << endl;
879
- }
880
-
881
- /**
882
- * Generates a process function definition.
883
- *
884
- * @param tfunction The function to write a dispatcher for
885
- */
886
- void t_rb_generator::generate_process_function(t_service* tservice,
887
- t_function* tfunction) {
888
- // Open function
889
- indent(f_service_) <<
890
- "def process_" << tfunction->get_name() <<
891
- "(seqid, iprot, oprot)" << endl;
892
- indent_up();
893
-
894
- string argsname = capitalize(tfunction->get_name()) + "_args";
895
- string resultname = capitalize(tfunction->get_name()) + "_result";
896
-
897
- f_service_ <<
898
- indent() << "args = read_args(iprot, " << argsname << ")" << endl;
899
-
900
- t_struct* xs = tfunction->get_xceptions();
901
- const std::vector<t_field*>& xceptions = xs->get_members();
902
- vector<t_field*>::const_iterator x_iter;
903
-
904
- // Declare result for non oneway function
905
- if (!tfunction->is_oneway()) {
906
- f_service_ <<
907
- indent() << "result = " << resultname << ".new()" << endl;
908
- }
909
-
910
- // Try block for a function with exceptions
911
- if (xceptions.size() > 0) {
912
- f_service_ <<
913
- indent() << "begin" << endl;
914
- indent_up();
915
- }
916
-
917
- // Generate the function call
918
- t_struct* arg_struct = tfunction->get_arglist();
919
- const std::vector<t_field*>& fields = arg_struct->get_members();
920
- vector<t_field*>::const_iterator f_iter;
921
-
922
- f_service_ << indent();
923
- if (!tfunction->is_oneway() && !tfunction->get_returntype()->is_void()) {
924
- f_service_ << "result.success = ";
925
- }
926
- f_service_ <<
927
- "@handler." << tfunction->get_name() << "(";
928
- bool first = true;
929
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
930
- if (first) {
931
- first = false;
932
- } else {
933
- f_service_ << ", ";
934
- }
935
- f_service_ << "args." << (*f_iter)->get_name();
936
- }
937
- f_service_ << ")" << endl;
938
-
939
- if (!tfunction->is_oneway() && xceptions.size() > 0) {
940
- indent_down();
941
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
942
- f_service_ <<
943
- indent() << "rescue " << full_type_name((*x_iter)->get_type()) << " => " << (*x_iter)->get_name() << endl;
944
- if (!tfunction->is_oneway()) {
945
- indent_up();
946
- f_service_ <<
947
- indent() << "result." << (*x_iter)->get_name() << " = " << (*x_iter)->get_name() << endl;
948
- indent_down();
949
- }
950
- }
951
- indent(f_service_) << "end" << endl;
952
- }
953
-
954
- // Shortcut out here for oneway functions
955
- if (tfunction->is_oneway()) {
956
- f_service_ <<
957
- indent() << "return" << endl;
958
- indent_down();
959
- indent(f_service_) << "end" << endl << endl;
960
- return;
961
- }
962
-
963
- f_service_ <<
964
- indent() << "write_result(result, oprot, '" << tfunction->get_name() << "', seqid)" << endl;
965
-
966
- // Close function
967
- indent_down();
968
- indent(f_service_) << "end" << endl << endl;
969
- }
970
-
971
- /**
972
- * Renders a function signature of the form 'type name(args)'
973
- *
974
- * @param tfunction Function definition
975
- * @return String of rendered function definition
976
- */
977
- string t_rb_generator::function_signature(t_function* tfunction,
978
- string prefix) {
979
- // TODO(mcslee): Nitpicky, no ',' if argument_list is empty
980
- return
981
- prefix + tfunction->get_name() +
982
- "(" + argument_list(tfunction->get_arglist()) + ")";
983
- }
984
-
985
- /**
986
- * Renders a field list
987
- */
988
- string t_rb_generator::argument_list(t_struct* tstruct) {
989
- string result = "";
990
-
991
- const vector<t_field*>& fields = tstruct->get_members();
992
- vector<t_field*>::const_iterator f_iter;
993
- bool first = true;
994
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
995
- if (first) {
996
- first = false;
997
- } else {
998
- result += ", ";
999
- }
1000
- result += (*f_iter)->get_name();
1001
- }
1002
- return result;
1003
- }
1004
-
1005
- string t_rb_generator::type_name(t_type* ttype) {
1006
- string prefix = "";
1007
-
1008
- string name = ttype->get_name();
1009
- if (ttype->is_struct() || ttype->is_xception() || ttype->is_enum()) {
1010
- name = capitalize(ttype->get_name());
1011
- }
1012
-
1013
- return prefix + name;
1014
- }
1015
-
1016
- string t_rb_generator::full_type_name(t_type* ttype) {
1017
- string prefix = "";
1018
- vector<std::string> modules = ruby_modules(ttype->get_program());
1019
- for (vector<std::string>::iterator m_iter = modules.begin();
1020
- m_iter != modules.end(); ++m_iter) {
1021
- prefix += *m_iter + "::";
1022
- }
1023
- return prefix + type_name(ttype);
1024
- }
1025
-
1026
- /**
1027
- * Converts the parse type to a Ruby tyoe
1028
- */
1029
- string t_rb_generator::type_to_enum(t_type* type) {
1030
- type = get_true_type(type);
1031
-
1032
- if (type->is_base_type()) {
1033
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
1034
- switch (tbase) {
1035
- case t_base_type::TYPE_VOID:
1036
- throw "NO T_VOID CONSTRUCT";
1037
- case t_base_type::TYPE_STRING:
1038
- return "::Thrift::Types::STRING";
1039
- case t_base_type::TYPE_BOOL:
1040
- return "::Thrift::Types::BOOL";
1041
- case t_base_type::TYPE_BYTE:
1042
- return "::Thrift::Types::BYTE";
1043
- case t_base_type::TYPE_I16:
1044
- return "::Thrift::Types::I16";
1045
- case t_base_type::TYPE_I32:
1046
- return "::Thrift::Types::I32";
1047
- case t_base_type::TYPE_I64:
1048
- return "::Thrift::Types::I64";
1049
- case t_base_type::TYPE_DOUBLE:
1050
- return "::Thrift::Types::DOUBLE";
1051
- }
1052
- } else if (type->is_enum()) {
1053
- return "::Thrift::Types::I32";
1054
- } else if (type->is_struct() || type->is_xception()) {
1055
- return "::Thrift::Types::STRUCT";
1056
- } else if (type->is_map()) {
1057
- return "::Thrift::Types::MAP";
1058
- } else if (type->is_set()) {
1059
- return "::Thrift::Types::SET";
1060
- } else if (type->is_list()) {
1061
- return "::Thrift::Types::LIST";
1062
- }
1063
-
1064
- throw "INVALID TYPE IN type_to_enum: " + type->get_name();
1065
- }
1066
-
1067
-
1068
- void t_rb_generator::generate_rdoc(std::ofstream& out, t_doc* tdoc) {
1069
- if (tdoc->has_doc()) {
1070
- generate_docstring_comment(out,
1071
- "", "# ", tdoc->get_doc(), "");
1072
- }
1073
- }
1074
-
1075
- void t_rb_generator::generate_rb_struct_required_validator(std::ofstream& out,
1076
- t_struct* tstruct) {
1077
- indent(out) << "def validate" << endl;
1078
- indent_up();
1079
-
1080
- const vector<t_field*>& fields = tstruct->get_members();
1081
- vector<t_field*>::const_iterator f_iter;
1082
-
1083
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
1084
- t_field* field = (*f_iter);
1085
- if (field->get_req() == t_field::T_REQUIRED) {
1086
- indent(out) << "raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field " << field->get_name() << " is unset!')";
1087
- if (field->get_type()->is_bool()) {
1088
- out << " if @" << field->get_name() << ".nil?";
1089
- } else {
1090
- out << " unless @" << field->get_name();
1091
- }
1092
- out << endl;
1093
- }
1094
- }
1095
-
1096
- // if field is an enum, check that its value is valid
1097
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
1098
- t_field* field = (*f_iter);
1099
-
1100
- if (field->get_type()->is_enum()){
1101
- indent(out) << "unless @" << field->get_name() << ".nil? || " << full_type_name(field->get_type()) << "::VALID_VALUES.include?(@" << field->get_name() << ")" << endl;
1102
- indent_up();
1103
- indent(out) << "raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field " << field->get_name() << "!')" << endl;
1104
- indent_down();
1105
- indent(out) << "end" << endl;
1106
- }
1107
- }
1108
-
1109
- indent_down();
1110
- indent(out) << "end" << endl << endl;
1111
-
1112
- }
1113
-
1114
- THRIFT_REGISTER_GENERATOR(rb, "Ruby", "");