static 1.0.0 → 1.0.1

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 (296) hide show
  1. checksums.yaml +7 -0
  2. data/bin/static +11 -0
  3. data/lib/static/cli.rb +2 -2
  4. data/lib/static/version.rb +1 -1
  5. data/vendor/cfoundry-0.5.2/LICENSE +746 -0
  6. data/vendor/cfoundry-0.5.2/Rakefile +38 -0
  7. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/applications.rb +53 -0
  8. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/domains.rb +16 -0
  9. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/frameworks.rb +22 -0
  10. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/helper.rb +131 -0
  11. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/login.rb +21 -0
  12. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/organization_users.rb +21 -0
  13. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/organizations.rb +70 -0
  14. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/routes.rb +26 -0
  15. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/runtimes.rb +22 -0
  16. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/service_bindings.rb +22 -0
  17. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/service_instances.rb +22 -0
  18. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/services.rb +25 -0
  19. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/spaces.rb +49 -0
  20. data/vendor/cfoundry-0.5.2/lib/cc_api_stub/users.rb +84 -0
  21. data/vendor/cfoundry-0.5.2/lib/cc_api_stub.rb +17 -0
  22. data/vendor/cfoundry-0.5.2/lib/cfoundry/auth_token.rb +63 -0
  23. data/vendor/cfoundry-0.5.2/lib/cfoundry/baseclient.rb +201 -0
  24. data/vendor/cfoundry-0.5.2/lib/cfoundry/chatty_hash.rb +46 -0
  25. data/vendor/cfoundry-0.5.2/lib/cfoundry/client.rb +46 -0
  26. data/vendor/cfoundry-0.5.2/lib/cfoundry/concerns/login_helpers.rb +13 -0
  27. data/vendor/cfoundry-0.5.2/lib/cfoundry/errors.rb +160 -0
  28. data/vendor/cfoundry-0.5.2/lib/cfoundry/rest_client.rb +299 -0
  29. data/vendor/cfoundry-0.5.2/lib/cfoundry/test_support.rb +3 -0
  30. data/vendor/cfoundry-0.5.2/lib/cfoundry/trace_helpers.rb +40 -0
  31. data/vendor/cfoundry-0.5.2/lib/cfoundry/uaaclient.rb +112 -0
  32. data/vendor/cfoundry-0.5.2/lib/cfoundry/upload_helpers.rb +186 -0
  33. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/app.rb +363 -0
  34. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/base.rb +71 -0
  35. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/client.rb +193 -0
  36. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/framework.rb +21 -0
  37. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/model.rb +178 -0
  38. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/model_magic.rb +129 -0
  39. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/runtime.rb +24 -0
  40. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/service.rb +39 -0
  41. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/service_instance.rb +32 -0
  42. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/service_plan.rb +19 -0
  43. data/vendor/cfoundry-0.5.2/lib/cfoundry/v1/user.rb +22 -0
  44. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/app.rb +392 -0
  45. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/base.rb +83 -0
  46. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/client.rb +138 -0
  47. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/domain.rb +11 -0
  48. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/framework.rb +14 -0
  49. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/model.rb +148 -0
  50. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/model_magic.rb +449 -0
  51. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/organization.rb +16 -0
  52. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/route.rb +15 -0
  53. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/runtime.rb +12 -0
  54. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/service.rb +19 -0
  55. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/service_auth_token.rb +9 -0
  56. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/service_binding.rb +10 -0
  57. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/service_instance.rb +14 -0
  58. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/service_plan.rb +12 -0
  59. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/space.rb +18 -0
  60. data/vendor/cfoundry-0.5.2/lib/cfoundry/v2/user.rb +64 -0
  61. data/vendor/cfoundry-0.5.2/lib/cfoundry/validator.rb +39 -0
  62. data/vendor/cfoundry-0.5.2/lib/cfoundry/version.rb +4 -0
  63. data/vendor/cfoundry-0.5.2/lib/cfoundry/zip.rb +56 -0
  64. data/vendor/cfoundry-0.5.2/lib/cfoundry.rb +2 -0
  65. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/applications_spec.rb +69 -0
  66. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/domains_spec.rb +19 -0
  67. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/frameworks_spec.rb +19 -0
  68. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/login_spec.rb +20 -0
  69. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/organization_users_spec.rb +19 -0
  70. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/organizations_spec.rb +97 -0
  71. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/routes_spec.rb +19 -0
  72. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/runtimes_spec.rb +19 -0
  73. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/service_bindings_spec.rb +13 -0
  74. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/service_instances_spec.rb +19 -0
  75. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/services_spec.rb +12 -0
  76. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/spaces_spec.rb +38 -0
  77. data/vendor/cfoundry-0.5.2/spec/cc_api_stub/users_spec.rb +107 -0
  78. data/vendor/cfoundry-0.5.2/spec/cfoundry/auth_token_spec.rb +125 -0
  79. data/vendor/cfoundry-0.5.2/spec/cfoundry/baseclient_spec.rb +225 -0
  80. data/vendor/cfoundry-0.5.2/spec/cfoundry/client_spec.rb +15 -0
  81. data/vendor/cfoundry-0.5.2/spec/cfoundry/errors_spec.rb +80 -0
  82. data/vendor/cfoundry-0.5.2/spec/cfoundry/rest_client_spec.rb +281 -0
  83. data/vendor/cfoundry-0.5.2/spec/cfoundry/trace_helpers_spec.rb +72 -0
  84. data/vendor/cfoundry-0.5.2/spec/cfoundry/uaaclient_spec.rb +332 -0
  85. data/vendor/cfoundry-0.5.2/spec/cfoundry/upload_helpers_spec.rb +174 -0
  86. data/vendor/cfoundry-0.5.2/spec/cfoundry/v1/base_spec.rb +58 -0
  87. data/vendor/cfoundry-0.5.2/spec/cfoundry/v1/client_spec.rb +17 -0
  88. data/vendor/cfoundry-0.5.2/spec/cfoundry/v1/model_magic_spec.rb +43 -0
  89. data/vendor/cfoundry-0.5.2/spec/cfoundry/v2/app_spec.rb +144 -0
  90. data/vendor/cfoundry-0.5.2/spec/cfoundry/v2/base_spec.rb +299 -0
  91. data/vendor/cfoundry-0.5.2/spec/cfoundry/v2/client_spec.rb +73 -0
  92. data/vendor/cfoundry-0.5.2/spec/cfoundry/v2/model_magic_spec.rb +173 -0
  93. data/vendor/cfoundry-0.5.2/spec/cfoundry/v2/organization_spec.rb +15 -0
  94. data/vendor/cfoundry-0.5.2/spec/cfoundry/v2/space_spec.rb +15 -0
  95. data/vendor/cfoundry-0.5.2/spec/fakes/app_fake.rb +5 -0
  96. data/vendor/cfoundry-0.5.2/spec/fakes/domain_fake.rb +5 -0
  97. data/vendor/cfoundry-0.5.2/spec/fakes/framework_fake.rb +5 -0
  98. data/vendor/cfoundry-0.5.2/spec/fakes/organization_fake.rb +5 -0
  99. data/vendor/cfoundry-0.5.2/spec/fakes/route_fake.rb +5 -0
  100. data/vendor/cfoundry-0.5.2/spec/fakes/runtime_fake.rb +5 -0
  101. data/vendor/cfoundry-0.5.2/spec/fakes/service_fake.rb +5 -0
  102. data/vendor/cfoundry-0.5.2/spec/fakes/service_instance_fake.rb +5 -0
  103. data/vendor/cfoundry-0.5.2/spec/fakes/service_plan_fake.rb +5 -0
  104. data/vendor/cfoundry-0.5.2/spec/fakes/space_fake.rb +5 -0
  105. data/vendor/cfoundry-0.5.2/spec/fakes/user_fake.rb +5 -0
  106. data/vendor/cfoundry-0.5.2/spec/fixtures/apps/with_dotfiles/xyz +1 -0
  107. data/vendor/cfoundry-0.5.2/spec/fixtures/apps/with_nested_directories/foo/bar/baz/fizz +0 -0
  108. data/vendor/cfoundry-0.5.2/spec/fixtures/apps/with_nested_directories/xyz +0 -0
  109. data/vendor/cfoundry-0.5.2/spec/fixtures/apps/with_vmcignore/ignored_dir/file_in_ignored_dir.txt +1 -0
  110. data/vendor/cfoundry-0.5.2/spec/fixtures/apps/with_vmcignore/ignored_file.txt +1 -0
  111. data/vendor/cfoundry-0.5.2/spec/fixtures/apps/with_vmcignore/non_ignored_dir/file_in_non_ignored_dir.txt +1 -0
  112. data/vendor/cfoundry-0.5.2/spec/fixtures/apps/with_vmcignore/non_ignored_dir/ignored_file.txt +1 -0
  113. data/vendor/cfoundry-0.5.2/spec/fixtures/apps/with_vmcignore/non_ignored_file.txt +1 -0
  114. data/vendor/cfoundry-0.5.2/spec/fixtures/empty_file +0 -0
  115. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_application.json +24 -0
  116. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_application_summary.json +57 -0
  117. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_created_application.json +11 -0
  118. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_created_domain.json +10 -0
  119. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_created_organization.json +11 -0
  120. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_created_route.json +13 -0
  121. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_created_service_instance.json +11 -0
  122. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_created_space.json +11 -0
  123. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_created_user.json +11 -0
  124. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_empty_search.json +7 -0
  125. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_frameworks.json +20 -0
  126. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_organization.json +144 -0
  127. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_organization_domains.json +34 -0
  128. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_organization_search.json +37 -0
  129. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_organization_summary.json +19 -0
  130. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_organization_users.json +81 -0
  131. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_runtimes.json +20 -0
  132. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_service_binding.json +22 -0
  133. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_service_bindings.json +24 -0
  134. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_service_instance.json +81 -0
  135. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_service_instances.json +0 -0
  136. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_service_types.json +124 -0
  137. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_space.json +45 -0
  138. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_space_summary.json +86 -0
  139. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_stats.json +29 -0
  140. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_user.json +112 -0
  141. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_user_organizations.json +92 -0
  142. data/vendor/cfoundry-0.5.2/spec/fixtures/fake_cc_user_with_managers.json +85 -0
  143. data/vendor/cfoundry-0.5.2/spec/spec_helper.rb +20 -0
  144. data/vendor/cfoundry-0.5.2/spec/support/fake_helper.rb +236 -0
  145. data/vendor/cfoundry-0.5.2/spec/support/randoms.rb +3 -0
  146. data/vendor/cfoundry-0.5.2/spec/support/shared_examples/cc_api_stub_request_examples.rb +79 -0
  147. data/vendor/cfoundry-0.5.2/spec/support/shared_examples/client_login_examples.rb +46 -0
  148. data/vendor/cfoundry-0.5.2/spec/support/shared_examples/model_summary_examples.rb +34 -0
  149. data/vendor/cfoundry-0.5.2/spec/support/v1_fake_helper.rb +144 -0
  150. data/vendor/cfoundry-0.5.2/vendor/errors/README.md +4 -0
  151. data/vendor/cfoundry-0.5.2/vendor/errors/v1.yml +189 -0
  152. data/vendor/cfoundry-0.5.2/vendor/errors/v2.yml +360 -0
  153. data/vendor/tunnel-vmc-plugin-0.2.2/Rakefile +39 -0
  154. data/vendor/tunnel-vmc-plugin-0.2.2/config/clients.yml +17 -0
  155. data/vendor/tunnel-vmc-plugin-0.2.2/helper-app/Gemfile +10 -0
  156. data/vendor/tunnel-vmc-plugin-0.2.2/helper-app/server.rb +43 -0
  157. data/vendor/tunnel-vmc-plugin-0.2.2/lib/tunnel-vmc-plugin/plugin.rb +178 -0
  158. data/vendor/tunnel-vmc-plugin-0.2.2/lib/tunnel-vmc-plugin/tunnel.rb +308 -0
  159. data/vendor/tunnel-vmc-plugin-0.2.2/lib/tunnel-vmc-plugin/version.rb +3 -0
  160. data/vendor/tunnel-vmc-plugin-0.2.2/spec/plugin_spec.rb +29 -0
  161. data/vendor/tunnel-vmc-plugin-0.2.2/spec/spec_helper.rb +15 -0
  162. data/vendor/vmc-0.5.0/LICENSE +1277 -0
  163. data/vendor/vmc-0.5.0/Rakefile +101 -0
  164. data/vendor/vmc-0.5.0/bin/vmc +11 -0
  165. data/vendor/vmc-0.5.0/lib/vmc/cli/app/app.rb +45 -0
  166. data/vendor/vmc-0.5.0/lib/vmc/cli/app/apps.rb +99 -0
  167. data/vendor/vmc-0.5.0/lib/vmc/cli/app/base.rb +82 -0
  168. data/vendor/vmc-0.5.0/lib/vmc/cli/app/crashes.rb +42 -0
  169. data/vendor/vmc-0.5.0/lib/vmc/cli/app/delete.rb +95 -0
  170. data/vendor/vmc-0.5.0/lib/vmc/cli/app/deprecated.rb +11 -0
  171. data/vendor/vmc-0.5.0/lib/vmc/cli/app/env.rb +78 -0
  172. data/vendor/vmc-0.5.0/lib/vmc/cli/app/files.rb +137 -0
  173. data/vendor/vmc-0.5.0/lib/vmc/cli/app/health.rb +26 -0
  174. data/vendor/vmc-0.5.0/lib/vmc/cli/app/instances.rb +53 -0
  175. data/vendor/vmc-0.5.0/lib/vmc/cli/app/logs.rb +76 -0
  176. data/vendor/vmc-0.5.0/lib/vmc/cli/app/push/create.rb +153 -0
  177. data/vendor/vmc-0.5.0/lib/vmc/cli/app/push/interactions.rb +94 -0
  178. data/vendor/vmc-0.5.0/lib/vmc/cli/app/push/sync.rb +64 -0
  179. data/vendor/vmc-0.5.0/lib/vmc/cli/app/push.rb +105 -0
  180. data/vendor/vmc-0.5.0/lib/vmc/cli/app/rename.rb +35 -0
  181. data/vendor/vmc-0.5.0/lib/vmc/cli/app/restart.rb +20 -0
  182. data/vendor/vmc-0.5.0/lib/vmc/cli/app/scale.rb +71 -0
  183. data/vendor/vmc-0.5.0/lib/vmc/cli/app/start.rb +150 -0
  184. data/vendor/vmc-0.5.0/lib/vmc/cli/app/stats.rb +67 -0
  185. data/vendor/vmc-0.5.0/lib/vmc/cli/app/stop.rb +27 -0
  186. data/vendor/vmc-0.5.0/lib/vmc/cli/domain/base.rb +12 -0
  187. data/vendor/vmc-0.5.0/lib/vmc/cli/domain/domains.rb +40 -0
  188. data/vendor/vmc-0.5.0/lib/vmc/cli/domain/map.rb +55 -0
  189. data/vendor/vmc-0.5.0/lib/vmc/cli/domain/unmap.rb +56 -0
  190. data/vendor/vmc-0.5.0/lib/vmc/cli/help.rb +15 -0
  191. data/vendor/vmc-0.5.0/lib/vmc/cli/interactive.rb +105 -0
  192. data/vendor/vmc-0.5.0/lib/vmc/cli/organization/base.rb +14 -0
  193. data/vendor/vmc-0.5.0/lib/vmc/cli/organization/create.rb +32 -0
  194. data/vendor/vmc-0.5.0/lib/vmc/cli/organization/delete.rb +73 -0
  195. data/vendor/vmc-0.5.0/lib/vmc/cli/organization/org.rb +45 -0
  196. data/vendor/vmc-0.5.0/lib/vmc/cli/organization/orgs.rb +35 -0
  197. data/vendor/vmc-0.5.0/lib/vmc/cli/organization/rename.rb +36 -0
  198. data/vendor/vmc-0.5.0/lib/vmc/cli/route/base.rb +12 -0
  199. data/vendor/vmc-0.5.0/lib/vmc/cli/route/map.rb +80 -0
  200. data/vendor/vmc-0.5.0/lib/vmc/cli/route/routes.rb +26 -0
  201. data/vendor/vmc-0.5.0/lib/vmc/cli/route/unmap.rb +94 -0
  202. data/vendor/vmc-0.5.0/lib/vmc/cli/service/base.rb +8 -0
  203. data/vendor/vmc-0.5.0/lib/vmc/cli/service/bind.rb +44 -0
  204. data/vendor/vmc-0.5.0/lib/vmc/cli/service/create.rb +126 -0
  205. data/vendor/vmc-0.5.0/lib/vmc/cli/service/delete.rb +86 -0
  206. data/vendor/vmc-0.5.0/lib/vmc/cli/service/rename.rb +35 -0
  207. data/vendor/vmc-0.5.0/lib/vmc/cli/service/service.rb +42 -0
  208. data/vendor/vmc-0.5.0/lib/vmc/cli/service/services.rb +114 -0
  209. data/vendor/vmc-0.5.0/lib/vmc/cli/service/unbind.rb +38 -0
  210. data/vendor/vmc-0.5.0/lib/vmc/cli/space/base.rb +21 -0
  211. data/vendor/vmc-0.5.0/lib/vmc/cli/space/create.rb +60 -0
  212. data/vendor/vmc-0.5.0/lib/vmc/cli/space/delete.rb +95 -0
  213. data/vendor/vmc-0.5.0/lib/vmc/cli/space/rename.rb +39 -0
  214. data/vendor/vmc-0.5.0/lib/vmc/cli/space/space.rb +64 -0
  215. data/vendor/vmc-0.5.0/lib/vmc/cli/space/spaces.rb +55 -0
  216. data/vendor/vmc-0.5.0/lib/vmc/cli/space/switch.rb +16 -0
  217. data/vendor/vmc-0.5.0/lib/vmc/cli/start/base.rb +83 -0
  218. data/vendor/vmc-0.5.0/lib/vmc/cli/start/colors.rb +13 -0
  219. data/vendor/vmc-0.5.0/lib/vmc/cli/start/info.rb +126 -0
  220. data/vendor/vmc-0.5.0/lib/vmc/cli/start/login.rb +96 -0
  221. data/vendor/vmc-0.5.0/lib/vmc/cli/start/logout.rb +17 -0
  222. data/vendor/vmc-0.5.0/lib/vmc/cli/start/target.rb +71 -0
  223. data/vendor/vmc-0.5.0/lib/vmc/cli/start/target_interactions.rb +37 -0
  224. data/vendor/vmc-0.5.0/lib/vmc/cli/start/targets.rb +16 -0
  225. data/vendor/vmc-0.5.0/lib/vmc/cli/user/base.rb +29 -0
  226. data/vendor/vmc-0.5.0/lib/vmc/cli/user/create.rb +39 -0
  227. data/vendor/vmc-0.5.0/lib/vmc/cli/user/delete.rb +27 -0
  228. data/vendor/vmc-0.5.0/lib/vmc/cli/user/passwd.rb +50 -0
  229. data/vendor/vmc-0.5.0/lib/vmc/cli/user/register.rb +42 -0
  230. data/vendor/vmc-0.5.0/lib/vmc/cli/user/users.rb +32 -0
  231. data/vendor/vmc-0.5.0/lib/vmc/cli.rb +475 -0
  232. data/vendor/vmc-0.5.0/lib/vmc/constants.rb +13 -0
  233. data/vendor/vmc-0.5.0/lib/vmc/detect.rb +129 -0
  234. data/vendor/vmc-0.5.0/lib/vmc/errors.rb +17 -0
  235. data/vendor/vmc-0.5.0/lib/vmc/plugin.rb +56 -0
  236. data/vendor/vmc-0.5.0/lib/vmc/spacing.rb +89 -0
  237. data/vendor/vmc-0.5.0/lib/vmc/spec_helper.rb +1 -0
  238. data/vendor/vmc-0.5.0/lib/vmc/test_support.rb +6 -0
  239. data/vendor/vmc-0.5.0/lib/vmc/version.rb +3 -0
  240. data/vendor/vmc-0.5.0/lib/vmc.rb +8 -0
  241. data/vendor/vmc-0.5.0/spec/assets/hello-sinatra/Gemfile +3 -0
  242. data/vendor/vmc-0.5.0/spec/assets/hello-sinatra/config.ru +3 -0
  243. data/vendor/vmc-0.5.0/spec/assets/hello-sinatra/main.rb +6 -0
  244. data/vendor/vmc-0.5.0/spec/assets/specker_runner/specker_runner_input.rb +6 -0
  245. data/vendor/vmc-0.5.0/spec/assets/specker_runner/specker_runner_pause.rb +5 -0
  246. data/vendor/vmc-0.5.0/spec/console_app_specker/console_app_specker_matchers_spec.rb +152 -0
  247. data/vendor/vmc-0.5.0/spec/console_app_specker/specker_runner_spec.rb +157 -0
  248. data/vendor/vmc-0.5.0/spec/features/v1/new_user_flow_spec.rb +109 -0
  249. data/vendor/vmc-0.5.0/spec/features/v2/account_lifecycle_spec.rb +64 -0
  250. data/vendor/vmc-0.5.0/spec/features/v2/push_flow_spec.rb +125 -0
  251. data/vendor/vmc-0.5.0/spec/features/v2/switching_targets_spec.rb +32 -0
  252. data/vendor/vmc-0.5.0/spec/spec_helper.rb +63 -0
  253. data/vendor/vmc-0.5.0/spec/support/command_helper.rb +80 -0
  254. data/vendor/vmc-0.5.0/spec/support/config_helper.rb +15 -0
  255. data/vendor/vmc-0.5.0/spec/support/console_app_specker_matchers.rb +75 -0
  256. data/vendor/vmc-0.5.0/spec/support/fake_home_dir.rb +55 -0
  257. data/vendor/vmc-0.5.0/spec/support/interact_helper.rb +29 -0
  258. data/vendor/vmc-0.5.0/spec/support/shared_examples/errors.rb +40 -0
  259. data/vendor/vmc-0.5.0/spec/support/shared_examples/input.rb +14 -0
  260. data/vendor/vmc-0.5.0/spec/support/specker_runner.rb +79 -0
  261. data/vendor/vmc-0.5.0/spec/support/tracking_expector.rb +71 -0
  262. data/vendor/vmc-0.5.0/spec/vmc/cli/app/base_spec.rb +17 -0
  263. data/vendor/vmc-0.5.0/spec/vmc/cli/app/delete_spec.rb +188 -0
  264. data/vendor/vmc-0.5.0/spec/vmc/cli/app/instances_spec.rb +65 -0
  265. data/vendor/vmc-0.5.0/spec/vmc/cli/app/push/create_spec.rb +591 -0
  266. data/vendor/vmc-0.5.0/spec/vmc/cli/app/push_spec.rb +369 -0
  267. data/vendor/vmc-0.5.0/spec/vmc/cli/app/rename_spec.rb +104 -0
  268. data/vendor/vmc-0.5.0/spec/vmc/cli/app/scale_spec.rb +76 -0
  269. data/vendor/vmc-0.5.0/spec/vmc/cli/app/start_spec.rb +168 -0
  270. data/vendor/vmc-0.5.0/spec/vmc/cli/app/stats_spec.rb +68 -0
  271. data/vendor/vmc-0.5.0/spec/vmc/cli/domain/map_spec.rb +130 -0
  272. data/vendor/vmc-0.5.0/spec/vmc/cli/domain/unmap_spec.rb +69 -0
  273. data/vendor/vmc-0.5.0/spec/vmc/cli/organization/orgs_spec.rb +108 -0
  274. data/vendor/vmc-0.5.0/spec/vmc/cli/organization/rename_spec.rb +113 -0
  275. data/vendor/vmc-0.5.0/spec/vmc/cli/route/map_spec.rb +140 -0
  276. data/vendor/vmc-0.5.0/spec/vmc/cli/route/unmap_spec.rb +221 -0
  277. data/vendor/vmc-0.5.0/spec/vmc/cli/service/bind_spec.rb +25 -0
  278. data/vendor/vmc-0.5.0/spec/vmc/cli/service/delete_spec.rb +22 -0
  279. data/vendor/vmc-0.5.0/spec/vmc/cli/service/rename_spec.rb +105 -0
  280. data/vendor/vmc-0.5.0/spec/vmc/cli/service/service_spec.rb +23 -0
  281. data/vendor/vmc-0.5.0/spec/vmc/cli/service/unbind_spec.rb +25 -0
  282. data/vendor/vmc-0.5.0/spec/vmc/cli/space/create_spec.rb +73 -0
  283. data/vendor/vmc-0.5.0/spec/vmc/cli/space/rename_spec.rb +102 -0
  284. data/vendor/vmc-0.5.0/spec/vmc/cli/space/spaces_spec.rb +104 -0
  285. data/vendor/vmc-0.5.0/spec/vmc/cli/space/switch_space_spec.rb +55 -0
  286. data/vendor/vmc-0.5.0/spec/vmc/cli/start/info_spec.rb +160 -0
  287. data/vendor/vmc-0.5.0/spec/vmc/cli/start/login_spec.rb +142 -0
  288. data/vendor/vmc-0.5.0/spec/vmc/cli/start/logout_spec.rb +50 -0
  289. data/vendor/vmc-0.5.0/spec/vmc/cli/start/target_spec.rb +123 -0
  290. data/vendor/vmc-0.5.0/spec/vmc/cli/user/create_spec.rb +54 -0
  291. data/vendor/vmc-0.5.0/spec/vmc/cli/user/delete_spec.rb +51 -0
  292. data/vendor/vmc-0.5.0/spec/vmc/cli/user/passwd_spec.rb +102 -0
  293. data/vendor/vmc-0.5.0/spec/vmc/cli/user/register_spec.rb +140 -0
  294. data/vendor/vmc-0.5.0/spec/vmc/cli_spec.rb +448 -0
  295. data/vendor/vmc-0.5.0/spec/vmc/detect_spec.rb +54 -0
  296. metadata +446 -43
