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,363 @@
1
+ require "cfoundry/upload_helpers"
2
+ require "cfoundry/chatty_hash"
3
+
4
+ require "cfoundry/v1/model"
5
+
6
+ module CFoundry::V1
7
+ class App < Model
8
+ include CFoundry::UploadHelpers
9
+
10
+ attribute :name, :string, :guid => true
11
+ attribute :instances, :integer
12
+ attribute :state, :string
13
+ attribute :created, :integer, :at => [:meta, :created], :read_only => true
14
+ attribute :version, :integer, :at => [:meta, :version], :read_only => true
15
+ attribute :framework, :string, :at => [:staging, :model]
16
+ attribute :runtime, :string, :at => [:staging, :stack]
17
+ attribute :command, :string, :at => [:staging, :command]
18
+ attribute :memory, :integer, :at => [:resources, :memory]
19
+ attribute :disk, :integer, :at => [:resources, :disk]
20
+ attribute :fds, :integer, :at => [:resources, :fds]
21
+ attribute :env, [:string], :default => []
22
+ attribute :uris, [:string], :default => []
23
+ attribute :services, [:string], :default => []
24
+
25
+ attribute :console, :boolean, :default => false,
26
+ :read => [:meta, :console], :write => :console
27
+
28
+ attribute :debug, :string, :default => nil, :read => [:meta, :debug],
29
+ :write => :debug
30
+
31
+ attribute :running_instances, :integer, :read => :runningInstances,
32
+ :read_only => true
33
+
34
+
35
+ define_client_methods
36
+
37
+
38
+ alias_method :total_instances, :instances
39
+ alias_method :total_instances=, :instances=
40
+
41
+ alias_method :debug_mode, :debug
42
+ alias_method :debug_mode=, :debug=
43
+
44
+ alias_method :framework_name, :framework
45
+ alias_method :framework_name=, :framework=
46
+
47
+ alias_method :runtime_name, :runtime
48
+ alias_method :runtime_name=, :runtime=
49
+
50
+ alias_method :service_names, :services
51
+ alias_method :service_names=, :services=
52
+
53
+ alias_method :status, :state
54
+ alias_method :status=, :state=
55
+
56
+ alias_method :urls, :uris
57
+ alias_method :urls=, :uris=
58
+
59
+ alias_method :env_array, :env
60
+ alias_method :env_array=, :env=
61
+
62
+ def framework
63
+ @client.framework(framework_name)
64
+ end
65
+
66
+ def framework=(obj)
67
+ set_named(:framework, obj)
68
+ end
69
+
70
+ def runtime
71
+ @client.runtime(runtime_name)
72
+ end
73
+
74
+ def runtime=(obj)
75
+ set_named(:runtime, obj)
76
+ end
77
+
78
+ def services
79
+ service_names.collect { |name| @client.service_instance(name) }
80
+ end
81
+
82
+ def services=(objs)
83
+ set_many_named(:service, objs)
84
+ end
85
+
86
+
87
+ # Retrieve all of the instances of the app, as Instance objects.
88
+ def instances
89
+ @client.base.instances(@guid).collect do |m|
90
+ Instance.new(self, m[:index].to_s, @client, m)
91
+ end
92
+ end
93
+
94
+ # Retrieve crashed instances
95
+ def crashes
96
+ @client.base.crashes(@guid).collect do |i|
97
+ Instance.new(self, i[:instance].to_s, @client, i)
98
+ end
99
+ end
100
+
101
+ # Retrieve application statistics, e.g. CPU load and memory usage.
102
+ def stats
103
+ stats = {}
104
+
105
+ @client.base.stats(@guid).each do |idx, info|
106
+ stats[idx.to_s] = info
107
+ end
108
+
109
+ stats
110
+ end
111
+
112
+ # Stop the application.
113
+ def stop!
114
+ self.state = "STOPPED"
115
+ update!
116
+ end
117
+
118
+ # Start the application.
119
+ def start!(async = false)
120
+ self.state = "STARTED"
121
+ update!
122
+ end
123
+
124
+ # Restart the application.
125
+ def restart!(async = false)
126
+ stop!
127
+ start!
128
+ end
129
+
130
+ def update!(async = false)
131
+ super()
132
+ end
133
+
134
+ # Determine application health.
135
+ #
136
+ # If all instances are running, returns "RUNNING". If only some are
137
+ # started, returns the precentage of them that are healthy.
138
+ #
139
+ # Otherwise, returns application's status.
140
+ def health
141
+ s = state
142
+ if s == "STARTED"
143
+ healthy_count = running_instances
144
+ expected = total_instances
145
+
146
+ if healthy_count && expected > 0
147
+ ratio = healthy_count / expected.to_f
148
+ if ratio == 1.0
149
+ "RUNNING"
150
+ else
151
+ "#{(ratio * 100).to_i}%"
152
+ end
153
+ else
154
+ "N/A"
155
+ end
156
+ else
157
+ s
158
+ end
159
+ end
160
+
161
+ # Check that all application instances are running.
162
+ def healthy?
163
+ # invalidate cache so the check is fresh
164
+ invalidate!
165
+ health == "RUNNING"
166
+ end
167
+ alias_method :running?, :healthy?
168
+
169
+ # Is the application stopped?
170
+ def stopped?
171
+ state == "STOPPED"
172
+ end
173
+
174
+ # Is the application started?
175
+ #
176
+ # Note that this does not imply that all instances are running. See
177
+ # #healthy?
178
+ def started?
179
+ state == "STARTED"
180
+ end
181
+
182
+
183
+ # Shortcut for uris[0]
184
+ def uri
185
+ uris[0]
186
+ end
187
+
188
+ # Shortcut for uris = [x]
189
+ def uri=(x)
190
+ self.uris = [x]
191
+ end
192
+
193
+ alias_method :url, :uri
194
+ alias_method :url=, :uri=
195
+
196
+ def env
197
+ e = env_array || []
198
+
199
+ env = {}
200
+ e.each do |pair|
201
+ name, val = pair.split("=", 2)
202
+ env[name] = val
203
+ end
204
+
205
+ CFoundry::ChattyHash.new(method(:env=), env)
206
+ end
207
+
208
+ def env=(hash)
209
+ unless hash.is_a?(Array)
210
+ hash = hash.collect { |k, v| "#{k}=#{v}" }
211
+ end
212
+
213
+ self.env_array = hash
214
+ end
215
+
216
+ def services
217
+ service_names.collect do |name|
218
+ @client.service_instance(name)
219
+ end
220
+ end
221
+
222
+ def services=(instances)
223
+ self.service_names = instances.collect(&:name)
224
+ end
225
+
226
+
227
+ # Bind services to application.
228
+ def bind(*instances)
229
+ self.services += instances
230
+ update!
231
+ end
232
+
233
+ # Unbind services from application.
234
+ def unbind(*instances)
235
+ self.services -= instances
236
+ update!
237
+ end
238
+
239
+ def binds?(instance)
240
+ services.include? instance
241
+ end
242
+
243
+ # Retrieve file listing under path for the first instance of the application.
244
+ #
245
+ # [path]
246
+ # A sequence of strings representing path segments.
247
+ #
248
+ # For example, <code>files("foo", "bar")</code> for +foo/bar+.
249
+ def files(*path)
250
+ Instance.new(self, "0", @client).files(*path)
251
+ end
252
+
253
+ # Retrieve file contents for the first instance of the application.
254
+ #
255
+ # [path]
256
+ # A sequence of strings representing path segments.
257
+ #
258
+ # For example, <code>files("foo", "bar")</code> for +foo/bar+.
259
+ def file(*path)
260
+ Instance.new(self, "0", @client).file(*path)
261
+ end
262
+
263
+ private
264
+
265
+ def set_named(attr, val)
266
+ res = send(:"#{attr}_name=", val.name)
267
+
268
+ if @changes.key?(attr)
269
+ old, new = @changes[attr]
270
+ @changes[attr] = [@client.send(attr, old), val]
271
+ end
272
+
273
+ res
274
+ end
275
+
276
+ def set_many_named(attr, vals)
277
+ res = send(:"#{attr}_names=", val.collect(&:name))
278
+
279
+ if @changes.key?(attr)
280
+ old, new = @changes[attr]
281
+ @changes[attr] = [old.collect { |o| @client.send(attr, o) }, vals]
282
+ end
283
+
284
+ vals
285
+ end
286
+
287
+ # Class represnting a running instance of an application.
288
+ class Instance
289
+ # The application this instance belongs to.
290
+ attr_reader :app
291
+
292
+ # Application instance number.
293
+ attr_reader :id
294
+
295
+ # Create an Instance object.
296
+ #
297
+ # You'll usually call App#instances instead
298
+ def initialize(app, id, client, manifest = {})
299
+ @app = app
300
+ @id = id
301
+ @client = client
302
+ @manifest = manifest
303
+ end
304
+
305
+ # Show string representing the application instance.
306
+ def inspect
307
+ "#<App::Instance '#{@app.name}' \##@id>"
308
+ end
309
+
310
+ # Instance state.
311
+ def state
312
+ @manifest[:state]
313
+ end
314
+ alias_method :status, :state
315
+
316
+ # Instance start time.
317
+ def since
318
+ Time.at(@manifest[:since])
319
+ end
320
+
321
+ # Instance debugger data. If instance is in debug mode, returns a hash
322
+ # containing :ip and :port keys.
323
+ def debugger
324
+ return unless @manifest[:debug_ip] and @manifest[:debug_port]
325
+
326
+ { :ip => @manifest[:debug_ip],
327
+ :port => @manifest[:debug_port]
328
+ }
329
+ end
330
+
331
+ # Instance console data. If instance has a console, returns a hash
332
+ # containing :ip and :port keys.
333
+ def console
334
+ return unless @manifest[:console_ip] and @manifest[:console_port]
335
+
336
+ { :ip => @manifest[:console_ip],
337
+ :port => @manifest[:console_port]
338
+ }
339
+ end
340
+
341
+ # True if instance is starting or running, false if it's down or
342
+ # flapping.
343
+ def healthy?
344
+ case state
345
+ when "STARTING", "RUNNING"
346
+ true
347
+ when "DOWN", "FLAPPING"
348
+ false
349
+ end
350
+ end
351
+
352
+ def files(*path)
353
+ @client.base.files(@app.name, @id, *path).split("\n").collect do |entry|
354
+ path + [entry.split(/\s+/, 2)[0]]
355
+ end
356
+ end
357
+
358
+ def file(*path)
359
+ @client.base.files(@app.name, @id, *path)
360
+ end
361
+ end
362
+ end
363
+ end
@@ -0,0 +1,71 @@
1
+ require "multi_json"
2
+
3
+ require "cfoundry/baseclient"
4
+ require "cfoundry/uaaclient"
5
+
6
+ require "cfoundry/errors"
7
+
8
+ module CFoundry::V1
9
+ class Base < CFoundry::BaseClient
10
+ include BaseClientMethods
11
+
12
+ def system_services
13
+ get("services", "v1", "offerings", :content => :json, :accept => :json)
14
+ end
15
+
16
+ def system_runtimes
17
+ get("info", "runtimes", :accept => :json)
18
+ end
19
+
20
+ # Users
21
+ def create_user(payload)
22
+ # no JSON response
23
+ post("users", :content => :json, :payload => payload)
24
+ end
25
+
26
+ def create_token(payload, email)
27
+ post("users", email, "tokens", :content => :json, :accept => :json, :payload => payload)
28
+ end
29
+
30
+ # Applications
31
+ def instances(name)
32
+ get("apps", name, "instances", :accept => :json)[:instances]
33
+ end
34
+
35
+ def crashes(name)
36
+ get("apps", name, "crashes", :accept => :json)[:crashes]
37
+ end
38
+
39
+ def files(name, instance, *path)
40
+ get("apps", name, "instances", instance, "files", *path)
41
+ end
42
+ alias :file :files
43
+
44
+ def stats(name)
45
+ get("apps", name, "stats", :accept => :json)
46
+ end
47
+
48
+ def resource_match(fingerprints)
49
+ post("resources", :content => :json, :accept => :json, :payload => fingerprints)
50
+ end
51
+
52
+ def upload_app(name, zipfile = nil, resources = [])
53
+ payload = {
54
+ :_method => "put",
55
+ :resources => MultiJson.dump(resources),
56
+ :application =>
57
+ UploadIO.new(
58
+ if zipfile.is_a? File
59
+ zipfile
60
+ elsif zipfile.is_a? String
61
+ File.new(zipfile, "rb")
62
+ end,
63
+ "application/zip")
64
+ }
65
+
66
+ post("apps", name, "application", :payload => payload)
67
+ rescue EOFError
68
+ retry
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,193 @@
1
+ require File.expand_path("../../concerns/login_helpers", __FILE__)
2
+
3
+ module CFoundry::V1
4
+ # The primary API entrypoint. Wraps a BaseClient to provide nicer return
5
+ # values. Initialize with the target and, optionally, an auth token. These
6
+ # are the only two internal states.
7
+ class Client
8
+ include ClientMethods, CFoundry::LoginHelpers
9
+
10
+ attr_reader :base
11
+
12
+ # Create a new Client for interfacing with the given target.
13
+ #
14
+ # A token may also be provided to skip the login step.
15
+ def initialize(target = "http://api.cloudfoundry.com", token = nil)
16
+ @base = Base.new(target, token)
17
+ end
18
+
19
+ def version
20
+ 1
21
+ end
22
+
23
+ # The current target URL of the client.
24
+ def target
25
+ @base.target
26
+ end
27
+
28
+ # Current authentication token.
29
+ def token
30
+ @base.token
31
+ end
32
+
33
+ # Set the authentication token.
34
+ def token=(token)
35
+ @base.token = token
36
+ end
37
+
38
+ # Current proxy user. Usually nil.
39
+ def proxy
40
+ @base.proxy
41
+ end
42
+
43
+ # Set the proxy user for the client. Must be authorized as an
44
+ # administrator for this to have any effect.
45
+ def proxy=(email)
46
+ @base.proxy = email
47
+ end
48
+
49
+ # Is the client tracing API requests?
50
+ def trace
51
+ @base.trace
52
+ end
53
+
54
+ # Set the tracing flag; if true, API requests and responses will be
55
+ # printed out.
56
+ def trace=(bool)
57
+ @base.trace = bool
58
+ end
59
+
60
+ # The current log. See +log=+.
61
+ def log
62
+ @base.log
63
+ end
64
+
65
+ # Set the logging mode. Mode can be one of:
66
+ #
67
+ # [+String+] Name of a file to log the last 10 requests to.
68
+ # [+Array+] Array to append with log data (a Hash).
69
+ # [+IO+] An IO object to write to.
70
+ # [+false+] No logging.
71
+ def log=(mode)
72
+ @base.log = mode
73
+ end
74
+
75
+ # The currently authenticated user.
76
+ def current_user
77
+ if user = info[:user]
78
+ user(user)
79
+ end
80
+ end
81
+
82
+ def current_space
83
+ nil
84
+ end
85
+
86
+ def current_organization
87
+ nil
88
+ end
89
+
90
+
91
+ # Retrieve target metadata.
92
+ def info
93
+ @base.info
94
+ end
95
+
96
+ # Retrieve available services.
97
+ def services(options = {})
98
+ services = []
99
+
100
+ @base.system_services.each do |type, vendors|
101
+ vendors.each do |vendor, providers|
102
+ providers.each do |provider, properties|
103
+ properties.each do |_, meta|
104
+ meta[:supported_versions].each do |ver|
105
+ state = meta[:version_aliases].find { |k, v| v == ver }
106
+
107
+ services <<
108
+ Service.new(vendor.to_s, ver.to_s, meta[:description],
109
+ type.to_s, provider.to_s, state && state.first,
110
+ generate_plans(meta))
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ services
118
+ end
119
+
120
+ def generate_plans(meta)
121
+ names = meta[:plans]
122
+ descriptions = meta[:plan_descriptions]
123
+ default_name = meta[:default_plan]
124
+ names.map { |name|
125
+ description = descriptions[name.to_sym] if descriptions
126
+ is_default = name == default_name || names.length == 1
127
+ ServicePlan.new(name, description, is_default)
128
+ }
129
+ end
130
+
131
+ # Retrieve available runtimes.
132
+ def runtimes(options = {})
133
+ runtimes = []
134
+
135
+ @base.system_runtimes.each do |name, meta|
136
+ runtimes <<
137
+ Runtime.new(name.to_s, meta[:version], meta[:debug_modes])
138
+ end
139
+
140
+ runtimes
141
+ end
142
+
143
+ def runtime(name)
144
+ Runtime.new(name)
145
+ end
146
+
147
+ def runtime_by_name(name)
148
+ runtimes.find { |r| r.name == name }
149
+ end
150
+
151
+ # Retrieve available frameworks.
152
+ def frameworks(options = {})
153
+ fs = info[:frameworks]
154
+ return unless fs
155
+
156
+ frameworks = []
157
+ fs.each do |name, meta|
158
+ runtimes = meta[:runtimes].collect do |r|
159
+ Runtime.new(r[:name], r[:description])
160
+ end
161
+
162
+ frameworks <<
163
+ Framework.new(name.to_s, nil, runtimes, meta[:detection])
164
+ end
165
+
166
+ frameworks
167
+ end
168
+
169
+ def framework(name)
170
+ Framework.new(name)
171
+ end
172
+
173
+ def framework_by_name(name)
174
+ frameworks.find { |f| f.name == name }
175
+ end
176
+
177
+ # Create a user on the target and return a User object representing them.
178
+ def register(email, password)
179
+ @base.create_user(:email => email, :password => password)
180
+ user(email)
181
+ end
182
+
183
+ # Clear client token. No requests are made for this.
184
+ def logout
185
+ @base.token = nil
186
+ end
187
+
188
+ # Is an authentication token set on the client?
189
+ def logged_in?
190
+ !!@base.token
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,21 @@
1
+ module CFoundry::V1
2
+ class Framework
3
+ attr_accessor :name, :description, :runtimes, :detection
4
+
5
+ def initialize(name, description = nil, runtimes = [], detection = nil)
6
+ @name = name
7
+ @description = description
8
+ @runtimes = runtimes
9
+ @detection = detection
10
+ end
11
+
12
+ def eql?(other)
13
+ other.is_a?(self.class) && other.name == @name
14
+ end
15
+ alias :== :eql?
16
+
17
+ def apps
18
+ [] # not supported by v1
19
+ end
20
+ end
21
+ end