auser-poolparty 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (353) hide show
  1. data/VERSION.yml +1 -1
  2. data/examples/monitored_cloud.rb +1 -1
  3. data/examples/thrift/thrift_example.rb +1 -1
  4. data/lib/proto/command_interface_handler.rb +1 -1
  5. data/vendor/gems/thrift/CHANGES +35 -0
  6. data/vendor/gems/thrift/CONTRIBUTORS +77 -0
  7. data/vendor/gems/thrift/DISCLAIMER +6 -0
  8. data/vendor/gems/thrift/LICENSE +202 -0
  9. data/vendor/gems/thrift/Makefile.am +28 -0
  10. data/vendor/gems/thrift/NEWS +79 -0
  11. data/vendor/gems/thrift/NOTICE +26 -0
  12. data/vendor/gems/thrift/README +137 -0
  13. data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +198 -0
  14. data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +107 -0
  15. data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +194 -0
  16. data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +173 -0
  17. data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +127 -0
  18. data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +39 -0
  19. data/vendor/gems/thrift/bootstrap.sh +35 -0
  20. data/vendor/gems/thrift/cleanup.sh +58 -0
  21. data/vendor/gems/thrift/compiler/cpp/Makefile.am +136 -0
  22. data/vendor/gems/thrift/compiler/cpp/README +39 -0
  23. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +2331 -0
  24. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +3003 -0
  25. data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +1700 -0
  26. data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +932 -0
  27. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +173 -0
  28. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +321 -0
  29. data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +1445 -0
  30. data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +637 -0
  31. data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +3069 -0
  32. data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +1673 -0
  33. data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +77 -0
  34. data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +1812 -0
  35. data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +2281 -0
  36. data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +2310 -0
  37. data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +1114 -0
  38. data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +1071 -0
  39. data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +354 -0
  40. data/vendor/gems/thrift/compiler/cpp/src/globals.h +117 -0
  41. data/vendor/gems/thrift/compiler/cpp/src/main.cc +1207 -0
  42. data/vendor/gems/thrift/compiler/cpp/src/main.h +103 -0
  43. data/vendor/gems/thrift/compiler/cpp/src/md5.c +381 -0
  44. data/vendor/gems/thrift/compiler/cpp/src/md5.h +91 -0
  45. data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +137 -0
  46. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +59 -0
  47. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +121 -0
  48. data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +56 -0
  49. data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +51 -0
  50. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +59 -0
  51. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +64 -0
  52. data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +150 -0
  53. data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +93 -0
  54. data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +56 -0
  55. data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +64 -0
  56. data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +223 -0
  57. data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +86 -0
  58. data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +68 -0
  59. data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +55 -0
  60. data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +127 -0
  61. data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +176 -0
  62. data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +70 -0
  63. data/vendor/gems/thrift/compiler/cpp/src/platform.h +36 -0
  64. data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +303 -0
  65. data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +1140 -0
  66. data/vendor/gems/thrift/configure.ac +255 -0
  67. data/vendor/gems/thrift/contrib/fb303/LICENSE +16 -0
  68. data/vendor/gems/thrift/contrib/fb303/Makefile.am +31 -0
  69. data/vendor/gems/thrift/contrib/fb303/README +37 -0
  70. data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +258 -0
  71. data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +198 -0
  72. data/vendor/gems/thrift/contrib/fb303/bootstrap.sh +26 -0
  73. data/vendor/gems/thrift/contrib/fb303/configure.ac +115 -0
  74. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +124 -0
  75. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +103 -0
  76. data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +84 -0
  77. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +481 -0
  78. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +215 -0
  79. data/vendor/gems/thrift/contrib/fb303/global_footer.mk +21 -0
  80. data/vendor/gems/thrift/contrib/fb303/global_header.mk +38 -0
  81. data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +112 -0
  82. data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +103 -0
  83. data/vendor/gems/thrift/contrib/fb303/java/build.xml +84 -0
  84. data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +89 -0
  85. data/vendor/gems/thrift/contrib/fb303/py/Makefile.am +44 -0
  86. data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +82 -0
  87. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/__init__.py +20 -0
  88. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +195 -0
  89. data/vendor/gems/thrift/contrib/fb303/py/setup.py +27 -0
  90. data/vendor/gems/thrift/contrib/thrift.el +126 -0
  91. data/vendor/gems/thrift/contrib/thrift.spec +206 -0
  92. data/vendor/gems/thrift/contrib/thrift.vim +91 -0
  93. data/vendor/gems/thrift/contrib/thrift_dump.cpp +91 -0
  94. data/vendor/gems/thrift/doc/lgpl-2.1.txt +504 -0
  95. data/vendor/gems/thrift/doc/otp-base-license.txt +20 -0
  96. data/vendor/gems/thrift/doc/thrift.bnf +96 -0
  97. data/vendor/gems/thrift/doc/thrift.tex +1057 -0
  98. data/vendor/gems/thrift/lib/Makefile.am +55 -0
  99. data/vendor/gems/thrift/lib/cocoa/README +21 -0
  100. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +44 -0
  101. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +130 -0
  102. data/vendor/gems/thrift/lib/cocoa/src/TException.h +34 -0
  103. data/vendor/gems/thrift/lib/cocoa/src/TException.m +64 -0
  104. data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +29 -0
  105. data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +27 -0
  106. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +27 -0
  107. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +51 -0
  108. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +51 -0
  109. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +477 -0
  110. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +148 -0
  111. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.h +25 -0
  112. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.m +23 -0
  113. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +29 -0
  114. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +29 -0
  115. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +104 -0
  116. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +50 -0
  117. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +153 -0
  118. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +42 -0
  119. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +159 -0
  120. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +35 -0
  121. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +91 -0
  122. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +38 -0
  123. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +89 -0
  124. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +32 -0
  125. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +58 -0
  126. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +36 -0
  127. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +30 -0
  128. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +43 -0
  129. data/vendor/gems/thrift/lib/cpp/Makefile.am +158 -0
  130. data/vendor/gems/thrift/lib/cpp/README +67 -0
  131. data/vendor/gems/thrift/lib/cpp/src/TLogging.h +163 -0
  132. data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +53 -0
  133. data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +96 -0
  134. data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +148 -0
  135. data/vendor/gems/thrift/lib/cpp/src/Thrift.h +191 -0
  136. data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +60 -0
  137. data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +77 -0
  138. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +137 -0
  139. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +84 -0
  140. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +160 -0
  141. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +114 -0
  142. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +314 -0
  143. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +130 -0
  144. data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +125 -0
  145. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +493 -0
  146. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +169 -0
  147. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +284 -0
  148. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +122 -0
  149. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +55 -0
  150. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +100 -0
  151. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +155 -0
  152. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +354 -0
  153. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +379 -0
  154. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +155 -0
  155. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +122 -0
  156. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +77 -0
  157. data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +264 -0
  158. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +79 -0
  159. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +42 -0
  160. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +394 -0
  161. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +254 -0
  162. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +736 -0
  163. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +279 -0
  164. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +346 -0
  165. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +225 -0
  166. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +762 -0
  167. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +253 -0
  168. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +998 -0
  169. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +340 -0
  170. data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +304 -0
  171. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +438 -0
  172. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +104 -0
  173. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +187 -0
  174. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +750 -0
  175. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +435 -0
  176. data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +38 -0
  177. data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +213 -0
  178. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +118 -0
  179. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +70 -0
  180. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +217 -0
  181. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +79 -0
  182. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +243 -0
  183. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +74 -0
  184. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +370 -0
  185. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +667 -0
  186. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +77 -0
  187. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +73 -0
  188. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +953 -0
  189. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +442 -0
  190. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +348 -0
  191. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +111 -0
  192. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +368 -0
  193. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +76 -0
  194. data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +92 -0
  195. data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +96 -0
  196. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +54 -0
  197. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +41 -0
  198. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +591 -0
  199. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +242 -0
  200. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +235 -0
  201. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +191 -0
  202. data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +224 -0
  203. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +31 -0
  204. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +117 -0
  205. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +178 -0
  206. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +287 -0
  207. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +299 -0
  208. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +219 -0
  209. data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +30 -0
  210. data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +30 -0
  211. data/vendor/gems/thrift/lib/cpp/thrift.pc.in +29 -0
  212. data/vendor/gems/thrift/lib/csharp/Makefile.am +70 -0
  213. data/vendor/gems/thrift/lib/csharp/README +26 -0
  214. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +55 -0
  215. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +242 -0
  216. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +62 -0
  217. data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +142 -0
  218. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +34 -0
  219. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +392 -0
  220. data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +58 -0
  221. data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +50 -0
  222. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +58 -0
  223. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +58 -0
  224. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessageType.cs +31 -0
  225. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +87 -0
  226. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +61 -0
  227. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +29 -0
  228. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +94 -0
  229. data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +50 -0
  230. data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +42 -0
  231. data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +40 -0
  232. data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +135 -0
  233. data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +148 -0
  234. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +186 -0
  235. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +234 -0
  236. data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +131 -0
  237. data/vendor/gems/thrift/lib/csharp/src/TProcessor.cs +29 -0
  238. data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +73 -0
  239. data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +35 -0
  240. data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +100 -0
  241. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +157 -0
  242. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +39 -0
  243. data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +144 -0
  244. data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +103 -0
  245. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +66 -0
  246. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +64 -0
  247. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +38 -0
  248. data/vendor/gems/thrift/lib/erl/Makefile +37 -0
  249. data/vendor/gems/thrift/lib/erl/README +56 -0
  250. data/vendor/gems/thrift/lib/erl/build/beamver +59 -0
  251. data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +15 -0
  252. data/vendor/gems/thrift/lib/erl/build/colors.mk +24 -0
  253. data/vendor/gems/thrift/lib/erl/build/docs.mk +12 -0
  254. data/vendor/gems/thrift/lib/erl/build/mime.types +98 -0
  255. data/vendor/gems/thrift/lib/erl/build/otp.mk +146 -0
  256. data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +85 -0
  257. data/vendor/gems/thrift/lib/erl/build/raw_test.mk +29 -0
  258. data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +54 -0
  259. data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +31 -0
  260. data/vendor/gems/thrift/lib/erl/src/Makefile +116 -0
  261. data/vendor/gems/thrift/lib/erl/src/test_handler.erl +26 -0
  262. data/vendor/gems/thrift/lib/erl/src/test_service.erl +29 -0
  263. data/vendor/gems/thrift/lib/erl/src/thrift.app.src +44 -0
  264. data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +1 -0
  265. data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +64 -0
  266. data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +325 -0
  267. data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +180 -0
  268. data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +384 -0
  269. data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +118 -0
  270. data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +87 -0
  271. data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +208 -0
  272. data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +199 -0
  273. data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +164 -0
  274. data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +188 -0
  275. data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +356 -0
  276. data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +183 -0
  277. data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +25 -0
  278. data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +249 -0
  279. data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +119 -0
  280. data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +57 -0
  281. data/vendor/gems/thrift/lib/erl/vsn.mk +1 -0
  282. data/vendor/gems/thrift/lib/hs/README +82 -0
  283. data/vendor/gems/thrift/lib/hs/Setup.lhs +23 -0
  284. data/vendor/gems/thrift/lib/hs/TODO +2 -0
  285. data/vendor/gems/thrift/lib/hs/Thrift.cabal +20 -0
  286. data/vendor/gems/thrift/lib/hs/src/Thrift.hs +111 -0
  287. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +191 -0
  288. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +147 -0
  289. data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +65 -0
  290. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +60 -0
  291. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +58 -0
  292. data/vendor/gems/thrift/lib/java/Makefile.am +38 -0
  293. data/vendor/gems/thrift/lib/java/README +43 -0
  294. data/vendor/gems/thrift/lib/java/build.xml +195 -0
  295. data/vendor/gems/thrift/lib/java/ivy.xml +8 -0
  296. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +171 -0
  297. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +123 -0
  298. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +66 -0
  299. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +102 -0
  300. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +46 -0
  301. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +94 -0
  302. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +45 -0
  303. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +30 -0
  304. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +32 -0
  305. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +39 -0
  306. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +110 -0
  307. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +69 -0
  308. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +42 -0
  309. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +29 -0
  310. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +31 -0
  311. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +29 -0
  312. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +31 -0
  313. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +128 -0
  314. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +331 -0
  315. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +741 -0
  316. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +48 -0
  317. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +927 -0
  318. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +38 -0
  319. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +40 -0
  320. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +48 -0
  321. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +31 -0
  322. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +146 -0
  323. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +81 -0
  324. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +30 -0
  325. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +158 -0
  326. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +42 -0
  327. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +384 -0
  328. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +36 -0
  329. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +40 -0
  330. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +304 -0
  331. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +772 -0
  332. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +126 -0
  333. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +145 -0
  334. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +271 -0
  335. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +126 -0
  336. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +157 -0
  337. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +159 -0
  338. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +98 -0
  339. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +160 -0
  340. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +31 -0
  341. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +213 -0
  342. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +31 -0
  343. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +145 -0
  344. metadata +348 -37
  345. data/vendor/gems/trollop/FAQ.txt +0 -35
  346. data/vendor/gems/trollop/History.txt +0 -84
  347. data/vendor/gems/trollop/Manifest.txt +0 -7
  348. data/vendor/gems/trollop/README.txt +0 -38
  349. data/vendor/gems/trollop/Rakefile +0 -36
  350. data/vendor/gems/trollop/lib/trollop.rb +0 -695
  351. data/vendor/gems/trollop/release-script.txt +0 -13
  352. data/vendor/gems/trollop/test/test_trollop.rb +0 -957
  353. data/vendor/gems/trollop/www/index.html +0 -167
@@ -0,0 +1,1114 @@
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", "");