engineyard-serverside 2.8.0.pre4 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. checksums.yaml +13 -5
  2. data/features/hook/running-a-deploy-hook.feature +277 -0
  3. data/features/hook/step_definitions/running-a-deploy-hook-steps.rb +200 -0
  4. data/features/step_definitions/command_steps.rb +8 -0
  5. data/features/step_definitions/version_steps.rb +5 -0
  6. data/features/support/env.rb +63 -0
  7. data/features/support/error_codes.rb +17 -0
  8. data/features/support/fs_helpers.rb +82 -0
  9. data/features/support/output_helpers.rb +7 -0
  10. data/features/support/runner.rb +41 -0
  11. data/features/version.feature +7 -0
  12. data/lib/engineyard-serverside/cli/app.rb +6 -0
  13. data/lib/engineyard-serverside/configuration.rb +3 -3
  14. data/lib/engineyard-serverside/deploy.rb +2 -1
  15. data/lib/engineyard-serverside/propagator.rb +1 -1
  16. data/lib/engineyard-serverside/shell.rb +38 -10
  17. data/lib/engineyard-serverside/version.rb +1 -1
  18. data/lib/engineyard-serverside.rb +2 -5
  19. data/spec/engineyard-serverside/callbacks/collection/combined_spec.rb +232 -0
  20. data/spec/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb +170 -0
  21. data/spec/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb +171 -0
  22. data/spec/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb +174 -0
  23. data/spec/engineyard-serverside/callbacks/collection/service_hooks_spec.rb +31 -0
  24. data/spec/engineyard-serverside/callbacks/collection_spec.rb +49 -0
  25. data/spec/engineyard-serverside/callbacks/distributor/remote_spec.rb +135 -0
  26. data/spec/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb +208 -0
  27. data/spec/engineyard-serverside/callbacks/distributor_spec.rb +43 -0
  28. data/spec/engineyard-serverside/callbacks/executor/executable_spec.rb +386 -0
  29. data/spec/engineyard-serverside/callbacks/executor/ruby/context_spec.rb +538 -0
  30. data/spec/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb +313 -0
  31. data/spec/engineyard-serverside/callbacks/executor/ruby_spec.rb +35 -0
  32. data/spec/engineyard-serverside/callbacks/executor_spec.rb +45 -0
  33. data/spec/engineyard-serverside/callbacks_spec.rb +31 -0
  34. data/spec/engineyard-serverside/cli/workflows/base_spec.rb +237 -0
  35. data/spec/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb +65 -0
  36. data/spec/engineyard-serverside/cli/workflows/deploying_applications_spec.rb +61 -0
  37. data/spec/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb +61 -0
  38. data/spec/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb +61 -0
  39. data/spec/engineyard-serverside/cli/workflows/helpers_spec.rb +64 -0
  40. data/spec/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb +61 -0
  41. data/spec/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb +60 -0
  42. data/spec/engineyard-serverside/cli/workflows_spec.rb +87 -0
  43. data/spec/engineyard-serverside/dependency_manager/base_spec.rb +139 -0
  44. data/spec/engineyard-serverside/paths_spec.rb +820 -0
  45. data/spec/engineyard-serverside/propagator_spec.rb +56 -0
  46. data/spec/engineyard-serverside/server_spec.rb +390 -0
  47. data/spec/engineyard-serverside/shell/helpers_spec.rb +98 -0
  48. data/spec/engineyard-serverside/shell/yieldio_spec.rb +33 -0
  49. data/spec/engineyard-serverside/shell_spec.rb +543 -0
  50. data/spec/engineyard-serverside/slug/distributor_spec.rb +199 -0
  51. data/spec/engineyard-serverside/slug/enabler_spec.rb +191 -0
  52. data/spec/engineyard-serverside/slug/failure_handler_spec.rb +114 -0
  53. data/spec/engineyard-serverside/slug/finalizer_spec.rb +191 -0
  54. data/spec/engineyard-serverside/slug/generator_spec.rb +82 -0
  55. data/spec/engineyard-serverside/slug/migrator_spec.rb +137 -0
  56. data/spec/engineyard-serverside/slug/restarter_spec.rb +226 -0
  57. data/spec/engineyard-serverside/slug/source/updater_spec.rb +710 -0
  58. data/spec/engineyard-serverside/slug/source_spec.rb +40 -0
  59. data/spec/engineyard-serverside/source_spec.rb +171 -0
  60. data/spec/railway_spec.rb +130 -0
  61. data/spec/result/failure_spec.rb +113 -0
  62. data/spec/result/success_spec.rb +109 -0
  63. data/spec/result_spec.rb +23 -0
  64. data/spec/spec_helper.rb +3 -349
  65. metadata +189 -490
  66. data/lib/vendor/json_pure/COPYING +0 -57
  67. data/lib/vendor/json_pure/GPL +0 -340
  68. data/lib/vendor/json_pure/README.rdoc +0 -358
  69. data/lib/vendor/json_pure/VERSION +0 -1
  70. data/lib/vendor/json_pure/lib/json/add/bigdecimal.rb +0 -28
  71. data/lib/vendor/json_pure/lib/json/add/complex.rb +0 -22
  72. data/lib/vendor/json_pure/lib/json/add/core.rb +0 -11
  73. data/lib/vendor/json_pure/lib/json/add/date.rb +0 -34
  74. data/lib/vendor/json_pure/lib/json/add/date_time.rb +0 -48
  75. data/lib/vendor/json_pure/lib/json/add/exception.rb +0 -31
  76. data/lib/vendor/json_pure/lib/json/add/ostruct.rb +0 -31
  77. data/lib/vendor/json_pure/lib/json/add/range.rb +0 -29
  78. data/lib/vendor/json_pure/lib/json/add/rational.rb +0 -22
  79. data/lib/vendor/json_pure/lib/json/add/regexp.rb +0 -30
  80. data/lib/vendor/json_pure/lib/json/add/struct.rb +0 -30
  81. data/lib/vendor/json_pure/lib/json/add/symbol.rb +0 -25
  82. data/lib/vendor/json_pure/lib/json/add/time.rb +0 -38
  83. data/lib/vendor/json_pure/lib/json/common.rb +0 -484
  84. data/lib/vendor/json_pure/lib/json/ext.rb +0 -21
  85. data/lib/vendor/json_pure/lib/json/generic_object.rb +0 -70
  86. data/lib/vendor/json_pure/lib/json/pure/generator.rb +0 -522
  87. data/lib/vendor/json_pure/lib/json/pure/parser.rb +0 -359
  88. data/lib/vendor/json_pure/lib/json/pure.rb +0 -21
  89. data/lib/vendor/json_pure/lib/json/version.rb +0 -8
  90. data/lib/vendor/json_pure/lib/json.rb +0 -62
  91. data/lib/vendor/multi_json/CHANGELOG.md +0 -121
  92. data/lib/vendor/multi_json/CONTRIBUTING.md +0 -46
  93. data/lib/vendor/multi_json/Gemfile +0 -31
  94. data/lib/vendor/multi_json/LICENSE.md +0 -20
  95. data/lib/vendor/multi_json/README.md +0 -105
  96. data/lib/vendor/multi_json/Rakefile +0 -12
  97. data/lib/vendor/multi_json/lib/multi_json/adapters/gson.rb +0 -20
  98. data/lib/vendor/multi_json/lib/multi_json/adapters/json_common.rb +0 -35
  99. data/lib/vendor/multi_json/lib/multi_json/adapters/json_gem.rb +0 -12
  100. data/lib/vendor/multi_json/lib/multi_json/adapters/json_pure.rb +0 -12
  101. data/lib/vendor/multi_json/lib/multi_json/adapters/nsjsonserialization.rb +0 -35
  102. data/lib/vendor/multi_json/lib/multi_json/adapters/oj.rb +0 -29
  103. data/lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb +0 -58
  104. data/lib/vendor/multi_json/lib/multi_json/adapters/yajl.rb +0 -20
  105. data/lib/vendor/multi_json/lib/multi_json/vendor/okjson.rb +0 -602
  106. data/lib/vendor/multi_json/lib/multi_json/version.rb +0 -3
  107. data/lib/vendor/multi_json/lib/multi_json.rb +0 -137
  108. data/lib/vendor/multi_json/spec/adapter_shared_example.rb +0 -162
  109. data/lib/vendor/multi_json/spec/helper.rb +0 -45
  110. data/lib/vendor/multi_json/spec/json_common_shared_example.rb +0 -36
  111. data/lib/vendor/multi_json/spec/multi_json_spec.rb +0 -151
  112. data/spec/archive_deploy_spec.rb +0 -53
  113. data/spec/basic_deploy_spec.rb +0 -26
  114. data/spec/bundler_deploy_spec.rb +0 -160
  115. data/spec/configuration_spec.rb +0 -206
  116. data/spec/custom_deploy_spec.rb +0 -128
  117. data/spec/deploy_hook_spec.rb +0 -378
  118. data/spec/deprecation_spec.rb +0 -23
  119. data/spec/ey_yml_customized_deploy_spec.rb +0 -99
  120. data/spec/fixtures/gitrepo.tar.gz +0 -0
  121. data/spec/fixtures/invalid_hook.rb +0 -1
  122. data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
  123. data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
  124. data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
  125. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
  126. data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
  127. data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
  128. data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
  129. data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
  130. data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
  131. data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
  132. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
  133. data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
  134. data/spec/fixtures/lockfiles/1.15.1-no-bundler +0 -51
  135. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
  136. data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
  137. data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
  138. data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
  139. data/spec/fixtures/repos/assets_detected/README +0 -1
  140. data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
  141. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  142. data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
  143. data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
  144. data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
  145. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
  146. data/spec/fixtures/repos/assets_disabled/README +0 -1
  147. data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
  148. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  149. data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
  150. data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
  151. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
  152. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
  153. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
  154. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
  155. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  156. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
  157. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
  158. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
  159. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
  160. data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
  161. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
  162. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  163. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
  164. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
  165. data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
  166. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
  167. data/spec/fixtures/repos/assets_enabled_all/README +0 -1
  168. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  169. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
  170. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
  171. data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
  172. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
  173. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
  174. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
  175. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
  176. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
  177. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
  178. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
  179. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
  180. data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
  181. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
  182. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  183. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
  184. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
  185. data/spec/fixtures/repos/assets_error/Gemfile +0 -5
  186. data/spec/fixtures/repos/assets_error/Gemfile.lock +0 -88
  187. data/spec/fixtures/repos/assets_error/README +0 -1
  188. data/spec/fixtures/repos/assets_error/Rakefile +0 -4
  189. data/spec/fixtures/repos/assets_error/app/assets/empty +0 -0
  190. data/spec/fixtures/repos/assets_error/config/application.rb +0 -5
  191. data/spec/fixtures/repos/assets_error/config/ey.yml +0 -4
  192. data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
  193. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
  194. data/spec/fixtures/repos/assets_in_hook/README +0 -2
  195. data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
  196. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  197. data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
  198. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
  199. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
  200. data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
  201. data/spec/fixtures/repos/bundle_fails/README +0 -1
  202. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
  203. data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
  204. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
  205. data/spec/fixtures/repos/bundler_disabled/README +0 -1
  206. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
  207. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
  208. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
  209. data/spec/fixtures/repos/bundler_old/Gemfile +0 -5
  210. data/spec/fixtures/repos/bundler_old/Gemfile.lock +0 -15
  211. data/spec/fixtures/repos/bundler_old/README +0 -1
  212. data/spec/fixtures/repos/default/Gemfile +0 -4
  213. data/spec/fixtures/repos/default/Gemfile.lock +0 -12
  214. data/spec/fixtures/repos/default/README +0 -5
  215. data/spec/fixtures/repos/default/ey.yml +0 -3
  216. data/spec/fixtures/repos/executable_hooks/README +0 -1
  217. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
  218. data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
  219. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
  220. data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
  221. data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
  222. data/spec/fixtures/repos/ey_yml/README +0 -1
  223. data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
  224. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
  225. data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
  226. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
  227. data/spec/fixtures/repos/ey_yml_alt/README +0 -1
  228. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
  229. data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
  230. data/spec/fixtures/repos/hook_fails/README +0 -1
  231. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
  232. data/spec/fixtures/repos/hooks/README +0 -1
  233. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
  234. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
  235. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
  236. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
  237. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
  238. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
  239. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
  240. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
  241. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
  242. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
  243. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
  244. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
  245. data/spec/fixtures/repos/multi_dep_manager/README +0 -1
  246. data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
  247. data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
  248. data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
  249. data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
  250. data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
  251. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
  252. data/spec/fixtures/repos/no_ey_config/README +0 -1
  253. data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
  254. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile +0 -3
  255. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile.lock +0 -10
  256. data/spec/fixtures/repos/no_ey_config_no_warning/README +0 -1
  257. data/spec/fixtures/repos/no_ey_config_no_warning/ey.yml +0 -5
  258. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
  259. data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
  260. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
  261. data/spec/fixtures/repos/nodejs/README +0 -1
  262. data/spec/fixtures/repos/nodejs/package.json +0 -7
  263. data/spec/fixtures/repos/not_bundled/README +0 -1
  264. data/spec/fixtures/repos/npm_disabled/README +0 -1
  265. data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
  266. data/spec/fixtures/repos/npm_disabled/package.json +0 -7
  267. data/spec/fixtures/repos/php_composer_disabled/README +0 -1
  268. data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
  269. data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
  270. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
  271. data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
  272. data/spec/fixtures/repos/php_composer_lock/README +0 -1
  273. data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
  274. data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
  275. data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
  276. data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
  277. data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
  278. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
  279. data/spec/fixtures/repos/public_system/Gemfile +0 -4
  280. data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
  281. data/spec/fixtures/repos/public_system/README +0 -5
  282. data/spec/fixtures/repos/public_system/ey.yml +0 -3
  283. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
  284. data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
  285. data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
  286. data/spec/fixtures/repos/sqlite3/README +0 -1
  287. data/spec/fixtures/retwisj.war +0 -0
  288. data/spec/fixtures/valid_hook.rb +0 -1
  289. data/spec/git_strategy_spec.rb +0 -34
  290. data/spec/lockfile_parser_spec.rb +0 -126
  291. data/spec/maintenance_spec.rb +0 -44
  292. data/spec/multi_dependency_manager_spec.rb +0 -25
  293. data/spec/nodejs_deploy_spec.rb +0 -30
  294. data/spec/php_deploy_spec.rb +0 -81
  295. data/spec/platform_configure_spec.rb +0 -61
  296. data/spec/rails31_deploy_spec.rb +0 -172
  297. data/spec/restart_spec.rb +0 -43
  298. data/spec/rollback_spec.rb +0 -87
  299. data/spec/server_spec.rb +0 -70
  300. data/spec/services_deploy_spec.rb +0 -165
  301. data/spec/shell_spec.rb +0 -57
  302. data/spec/source/archive_spec.rb +0 -33
  303. data/spec/source/git_spec.rb +0 -44
  304. data/spec/sqlite3_deploy_spec.rb +0 -38
  305. data/spec/support/integration.rb +0 -103
  306. data/spec/support/source_doubles.rb +0 -28
  307. data/spec/support/timecop.rb +0 -5
  308. data/spec/symlink_spec.rb +0 -15
