nucleus 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitattributes +1 -0
- data/.gitignore +19 -0
- data/.rspec +3 -0
- data/.rubocop.yml +44 -0
- data/.travis.yml +21 -0
- data/CHANGELOG.md +19 -0
- data/CONTRIBUTING.md +13 -0
- data/Gemfile +16 -0
- data/Guardfile +22 -0
- data/LICENSE +21 -0
- data/README.md +675 -0
- data/Rakefile +137 -0
- data/bin/nucleus +91 -0
- data/bin/nucleus.bat +1 -0
- data/config.ru +18 -0
- data/config/adapters/cloud_control.yml +32 -0
- data/config/adapters/cloud_foundry_v2.yml +61 -0
- data/config/adapters/heroku.yml +13 -0
- data/config/adapters/openshift_v2.yml +20 -0
- data/config/nucleus_config.rb +47 -0
- data/lib/nucleus.rb +13 -0
- data/lib/nucleus/adapter_resolver.rb +115 -0
- data/lib/nucleus/adapters/base_adapter.rb +109 -0
- data/lib/nucleus/adapters/buildpack_translator.rb +79 -0
- data/lib/nucleus/adapters/v1/cloud_control/application.rb +108 -0
- data/lib/nucleus/adapters/v1/cloud_control/authentication.rb +27 -0
- data/lib/nucleus/adapters/v1/cloud_control/buildpacks.rb +23 -0
- data/lib/nucleus/adapters/v1/cloud_control/cloud_control.rb +153 -0
- data/lib/nucleus/adapters/v1/cloud_control/data.rb +76 -0
- data/lib/nucleus/adapters/v1/cloud_control/domains.rb +68 -0
- data/lib/nucleus/adapters/v1/cloud_control/lifecycle.rb +27 -0
- data/lib/nucleus/adapters/v1/cloud_control/log_poller.rb +71 -0
- data/lib/nucleus/adapters/v1/cloud_control/logs.rb +103 -0
- data/lib/nucleus/adapters/v1/cloud_control/regions.rb +32 -0
- data/lib/nucleus/adapters/v1/cloud_control/scaling.rb +17 -0
- data/lib/nucleus/adapters/v1/cloud_control/semantic_errors.rb +31 -0
- data/lib/nucleus/adapters/v1/cloud_control/services.rb +162 -0
- data/lib/nucleus/adapters/v1/cloud_control/token.rb +17 -0
- data/lib/nucleus/adapters/v1/cloud_control/vars.rb +88 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/app_states.rb +28 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/application.rb +111 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/authentication.rb +17 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/buildpacks.rb +23 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/cloud_foundry_v2.rb +141 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/data.rb +97 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/domains.rb +149 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/lifecycle.rb +41 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/logs.rb +303 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/regions.rb +33 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/scaling.rb +15 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/semantic_errors.rb +27 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/services.rb +286 -0
- data/lib/nucleus/adapters/v1/cloud_foundry_v2/vars.rb +80 -0
- data/lib/nucleus/adapters/v1/heroku/app_states.rb +57 -0
- data/lib/nucleus/adapters/v1/heroku/application.rb +93 -0
- data/lib/nucleus/adapters/v1/heroku/authentication.rb +27 -0
- data/lib/nucleus/adapters/v1/heroku/buildpacks.rb +27 -0
- data/lib/nucleus/adapters/v1/heroku/data.rb +78 -0
- data/lib/nucleus/adapters/v1/heroku/domains.rb +43 -0
- data/lib/nucleus/adapters/v1/heroku/heroku.rb +146 -0
- data/lib/nucleus/adapters/v1/heroku/lifecycle.rb +51 -0
- data/lib/nucleus/adapters/v1/heroku/logs.rb +108 -0
- data/lib/nucleus/adapters/v1/heroku/regions.rb +42 -0
- data/lib/nucleus/adapters/v1/heroku/scaling.rb +28 -0
- data/lib/nucleus/adapters/v1/heroku/semantic_errors.rb +23 -0
- data/lib/nucleus/adapters/v1/heroku/services.rb +168 -0
- data/lib/nucleus/adapters/v1/heroku/vars.rb +65 -0
- data/lib/nucleus/adapters/v1/openshift_v2/app_states.rb +68 -0
- data/lib/nucleus/adapters/v1/openshift_v2/application.rb +108 -0
- data/lib/nucleus/adapters/v1/openshift_v2/authentication.rb +21 -0
- data/lib/nucleus/adapters/v1/openshift_v2/data.rb +96 -0
- data/lib/nucleus/adapters/v1/openshift_v2/domains.rb +37 -0
- data/lib/nucleus/adapters/v1/openshift_v2/lifecycle.rb +60 -0
- data/lib/nucleus/adapters/v1/openshift_v2/logs.rb +106 -0
- data/lib/nucleus/adapters/v1/openshift_v2/openshift_v2.rb +125 -0
- data/lib/nucleus/adapters/v1/openshift_v2/regions.rb +58 -0
- data/lib/nucleus/adapters/v1/openshift_v2/scaling.rb +39 -0
- data/lib/nucleus/adapters/v1/openshift_v2/semantic_errors.rb +40 -0
- data/lib/nucleus/adapters/v1/openshift_v2/services.rb +173 -0
- data/lib/nucleus/adapters/v1/openshift_v2/vars.rb +49 -0
- data/lib/nucleus/adapters/v1/stub_adapter.rb +464 -0
- data/lib/nucleus/core/adapter_authentication_inductor.rb +62 -0
- data/lib/nucleus/core/adapter_extensions/auth/auth_client.rb +44 -0
- data/lib/nucleus/core/adapter_extensions/auth/authentication_retry_wrapper.rb +79 -0
- data/lib/nucleus/core/adapter_extensions/auth/expiring_token_auth_client.rb +53 -0
- data/lib/nucleus/core/adapter_extensions/auth/http_basic_auth_client.rb +37 -0
- data/lib/nucleus/core/adapter_extensions/auth/o_auth2_auth_client.rb +95 -0
- data/lib/nucleus/core/adapter_extensions/auth/token_auth_client.rb +36 -0
- data/lib/nucleus/core/adapter_extensions/http_client.rb +177 -0
- data/lib/nucleus/core/adapter_extensions/http_tail_client.rb +26 -0
- data/lib/nucleus/core/adapter_extensions/tail_stopper.rb +25 -0
- data/lib/nucleus/core/common/errors/ambiguous_adapter_error.rb +7 -0
- data/lib/nucleus/core/common/errors/file_existence_error.rb +7 -0
- data/lib/nucleus/core/common/errors/startup_error.rb +12 -0
- data/lib/nucleus/core/common/exit_codes.rb +25 -0
- data/lib/nucleus/core/common/files/application_repo_sanitizer.rb +52 -0
- data/lib/nucleus/core/common/files/archive_extractor.rb +112 -0
- data/lib/nucleus/core/common/files/archiver.rb +91 -0
- data/lib/nucleus/core/common/link_generator.rb +46 -0
- data/lib/nucleus/core/common/logging/logging.rb +52 -0
- data/lib/nucleus/core/common/logging/multi_logger.rb +59 -0
- data/lib/nucleus/core/common/logging/request_log_formatter.rb +48 -0
- data/lib/nucleus/core/common/ssh_handler.rb +108 -0
- data/lib/nucleus/core/common/stream_callback.rb +27 -0
- data/lib/nucleus/core/common/thread_config_accessor.rb +85 -0
- data/lib/nucleus/core/common/url_converter.rb +28 -0
- data/lib/nucleus/core/enums/application_states.rb +26 -0
- data/lib/nucleus/core/enums/logfile_types.rb +28 -0
- data/lib/nucleus/core/error_messages.rb +127 -0
- data/lib/nucleus/core/errors/adapter_error.rb +13 -0
- data/lib/nucleus/core/errors/adapter_missing_implementation_error.rb +12 -0
- data/lib/nucleus/core/errors/adapter_request_error.rb +10 -0
- data/lib/nucleus/core/errors/adapter_resource_not_found_error.rb +10 -0
- data/lib/nucleus/core/errors/endpoint_authentication_error.rb +10 -0
- data/lib/nucleus/core/errors/platform_specific_semantic_error.rb +12 -0
- data/lib/nucleus/core/errors/platform_timeout_error.rb +10 -0
- data/lib/nucleus/core/errors/platform_unavailable_error.rb +10 -0
- data/lib/nucleus/core/errors/semantic_adapter_request_error.rb +19 -0
- data/lib/nucleus/core/errors/unknown_adapter_call_error.rb +10 -0
- data/lib/nucleus/core/file_handling/archive_converter.rb +29 -0
- data/lib/nucleus/core/file_handling/file_manager.rb +64 -0
- data/lib/nucleus/core/file_handling/git_deployer.rb +133 -0
- data/lib/nucleus/core/file_handling/git_repo_analyzer.rb +23 -0
- data/lib/nucleus/core/import/adapter_configuration.rb +53 -0
- data/lib/nucleus/core/import/vendor_parser.rb +28 -0
- data/lib/nucleus/core/import/version_detector.rb +18 -0
- data/lib/nucleus/core/models/abstract_model.rb +29 -0
- data/lib/nucleus/core/models/endpoint.rb +30 -0
- data/lib/nucleus/core/models/provider.rb +26 -0
- data/lib/nucleus/core/models/vendor.rb +22 -0
- data/lib/nucleus/ext/kernel.rb +5 -0
- data/lib/nucleus/ext/regexp.rb +49 -0
- data/lib/nucleus/os.rb +15 -0
- data/lib/nucleus/root_dir.rb +13 -0
- data/lib/nucleus/scripts/finalize.rb +8 -0
- data/lib/nucleus/scripts/initialize.rb +9 -0
- data/lib/nucleus/scripts/initialize_config_defaults.rb +26 -0
- data/lib/nucleus/scripts/load.rb +17 -0
- data/lib/nucleus/scripts/load_dependencies.rb +43 -0
- data/lib/nucleus/scripts/setup_config.rb +28 -0
- data/lib/nucleus/scripts/shutdown.rb +11 -0
- data/lib/nucleus/version.rb +3 -0
- data/nucleus.gemspec +88 -0
- data/public/robots.txt +2 -0
- data/public/swagger-ui/css/reset.css +125 -0
- data/public/swagger-ui/css/screen.css +1224 -0
- data/public/swagger-ui/images/apple-touch-icon-114x114.png +0 -0
- data/public/swagger-ui/images/apple-touch-icon-120x120.png +0 -0
- data/public/swagger-ui/images/apple-touch-icon-144x144.png +0 -0
- data/public/swagger-ui/images/apple-touch-icon-152x152.png +0 -0
- data/public/swagger-ui/images/apple-touch-icon-57x57.png +0 -0
- data/public/swagger-ui/images/apple-touch-icon-60x60.png +0 -0
- data/public/swagger-ui/images/apple-touch-icon-72x72.png +0 -0
- data/public/swagger-ui/images/apple-touch-icon-76x76.png +0 -0
- data/public/swagger-ui/images/explorer_icons.png +0 -0
- data/public/swagger-ui/images/favicon-128.png +0 -0
- data/public/swagger-ui/images/favicon-16x16.png +0 -0
- data/public/swagger-ui/images/favicon-196x196.png +0 -0
- data/public/swagger-ui/images/favicon-32x32.png +0 -0
- data/public/swagger-ui/images/favicon-96x96.png +0 -0
- data/public/swagger-ui/images/favicon.ico +0 -0
- data/public/swagger-ui/images/logo_small.png +0 -0
- data/public/swagger-ui/images/mstile-144x144.png +0 -0
- data/public/swagger-ui/images/mstile-150x150.png +0 -0
- data/public/swagger-ui/images/mstile-310x150.png +0 -0
- data/public/swagger-ui/images/mstile-310x310.png +0 -0
- data/public/swagger-ui/images/mstile-70x70.png +0 -0
- data/public/swagger-ui/images/pet_store_api.png +0 -0
- data/public/swagger-ui/images/throbber.gif +0 -0
- data/public/swagger-ui/images/wordnik_api.png +0 -0
- data/public/swagger-ui/index.html +107 -0
- data/public/swagger-ui/lib/backbone-min.js +38 -0
- data/public/swagger-ui/lib/handlebars-1.0.0.js +2278 -0
- data/public/swagger-ui/lib/highlight.7.3.pack.js +1 -0
- data/public/swagger-ui/lib/jquery-1.8.0.min.js +2 -0
- data/public/swagger-ui/lib/jquery.ba-bbq.min.js +18 -0
- data/public/swagger-ui/lib/jquery.slideto.min.js +1 -0
- data/public/swagger-ui/lib/jquery.wiggle.min.js +8 -0
- data/public/swagger-ui/lib/shred.bundle.js +2765 -0
- data/public/swagger-ui/lib/shred/content.js +193 -0
- data/public/swagger-ui/lib/swagger-oauth.js +211 -0
- data/public/swagger-ui/lib/swagger.js +1653 -0
- data/public/swagger-ui/lib/underscore-min.js +32 -0
- data/public/swagger-ui/o2c.html +15 -0
- data/public/swagger-ui/redirect.html +14 -0
- data/public/swagger-ui/swagger-ui.js +2324 -0
- data/public/swagger-ui/swagger-ui.min.js +1 -0
- data/schemas/api.adapter.schema.yml +31 -0
- data/schemas/api.requirements.schema.yml +17 -0
- data/spec/factories/models.rb +61 -0
- data/spec/integration/api/auth_spec.rb +58 -0
- data/spec/integration/api/endpoints_spec.rb +167 -0
- data/spec/integration/api/errors_spec.rb +47 -0
- data/spec/integration/api/providers_spec.rb +157 -0
- data/spec/integration/api/swagger_schema_spec.rb +64 -0
- data/spec/integration/api/vendors_spec.rb +45 -0
- data/spec/integration/integration_spec_helper.rb +27 -0
- data/spec/integration/test_data_generator.rb +55 -0
- data/spec/nucleus_git_key.pem +51 -0
- data/spec/spec_helper.rb +98 -0
- data/spec/support/shared_example_request_types.rb +99 -0
- data/spec/test_suites.rake +31 -0
- data/spec/unit/adapters/archive_converter_spec.rb +25 -0
- data/spec/unit/adapters/file_manager_spec.rb +93 -0
- data/spec/unit/adapters/git_deployer_spec.rb +262 -0
- data/spec/unit/adapters/v1/stub_spec.rb +14 -0
- data/spec/unit/common/helpers/auth_helper_spec.rb +73 -0
- data/spec/unit/common/oauth2_auth_client_spec.rb +108 -0
- data/spec/unit/common/regexp_spec.rb +33 -0
- data/spec/unit/common/request_log_formatter_spec.rb +108 -0
- data/spec/unit/common/thread_config_accessor_spec.rb +97 -0
- data/spec/unit/models/endpoint_spec.rb +83 -0
- data/spec/unit/models/provider_spec.rb +102 -0
- data/spec/unit/models/vendor_spec.rb +100 -0
- data/spec/unit/schemas/adapter_schema_spec.rb +16 -0
- data/spec/unit/schemas/adapter_validation_spec.rb +56 -0
- data/spec/unit/schemas/requirements_schema_spec.rb +16 -0
- data/spec/unit/unit_spec_helper.rb +11 -0
- data/tasks/compatibility.rake +113 -0
- data/tasks/evaluation.rake +162 -0
- data/wiki/adapter_tests.md +99 -0
- data/wiki/implement_new_adapter.md +155 -0
- metadata +836 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
# Adapter Tests
|
2
|
+
|
3
|
+
* [Recording](#recording)
|
4
|
+
* [Missing or invalid VCR recording](#missing-or-invalid-vcr-recording)
|
5
|
+
* [Sensitive data](#sensitive-data)
|
6
|
+
|
7
|
+
The adapter tests rely on previously recorded interactions with the provider's endpoints.
|
8
|
+
They do not invoke external HTTP requests.
|
9
|
+
When code changes result in different requests, the interactions have to be re-recorded.
|
10
|
+
|
11
|
+
```
|
12
|
+
bundle exec rake spec:suite:adapters
|
13
|
+
```
|
14
|
+
|
15
|
+
Each interaction of the adapter tests shall be made only once.
|
16
|
+
If there are further tests that all rely on the same request, the described spec shall be marked with `:as_cassette`.
|
17
|
+
All subsequent tests in this group now use the initial recording.
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
describe 'application services list empty', :as_cassette, cassette_group: 'application-services;list' do
|
21
|
+
before { get "/endpoints/#{@endpoint}/applications/#{@app_all[:updated_name]}/services", request_headers }
|
22
|
+
include_examples 'a valid GET request'
|
23
|
+
include_examples 'installed service list schema'
|
24
|
+
it 'does not contain any services' do
|
25
|
+
expect(json_body[:services]).to eql([])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
The `cassette_group: 'application-services;list'` marker in this example forces the `VCR` cassettes to be placed into a
|
31
|
+
directory structure of `application-services/list/{testname}.rec`.
|
32
|
+
With this structure we can automatically evaluate request differences for a specific operation.
|
33
|
+
|
34
|
+
## Recording
|
35
|
+
|
36
|
+
Recording new VCR cassettes requires a valid user account at the platform that shall be recorded.
|
37
|
+
The `endpoint-id` that will be used during the recording is hard-coded as `@endpoint` variable inside the main adapter test file, e.g. `spec/adapter/v1/heroku/heroku_spec.rb`.
|
38
|
+
The credentials must be specified in the `config/.credentials` file.
|
39
|
+
|
40
|
+
The file is ignored by git and must _never_ be committed. It must use the following syntax:
|
41
|
+
|
42
|
+
```
|
43
|
+
endpoint-id:
|
44
|
+
user: 'my_username'
|
45
|
+
password: 'my_usernames_password'
|
46
|
+
```
|
47
|
+
|
48
|
+
Additional attributes can be used to filter out personal data from the recordings that may be included in the HTTP interactions (see [Sensitive data](#sensitive-data)).
|
49
|
+
A complete .credentials file could then look like:
|
50
|
+
|
51
|
+
```yaml
|
52
|
+
heroku:
|
53
|
+
id: 'my_heroku_user_id'
|
54
|
+
user: 'my_heroku_username'
|
55
|
+
password: 'my_heroku_usernames_password'
|
56
|
+
|
57
|
+
bluemix-eu-gb:
|
58
|
+
user: 'my_bluemix_username'
|
59
|
+
password: 'my_bluemix_usernames_password'
|
60
|
+
username: 'my_bluemix_username_with_encoded_umlauts'
|
61
|
+
|
62
|
+
cloudcontrol:
|
63
|
+
user: 'my_cc_email'
|
64
|
+
password: 'my_cc_usernames_password'
|
65
|
+
username: 'my_cc_username'
|
66
|
+
|
67
|
+
openshift-online:
|
68
|
+
user: 'my_os_email'
|
69
|
+
password: 'my_os_usernames_password'
|
70
|
+
id: 'my_os_user_id'
|
71
|
+
```
|
72
|
+
|
73
|
+
To record the interactions, you only have to call the Rake `record` task:
|
74
|
+
|
75
|
+
```
|
76
|
+
bundle exec rake record
|
77
|
+
```
|
78
|
+
|
79
|
+
To only record interactions for a specific adapter, simply append the adapter name to the record namespace:
|
80
|
+
|
81
|
+
```
|
82
|
+
bundle exec rake record:heroku
|
83
|
+
```
|
84
|
+
|
85
|
+
**Notes:**
|
86
|
+
* You must be allowed to create at least 3 additional applications with your account, otherwise the quota restrictions will invalidate the test results.
|
87
|
+
* A complete recording of a single vendor usually takes 5 up to 15 minutes. Openshift currently takes more than 30 minutes.
|
88
|
+
If you only require a certain functionality to be tested (during development), make sure to comment out irrelevant sections in the `spec/adapter/support/shared_example_adapters_valid.rb` file.
|
89
|
+
* cloudControl requires you to change the application names if the previous recording was made within the last 2 days, otherwise if fails because the name is still locked.
|
90
|
+
Change the name in the `spec/adapter/v1/cloud_control_spec.rb`.
|
91
|
+
|
92
|
+
### Missing or invalid VCR recording
|
93
|
+
|
94
|
+
If the recorded cassette is invalid due to a recent change, tests that use this cassette are going to fail.
|
95
|
+
|
96
|
+
### Sensitive data
|
97
|
+
|
98
|
+
Most of the requests contain sensitive data that we do not want to be included in the recorded cassettes.
|
99
|
+
By implementation, the API tokens and **all** data that is specified in the `config/.credentials` file are filtered.
|
@@ -0,0 +1,155 @@
|
|
1
|
+
# How to implement a new adapter
|
2
|
+
|
3
|
+
In total, the process can be grouped into X steps.
|
4
|
+
To prevent errors, they should be executed in the following order:
|
5
|
+
|
6
|
+
* [Add the vendor to the configuration](#add-the-vendor-to-the-configuration)
|
7
|
+
* [Create the adapter implementation files](#create-the-adapter-implementation-files)
|
8
|
+
* [Implementation](#implementation)
|
9
|
+
|
10
|
+
## Add the vendor to the configuration
|
11
|
+
|
12
|
+
Open the directory `config/adapters` and create a new `.yml` configuration file for your platform:
|
13
|
+
|
14
|
+
```yaml
|
15
|
+
---
|
16
|
+
name: "Openshift 2"
|
17
|
+
id: "openshift_v2"
|
18
|
+
providers:
|
19
|
+
-
|
20
|
+
name: "Openshift Online"
|
21
|
+
id: "openshift-online"
|
22
|
+
endpoints:
|
23
|
+
-
|
24
|
+
name: "Openshift Online"
|
25
|
+
id: "openshift-online"
|
26
|
+
url: "openshift.redhat.com/broker/rest"
|
27
|
+
```
|
28
|
+
|
29
|
+
The first level entry describes the vendor (here: Openshift 2).
|
30
|
+
**name:** The actual name of the vendor or his platform. Serves as description.
|
31
|
+
**id:** The ID under which the vendor will be available for use in the API. Should be URI compatible!
|
32
|
+
Different platform versions shall be distinguished by appending `_v{version}` to the *ID*.
|
33
|
+
|
34
|
+
The second level are the providers that shall be known to serve a PaaS running the vendors platform.
|
35
|
+
**name:** The actual name of the provider, which often equals to the vendor. Serves as description.
|
36
|
+
**id:** The ID under which the provider will be available for use in the API. Should be URI compatible!
|
37
|
+
|
38
|
+
The third level describes all API endpoints.
|
39
|
+
**name:** The actual name of the endpoint, which often equals to the provider. Serves as description.
|
40
|
+
**id:** The ID under which the endpoint will be available for use in the API. Should be URI compatible!
|
41
|
+
|
42
|
+
**NOTE:** Providers and Endpoints are optional as they could be added during runtime.
|
43
|
+
|
44
|
+
## Create the adapter implementation files
|
45
|
+
|
46
|
+
Start by selecting the API version you want to implement the adapter for.
|
47
|
+
Next, create a copy of the `app/adapters/{API_VERSION}/stub_adapter.rb` matching the API version.
|
48
|
+
The pasted file must (!) be copied to `app/adapters/{API_VERSION}/{vendor_id}/{vendor_id}.rb`.
|
49
|
+
Please make sure that the `{vendor_id}` actually is equal to the **ID** that was assigned to the vendor in the `.yml` configuration file.
|
50
|
+
|
51
|
+
Open the new adapter file and change the namespace so that it matches the chosen naming and inherits from the `Stub`.
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
module Nucleus
|
55
|
+
module Adapters
|
56
|
+
module {API_VERSION}
|
57
|
+
class {VENDOR_ID} < Stub
|
58
|
+
```
|
59
|
+
|
60
|
+
Now the adapter should already be available in the API, but all calls would fail and return `501 Not implemented`.
|
61
|
+
|
62
|
+
## Tests
|
63
|
+
|
64
|
+
To include your adapter in the automatic adapter tests, we must create:
|
65
|
+
|
66
|
+
```
|
67
|
+
spec/adapter/v1/{VENDOR_ID}/{VENDOR_ID}_spec.rb
|
68
|
+
```
|
69
|
+
|
70
|
+
In this test file, you can use this basic template:
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
require 'spec/adapter/adapter_spec_helper'
|
74
|
+
|
75
|
+
describe Nucleus::Adapters::{API_VERSION}::{VENDOR_CLASS} do
|
76
|
+
before :all do
|
77
|
+
# skip these example groups / tests for this adapter. E.g.:
|
78
|
+
# @unsupported = ['with valid credentials is compliant and application update']
|
79
|
+
@unsupported = []
|
80
|
+
@endpoint = '{ENDPOINT_ID}'
|
81
|
+
@api_version = '{API_VERSION}'
|
82
|
+
@app_min = { original_name: 'nucleustestappminproperties',
|
83
|
+
updated_name: 'nucleustestappminproperties',
|
84
|
+
region: 'default' }
|
85
|
+
@app_all = { original_name: 'nucleustestappallupdated',
|
86
|
+
updated_name: 'nucleustestappallupdated',
|
87
|
+
region: 'default' }
|
88
|
+
end
|
89
|
+
before do |example|
|
90
|
+
if skip_example?(described_class, example.metadata[:full_description], @unsupported)
|
91
|
+
skip('This feature is currently not supported by CloudControl - 501')
|
92
|
+
end
|
93
|
+
# reload adapter for each test
|
94
|
+
@adapter = load_adapter(@endpoint, @api_version)
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'with invalid credentials' do
|
98
|
+
let!(:request_headers) { credentials(@endpoint, false) }
|
99
|
+
include_examples 'compliant adapter with invalid credentials'
|
100
|
+
end
|
101
|
+
|
102
|
+
describe 'with missing credentials' do
|
103
|
+
let!(:request_headers) { {} }
|
104
|
+
include_examples 'compliant adapter with invalid credentials'
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'with valid credentials' do
|
108
|
+
let!(:request_headers) { credentials(@endpoint) }
|
109
|
+
include_examples 'compliant adapter with valid credentials'
|
110
|
+
|
111
|
+
describe 'native adapter call' do
|
112
|
+
describe 'against endpoint' do
|
113
|
+
describe 'does fetch all available addons' do
|
114
|
+
before do
|
115
|
+
get "/endpoints/#{@endpoint}/call/addon", request_headers
|
116
|
+
end
|
117
|
+
include_examples 'a valid GET request'
|
118
|
+
it 'with the specified structure' do
|
119
|
+
# assumes there is at least one addon
|
120
|
+
expect(json_body[0].keys).to include(:name, :stage, :options)
|
121
|
+
end
|
122
|
+
it 'with the matching content declaration' do
|
123
|
+
expect_json_types(:array)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
```
|
131
|
+
|
132
|
+
## Implementation
|
133
|
+
|
134
|
+
Now we can start with the actual implementation. But how do you know what the adapter shall invoke and return?
|
135
|
+
|
136
|
+
The expected behaviour of the adapter methods was described in the copied `stub_adapter.rb` and should therefore be in your adapter, too.
|
137
|
+
Within the adapter tests most of the behaviour will also be tested so that you receive feedback and get to known which parts are still not properly implemented.
|
138
|
+
|
139
|
+
### Structure
|
140
|
+
|
141
|
+
In the already implemented adapters, we did split the logic into multiple modules.
|
142
|
+
With this approach, we could separate different parts of the application that are not actually related and also comply with the style guidelines that are monitored by Rubocop.
|
143
|
+
|
144
|
+
### Authentication
|
145
|
+
|
146
|
+
Nucleus already offers quite some authentication approaches that could fit your needs.
|
147
|
+
You can find the authentication clients at `app/core/auth`.
|
148
|
+
|
149
|
+
### What if the platform does not support action X?
|
150
|
+
|
151
|
+
Well, it depends ;-)
|
152
|
+
|
153
|
+
For most problems, there always is a workaround that involves some effort implement.
|
154
|
+
If the action should actually not be supported on the platform, for instance as *cloud Control* does not support to *start* or *stop* applications,
|
155
|
+
the method shall not be present in your adapter so that the `Stub` can provide a common error response.
|
metadata
ADDED
@@ -0,0 +1,836 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nucleus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stefan Kolb
|
8
|
+
- Cedric Röck
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-10-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: configatron
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '4.5'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '4.5'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: daybreak
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0.3'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0.3'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: em-http-request
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '1.1'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '1.1'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: excon
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0.44'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.44'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: faye-websocket
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0.9'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0.9'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: git
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '1.2'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '1.2'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: grape
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0.12'
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0.12'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: grape-entity
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0.4'
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 0.4.5
|
122
|
+
type: :runtime
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - "~>"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0.4'
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.4.5
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: grape-swagger
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.10'
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.10.1
|
142
|
+
type: :runtime
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0.10'
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 0.10.1
|
152
|
+
- !ruby/object:Gem::Dependency
|
153
|
+
name: kwalify
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - "~>"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0.7'
|
159
|
+
type: :runtime
|
160
|
+
prerelease: false
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - "~>"
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0.7'
|
166
|
+
- !ruby/object:Gem::Dependency
|
167
|
+
name: lmdb
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - "~>"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0.4'
|
173
|
+
type: :runtime
|
174
|
+
prerelease: false
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - "~>"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0.4'
|
180
|
+
- !ruby/object:Gem::Dependency
|
181
|
+
name: logger
|
182
|
+
requirement: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - "~>"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '1.2'
|
187
|
+
type: :runtime
|
188
|
+
prerelease: false
|
189
|
+
version_requirements: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - "~>"
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '1.2'
|
194
|
+
- !ruby/object:Gem::Dependency
|
195
|
+
name: mime-types
|
196
|
+
requirement: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - "~>"
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '2.4'
|
201
|
+
type: :runtime
|
202
|
+
prerelease: false
|
203
|
+
version_requirements: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - "~>"
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '2.4'
|
208
|
+
- !ruby/object:Gem::Dependency
|
209
|
+
name: moneta
|
210
|
+
requirement: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - "~>"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '0.8'
|
215
|
+
type: :runtime
|
216
|
+
prerelease: false
|
217
|
+
version_requirements: !ruby/object:Gem::Requirement
|
218
|
+
requirements:
|
219
|
+
- - "~>"
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0.8'
|
222
|
+
- !ruby/object:Gem::Dependency
|
223
|
+
name: net-ssh
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
225
|
+
requirements:
|
226
|
+
- - "~>"
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: '3.0'
|
229
|
+
type: :runtime
|
230
|
+
prerelease: false
|
231
|
+
version_requirements: !ruby/object:Gem::Requirement
|
232
|
+
requirements:
|
233
|
+
- - "~>"
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '3.0'
|
236
|
+
- !ruby/object:Gem::Dependency
|
237
|
+
name: oj
|
238
|
+
requirement: !ruby/object:Gem::Requirement
|
239
|
+
requirements:
|
240
|
+
- - "~>"
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: '2.12'
|
243
|
+
type: :runtime
|
244
|
+
prerelease: false
|
245
|
+
version_requirements: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - "~>"
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '2.12'
|
250
|
+
- !ruby/object:Gem::Dependency
|
251
|
+
name: protobuf
|
252
|
+
requirement: !ruby/object:Gem::Requirement
|
253
|
+
requirements:
|
254
|
+
- - "~>"
|
255
|
+
- !ruby/object:Gem::Version
|
256
|
+
version: '3.4'
|
257
|
+
type: :runtime
|
258
|
+
prerelease: false
|
259
|
+
version_requirements: !ruby/object:Gem::Requirement
|
260
|
+
requirements:
|
261
|
+
- - "~>"
|
262
|
+
- !ruby/object:Gem::Version
|
263
|
+
version: '3.4'
|
264
|
+
- !ruby/object:Gem::Dependency
|
265
|
+
name: rack-ssl-enforcer
|
266
|
+
requirement: !ruby/object:Gem::Requirement
|
267
|
+
requirements:
|
268
|
+
- - "~>"
|
269
|
+
- !ruby/object:Gem::Version
|
270
|
+
version: '0.2'
|
271
|
+
- - ">="
|
272
|
+
- !ruby/object:Gem::Version
|
273
|
+
version: 0.2.8
|
274
|
+
type: :runtime
|
275
|
+
prerelease: false
|
276
|
+
version_requirements: !ruby/object:Gem::Requirement
|
277
|
+
requirements:
|
278
|
+
- - "~>"
|
279
|
+
- !ruby/object:Gem::Version
|
280
|
+
version: '0.2'
|
281
|
+
- - ">="
|
282
|
+
- !ruby/object:Gem::Version
|
283
|
+
version: 0.2.8
|
284
|
+
- !ruby/object:Gem::Dependency
|
285
|
+
name: rest-client
|
286
|
+
requirement: !ruby/object:Gem::Requirement
|
287
|
+
requirements:
|
288
|
+
- - "~>"
|
289
|
+
- !ruby/object:Gem::Version
|
290
|
+
version: '1.8'
|
291
|
+
type: :runtime
|
292
|
+
prerelease: false
|
293
|
+
version_requirements: !ruby/object:Gem::Requirement
|
294
|
+
requirements:
|
295
|
+
- - "~>"
|
296
|
+
- !ruby/object:Gem::Version
|
297
|
+
version: '1.8'
|
298
|
+
- !ruby/object:Gem::Dependency
|
299
|
+
name: rack-stream
|
300
|
+
requirement: !ruby/object:Gem::Requirement
|
301
|
+
requirements:
|
302
|
+
- - '='
|
303
|
+
- !ruby/object:Gem::Version
|
304
|
+
version: 0.0.5
|
305
|
+
type: :runtime
|
306
|
+
prerelease: false
|
307
|
+
version_requirements: !ruby/object:Gem::Requirement
|
308
|
+
requirements:
|
309
|
+
- - '='
|
310
|
+
- !ruby/object:Gem::Version
|
311
|
+
version: 0.0.5
|
312
|
+
- !ruby/object:Gem::Dependency
|
313
|
+
name: request_store
|
314
|
+
requirement: !ruby/object:Gem::Requirement
|
315
|
+
requirements:
|
316
|
+
- - "~>"
|
317
|
+
- !ruby/object:Gem::Version
|
318
|
+
version: '1.1'
|
319
|
+
type: :runtime
|
320
|
+
prerelease: false
|
321
|
+
version_requirements: !ruby/object:Gem::Requirement
|
322
|
+
requirements:
|
323
|
+
- - "~>"
|
324
|
+
- !ruby/object:Gem::Version
|
325
|
+
version: '1.1'
|
326
|
+
- !ruby/object:Gem::Dependency
|
327
|
+
name: require_all
|
328
|
+
requirement: !ruby/object:Gem::Requirement
|
329
|
+
requirements:
|
330
|
+
- - "~>"
|
331
|
+
- !ruby/object:Gem::Version
|
332
|
+
version: '1.3'
|
333
|
+
type: :runtime
|
334
|
+
prerelease: false
|
335
|
+
version_requirements: !ruby/object:Gem::Requirement
|
336
|
+
requirements:
|
337
|
+
- - "~>"
|
338
|
+
- !ruby/object:Gem::Version
|
339
|
+
version: '1.3'
|
340
|
+
- !ruby/object:Gem::Dependency
|
341
|
+
name: rubyzip
|
342
|
+
requirement: !ruby/object:Gem::Requirement
|
343
|
+
requirements:
|
344
|
+
- - "~>"
|
345
|
+
- !ruby/object:Gem::Version
|
346
|
+
version: '1.1'
|
347
|
+
type: :runtime
|
348
|
+
prerelease: false
|
349
|
+
version_requirements: !ruby/object:Gem::Requirement
|
350
|
+
requirements:
|
351
|
+
- - "~>"
|
352
|
+
- !ruby/object:Gem::Version
|
353
|
+
version: '1.1'
|
354
|
+
- !ruby/object:Gem::Dependency
|
355
|
+
name: sshkey
|
356
|
+
requirement: !ruby/object:Gem::Requirement
|
357
|
+
requirements:
|
358
|
+
- - "~>"
|
359
|
+
- !ruby/object:Gem::Version
|
360
|
+
version: '1.7'
|
361
|
+
type: :runtime
|
362
|
+
prerelease: false
|
363
|
+
version_requirements: !ruby/object:Gem::Requirement
|
364
|
+
requirements:
|
365
|
+
- - "~>"
|
366
|
+
- !ruby/object:Gem::Version
|
367
|
+
version: '1.7'
|
368
|
+
- !ruby/object:Gem::Dependency
|
369
|
+
name: thin
|
370
|
+
requirement: !ruby/object:Gem::Requirement
|
371
|
+
requirements:
|
372
|
+
- - "~>"
|
373
|
+
- !ruby/object:Gem::Version
|
374
|
+
version: '1.6'
|
375
|
+
type: :runtime
|
376
|
+
prerelease: false
|
377
|
+
version_requirements: !ruby/object:Gem::Requirement
|
378
|
+
requirements:
|
379
|
+
- - "~>"
|
380
|
+
- !ruby/object:Gem::Version
|
381
|
+
version: '1.6'
|
382
|
+
- !ruby/object:Gem::Dependency
|
383
|
+
name: bundler
|
384
|
+
requirement: !ruby/object:Gem::Requirement
|
385
|
+
requirements:
|
386
|
+
- - ">="
|
387
|
+
- !ruby/object:Gem::Version
|
388
|
+
version: '0'
|
389
|
+
type: :development
|
390
|
+
prerelease: false
|
391
|
+
version_requirements: !ruby/object:Gem::Requirement
|
392
|
+
requirements:
|
393
|
+
- - ">="
|
394
|
+
- !ruby/object:Gem::Version
|
395
|
+
version: '0'
|
396
|
+
- !ruby/object:Gem::Dependency
|
397
|
+
name: guard
|
398
|
+
requirement: !ruby/object:Gem::Requirement
|
399
|
+
requirements:
|
400
|
+
- - ">="
|
401
|
+
- !ruby/object:Gem::Version
|
402
|
+
version: '0'
|
403
|
+
type: :development
|
404
|
+
prerelease: false
|
405
|
+
version_requirements: !ruby/object:Gem::Requirement
|
406
|
+
requirements:
|
407
|
+
- - ">="
|
408
|
+
- !ruby/object:Gem::Version
|
409
|
+
version: '0'
|
410
|
+
- !ruby/object:Gem::Dependency
|
411
|
+
name: guard-bundler
|
412
|
+
requirement: !ruby/object:Gem::Requirement
|
413
|
+
requirements:
|
414
|
+
- - ">="
|
415
|
+
- !ruby/object:Gem::Version
|
416
|
+
version: '0'
|
417
|
+
type: :development
|
418
|
+
prerelease: false
|
419
|
+
version_requirements: !ruby/object:Gem::Requirement
|
420
|
+
requirements:
|
421
|
+
- - ">="
|
422
|
+
- !ruby/object:Gem::Version
|
423
|
+
version: '0'
|
424
|
+
- !ruby/object:Gem::Dependency
|
425
|
+
name: guard-rack
|
426
|
+
requirement: !ruby/object:Gem::Requirement
|
427
|
+
requirements:
|
428
|
+
- - ">="
|
429
|
+
- !ruby/object:Gem::Version
|
430
|
+
version: '0'
|
431
|
+
type: :development
|
432
|
+
prerelease: false
|
433
|
+
version_requirements: !ruby/object:Gem::Requirement
|
434
|
+
requirements:
|
435
|
+
- - ">="
|
436
|
+
- !ruby/object:Gem::Version
|
437
|
+
version: '0'
|
438
|
+
- !ruby/object:Gem::Dependency
|
439
|
+
name: guard-rubocop
|
440
|
+
requirement: !ruby/object:Gem::Requirement
|
441
|
+
requirements:
|
442
|
+
- - ">="
|
443
|
+
- !ruby/object:Gem::Version
|
444
|
+
version: '0'
|
445
|
+
type: :development
|
446
|
+
prerelease: false
|
447
|
+
version_requirements: !ruby/object:Gem::Requirement
|
448
|
+
requirements:
|
449
|
+
- - ">="
|
450
|
+
- !ruby/object:Gem::Version
|
451
|
+
version: '0'
|
452
|
+
- !ruby/object:Gem::Dependency
|
453
|
+
name: guard-yard
|
454
|
+
requirement: !ruby/object:Gem::Requirement
|
455
|
+
requirements:
|
456
|
+
- - ">="
|
457
|
+
- !ruby/object:Gem::Version
|
458
|
+
version: '0'
|
459
|
+
type: :development
|
460
|
+
prerelease: false
|
461
|
+
version_requirements: !ruby/object:Gem::Requirement
|
462
|
+
requirements:
|
463
|
+
- - ">="
|
464
|
+
- !ruby/object:Gem::Version
|
465
|
+
version: '0'
|
466
|
+
- !ruby/object:Gem::Dependency
|
467
|
+
name: inch
|
468
|
+
requirement: !ruby/object:Gem::Requirement
|
469
|
+
requirements:
|
470
|
+
- - "~>"
|
471
|
+
- !ruby/object:Gem::Version
|
472
|
+
version: '0.7'
|
473
|
+
type: :development
|
474
|
+
prerelease: false
|
475
|
+
version_requirements: !ruby/object:Gem::Requirement
|
476
|
+
requirements:
|
477
|
+
- - "~>"
|
478
|
+
- !ruby/object:Gem::Version
|
479
|
+
version: '0.7'
|
480
|
+
- !ruby/object:Gem::Dependency
|
481
|
+
name: rake
|
482
|
+
requirement: !ruby/object:Gem::Requirement
|
483
|
+
requirements:
|
484
|
+
- - "~>"
|
485
|
+
- !ruby/object:Gem::Version
|
486
|
+
version: '10.4'
|
487
|
+
type: :development
|
488
|
+
prerelease: false
|
489
|
+
version_requirements: !ruby/object:Gem::Requirement
|
490
|
+
requirements:
|
491
|
+
- - "~>"
|
492
|
+
- !ruby/object:Gem::Version
|
493
|
+
version: '10.4'
|
494
|
+
- !ruby/object:Gem::Dependency
|
495
|
+
name: rubocop
|
496
|
+
requirement: !ruby/object:Gem::Requirement
|
497
|
+
requirements:
|
498
|
+
- - "~>"
|
499
|
+
- !ruby/object:Gem::Version
|
500
|
+
version: '0.34'
|
501
|
+
type: :development
|
502
|
+
prerelease: false
|
503
|
+
version_requirements: !ruby/object:Gem::Requirement
|
504
|
+
requirements:
|
505
|
+
- - "~>"
|
506
|
+
- !ruby/object:Gem::Version
|
507
|
+
version: '0.34'
|
508
|
+
- !ruby/object:Gem::Dependency
|
509
|
+
name: vcr
|
510
|
+
requirement: !ruby/object:Gem::Requirement
|
511
|
+
requirements:
|
512
|
+
- - "~>"
|
513
|
+
- !ruby/object:Gem::Version
|
514
|
+
version: '2.9'
|
515
|
+
type: :development
|
516
|
+
prerelease: false
|
517
|
+
version_requirements: !ruby/object:Gem::Requirement
|
518
|
+
requirements:
|
519
|
+
- - "~>"
|
520
|
+
- !ruby/object:Gem::Version
|
521
|
+
version: '2.9'
|
522
|
+
- !ruby/object:Gem::Dependency
|
523
|
+
name: webmock
|
524
|
+
requirement: !ruby/object:Gem::Requirement
|
525
|
+
requirements:
|
526
|
+
- - "~>"
|
527
|
+
- !ruby/object:Gem::Version
|
528
|
+
version: '1.20'
|
529
|
+
type: :development
|
530
|
+
prerelease: false
|
531
|
+
version_requirements: !ruby/object:Gem::Requirement
|
532
|
+
requirements:
|
533
|
+
- - "~>"
|
534
|
+
- !ruby/object:Gem::Version
|
535
|
+
version: '1.20'
|
536
|
+
- !ruby/object:Gem::Dependency
|
537
|
+
name: yard
|
538
|
+
requirement: !ruby/object:Gem::Requirement
|
539
|
+
requirements:
|
540
|
+
- - "~>"
|
541
|
+
- !ruby/object:Gem::Version
|
542
|
+
version: '0.8'
|
543
|
+
type: :development
|
544
|
+
prerelease: false
|
545
|
+
version_requirements: !ruby/object:Gem::Requirement
|
546
|
+
requirements:
|
547
|
+
- - "~>"
|
548
|
+
- !ruby/object:Gem::Version
|
549
|
+
version: '0.8'
|
550
|
+
description: Nucleus is a unified API for deployment and management of Platform-as-a-Service
|
551
|
+
(PaaS) systems.
|
552
|
+
email:
|
553
|
+
- stefan.kolb@uni-bamberg.de
|
554
|
+
executables:
|
555
|
+
- nucleus
|
556
|
+
extensions: []
|
557
|
+
extra_rdoc_files: []
|
558
|
+
files:
|
559
|
+
- ".gitattributes"
|
560
|
+
- ".gitignore"
|
561
|
+
- ".rspec"
|
562
|
+
- ".rubocop.yml"
|
563
|
+
- ".travis.yml"
|
564
|
+
- CHANGELOG.md
|
565
|
+
- CONTRIBUTING.md
|
566
|
+
- Gemfile
|
567
|
+
- Guardfile
|
568
|
+
- LICENSE
|
569
|
+
- README.md
|
570
|
+
- Rakefile
|
571
|
+
- bin/nucleus
|
572
|
+
- bin/nucleus.bat
|
573
|
+
- config.ru
|
574
|
+
- config/adapters/cloud_control.yml
|
575
|
+
- config/adapters/cloud_foundry_v2.yml
|
576
|
+
- config/adapters/heroku.yml
|
577
|
+
- config/adapters/openshift_v2.yml
|
578
|
+
- config/nucleus_config.rb
|
579
|
+
- lib/nucleus.rb
|
580
|
+
- lib/nucleus/adapter_resolver.rb
|
581
|
+
- lib/nucleus/adapters/base_adapter.rb
|
582
|
+
- lib/nucleus/adapters/buildpack_translator.rb
|
583
|
+
- lib/nucleus/adapters/v1/cloud_control/application.rb
|
584
|
+
- lib/nucleus/adapters/v1/cloud_control/authentication.rb
|
585
|
+
- lib/nucleus/adapters/v1/cloud_control/buildpacks.rb
|
586
|
+
- lib/nucleus/adapters/v1/cloud_control/cloud_control.rb
|
587
|
+
- lib/nucleus/adapters/v1/cloud_control/data.rb
|
588
|
+
- lib/nucleus/adapters/v1/cloud_control/domains.rb
|
589
|
+
- lib/nucleus/adapters/v1/cloud_control/lifecycle.rb
|
590
|
+
- lib/nucleus/adapters/v1/cloud_control/log_poller.rb
|
591
|
+
- lib/nucleus/adapters/v1/cloud_control/logs.rb
|
592
|
+
- lib/nucleus/adapters/v1/cloud_control/regions.rb
|
593
|
+
- lib/nucleus/adapters/v1/cloud_control/scaling.rb
|
594
|
+
- lib/nucleus/adapters/v1/cloud_control/semantic_errors.rb
|
595
|
+
- lib/nucleus/adapters/v1/cloud_control/services.rb
|
596
|
+
- lib/nucleus/adapters/v1/cloud_control/token.rb
|
597
|
+
- lib/nucleus/adapters/v1/cloud_control/vars.rb
|
598
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/app_states.rb
|
599
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/application.rb
|
600
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/authentication.rb
|
601
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/buildpacks.rb
|
602
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/cloud_foundry_v2.rb
|
603
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/data.rb
|
604
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/domains.rb
|
605
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/lifecycle.rb
|
606
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/logs.rb
|
607
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/regions.rb
|
608
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/scaling.rb
|
609
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/semantic_errors.rb
|
610
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/services.rb
|
611
|
+
- lib/nucleus/adapters/v1/cloud_foundry_v2/vars.rb
|
612
|
+
- lib/nucleus/adapters/v1/heroku/app_states.rb
|
613
|
+
- lib/nucleus/adapters/v1/heroku/application.rb
|
614
|
+
- lib/nucleus/adapters/v1/heroku/authentication.rb
|
615
|
+
- lib/nucleus/adapters/v1/heroku/buildpacks.rb
|
616
|
+
- lib/nucleus/adapters/v1/heroku/data.rb
|
617
|
+
- lib/nucleus/adapters/v1/heroku/domains.rb
|
618
|
+
- lib/nucleus/adapters/v1/heroku/heroku.rb
|
619
|
+
- lib/nucleus/adapters/v1/heroku/lifecycle.rb
|
620
|
+
- lib/nucleus/adapters/v1/heroku/logs.rb
|
621
|
+
- lib/nucleus/adapters/v1/heroku/regions.rb
|
622
|
+
- lib/nucleus/adapters/v1/heroku/scaling.rb
|
623
|
+
- lib/nucleus/adapters/v1/heroku/semantic_errors.rb
|
624
|
+
- lib/nucleus/adapters/v1/heroku/services.rb
|
625
|
+
- lib/nucleus/adapters/v1/heroku/vars.rb
|
626
|
+
- lib/nucleus/adapters/v1/openshift_v2/app_states.rb
|
627
|
+
- lib/nucleus/adapters/v1/openshift_v2/application.rb
|
628
|
+
- lib/nucleus/adapters/v1/openshift_v2/authentication.rb
|
629
|
+
- lib/nucleus/adapters/v1/openshift_v2/data.rb
|
630
|
+
- lib/nucleus/adapters/v1/openshift_v2/domains.rb
|
631
|
+
- lib/nucleus/adapters/v1/openshift_v2/lifecycle.rb
|
632
|
+
- lib/nucleus/adapters/v1/openshift_v2/logs.rb
|
633
|
+
- lib/nucleus/adapters/v1/openshift_v2/openshift_v2.rb
|
634
|
+
- lib/nucleus/adapters/v1/openshift_v2/regions.rb
|
635
|
+
- lib/nucleus/adapters/v1/openshift_v2/scaling.rb
|
636
|
+
- lib/nucleus/adapters/v1/openshift_v2/semantic_errors.rb
|
637
|
+
- lib/nucleus/adapters/v1/openshift_v2/services.rb
|
638
|
+
- lib/nucleus/adapters/v1/openshift_v2/vars.rb
|
639
|
+
- lib/nucleus/adapters/v1/stub_adapter.rb
|
640
|
+
- lib/nucleus/core/adapter_authentication_inductor.rb
|
641
|
+
- lib/nucleus/core/adapter_extensions/auth/auth_client.rb
|
642
|
+
- lib/nucleus/core/adapter_extensions/auth/authentication_retry_wrapper.rb
|
643
|
+
- lib/nucleus/core/adapter_extensions/auth/expiring_token_auth_client.rb
|
644
|
+
- lib/nucleus/core/adapter_extensions/auth/http_basic_auth_client.rb
|
645
|
+
- lib/nucleus/core/adapter_extensions/auth/o_auth2_auth_client.rb
|
646
|
+
- lib/nucleus/core/adapter_extensions/auth/token_auth_client.rb
|
647
|
+
- lib/nucleus/core/adapter_extensions/http_client.rb
|
648
|
+
- lib/nucleus/core/adapter_extensions/http_tail_client.rb
|
649
|
+
- lib/nucleus/core/adapter_extensions/tail_stopper.rb
|
650
|
+
- lib/nucleus/core/common/errors/ambiguous_adapter_error.rb
|
651
|
+
- lib/nucleus/core/common/errors/file_existence_error.rb
|
652
|
+
- lib/nucleus/core/common/errors/startup_error.rb
|
653
|
+
- lib/nucleus/core/common/exit_codes.rb
|
654
|
+
- lib/nucleus/core/common/files/application_repo_sanitizer.rb
|
655
|
+
- lib/nucleus/core/common/files/archive_extractor.rb
|
656
|
+
- lib/nucleus/core/common/files/archiver.rb
|
657
|
+
- lib/nucleus/core/common/link_generator.rb
|
658
|
+
- lib/nucleus/core/common/logging/logging.rb
|
659
|
+
- lib/nucleus/core/common/logging/multi_logger.rb
|
660
|
+
- lib/nucleus/core/common/logging/request_log_formatter.rb
|
661
|
+
- lib/nucleus/core/common/ssh_handler.rb
|
662
|
+
- lib/nucleus/core/common/stream_callback.rb
|
663
|
+
- lib/nucleus/core/common/thread_config_accessor.rb
|
664
|
+
- lib/nucleus/core/common/url_converter.rb
|
665
|
+
- lib/nucleus/core/enums/application_states.rb
|
666
|
+
- lib/nucleus/core/enums/logfile_types.rb
|
667
|
+
- lib/nucleus/core/error_messages.rb
|
668
|
+
- lib/nucleus/core/errors/adapter_error.rb
|
669
|
+
- lib/nucleus/core/errors/adapter_missing_implementation_error.rb
|
670
|
+
- lib/nucleus/core/errors/adapter_request_error.rb
|
671
|
+
- lib/nucleus/core/errors/adapter_resource_not_found_error.rb
|
672
|
+
- lib/nucleus/core/errors/endpoint_authentication_error.rb
|
673
|
+
- lib/nucleus/core/errors/platform_specific_semantic_error.rb
|
674
|
+
- lib/nucleus/core/errors/platform_timeout_error.rb
|
675
|
+
- lib/nucleus/core/errors/platform_unavailable_error.rb
|
676
|
+
- lib/nucleus/core/errors/semantic_adapter_request_error.rb
|
677
|
+
- lib/nucleus/core/errors/unknown_adapter_call_error.rb
|
678
|
+
- lib/nucleus/core/file_handling/archive_converter.rb
|
679
|
+
- lib/nucleus/core/file_handling/file_manager.rb
|
680
|
+
- lib/nucleus/core/file_handling/git_deployer.rb
|
681
|
+
- lib/nucleus/core/file_handling/git_repo_analyzer.rb
|
682
|
+
- lib/nucleus/core/import/adapter_configuration.rb
|
683
|
+
- lib/nucleus/core/import/vendor_parser.rb
|
684
|
+
- lib/nucleus/core/import/version_detector.rb
|
685
|
+
- lib/nucleus/core/models/abstract_model.rb
|
686
|
+
- lib/nucleus/core/models/endpoint.rb
|
687
|
+
- lib/nucleus/core/models/provider.rb
|
688
|
+
- lib/nucleus/core/models/vendor.rb
|
689
|
+
- lib/nucleus/ext/kernel.rb
|
690
|
+
- lib/nucleus/ext/regexp.rb
|
691
|
+
- lib/nucleus/os.rb
|
692
|
+
- lib/nucleus/root_dir.rb
|
693
|
+
- lib/nucleus/scripts/finalize.rb
|
694
|
+
- lib/nucleus/scripts/initialize.rb
|
695
|
+
- lib/nucleus/scripts/initialize_config_defaults.rb
|
696
|
+
- lib/nucleus/scripts/load.rb
|
697
|
+
- lib/nucleus/scripts/load_dependencies.rb
|
698
|
+
- lib/nucleus/scripts/setup_config.rb
|
699
|
+
- lib/nucleus/scripts/shutdown.rb
|
700
|
+
- lib/nucleus/version.rb
|
701
|
+
- nucleus.gemspec
|
702
|
+
- public/robots.txt
|
703
|
+
- public/swagger-ui/css/reset.css
|
704
|
+
- public/swagger-ui/css/screen.css
|
705
|
+
- public/swagger-ui/images/apple-touch-icon-114x114.png
|
706
|
+
- public/swagger-ui/images/apple-touch-icon-120x120.png
|
707
|
+
- public/swagger-ui/images/apple-touch-icon-144x144.png
|
708
|
+
- public/swagger-ui/images/apple-touch-icon-152x152.png
|
709
|
+
- public/swagger-ui/images/apple-touch-icon-57x57.png
|
710
|
+
- public/swagger-ui/images/apple-touch-icon-60x60.png
|
711
|
+
- public/swagger-ui/images/apple-touch-icon-72x72.png
|
712
|
+
- public/swagger-ui/images/apple-touch-icon-76x76.png
|
713
|
+
- public/swagger-ui/images/explorer_icons.png
|
714
|
+
- public/swagger-ui/images/favicon-128.png
|
715
|
+
- public/swagger-ui/images/favicon-16x16.png
|
716
|
+
- public/swagger-ui/images/favicon-196x196.png
|
717
|
+
- public/swagger-ui/images/favicon-32x32.png
|
718
|
+
- public/swagger-ui/images/favicon-96x96.png
|
719
|
+
- public/swagger-ui/images/favicon.ico
|
720
|
+
- public/swagger-ui/images/logo_small.png
|
721
|
+
- public/swagger-ui/images/mstile-144x144.png
|
722
|
+
- public/swagger-ui/images/mstile-150x150.png
|
723
|
+
- public/swagger-ui/images/mstile-310x150.png
|
724
|
+
- public/swagger-ui/images/mstile-310x310.png
|
725
|
+
- public/swagger-ui/images/mstile-70x70.png
|
726
|
+
- public/swagger-ui/images/pet_store_api.png
|
727
|
+
- public/swagger-ui/images/throbber.gif
|
728
|
+
- public/swagger-ui/images/wordnik_api.png
|
729
|
+
- public/swagger-ui/index.html
|
730
|
+
- public/swagger-ui/lib/backbone-min.js
|
731
|
+
- public/swagger-ui/lib/handlebars-1.0.0.js
|
732
|
+
- public/swagger-ui/lib/highlight.7.3.pack.js
|
733
|
+
- public/swagger-ui/lib/jquery-1.8.0.min.js
|
734
|
+
- public/swagger-ui/lib/jquery.ba-bbq.min.js
|
735
|
+
- public/swagger-ui/lib/jquery.slideto.min.js
|
736
|
+
- public/swagger-ui/lib/jquery.wiggle.min.js
|
737
|
+
- public/swagger-ui/lib/shred.bundle.js
|
738
|
+
- public/swagger-ui/lib/shred/content.js
|
739
|
+
- public/swagger-ui/lib/swagger-oauth.js
|
740
|
+
- public/swagger-ui/lib/swagger.js
|
741
|
+
- public/swagger-ui/lib/underscore-min.js
|
742
|
+
- public/swagger-ui/o2c.html
|
743
|
+
- public/swagger-ui/redirect.html
|
744
|
+
- public/swagger-ui/swagger-ui.js
|
745
|
+
- public/swagger-ui/swagger-ui.min.js
|
746
|
+
- schemas/api.adapter.schema.yml
|
747
|
+
- schemas/api.requirements.schema.yml
|
748
|
+
- spec/factories/models.rb
|
749
|
+
- spec/integration/api/auth_spec.rb
|
750
|
+
- spec/integration/api/endpoints_spec.rb
|
751
|
+
- spec/integration/api/errors_spec.rb
|
752
|
+
- spec/integration/api/providers_spec.rb
|
753
|
+
- spec/integration/api/swagger_schema_spec.rb
|
754
|
+
- spec/integration/api/vendors_spec.rb
|
755
|
+
- spec/integration/integration_spec_helper.rb
|
756
|
+
- spec/integration/test_data_generator.rb
|
757
|
+
- spec/nucleus_git_key.pem
|
758
|
+
- spec/spec_helper.rb
|
759
|
+
- spec/support/shared_example_request_types.rb
|
760
|
+
- spec/test_suites.rake
|
761
|
+
- spec/unit/adapters/archive_converter_spec.rb
|
762
|
+
- spec/unit/adapters/file_manager_spec.rb
|
763
|
+
- spec/unit/adapters/git_deployer_spec.rb
|
764
|
+
- spec/unit/adapters/v1/stub_spec.rb
|
765
|
+
- spec/unit/common/helpers/auth_helper_spec.rb
|
766
|
+
- spec/unit/common/oauth2_auth_client_spec.rb
|
767
|
+
- spec/unit/common/regexp_spec.rb
|
768
|
+
- spec/unit/common/request_log_formatter_spec.rb
|
769
|
+
- spec/unit/common/thread_config_accessor_spec.rb
|
770
|
+
- spec/unit/models/endpoint_spec.rb
|
771
|
+
- spec/unit/models/provider_spec.rb
|
772
|
+
- spec/unit/models/vendor_spec.rb
|
773
|
+
- spec/unit/schemas/adapter_schema_spec.rb
|
774
|
+
- spec/unit/schemas/adapter_validation_spec.rb
|
775
|
+
- spec/unit/schemas/requirements_schema_spec.rb
|
776
|
+
- spec/unit/unit_spec_helper.rb
|
777
|
+
- tasks/compatibility.rake
|
778
|
+
- tasks/evaluation.rake
|
779
|
+
- wiki/adapter_tests.md
|
780
|
+
- wiki/implement_new_adapter.md
|
781
|
+
homepage: https://github.com/stefan-kolb/nucleus
|
782
|
+
licenses:
|
783
|
+
- MIT
|
784
|
+
metadata: {}
|
785
|
+
post_install_message:
|
786
|
+
rdoc_options: []
|
787
|
+
require_paths:
|
788
|
+
- lib
|
789
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
790
|
+
requirements:
|
791
|
+
- - ">="
|
792
|
+
- !ruby/object:Gem::Version
|
793
|
+
version: '2.0'
|
794
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
795
|
+
requirements:
|
796
|
+
- - ">="
|
797
|
+
- !ruby/object:Gem::Version
|
798
|
+
version: '0'
|
799
|
+
requirements: []
|
800
|
+
rubyforge_project:
|
801
|
+
rubygems_version: 2.4.5
|
802
|
+
signing_key:
|
803
|
+
specification_version: 4
|
804
|
+
summary: Nucleus unifies core management functions of Platform-as-a-Service (PaaS)
|
805
|
+
systems.
|
806
|
+
test_files:
|
807
|
+
- spec/factories/models.rb
|
808
|
+
- spec/integration/api/auth_spec.rb
|
809
|
+
- spec/integration/api/endpoints_spec.rb
|
810
|
+
- spec/integration/api/errors_spec.rb
|
811
|
+
- spec/integration/api/providers_spec.rb
|
812
|
+
- spec/integration/api/swagger_schema_spec.rb
|
813
|
+
- spec/integration/api/vendors_spec.rb
|
814
|
+
- spec/integration/integration_spec_helper.rb
|
815
|
+
- spec/integration/test_data_generator.rb
|
816
|
+
- spec/nucleus_git_key.pem
|
817
|
+
- spec/spec_helper.rb
|
818
|
+
- spec/support/shared_example_request_types.rb
|
819
|
+
- spec/test_suites.rake
|
820
|
+
- spec/unit/adapters/archive_converter_spec.rb
|
821
|
+
- spec/unit/adapters/file_manager_spec.rb
|
822
|
+
- spec/unit/adapters/git_deployer_spec.rb
|
823
|
+
- spec/unit/adapters/v1/stub_spec.rb
|
824
|
+
- spec/unit/common/helpers/auth_helper_spec.rb
|
825
|
+
- spec/unit/common/oauth2_auth_client_spec.rb
|
826
|
+
- spec/unit/common/regexp_spec.rb
|
827
|
+
- spec/unit/common/request_log_formatter_spec.rb
|
828
|
+
- spec/unit/common/thread_config_accessor_spec.rb
|
829
|
+
- spec/unit/models/endpoint_spec.rb
|
830
|
+
- spec/unit/models/provider_spec.rb
|
831
|
+
- spec/unit/models/vendor_spec.rb
|
832
|
+
- spec/unit/schemas/adapter_schema_spec.rb
|
833
|
+
- spec/unit/schemas/adapter_validation_spec.rb
|
834
|
+
- spec/unit/schemas/requirements_schema_spec.rb
|
835
|
+
- spec/unit/unit_spec_helper.rb
|
836
|
+
has_rdoc:
|