@@ -0,0 +1,369 @@
1
+ require 'spec_helper'
2
+ require "vmc/cli/app/push"
3
+
4
+ describe VMC::App::Push do
5
+ let(:global) { { :color => false, :quiet => true } }
6
+ let(:inputs) { {} }
7
+ let(:given) { {} }
8
+ let(:path) { "somepath" }
9
+ let(:client) { fake_client }
10
+ let(:push) { VMC::App::Push.new(Mothership.commands[:push]) }
11
+
12
+ before do
13
+ any_instance_of(VMC::CLI) do |cli|
14
+ stub(cli).client { client }
15
+ stub(cli).precondition { nil }
16
+ end
17
+ end
18
+
19
+ describe 'metadata' do
20
+ let(:command) { Mothership.commands[:push] }
21
+
22
+ describe 'command' do
23
+ subject { command }
24
+ its(:description) { should eq "Push an application, syncing changes if it exists" }
25
+ it { expect(Mothership::Help.group(:apps, :manage)).to include(subject) }
26
+ end
27
+
28
+ include_examples 'inputs must have descriptions'
29
+
30
+ describe 'arguments' do
31
+ subject { command.arguments }
32
+ it 'has the correct argument order' do
33
+ should eq([{ :type => :optional, :value => nil, :name => :name }])
34
+ end
35
+ end
36
+ end
37
+
38
+ describe '#sync_app' do
39
+ let(:app) { fake(:app) }
40
+
41
+ before do
42
+ stub(app).upload
43
+ app.changes = {}
44
+ end
45
+
46
+ subject do
47
+ push.input = Mothership::Inputs.new(nil, push, inputs, {}, global)
48
+ push.sync_app(app, path)
49
+ end
50
+
51
+ shared_examples 'common tests for inputs' do |*args|
52
+ context 'when the new input is the same as the old' do
53
+ type, input = args
54
+ input ||= type
55
+
56
+ let(:inputs) { {input => old} }
57
+
58
+ it "does not update the app's #{type}" do
59
+ dont_allow(push).line
60
+ dont_allow(app).update!
61
+ expect { subject }.not_to change { app.send(type) }
62
+ end
63
+ end
64
+ end
65
+
66
+ it 'triggers the :push_app filter' do
67
+ mock(push).filter(:push_app, app) { app }
68
+ subject
69
+ end
70
+
71
+ it 'uploads the app' do
72
+ mock(app).upload(path)
73
+ subject
74
+ end
75
+
76
+ context 'when no inputs are given' do
77
+ let(:inputs) { {} }
78
+
79
+ it 'should not update the app' do
80
+ dont_allow(app).update!
81
+ subject
82
+ end
83
+
84
+ [:memory=, :framework=].each do |property|
85
+ it "should not set #{property} on the app" do
86
+ dont_allow(app).__send__(property)
87
+ subject
88
+ end
89
+ end
90
+ end
91
+
92
+ context 'when memory is given' do
93
+ let(:old) { 1024 }
94
+ let(:new) { "2G" }
95
+ let(:app) { fake(:app, :memory => old) }
96
+ let(:inputs) { { :memory => new } }
97
+
98
+ it 'updates the app memory, converting to megabytes' do
99
+ stub(push).line(anything)
100
+ mock(app).update!
101
+ expect { subject }.to change { app.memory }.from(old).to(2048)
102
+ end
103
+
104
+ it 'outputs the changed memory in human readable sizes' do
105
+ mock(push).line("Changes:")
106
+ mock(push).line("memory: 1G -> 2G")
107
+ stub(app).update!
108
+ subject
109
+ end
110
+
111
+ include_examples 'common tests for inputs', :memory
112
+ end
113
+
114
+ context 'when instances is given' do
115
+ let(:old) { 1 }
116
+ let(:new) { 2 }
117
+ let(:app) { fake(:app, :total_instances => old) }
118
+ let(:inputs) { { :instances => new } }
119
+
120
+ it 'updates the app instances' do
121
+ stub(push).line(anything)
122
+ mock(app).update!
123
+ expect { subject }.to change { app.total_instances }.from(old).to(new)
124
+ end
125
+
126
+ it 'outputs the changed instances' do
127
+ mock(push).line("Changes:")
128
+ mock(push).line("total_instances: 1 -> 2")
129
+ stub(app).update!
130
+ subject
131
+ end
132
+
133
+ include_examples 'common tests for inputs', :total_instances, :instances
134
+ end
135
+
136
+ context 'when framework is given' do
137
+ let(:old) { fake(:framework, :name => "Old Framework") }
138
+ let(:new) { fake(:framework, :name => "New Framework") }
139
+ let(:app) { fake(:app, :framework => old) }
140
+ let(:inputs) { { :framework => new } }
141
+
142
+ it 'updates the app framework' do
143
+ stub(push).line(anything)
144
+ mock(app).update!
145
+ expect { subject }.to change { app.framework }.from(old).to(new)
146
+ end
147
+
148
+ it 'outputs the changed framework using the name' do
149
+ mock(push).line("Changes:")
150
+ mock(push).line("framework: Old Framework -> New Framework")
151
+ stub(app).update!
152
+ subject
153
+ end
154
+
155
+ include_examples 'common tests for inputs', :framework
156
+ end
157
+
158
+ context 'when runtime is given' do
159
+ let(:old) { fake(:runtime, :name => "Old Runtime") }
160
+ let(:new) { fake(:runtime, :name => "New Runtime") }
161
+ let(:app) { fake(:app, :runtime => old) }
162
+ let(:inputs) { { :runtime => new } }
163
+
164
+ it 'updates the app runtime' do
165
+ stub(push).line(anything)
166
+ mock(app).update!
167
+ expect { subject }.to change { app.runtime }.from(old).to(new)
168
+ end
169
+
170
+ it 'outputs the changed runtime using the name' do
171
+ mock(push).line("Changes:")
172
+ mock(push).line("runtime: Old Runtime -> New Runtime")
173
+ stub(app).update!
174
+ subject
175
+ end
176
+
177
+ include_examples 'common tests for inputs', :runtime
178
+ end
179
+
180
+ context 'when command is given' do
181
+ let(:old) { "./start" }
182
+ let(:new) { "./start foo " }
183
+ let(:app) { fake(:app, :command => old) }
184
+ let(:inputs) { { :command => new } }
185
+
186
+ it 'updates the app command' do
187
+ stub(push).line(anything)
188
+ mock(app).update!
189
+ expect { subject }.to change { app.command }.from("./start").to("./start foo ")
190
+ end
191
+
192
+ it 'outputs the changed command in single quotes' do
193
+ mock(push).line("Changes:")
194
+ mock(push).line("command: './start' -> './start foo '")
195
+ stub(app).update!
196
+ subject
197
+ end
198
+
199
+ include_examples 'common tests for inputs', :command
200
+ end
201
+
202
+ context 'when plan is given' do
203
+ let(:old) { "d100" }
204
+ let(:new) { "p100" }
205
+ let(:inputs) { { :plan => new } }
206
+
207
+ include_examples 'common tests for inputs', :production, :plan
208
+
209
+ %w{p100 P100 P200}.each do |plan|
210
+ context "when the given plan is #{plan}" do
211
+ let(:inputs) { { :plan => plan } }
212
+
213
+ it 'sets production to true' do
214
+ stub(push).line(anything)
215
+ mock(app).update!
216
+ expect { subject }.to change { app.production }.from(false).to(true)
217
+ end
218
+
219
+ it 'outputs the changed plan in single quotes' do
220
+ mock(push).line("Changes:")
221
+ mock(push).line("production: false -> true")
222
+ stub(app).update!
223
+ subject
224
+ end
225
+ end
226
+ end
227
+
228
+ %w{d100 D100 D200 fizzbuzz}.each do |plan|
229
+ context "when the given plan is #{plan}" do
230
+ let(:app) { fake(:app, :production => true) }
231
+
232
+ let(:inputs) { { :plan => plan } }
233
+
234
+ it 'sets production to false' do
235
+ stub(push).line(anything)
236
+ mock(app).update!
237
+ expect { subject }.to change { app.production }.from(true).to(false)
238
+ end
239
+
240
+ it 'outputs the changed plan in single quotes' do
241
+ mock(push).line("Changes:")
242
+ mock(push).line("production: true -> false")
243
+ stub(app).update!
244
+ subject
245
+ end
246
+ end
247
+ end
248
+ end
249
+
250
+ context 'when restart is given' do
251
+ let(:inputs) { { :restart => true, :memory => 4096 } }
252
+
253
+
254
+ context 'when the app is already started' do
255
+ let(:app) { fake(:app, :state => "STARTED") }
256
+
257
+ it 'invokes the restart command' do
258
+ stub(push).line
259
+ mock(app).update!
260
+ mock(push).invoke(:restart, :app => app)
261
+ subject
262
+ end
263
+
264
+ context 'but there are no changes' do
265
+ let(:inputs) { { :restart => true } }
266
+
267
+ it 'invokes the restart command' do
268
+ stub(push).line
269
+ dont_allow(app).update!
270
+ mock(push).invoke(:restart, :app => app)
271
+ subject
272
+ end
273
+ end
274
+ end
275
+
276
+ context 'when the app is not already started' do
277
+ let(:app) { fake(:app, :state => "STOPPED") }
278
+
279
+ it 'does not invoke the restart command' do
280
+ stub(push).line
281
+ mock(app).update!
282
+ dont_allow(push).invoke(:restart, :app => app)
283
+ subject
284
+ end
285
+ end
286
+ end
287
+
288
+ context "when buildpack is given" do
289
+ let(:old) { nil }
290
+ let(:app) { fake(:app, :buildpack => old) }
291
+ let(:inputs) { { :buildpack => new } }
292
+
293
+ context "and it's an invalid URL" do
294
+ let(:new) { "git@github.com:foo/bar.git" }
295
+
296
+ before do
297
+ stub(app).update! do
298
+ raise CFoundry::MessageParseError.new(
299
+ "Request invalid due to parse error: Field: buildpack, Error: Value git@github.com:cloudfoundry/heroku-buildpack-ruby.git doesn't match regexp String /GIT_URL_REGEX/",
300
+ 1001)
301
+ end
302
+ end
303
+
304
+ it "fails and prints a pretty message" do
305
+ stub(push).line(anything)
306
+ expect { subject }.to raise_error(
307
+ VMC::UserError, "Buildpack must be a public git repository URI.")
308
+ end
309
+ end
310
+
311
+ context "and it's a valid URL" do
312
+ let(:new) { "git://github.com/foo/bar.git" }
313
+
314
+ it "updates the app's buildpack" do
315
+ stub(push).line(anything)
316
+ mock(app).update!
317
+ expect { subject }.to change { app.buildpack }.from(old).to(new)
318
+ end
319
+
320
+ it "outputs the changed buildpack with single quotes" do
321
+ mock(push).line("Changes:")
322
+ mock(push).line("buildpack: '' -> '#{new}'")
323
+ stub(app).update!
324
+ subject
325
+ end
326
+
327
+ include_examples 'common tests for inputs', :buildpack
328
+ end
329
+ end
330
+ end
331
+
332
+ describe '#setup_new_app (integration spec!!)' do
333
+ let(:app) { fake(:app, :guid => nil) }
334
+ let(:framework) { fake(:framework) }
335
+ let(:runtime) { fake(:runtime) }
336
+ let(:host) { "" }
337
+ let(:domain) { fake(:domain, :name => "example.com") }
338
+ let(:inputs) do
339
+ { :name => "some-app",
340
+ :instances => 2,
341
+ :framework => framework,
342
+ :runtime => runtime,
343
+ :memory => 1024,
344
+ :host => host,
345
+ :domain => domain
346
+ }
347
+ end
348
+ let(:global) { {:quiet => true, :color => false, :force => true} }
349
+
350
+ before do
351
+ stub(client).app { app }
352
+ end
353
+
354
+ subject do
355
+ push.input = Mothership::Inputs.new(Mothership.commands[:push], push, inputs, global, global)
356
+ push.setup_new_app(path)
357
+ end
358
+
359
+ it 'creates the app' do
360
+ mock(app).create!
361
+ mock(app).upload(path)
362
+ mock(push).filter(:create_app, app) { app }
363
+ mock(push).filter(:push_app, app) { app }
364
+ mock(push).invoke :map, :app => app, :host => host, :domain => domain
365
+ mock(push).invoke :start, :app => app
366
+ subject
367
+ end
368
+ end
369
+ end
@@ -0,0 +1,104 @@
1
+ require 'spec_helper'
2
+ require "vmc/cli/app/rename"
3
+
4
+ describe VMC::App::Rename do
5
+ let(:global) { { :color => false, :quiet => true } }
6
+ let(:inputs) { {} }
7
+ let(:given) { {} }
8
+ let(:client) { fake_client }
9
+ let(:app) {}
10
+ let(:new_name) { "some-new-name" }
11
+
12
+ before do
13
+ any_instance_of(VMC::CLI) do |cli|
14
+ stub(cli).client { client }
15
+ stub(cli).precondition { nil }
16
+ end
17
+ end
18
+
19
+ subject { Mothership.new.invoke(:rename, inputs, given, global) }
20
+
21
+ describe 'metadata' do
22
+ let(:command) { Mothership.commands[:rename] }
23
+
24
+ describe 'command' do
25
+ subject { command }
26
+ its(:description) { should eq "Rename an application" }
27
+ it { expect(Mothership::Help.group(:apps, :manage)).to include(subject) }
28
+ end
29
+
30
+ include_examples 'inputs must have descriptions'
31
+
32
+ describe 'arguments' do
33
+ subject { command.arguments }
34
+ it 'has the correct argument order' do
35
+ should eq([
36
+ { :type => :optional, :value => nil, :name => :app },
37
+ { :type => :optional, :value => nil, :name => :name }
38
+ ])
39
+ end
40
+ end
41
+ end
42
+
43
+ context 'when there are no apps' do
44
+ context 'and an app is given' do
45
+ let(:given) { { :app => "some-app" } }
46
+ it { expect { subject }.to raise_error(VMC::UserError, "Unknown app 'some-app'.") }
47
+ end
48
+
49
+ context 'and an app is not given' do
50
+ it { expect { subject }.to raise_error(VMC::UserError, "No applications.") }
51
+ end
52
+ end
53
+
54
+ context 'when there are apps' do
55
+ let(:client) { fake_client(:apps => apps) }
56
+ let(:apps) { fake_list(:app, 2) }
57
+ let(:renamed_app) { apps.first }
58
+
59
+ context 'when the defaults are used' do
60
+ it 'asks for the app and new name and renames' do
61
+ mock_ask("Rename which application?", anything) { renamed_app }
62
+ mock_ask("New name") { new_name }
63
+ mock(renamed_app).name=(new_name)
64
+ mock(renamed_app).update!
65
+ subject
66
+ end
67
+ end
68
+
69
+ context 'when no name is provided, but a app is' do
70
+ let(:given) { { :app => renamed_app.name } }
71
+
72
+ it 'asks for the new name and renames' do
73
+ dont_allow_ask("Rename which application?", anything)
74
+ mock_ask("New name") { new_name }
75
+ mock(renamed_app).name=(new_name)
76
+ mock(renamed_app).update!
77
+ subject
78
+ end
79
+ end
80
+
81
+ context 'when an app is provided and a name' do
82
+ let(:inputs) { { :app => renamed_app, :name => new_name } }
83
+
84
+ it 'renames the app' do
85
+ mock(renamed_app).update!
86
+ subject
87
+ end
88
+
89
+ it 'displays the progress' do
90
+ mock_with_progress("Renaming to #{new_name}")
91
+ mock(renamed_app).update!
92
+
93
+ subject
94
+ end
95
+
96
+ context 'and the name already exists' do
97
+ it 'fails' do
98
+ mock(renamed_app).update! { raise CFoundry::AppNameTaken.new("Bad Name", 404) }
99
+ expect { subject }.to raise_error(CFoundry::AppNameTaken)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,76 @@
1
+ require "spec_helper"
2
+ require "webmock/rspec"
3
+
4
+ command VMC::App::Scale do
5
+ let(:client) { fake_client :apps => [app] }
6
+
7
+ context "when the --disk flag is given" do
8
+ let(:before_value) { 512 }
9
+ let(:app) { fake :app, :disk_quota => before_value }
10
+
11
+ subject { vmc %W[scale #{app.name} --disk 1G] }
12
+
13
+ it "changes the application's disk quota" do
14
+ mock(app).update!
15
+ expect { subject }.to change(app, :disk_quota).from(before_value).to(1024)
16
+ end
17
+ end
18
+
19
+ context "when the --memory flag is given" do
20
+ let(:before_value) { 512 }
21
+ let(:app) { fake :app, :memory => before_value }
22
+
23
+ subject { vmc %W[scale #{app.name} --memory 1G] }
24
+
25
+ it "changes the application's memory" do
26
+ mock(app).update!
27
+ expect { subject }.to change(app, :memory).from(before_value).to(1024)
28
+ end
29
+
30
+ # TODO: determine if the command should do this on v2
31
+ context "if --restart is true" do
32
+ it "restarts the application" do
33
+ stub(app).update!
34
+ stub(app).started? { true }
35
+ mock_invoke :restart, :app => app
36
+ subject
37
+ end
38
+ end
39
+ end
40
+
41
+ context "when the --instances flag is given" do
42
+ let(:before_value) { 3 }
43
+ let(:app) { fake :app, :total_instances => before_value }
44
+
45
+ subject { vmc %W[scale #{app.name} --instances 5] }
46
+
47
+ it "changes the application's number of instances" do
48
+ mock(app).update!
49
+ expect { subject }.to change(app, :total_instances).from(before_value).to(5)
50
+ end
51
+ end
52
+
53
+ context "when the --plan flag is given" do
54
+ context "when the plan name begins with a 'p'" do
55
+ let(:app) { fake :app, :production => false }
56
+
57
+ subject { vmc %W[scale #{app.name} --plan P100] }
58
+
59
+ it "changes the application's 'production' flag to true" do
60
+ mock(app).update!
61
+ expect { subject }.to change(app, :production).from(false).to(true)
62
+ end
63
+ end
64
+
65
+ context "when the plan name does not begin with a 'p'" do
66
+ let(:app) { fake :app, :production => true }
67
+
68
+ subject { vmc %W[scale #{app.name} --plan D100] }
69
+
70
+ it "changes the application's 'production' flag to false" do
71
+ mock(app).update!
72
+ expect { subject }.to change(app, :production).from(true).to(false)
73
+ end
74
+ end
75
+ end
76
+ end