@@ -1,358 +0,0 @@
1
- = JSON implementation for Ruby {<img src="https://secure.travis-ci.org/flori/json.png" />}[http://travis-ci.org/flori/json]
2
-
3
- == Description
4
-
5
- This is a implementation of the JSON specification according to RFC 4627
6
- http://www.ietf.org/rfc/rfc4627.txt . Starting from version 1.0.0 on there
7
- will be two variants available:
8
-
9
- * A pure ruby variant, that relies on the iconv and the stringscan
10
- extensions, which are both part of the ruby standard library.
11
- * The quite a bit faster C extension variant, which is in parts implemented
12
- in C and comes with its own unicode conversion functions and a parser
13
- generated by the ragel state machine compiler
14
- http://www.cs.queensu.ca/~thurston/ragel .
15
-
16
- Both variants of the JSON generator generate UTF-8 character sequences by
17
- default. If an :ascii_only option with a true value is given, they escape all
18
- non-ASCII and control characters with \uXXXX escape sequences, and support
19
- UTF-16 surrogate pairs in order to be able to generate the whole range of
20
- unicode code points.
21
-
22
- All strings, that are to be encoded as JSON strings, should be UTF-8 byte
23
- sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8
24
- encoded, please use the to_json_raw_object method of String (which produces
25
- an object, that contains a byte array) and decode the result on the receiving
26
- endpoint.
27
-
28
- The JSON parsers can parse UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, and UTF-32LE
29
- JSON documents under Ruby 1.8. Under Ruby 1.9 they take advantage of Ruby's
30
- M17n features and can parse all documents which have the correct
31
- String#encoding set. If a document string has ASCII-8BIT as an encoding the
32
- parser attempts to figure out which of the UTF encodings from above it is and
33
- trys to parse it.
34
-
35
- == Installation
36
-
37
- It's recommended to use the extension variant of JSON, because it's faster than
38
- the pure ruby variant. If you cannot build it on your system, you can settle
39
- for the latter.
40
-
41
- Just type into the command line as root:
42
-
43
- # rake install
44
-
45
- The above command will build the extensions and install them on your system.
46
-
47
- # rake install_pure
48
-
49
- or
50
-
51
- # ruby install.rb
52
-
53
- will just install the pure ruby implementation of JSON.
54
-
55
- If you use Rubygems you can type
56
-
57
- # gem install json
58
-
59
- instead, to install the newest JSON version.
60
-
61
- There is also a pure ruby json only variant of the gem, that can be installed
62
- with:
63
-
64
- # gem install json_pure
65
-
66
- == Compiling the extensions yourself
67
-
68
- If you want to build the extensions yourself you need rake:
69
-
70
- You can get it from rubyforge:
71
- http://rubyforge.org/projects/rake
72
-
73
- or just type
74
-
75
- # gem install rake
76
-
77
- for the installation via rubygems.
78
-
79
- If you want to create the parser.c file from its parser.rl file or draw nice
80
- graphviz images of the state machines, you need ragel from: http://www.cs.queensu.ca/~thurston/ragel
81
-
82
-
83
- == Usage
84
-
85
- To use JSON you can
86
- require 'json'
87
- to load the installed variant (either the extension 'json' or the pure
88
- variant 'json_pure'). If you have installed the extension variant, you can
89
- pick either the extension variant or the pure variant by typing
90
- require 'json/ext'
91
- or
92
- require 'json/pure'
93
-
94
- Now you can parse a JSON document into a ruby data structure by calling
95
-
96
- JSON.parse(document)
97
-
98
- If you want to generate a JSON document from a ruby data structure call
99
- JSON.generate(data)
100
-
101
- You can also use the pretty_generate method (which formats the output more
102
- verbosely and nicely) or fast_generate (which doesn't do any of the security
103
- checks generate performs, e. g. nesting deepness checks).
104
-
105
- To create a valid JSON document you have to make sure, that the output is
106
- embedded in either a JSON array [] or a JSON object {}. The easiest way to do
107
- this, is by putting your values in a Ruby Array or Hash instance.
108
-
109
- There are also the JSON and JSON[] methods which use parse on a String or
110
- generate a JSON document from an array or hash:
111
-
112
- document = JSON 'test' => 23 # => "{\"test\":23}"
113
- document = JSON['test'] => 23 # => "{\"test\":23}"
114
-
115
- and
116
-
117
- data = JSON '{"test":23}' # => {"test"=>23}
118
- data = JSON['{"test":23}'] # => {"test"=>23}
119
-
120
- You can choose to load a set of common additions to ruby core's objects if
121
- you
122
- require 'json/add/core'
123
-
124
- After requiring this you can, e. g., serialise/deserialise Ruby ranges:
125
-
126
- JSON JSON(1..10) # => 1..10
127
-
128
- To find out how to add JSON support to other or your own classes, read the
129
- section "More Examples" below.
130
-
131
- To get the best compatibility to rails' JSON implementation, you can
132
- require 'json/add/rails'
133
-
134
- Both of the additions attempt to require 'json' (like above) first, if it has
135
- not been required yet.
136
-
137
- == More Examples
138
-
139
- To create a JSON document from a ruby data structure, you can call
140
- JSON.generate like that:
141
-
142
- json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
143
- # => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]"
144
-
145
- To get back a ruby data structure from a JSON document, you have to call
146
- JSON.parse on it:
147
-
148
- JSON.parse json
149
- # => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"]
150
-
151
- Note, that the range from the original data structure is a simple
152
- string now. The reason for this is, that JSON doesn't support ranges
153
- or arbitrary classes. In this case the json library falls back to call
154
- Object#to_json, which is the same as #to_s.to_json.
155
-
156
- It's possible to add JSON support serialization to arbitrary classes by
157
- simply implementing a more specialized version of the #to_json method, that
158
- should return a JSON object (a hash converted to JSON with #to_json) like
159
- this (don't forget the *a for all the arguments):
160
-
161
- class Range
162
- def to_json(*a)
163
- {
164
- 'json_class' => self.class.name, # = 'Range'
165
- 'data' => [ first, last, exclude_end? ]
166
- }.to_json(*a)
167
- end
168
- end
169
-
170
- The hash key 'json_class' is the class, that will be asked to deserialise the
171
- JSON representation later. In this case it's 'Range', but any namespace of
172
- the form 'A::B' or '::A::B' will do. All other keys are arbitrary and can be
173
- used to store the necessary data to configure the object to be deserialised.
174
-
175
- If a the key 'json_class' is found in a JSON object, the JSON parser checks
176
- if the given class responds to the json_create class method. If so, it is
177
- called with the JSON object converted to a Ruby hash. So a range can
178
- be deserialised by implementing Range.json_create like this:
179
-
180
- class Range
181
- def self.json_create(o)
182
- new(*o['data'])
183
- end
184
- end
185
-
186
- Now it possible to serialise/deserialise ranges as well:
187
-
188
- json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
189
- # => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]"
190
- JSON.parse json
191
- # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
192
-
193
- JSON.generate always creates the shortest possible string representation of a
194
- ruby data structure in one line. This is good for data storage or network
195
- protocols, but not so good for humans to read. Fortunately there's also
196
- JSON.pretty_generate (or JSON.pretty_generate) that creates a more readable
197
- output:
198
-
199
- puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10])
200
- [
201
- 1,
202
- 2,
203
- {
204
- "a": 3.141
205
- },
206
- false,
207
- true,
208
- null,
209
- {
210
- "json_class": "Range",
211
- "data": [
212
- 4,
213
- 10,
214
- false
215
- ]
216
- }
217
- ]
218
-
219
- There are also the methods Kernel#j for generate, and Kernel#jj for
220
- pretty_generate output to the console, that work analogous to Core Ruby's p and
221
- the pp library's pp methods.
222
-
223
- The script tools/server.rb contains a small example if you want to test, how
224
- receiving a JSON object from a webrick server in your browser with the
225
- javasript prototype library http://www.prototypejs.org works.
226
-
227
- == Speed Comparisons
228
-
229
- I have created some benchmark results (see the benchmarks/data-p4-3Ghz
230
- subdir of the package) for the JSON-parser to estimate the speed up in the C
231
- extension:
232
-
233
- Comparing times (call_time_mean):
234
- 1 ParserBenchmarkExt#parser 900 repeats:
235
- 553.922304770 ( real) -> 21.500x
236
- 0.001805307
237
- 2 ParserBenchmarkYAML#parser 1000 repeats:
238
- 224.513358139 ( real) -> 8.714x
239
- 0.004454078
240
- 3 ParserBenchmarkPure#parser 1000 repeats:
241
- 26.755020642 ( real) -> 1.038x
242
- 0.037376163
243
- 4 ParserBenchmarkRails#parser 1000 repeats:
244
- 25.763381731 ( real) -> 1.000x
245
- 0.038814780
246
- calls/sec ( time) -> speed covers
247
- secs/call
248
-
249
- In the table above 1 is JSON::Ext::Parser, 2 is YAML.load with YAML
250
- compatbile JSON document, 3 is is JSON::Pure::Parser, and 4 is
251
- ActiveSupport::JSON.decode. The ActiveSupport JSON-decoder converts the
252
- input first to YAML and then uses the YAML-parser, the conversion seems to
253
- slow it down so much that it is only as fast as the JSON::Pure::Parser!
254
-
255
- If you look at the benchmark data you can see that this is mostly caused by
256
- the frequent high outliers - the median of the Rails-parser runs is still
257
- overall smaller than the median of the JSON::Pure::Parser runs:
258
-
259
- Comparing times (call_time_median):
260
- 1 ParserBenchmarkExt#parser 900 repeats:
261
- 800.592479481 ( real) -> 26.936x
262
- 0.001249075
263
- 2 ParserBenchmarkYAML#parser 1000 repeats:
264
- 271.002390644 ( real) -> 9.118x
265
- 0.003690004
266
- 3 ParserBenchmarkRails#parser 1000 repeats:
267
- 30.227910865 ( real) -> 1.017x
268
- 0.033082008
269
- 4 ParserBenchmarkPure#parser 1000 repeats:
270
- 29.722384421 ( real) -> 1.000x
271
- 0.033644676
272
- calls/sec ( time) -> speed covers
273
- secs/call
274
-
275
- I have benchmarked the JSON-Generator as well. This generated a few more
276
- values, because there are different modes that also influence the achieved
277
- speed:
278
-
279
- Comparing times (call_time_mean):
280
- 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
281
- 547.354332608 ( real) -> 15.090x
282
- 0.001826970
283
- 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
284
- 443.968212317 ( real) -> 12.240x
285
- 0.002252414
286
- 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
287
- 375.104545883 ( real) -> 10.341x
288
- 0.002665923
289
- 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
290
- 49.978706968 ( real) -> 1.378x
291
- 0.020008521
292
- 5 GeneratorBenchmarkRails#generator 1000 repeats:
293
- 38.531868759 ( real) -> 1.062x
294
- 0.025952543
295
- 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
296
- 36.927649925 ( real) -> 1.018x 7 (>=3859)
297
- 0.027079979
298
- 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
299
- 36.272134441 ( real) -> 1.000x 6 (>=3859)
300
- 0.027569373
301
- calls/sec ( time) -> speed covers
302
- secs/call
303
-
304
- In the table above 1-3 are JSON::Ext::Generator methods. 4, 6, and 7 are
305
- JSON::Pure::Generator methods and 5 is the Rails JSON generator. It is now a
306
- bit faster than the generator_safe and generator_pretty methods of the pure
307
- variant but slower than the others.
308
-
309
- To achieve the fastest JSON document output, you can use the fast_generate
310
- method. Beware, that this will disable the checking for circular Ruby data
311
- structures, which may cause JSON to go into an infinite loop.
312
-
313
- Here are the median comparisons for completeness' sake:
314
-
315
- Comparing times (call_time_median):
316
- 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
317
- 708.258020939 ( real) -> 16.547x
318
- 0.001411915
319
- 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
320
- 569.105020353 ( real) -> 13.296x
321
- 0.001757145
322
- 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
323
- 482.825371244 ( real) -> 11.280x
324
- 0.002071142
325
- 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
326
- 62.717626652 ( real) -> 1.465x
327
- 0.015944481
328
- 5 GeneratorBenchmarkRails#generator 1000 repeats:
329
- 43.965681162 ( real) -> 1.027x
330
- 0.022745013
331
- 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
332
- 43.929073409 ( real) -> 1.026x 7 (>=3859)
333
- 0.022763968
334
- 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
335
- 42.802514491 ( real) -> 1.000x 6 (>=3859)
336
- 0.023363113
337
- calls/sec ( time) -> speed covers
338
- secs/call
339
-
340
- == Author
341
-
342
- Florian Frank <mailto:flori@ping.de>
343
-
344
- == License
345
-
346
- Ruby License, see the COPYING file included in the source distribution. The
347
- Ruby License includes the GNU General Public License (GPL), Version 2, so see
348
- the file GPL as well.
349
-
350
- == Download
351
-
352
- The latest version of this library can be downloaded at
353
-
354
- * http://rubyforge.org/frs?group_id=953
355
-
356
- Online Documentation should be located at
357
-
358
- * http://json.rubyforge.org
@@ -1 +0,0 @@
1
- 1.8.1
@@ -1,28 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
- defined?(::BigDecimal) or require 'bigdecimal'
5
-
6
- class BigDecimal
7
- # Import a JSON Marshalled object.
8
- #
9
- # method used for JSON marshalling support.
10
- def self.json_create(object)
11
- BigDecimal._load object['b']
12
- end
13
-
14
- # Marshal the object to JSON.
15
- #
16
- # method used for JSON marshalling support.
17
- def as_json(*)
18
- {
19
- JSON.create_id => self.class.name,
20
- 'b' => _dump,
21
- }
22
- end
23
-
24
- # return the JSON value
25
- def to_json(*)
26
- as_json.to_json
27
- end
28
- end
@@ -1,22 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
- defined?(::Complex) or require 'complex'
5
-
6
- class Complex
7
- def self.json_create(object)
8
- Complex(object['r'], object['i'])
9
- end
10
-
11
- def as_json(*)
12
- {
13
- JSON.create_id => self.class.name,
14
- 'r' => real,
15
- 'i' => imag,
16
- }
17
- end
18
-
19
- def to_json(*)
20
- as_json.to_json
21
- end
22
- end
@@ -1,11 +0,0 @@
1
- # This file requires the implementations of ruby core's custom objects for
2
- # serialisation/deserialisation.
3
-
4
- require 'json/add/date'
5
- require 'json/add/date_time'
6
- require 'json/add/exception'
7
- require 'json/add/range'
8
- require 'json/add/regexp'
9
- require 'json/add/struct'
10
- require 'json/add/symbol'
11
- require 'json/add/time'
@@ -1,34 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
- require 'date'
5
-
6
- # Date serialization/deserialization
7
- class Date
8
-
9
- # Deserializes JSON string by converting Julian year <tt>y</tt>, month
10
- # <tt>m</tt>, day <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> to Date.
11
- def self.json_create(object)
12
- civil(*object.values_at('y', 'm', 'd', 'sg'))
13
- end
14
-
15
- alias start sg unless method_defined?(:start)
16
-
17
- # Returns a hash, that will be turned into a JSON object and represent this
18
- # object.
19
- def as_json(*)
20
- {
21
- JSON.create_id => self.class.name,
22
- 'y' => year,
23
- 'm' => month,
24
- 'd' => day,
25
- 'sg' => start,
26
- }
27
- end
28
-
29
- # Stores class name (Date) with Julian year <tt>y</tt>, month <tt>m</tt>, day
30
- # <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
31
- def to_json(*args)
32
- as_json.to_json(*args)
33
- end
34
- end
@@ -1,48 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
- require 'date'
5
-
6
- # DateTime serialization/deserialization
7
- class DateTime
8
-
9
- # Deserializes JSON string by converting year <tt>y</tt>, month <tt>m</tt>,
10
- # day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
11
- # offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> to DateTime.
12
- def self.json_create(object)
13
- args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
14
- of_a, of_b = object['of'].split('/')
15
- if of_b and of_b != '0'
16
- args << Rational(of_a.to_i, of_b.to_i)
17
- else
18
- args << of_a
19
- end
20
- args << object['sg']
21
- civil(*args)
22
- end
23
-
24
- alias start sg unless method_defined?(:start)
25
-
26
- # Returns a hash, that will be turned into a JSON object and represent this
27
- # object.
28
- def as_json(*)
29
- {
30
- JSON.create_id => self.class.name,
31
- 'y' => year,
32
- 'm' => month,
33
- 'd' => day,
34
- 'H' => hour,
35
- 'M' => min,
36
- 'S' => sec,
37
- 'of' => offset.to_s,
38
- 'sg' => start,
39
- }
40
- end
41
-
42
- # Stores class name (DateTime) with Julian year <tt>y</tt>, month <tt>m</tt>,
43
- # day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
44
- # offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
45
- def to_json(*args)
46
- as_json.to_json(*args)
47
- end
48
- end
@@ -1,31 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
-
5
- # Exception serialization/deserialization
6
- class Exception
7
-
8
- # Deserializes JSON string by constructing new Exception object with message
9
- # <tt>m</tt> and backtrace <tt>b</tt> serialized with <tt>to_json</tt>
10
- def self.json_create(object)
11
- result = new(object['m'])
12
- result.set_backtrace object['b']
13
- result
14
- end
15
-
16
- # Returns a hash, that will be turned into a JSON object and represent this
17
- # object.
18
- def as_json(*)
19
- {
20
- JSON.create_id => self.class.name,
21
- 'm' => message,
22
- 'b' => backtrace,
23
- }
24
- end
25
-
26
- # Stores class name (Exception) with message <tt>m</tt> and backtrace array
27
- # <tt>b</tt> as JSON string
28
- def to_json(*args)
29
- as_json.to_json(*args)
30
- end
31
- end
@@ -1,31 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
- require 'ostruct'
5
-
6
- # OpenStruct serialization/deserialization
7
- class OpenStruct
8
-
9
- # Deserializes JSON string by constructing new Struct object with values
10
- # <tt>v</tt> serialized by <tt>to_json</tt>.
11
- def self.json_create(object)
12
- new(object['t'] || object[:t])
13
- end
14
-
15
- # Returns a hash, that will be turned into a JSON object and represent this
16
- # object.
17
- def as_json(*)
18
- klass = self.class.name
19
- klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
20
- {
21
- JSON.create_id => klass,
22
- 't' => table,
23
- }
24
- end
25
-
26
- # Stores class name (OpenStruct) with this struct's values <tt>v</tt> as a
27
- # JSON string.
28
- def to_json(*args)
29
- as_json.to_json(*args)
30
- end
31
- end
@@ -1,29 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
-
5
- # Range serialization/deserialization
6
- class Range
7
-
8
- # Deserializes JSON string by constructing new Range object with arguments
9
- # <tt>a</tt> serialized by <tt>to_json</tt>.
10
- def self.json_create(object)
11
- new(*object['a'])
12
- end
13
-
14
- # Returns a hash, that will be turned into a JSON object and represent this
15
- # object.
16
- def as_json(*)
17
- {
18
- JSON.create_id => self.class.name,
19
- 'a' => [ first, last, exclude_end? ]
20
- }
21
- end
22
-
23
- # Stores class name (Range) with JSON array of arguments <tt>a</tt> which
24
- # include <tt>first</tt> (integer), <tt>last</tt> (integer), and
25
- # <tt>exclude_end?</tt> (boolean) as JSON string.
26
- def to_json(*args)
27
- as_json.to_json(*args)
28
- end
29
- end
@@ -1,22 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
- defined?(::Rational) or require 'rational'
5
-
6
- class Rational
7
- def self.json_create(object)
8
- Rational(object['n'], object['d'])
9
- end
10
-
11
- def as_json(*)
12
- {
13
- JSON.create_id => self.class.name,
14
- 'n' => numerator,
15
- 'd' => denominator,
16
- }
17
- end
18
-
19
- def to_json(*)
20
- as_json.to_json
21
- end
22
- end
@@ -1,30 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
-
5
- # Regexp serialization/deserialization
6
- class Regexp
7
-
8
- # Deserializes JSON string by constructing new Regexp object with source
9
- # <tt>s</tt> (Regexp or String) and options <tt>o</tt> serialized by
10
- # <tt>to_json</tt>
11
- def self.json_create(object)
12
- new(object['s'], object['o'])
13
- end
14
-
15
- # Returns a hash, that will be turned into a JSON object and represent this
16
- # object.
17
- def as_json(*)
18
- {
19
- JSON.create_id => self.class.name,
20
- 'o' => options,
21
- 's' => source,
22
- }
23
- end
24
-
25
- # Stores class name (Regexp) with options <tt>o</tt> and source <tt>s</tt>
26
- # (Regexp or String) as JSON string
27
- def to_json(*)
28
- as_json.to_json
29
- end
30
- end
@@ -1,30 +0,0 @@
1
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
2
- require 'json'
3
- end
4
-
5
- # Struct serialization/deserialization
6
- class Struct
7
-
8
- # Deserializes JSON string by constructing new Struct object with values
9
- # <tt>v</tt> serialized by <tt>to_json</tt>.
10
- def self.json_create(object)
11
- new(*object['v'])
12
- end
13
-
14
- # Returns a hash, that will be turned into a JSON object and represent this
15
- # object.
16
- def as_json(*)
17
- klass = self.class.name
18
- klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
19
- {
20
- JSON.create_id => klass,
21
- 'v' => values,
22
- }
23
- end
24
-
25
- # Stores class name (Struct) with Struct values <tt>v</tt> as a JSON string.
26
- # Only named structs are supported.
27
- def to_json(*args)
28
- as_json.to_json(*args)
29
- end
30
- end