aviator 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +1 -204
- data/aviator.gemspec +3 -2
- data/lib/aviator/core/cli/describer.rb +99 -48
- data/lib/aviator/core/cli.rb +1 -0
- data/lib/aviator/core/request.rb +46 -9
- data/lib/aviator/core/request_builder.rb +82 -30
- data/lib/aviator/core/response.rb +15 -23
- data/lib/aviator/core/service.rb +43 -17
- data/lib/aviator/core.rb +1 -0
- data/lib/aviator/openstack/common/v2/admin/base.rb +9 -0
- data/lib/aviator/openstack/common/v2/public/base.rb +43 -0
- data/lib/aviator/openstack/compute/v2/admin/confirm_server_resize.rb +4 -14
- data/lib/aviator/openstack/compute/v2/admin/create_network.rb +56 -0
- data/lib/aviator/openstack/compute/v2/admin/get_host_details.rb +4 -15
- data/lib/aviator/openstack/compute/v2/admin/list_hosts.rb +5 -16
- data/lib/aviator/openstack/compute/v2/admin/lock_server.rb +34 -0
- data/lib/aviator/openstack/compute/v2/admin/migrate_server.rb +34 -0
- data/lib/aviator/openstack/compute/v2/admin/reset_server.rb +39 -0
- data/lib/aviator/openstack/compute/v2/admin/resize_server.rb +5 -15
- data/lib/aviator/openstack/compute/v2/admin/unlock_server.rb +34 -0
- data/lib/aviator/openstack/compute/v2/public/change_admin_password.rb +14 -24
- data/lib/aviator/openstack/compute/v2/public/create_image.rb +4 -14
- data/lib/aviator/openstack/compute/v2/public/create_server.rb +9 -19
- data/lib/aviator/openstack/compute/v2/public/delete_image.rb +4 -15
- data/lib/aviator/openstack/compute/v2/public/delete_server.rb +4 -14
- data/lib/aviator/openstack/compute/v2/public/get_flavor_details.rb +29 -0
- data/lib/aviator/openstack/compute/v2/public/get_image_details.rb +4 -15
- data/lib/aviator/openstack/compute/v2/public/get_network_details.rb +30 -0
- data/lib/aviator/openstack/compute/v2/public/get_server.rb +9 -20
- data/lib/aviator/openstack/compute/v2/public/list_addresses.rb +5 -17
- data/lib/aviator/openstack/compute/v2/public/list_flavors.rb +8 -28
- data/lib/aviator/openstack/compute/v2/public/list_images.rb +6 -26
- data/lib/aviator/openstack/compute/v2/public/list_networks.rb +27 -0
- data/lib/aviator/openstack/compute/v2/public/list_servers.rb +14 -25
- data/lib/aviator/openstack/compute/v2/public/pause_server.rb +34 -0
- data/lib/aviator/openstack/compute/v2/public/reboot_server.rb +4 -14
- data/lib/aviator/openstack/compute/v2/public/rebuild_server.rb +8 -18
- data/lib/aviator/openstack/compute/v2/public/resume_server.rb +34 -0
- data/lib/aviator/openstack/compute/v2/public/root.rb +4 -14
- data/lib/aviator/openstack/compute/v2/public/suspend_server.rb +34 -0
- data/lib/aviator/openstack/compute/v2/public/unpause_server.rb +34 -0
- data/lib/aviator/openstack/compute/v2/public/update_server.rb +6 -16
- data/lib/aviator/openstack/identity/v2/admin/add_role_to_user_on_tenant.rb +5 -18
- data/lib/aviator/openstack/identity/v2/admin/create_tenant.rb +4 -14
- data/lib/aviator/openstack/identity/v2/admin/create_user.rb +1 -1
- data/lib/aviator/openstack/identity/v2/admin/delete_role_from_user_on_tenant.rb +6 -18
- data/lib/aviator/openstack/identity/v2/admin/delete_tenant.rb +4 -15
- data/lib/aviator/openstack/identity/v2/admin/list_tenants.rb +5 -24
- data/lib/aviator/openstack/identity/v2/admin/update_tenant.rb +4 -14
- data/lib/aviator/openstack/identity/v2/admin/update_user.rb +1 -1
- data/lib/aviator/openstack/identity/v2/public/create_token.rb +6 -11
- data/lib/aviator/openstack/identity/v2/public/list_tenants.rb +5 -24
- data/lib/aviator/openstack/identity/v2/public/root.rb +5 -14
- data/lib/aviator/openstack/image/v1/public/root.rb +5 -14
- data/lib/aviator/openstack/metering/v1/admin/list_projects.rb +4 -11
- data/lib/aviator/openstack/volume/v1/public/create_volume.rb +47 -0
- data/lib/aviator/openstack/volume/v1/public/delete_volume.rb +25 -0
- data/lib/aviator/openstack/volume/v1/public/get_volume.rb +28 -0
- data/lib/aviator/openstack/volume/v1/public/list_volume_types.rb +29 -0
- data/lib/aviator/openstack/volume/v1/public/list_volumes.rb +37 -0
- data/lib/aviator/openstack/volume/v1/public/root.rb +6 -14
- data/lib/aviator/openstack/volume/v1/public/update_volume.rb +43 -0
- data/lib/aviator/version.rb +1 -1
- data/test/aviator/core/cli/describer_test.rb +236 -114
- data/test/aviator/core/request_builder_test.rb +133 -12
- data/test/aviator/core/request_test.rb +64 -0
- data/test/aviator/core/service_test.rb +18 -0
- data/test/aviator/openstack/common/v2/public/base_test.rb +109 -0
- data/test/aviator/openstack/compute/v2/admin/create_network_test.rb +163 -0
- data/test/aviator/openstack/compute/v2/admin/lock_server_test.rb +125 -0
- data/test/aviator/openstack/compute/v2/admin/migrate_server_test.rb +125 -0
- data/test/aviator/openstack/compute/v2/admin/reset_server_test.rb +141 -0
- data/test/aviator/openstack/compute/v2/admin/resize_server_test.rb +9 -0
- data/test/aviator/openstack/compute/v2/admin/unlock_server_test.rb +125 -0
- data/test/aviator/openstack/compute/v2/public/change_admin_password_test.rb +9 -0
- data/test/aviator/openstack/compute/v2/public/create_server_test.rb +14 -1
- data/test/aviator/openstack/compute/v2/public/get_flavor_details_test.rb +126 -0
- data/test/aviator/openstack/compute/v2/public/get_image_details_test.rb +1 -1
- data/test/aviator/openstack/compute/v2/public/get_network_details_test.rb +123 -0
- data/test/aviator/openstack/compute/v2/public/get_server_test.rb +35 -35
- data/test/aviator/openstack/compute/v2/public/list_addresses_test.rb +9 -0
- data/test/aviator/openstack/compute/v2/public/list_flavors_test.rb +50 -40
- data/test/aviator/openstack/compute/v2/public/list_images_test.rb +42 -33
- data/test/aviator/openstack/compute/v2/public/list_networks_test.rb +100 -0
- data/test/aviator/openstack/compute/v2/public/list_servers_test.rb +9 -1
- data/test/aviator/openstack/compute/v2/public/pause_server_test.rb +125 -0
- data/test/aviator/openstack/compute/v2/public/rebuild_server_test.rb +12 -0
- data/test/aviator/openstack/compute/v2/public/resume_server_test.rb +125 -0
- data/test/aviator/openstack/compute/v2/public/suspend_server_test.rb +125 -0
- data/test/aviator/openstack/compute/v2/public/unpause_server_test.rb +125 -0
- data/test/aviator/openstack/compute/v2/public/update_server_test.rb +37 -27
- data/test/aviator/openstack/identity/v2/admin/create_user_test.rb +9 -0
- data/test/aviator/openstack/identity/v2/admin/update_user_test.rb +9 -0
- data/test/aviator/openstack/identity/v2/public/create_token_test.rb +16 -5
- data/test/aviator/openstack/identity/v2/public/list_tenants_test.rb +131 -0
- data/test/aviator/openstack/volume/v1/public/create_volume_test.rb +126 -0
- data/test/aviator/openstack/volume/v1/public/delete_volume_test.rb +131 -0
- data/test/aviator/openstack/volume/v1/public/get_volume_test.rb +141 -0
- data/test/aviator/openstack/volume/v1/public/list_volume_types_test.rb +91 -0
- data/test/aviator/openstack/volume/v1/public/list_volumes_test.rb +154 -0
- data/test/aviator/openstack/volume/v1/public/update_volume_test.rb +130 -0
- data/test/cassettes/openstack/common/v2/public/base/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/compute/v2/admin/create_network/leads_to_a_valid_response_when_invalid_parameters_are_provided.yml +98 -0
- data/test/cassettes/openstack/compute/v2/admin/create_network/leads_to_a_valid_response_when_valid_parameters_are_provided.yml +103 -0
- data/test/cassettes/openstack/compute/v2/admin/create_network/returns_the_correct_value_for_headers_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/create_network/returns_the_correct_value_for_http_method_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/create_network/returns_the_correct_value_for_url_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/lock_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +98 -0
- data/test/cassettes/openstack/compute/v2/admin/lock_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +131 -0
- data/test/cassettes/openstack/compute/v2/admin/lock_server/returns_the_correct_value_for_body_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/lock_server/returns_the_correct_value_for_headers_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/lock_server/returns_the_correct_value_for_http_method_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/lock_server/returns_the_correct_value_for_url_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/migrate_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +98 -0
- data/test/cassettes/openstack/compute/v2/admin/migrate_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +131 -0
- data/test/cassettes/openstack/compute/v2/admin/migrate_server/returns_the_correct_value_for_body_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/migrate_server/returns_the_correct_value_for_headers_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/migrate_server/returns_the_correct_value_for_http_method_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/migrate_server/returns_the_correct_value_for_url_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/reset_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +98 -0
- data/test/cassettes/openstack/compute/v2/admin/reset_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +131 -0
- data/test/cassettes/openstack/compute/v2/admin/reset_server/returns_the_correct_value_for_body_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/reset_server/returns_the_correct_value_for_headers_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/reset_server/returns_the_correct_value_for_http_method_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/reset_server/returns_the_correct_value_for_url_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/unlock_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +98 -0
- data/test/cassettes/openstack/compute/v2/admin/unlock_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +131 -0
- data/test/cassettes/openstack/compute/v2/admin/unlock_server/returns_the_correct_value_for_body_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/unlock_server/returns_the_correct_value_for_headers_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/unlock_server/returns_the_correct_value_for_http_method_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/admin/unlock_server/returns_the_correct_value_for_url_.yml +64 -0
- data/test/cassettes/openstack/compute/v2/public/get_flavor_details/leads_to_a_valid_response_when_invalid_parameters_are_provided.yml +96 -0
- data/test/cassettes/openstack/compute/v2/public/get_flavor_details/leads_to_a_valid_response_when_parameters_are_provided.yml +99 -0
- data/test/cassettes/openstack/compute/v2/public/get_flavor_details/returns_the_correct_value_for_body_.yml +62 -0
- data/test/cassettes/openstack/compute/v2/public/get_flavor_details/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/compute/v2/public/get_flavor_details/returns_the_correct_value_for_http_method_.yml +62 -0
- data/test/cassettes/openstack/compute/v2/public/get_flavor_details/returns_the_correct_value_for_url_.yml +62 -0
- data/test/cassettes/openstack/compute/v2/public/get_network_details/leads_to_a_valid_response_when_invalid_network_id_is_provided.yml +99 -0
- data/test/cassettes/openstack/compute/v2/public/get_network_details/leads_to_a_valid_response_when_valid_network_id_is_provided.yml +136 -0
- data/test/cassettes/openstack/compute/v2/public/get_network_details/returns_the_correct_value_for_body_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/get_network_details/returns_the_correct_value_for_headers_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/get_network_details/returns_the_correct_value_for_http_method_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/get_network_details/returns_the_correct_value_for_url_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/list_networks/leads_to_a_valid_response_when_no_parameters_are_provided.yml +101 -0
- data/test/cassettes/openstack/compute/v2/public/list_networks/returns_the_correct_value_for_body_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/list_networks/returns_the_correct_value_for_headers_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/list_networks/returns_the_correct_value_for_http_method_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/list_networks/returns_the_correct_value_for_url_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/pause_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +99 -0
- data/test/cassettes/openstack/compute/v2/public/pause_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +132 -0
- data/test/cassettes/openstack/compute/v2/public/pause_server/returns_the_correct_value_for_body_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/pause_server/returns_the_correct_value_for_headers_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/pause_server/returns_the_correct_value_for_http_method_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/pause_server/returns_the_correct_value_for_url_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/resume_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +99 -0
- data/test/cassettes/openstack/compute/v2/public/resume_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +132 -0
- data/test/cassettes/openstack/compute/v2/public/resume_server/returns_the_correct_value_for_body_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/resume_server/returns_the_correct_value_for_headers_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/resume_server/returns_the_correct_value_for_http_method_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/resume_server/returns_the_correct_value_for_url_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/suspend_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +99 -0
- data/test/cassettes/openstack/compute/v2/public/suspend_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +132 -0
- data/test/cassettes/openstack/compute/v2/public/suspend_server/returns_the_correct_value_for_body_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/suspend_server/returns_the_correct_value_for_headers_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/suspend_server/returns_the_correct_value_for_http_method_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/suspend_server/returns_the_correct_value_for_url_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/unpause_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +99 -0
- data/test/cassettes/openstack/compute/v2/public/unpause_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +132 -0
- data/test/cassettes/openstack/compute/v2/public/unpause_server/returns_the_correct_value_for_body_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/unpause_server/returns_the_correct_value_for_headers_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/unpause_server/returns_the_correct_value_for_http_method_.yml +65 -0
- data/test/cassettes/openstack/compute/v2/public/unpause_server/returns_the_correct_value_for_url_.yml +65 -0
- data/test/cassettes/openstack/identity/v2/public/list_tenants/leads_to_a_valid_response_when_no_parameters_are_provided.yml +143 -0
- data/test/cassettes/openstack/identity/v2/public/list_tenants/leads_to_a_valid_response_when_session_is_using_a_default_token.yml +74 -0
- data/test/cassettes/openstack/identity/v2/public/list_tenants/returns_the_correct_value_for_body_.yml +62 -0
- data/test/cassettes/openstack/identity/v2/public/list_tenants/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/identity/v2/public/list_tenants/returns_the_correct_value_for_http_method_.yml +62 -0
- data/test/cassettes/openstack/identity/v2/public/list_tenants/returns_the_correct_value_for_url_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/create_volume/leads_to_a_valid_response_when_parameters_are_provided.yml +101 -0
- data/test/cassettes/openstack/volume/v1/public/create_volume/returns_the_correct_value_for_body_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/create_volume/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/create_volume/returns_the_correct_value_for_http_method_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/create_volume/returns_the_correct_value_for_url_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/delete_volume/leads_to_a_valid_response_when_invalid_volume_id_is_provided.yml +96 -0
- data/test/cassettes/openstack/volume/v1/public/delete_volume/leads_to_a_valid_response_when_valid_volume_id_is_provided.yml +167 -0
- data/test/cassettes/openstack/volume/v1/public/delete_volume/returns_the_correct_value_for_body_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/delete_volume/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/delete_volume/returns_the_correct_value_for_http_method_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/delete_volume/returns_the_correct_value_for_url_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/get_volume/leads_to_a_valid_response_when_a_valid_volume_id_is_provided.yml +213 -0
- data/test/cassettes/openstack/volume/v1/public/get_volume/leads_to_a_valid_response_when_an_invalid_volume_id_is_provided.yml +96 -0
- data/test/cassettes/openstack/volume/v1/public/get_volume/returns_the_correct_value_for_body_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/get_volume/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/get_volume/returns_the_correct_value_for_http_method_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/get_volume/returns_the_correct_value_for_url_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/list_volume_types/leads_to_a_valid_response_when_no_parameters_are_provided.yml +95 -0
- data/test/cassettes/openstack/volume/v1/public/list_volume_types/returns_the_correct_value_for_body_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/list_volume_types/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/list_volume_types/returns_the_correct_value_for_http_method_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/list_volumes/leads_to_a_valid_response_when_no_parameters_are_provided.yml +178 -0
- data/test/cassettes/openstack/volume/v1/public/list_volumes/leads_to_a_valid_response_when_parameters_are_invalid.yml +95 -0
- data/test/cassettes/openstack/volume/v1/public/list_volumes/leads_to_a_valid_response_when_parameters_are_valid.yml +170 -0
- data/test/cassettes/openstack/volume/v1/public/list_volumes/returns_the_correct_value_for_body_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/list_volumes/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/list_volumes/returns_the_correct_value_for_http_method_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/root/leads_to_a_valid_response_when_no_parameters_are_provided.yml +36 -39
- data/test/cassettes/openstack/volume/v1/public/root/returns_the_correct_value_for_body_.yml +28 -31
- data/test/cassettes/openstack/volume/v1/public/root/returns_the_correct_value_for_headers_.yml +28 -31
- data/test/cassettes/openstack/volume/v1/public/root/returns_the_correct_value_for_http_method_.yml +28 -31
- data/test/cassettes/openstack/volume/v1/public/root/returns_the_correct_value_for_url_.yml +28 -31
- data/test/cassettes/openstack/volume/v1/public/update_volume/leads_to_a_valid_response_when_invalid_volume_id_is_provided.yml +96 -0
- data/test/cassettes/openstack/volume/v1/public/update_volume/leads_to_a_valid_response_when_valid_volume_id_is_provided.yml +179 -0
- data/test/cassettes/openstack/volume/v1/public/update_volume/returns_the_correct_value_for_body_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/update_volume/returns_the_correct_value_for_headers_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/update_volume/returns_the_correct_value_for_http_method_.yml +62 -0
- data/test/cassettes/openstack/volume/v1/public/update_volume/returns_the_correct_value_for_url_.yml +62 -0
- data/test/support/vcr_setup.rb +3 -3
- metadata +297 -4
- data/README.md.orig +0 -217
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODAxM2VmMWQ3YzJmNWE1ZTdkODQ5Yzc4NGI2NDljNTdhODA1ZGM3NQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2RjMzE0NmU2ZmRjMTdmYTE5MzhkODFmNDM1OWY4YWJkNDJmMWM1Mg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YWQ3MDE0MGIzNWZhMzlkNzEzNGRjYjc0OGQ0NzRhNWY4MmU4NjMzMGRhNjgz
|
10
|
+
ODUwZDQ0MDI0MzdhMTcxZWRmNzViZTQ3MDgzNTc3NzU1YThjNzY1NDE0Yzcw
|
11
|
+
YmVjNmJmMjJlZTQ0NmEyYzkxNDZiOGM0NjAyMDUzMThhYTkyOGE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDBjY2EwMjhlYTBiYTcxMTc0ZjZjNzkzNDA1Y2UwYTRkNWZiODZiN2E5Zjk0
|
14
|
+
MTdiZjc4Mzk1MmNmMmExNTEyNWVmYjExZWVhODE3ZjRiMTM3OTEwMGNlNzc5
|
15
|
+
NDlmMWQ4ODQyMzRiNzc3NWQwMjhhNjEwMTU1OTg5YTg0MDVjZjA=
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
![Aviator](https://raw.github.com/aviator/www/gh-pages/images/logo-small.png)
|
2
2
|
<br/>A lightweight library for communicating with the OpenStack API.
|
3
3
|
|
4
|
-
## Project Stats
|
5
|
-
|
6
4
|
[![Build Status](https://travis-ci.org/aviator/aviator.png?branch=master)](https://travis-ci.org/aviator/aviator)
|
7
5
|
[![Coverage Status](https://coveralls.io/repos/aviator/aviator/badge.png?branch=master)](https://coveralls.io/r/aviator/aviator?branch=master)
|
8
6
|
[![Code Climate](https://codeclimate.com/github/aviator/aviator.png)](https://codeclimate.com/github/aviator/aviator)
|
@@ -10,205 +8,4 @@
|
|
10
8
|
[![Dependency Status](https://gemnasium.com/aviator/aviator.png)](https://gemnasium.com/aviator/aviator)
|
11
9
|
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
Add this line to your application's Gemfile:
|
16
|
-
|
17
|
-
gem 'aviator'
|
18
|
-
|
19
|
-
Or if you want to live on the edge:
|
20
|
-
|
21
|
-
gem 'aviator', :git => 'git@github.com:aviator/aviator.git', :branch => 'develop'
|
22
|
-
|
23
|
-
And then execute:
|
24
|
-
|
25
|
-
$ bundle
|
26
|
-
|
27
|
-
Or install it yourself as:
|
28
|
-
|
29
|
-
$ gem install aviator
|
30
|
-
|
31
|
-
## Usage
|
32
|
-
|
33
|
-
```ruby
|
34
|
-
require 'aviator'
|
35
|
-
|
36
|
-
# Create a new session. See 'Configuration' below for the config file format.
|
37
|
-
session = Aviator::Session.new(
|
38
|
-
config_file: 'path/to/aviator.yml',
|
39
|
-
environment: :production,
|
40
|
-
log_file: 'path/to/aviator.log'
|
41
|
-
)
|
42
|
-
|
43
|
-
# Authenticate against the auth service specified in :config_file. If no
|
44
|
-
# credentials are available in the config file, this line will throw an error.
|
45
|
-
session.authenticate
|
46
|
-
|
47
|
-
# You can re-authenticate anytime. Note that this creates a new token in the
|
48
|
-
# underlying environment while the old token is discarded by the Session object.
|
49
|
-
# Be aware of this fact as it might unnecessarily generate too many tokens.
|
50
|
-
#
|
51
|
-
# Notice how you can override the credentials in the config file. Also note that
|
52
|
-
# the keys used below (:username, :password, :tenantName) match the name as
|
53
|
-
# indicated in the official OpenStack documentation.
|
54
|
-
session.authenticate do |credentials|
|
55
|
-
credentials[:username] = myusername
|
56
|
-
credentials[:password] = mypassword
|
57
|
-
credentials[:tenantName] = tenantName
|
58
|
-
end
|
59
|
-
|
60
|
-
# Serialize the session information for caching. The output is in plaintext JSON which
|
61
|
-
# contains sensitive information. You are responsible for securing that.
|
62
|
-
str = session.dump
|
63
|
-
|
64
|
-
# Create a new Session object from a session dump. This DOES NOT create a new token.
|
65
|
-
# If you employed any form of encryption on the string, make sure to decrypt it first!
|
66
|
-
session = Aviator::Session.load(str)
|
67
|
-
|
68
|
-
# In some instances, Session::load is inefficient because it creates a new session object
|
69
|
-
# each time. In a web app environment, for instance, having to destroy and recreate the
|
70
|
-
# session object can take its toll on performance. In such a scenario, use Session#load
|
71
|
-
# (instance method, as opposed to class method). This will 'infect' an already existing
|
72
|
-
# session object with the supplied session dump and return itself instead of creating
|
73
|
-
# a brand new session object.
|
74
|
-
session.load(other_session_dump)
|
75
|
-
|
76
|
-
# Depending on how old the loaded session dump is, its session data may already be expired.
|
77
|
-
# Check if it's still current by calling Session#validate and reauthenticate as needed.
|
78
|
-
#
|
79
|
-
# IMPORTANT: The validator must be defined in the config file and it must refer to the
|
80
|
-
# name of a request that is known to Aviator. See 'Configuration' below for examples
|
81
|
-
session.authenticate unless session.validate
|
82
|
-
|
83
|
-
# If you want the newly created session to log its output, make sure to indicate it on load
|
84
|
-
session = Aviator::Session.load(str, log_file: 'path/to/aviator.log')
|
85
|
-
|
86
|
-
# Get a handle to the Identity Service.
|
87
|
-
keystone = session.identity_service
|
88
|
-
|
89
|
-
# Create a new tenant
|
90
|
-
response = keystone.request(:create_tenant) do |params|
|
91
|
-
params[:name] = 'Project'
|
92
|
-
params[:description] = 'My Project'
|
93
|
-
params[:enabled] = true
|
94
|
-
end
|
95
|
-
|
96
|
-
# Aviator uses parameter names as defined in the official OpenStack API doc. You can
|
97
|
-
# also access the params via dot notation (e.g. params.description) or by using a string
|
98
|
-
# for a hash key (e.g. params['description']). However, keep in mind that OpenStack
|
99
|
-
# parameters that have dashes and other characters that are not valid for method names
|
100
|
-
# and symbols can only be expressed as strings. E.g. params['changes-since']
|
101
|
-
|
102
|
-
|
103
|
-
# Be explicit about the endpoint type. Useful in those rare instances when
|
104
|
-
# the same request name means differently depending on the endpoint type.
|
105
|
-
# For example, in OpenStack, :list_tenants will return only the tenants the
|
106
|
-
# user is a member of in the public endpoint whereas the admin endpoint will
|
107
|
-
# return all tenants in the system.
|
108
|
-
response = keystone.request(:list_tenants, endpoint_type: 'admin')
|
109
|
-
```
|
110
|
-
|
111
|
-
## Configuration
|
112
|
-
|
113
|
-
The configuration file is a simple YAML file that can have one or more environment definitions.
|
114
|
-
|
115
|
-
```
|
116
|
-
production:
|
117
|
-
provider: openstack
|
118
|
-
auth_service:
|
119
|
-
name: identity
|
120
|
-
host_uri: http://my.openstackenv.org:5000
|
121
|
-
request: create_token
|
122
|
-
validator: list_tenants # Request to make for validating the session
|
123
|
-
api_version: v2 # Optional if version is indicated in host_uri
|
124
|
-
auth_credentials:
|
125
|
-
username: admin
|
126
|
-
password: mypassword
|
127
|
-
tenantName: myproject
|
128
|
-
|
129
|
-
development_1:
|
130
|
-
provider: openstack
|
131
|
-
auth_service:
|
132
|
-
name: identity
|
133
|
-
host_uri: http://devstack:5000/v2.0
|
134
|
-
request: create_token
|
135
|
-
validator: list_tenants
|
136
|
-
auth_credentials:
|
137
|
-
tokenId: 2c963f5512d067b24fdc312707c80c7a6d3d261b
|
138
|
-
tenantName: admin
|
139
|
-
|
140
|
-
development_2:
|
141
|
-
provider: openstack
|
142
|
-
auth_service:
|
143
|
-
name: identity
|
144
|
-
host_uri: http://devstack:5000/v2.0
|
145
|
-
request: create_token
|
146
|
-
validator: list_tenants
|
147
|
-
auth_credentials:
|
148
|
-
username: admin
|
149
|
-
password: mypassword
|
150
|
-
tenantName: myproject
|
151
|
-
```
|
152
|
-
|
153
|
-
A note on the validator: it can be any request as long as
|
154
|
-
|
155
|
-
1. It is defined in Aviator
|
156
|
-
1. Does not require any parameters
|
157
|
-
1. It returns an HTTP status 200 or 203 to indicate auth info validity.
|
158
|
-
1. It returns any other HTTP status to indicate that the auth info is invalid.
|
159
|
-
|
160
|
-
## CLI tools
|
161
|
-
|
162
|
-
List available providers. Includes only OpenStack for now.
|
163
|
-
|
164
|
-
```bash
|
165
|
-
$ aviator describe
|
166
|
-
```
|
167
|
-
|
168
|
-
List available services for OpenStack.
|
169
|
-
|
170
|
-
```bash
|
171
|
-
$ aviator describe openstack
|
172
|
-
```
|
173
|
-
|
174
|
-
List available requests for Keystone
|
175
|
-
|
176
|
-
```bash
|
177
|
-
$ aviator describe openstack identity
|
178
|
-
```
|
179
|
-
|
180
|
-
Describe Keystone's create_tenant request
|
181
|
-
|
182
|
-
```bash
|
183
|
-
$ aviator describe openstack identity v2 admin create_tenant
|
184
|
-
```
|
185
|
-
|
186
|
-
The last command above will display:
|
187
|
-
|
188
|
-
```bash
|
189
|
-
Request: create_tenant
|
190
|
-
|
191
|
-
Parameters:
|
192
|
-
(required) description
|
193
|
-
(required) enabled
|
194
|
-
(required) name
|
195
|
-
|
196
|
-
Sample Code:
|
197
|
-
session.identity_service.request(:create_tenant, endpoint_type: 'admin') do |params|
|
198
|
-
params['name'] = value
|
199
|
-
params['description'] = value
|
200
|
-
params['enabled'] = value
|
201
|
-
end
|
202
|
-
|
203
|
-
Links:
|
204
|
-
documentation:
|
205
|
-
http://docs.openstack.org/api/openstack-identity-service/2.0/content/
|
206
|
-
```
|
207
|
-
|
208
|
-
## Contributing
|
209
|
-
|
210
|
-
1. Fork it
|
211
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
212
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
213
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
214
|
-
5. Create new Pull Request
|
11
|
+
<a href="http://aviator.github.io/www/">Usage and Installation</a>
|
data/aviator.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["mmaglana@gmail.com"]
|
11
11
|
spec.description = %q{ A lightweight Ruby library for the OpenStack API }
|
12
12
|
spec.summary = %q{ A lightweight Ruby library for the OpenStack API }
|
13
|
-
spec.homepage = "
|
13
|
+
spec.homepage = "http://aviator.github.io/www/"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency 'faraday', '~> 0.8.0'
|
22
22
|
spec.add_dependency 'activesupport', '>= 3.2.8'
|
23
23
|
spec.add_dependency 'thor', '~> 0.18.1'
|
24
|
-
|
24
|
+
spec.add_dependency 'terminal-table', '>= 1.4.5'
|
25
|
+
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.3"
|
26
27
|
spec.add_development_dependency "rake"
|
27
28
|
spec.add_development_dependency 'rb-fsevent', '~> 0.9.0'
|
@@ -1,37 +1,25 @@
|
|
1
1
|
module Aviator
|
2
|
-
|
3
|
-
module Describer
|
4
2
|
|
5
|
-
|
6
|
-
provider_names = Pathname.new(__FILE__)
|
7
|
-
.join('..', '..', '..')
|
8
|
-
.children
|
9
|
-
.select{|c| c.directory? && c.basename.to_s != 'core' }
|
10
|
-
.map{|c| c.basename.to_s }
|
3
|
+
class Describer
|
11
4
|
|
5
|
+
def self.describe_aviator
|
12
6
|
str = "Available providers:\n"
|
13
7
|
|
14
8
|
provider_names.each do |provider_name|
|
15
9
|
str << " #{ provider_name }\n"
|
16
10
|
end
|
17
|
-
|
11
|
+
|
18
12
|
str
|
19
13
|
end
|
20
14
|
|
21
15
|
|
22
16
|
def self.describe_provider(provider_name)
|
23
|
-
service_names = Pathname.new(__FILE__)
|
24
|
-
.join('..', '..', '..', provider_name)
|
25
|
-
.children
|
26
|
-
.select{|c| c.directory? }
|
27
|
-
.map{|c| c.basename.to_s }
|
28
|
-
|
29
17
|
str = "Available services for #{ provider_name }:\n"
|
30
18
|
|
31
|
-
service_names.each do |service_name|
|
19
|
+
service_names(provider_name).each do |service_name|
|
32
20
|
str << " #{ service_name }\n"
|
33
21
|
end
|
34
|
-
|
22
|
+
|
35
23
|
str
|
36
24
|
end
|
37
25
|
|
@@ -40,56 +28,119 @@ module Aviator
|
|
40
28
|
service = Aviator::Service.new provider: provider_name, service: service_name
|
41
29
|
request_class = "Aviator::#{ provider_name.camelize }::#{ service_name.camelize }::"\
|
42
30
|
"#{ api_version.camelize }::#{ endpoint_type.camelize }::#{ request_name.camelize }".constantize
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
params = request_class.optional_params.map{|p| [p,
|
49
|
-
request_class.required_params.map{|p| [p,
|
50
|
-
|
51
|
-
|
52
|
-
|
31
|
+
|
32
|
+
display = "Request: #{ request_name }\n"
|
33
|
+
|
34
|
+
|
35
|
+
# Build the parameters
|
36
|
+
params = request_class.optional_params.map{|p| [p, false]} +
|
37
|
+
request_class.required_params.map{|p| [p, true]}
|
38
|
+
|
39
|
+
aliases = request_class.param_aliases
|
40
|
+
|
41
|
+
if params.length > 0
|
42
|
+
display << "\n"
|
43
|
+
|
44
|
+
headings = ['NAME', 'REQUIRED']
|
45
|
+
|
46
|
+
headings << 'ALIAS' if aliases.length > 0
|
47
|
+
|
48
|
+
rows = []
|
49
|
+
params.sort{|a,b| a[0].to_s <=> b[0].to_s }.each do |param|
|
50
|
+
row = [ param[0], param[1] ? 'Y' : 'N' ]
|
51
|
+
|
52
|
+
if aliases.length > 0
|
53
|
+
row << (aliases.find{|a,p| p == param[0] } || [''])[0]
|
54
|
+
end
|
55
|
+
|
56
|
+
rows << row
|
57
|
+
end
|
58
|
+
|
59
|
+
widths = [
|
60
|
+
rows.map{|row| row[0].length }.max,
|
61
|
+
rows.map{|row| row[1].length }.max
|
62
|
+
]
|
63
|
+
|
64
|
+
widths << rows.map{|row| row[2].length }.max if aliases.length > 0
|
65
|
+
|
66
|
+
table = Terminal::Table.new(headings: headings, rows: rows)
|
67
|
+
|
68
|
+
table.align_column(1, :center)
|
69
|
+
|
70
|
+
display << "Parameters:\n"
|
71
|
+
display << " " + table.to_s.split("\n").join("\n ")
|
72
|
+
display << "\n"
|
53
73
|
end
|
54
|
-
|
55
|
-
str << "\nSample Code:\n"
|
56
74
|
|
57
|
-
|
58
|
-
|
59
|
-
|
75
|
+
|
76
|
+
# Build the sample code
|
77
|
+
display << "\nSample Code:\n"
|
78
|
+
|
79
|
+
display << " session.#{ service_name }_service.request(:#{ request_name })"
|
80
|
+
|
81
|
+
if params && params.length > 0
|
82
|
+
display << " do |params|\n"
|
60
83
|
params.each do |pair|
|
61
|
-
|
84
|
+
display << " params.#{ (aliases.find{|a,p| p == pair[0] } || pair)[0] } = value\n"
|
62
85
|
end
|
63
|
-
|
86
|
+
display << " end"
|
64
87
|
end
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
88
|
+
|
89
|
+
display << "\n"
|
90
|
+
|
91
|
+
|
92
|
+
# Build the links
|
93
|
+
if request_class.links && request_class.links.length > 0
|
94
|
+
display << "\nLinks:\n"
|
95
|
+
|
69
96
|
request_class.links.each do |link|
|
70
|
-
|
71
|
-
|
97
|
+
display << " #{ link[:rel] }:\n"
|
98
|
+
display << " #{ link[:href] }\n"
|
72
99
|
end
|
73
100
|
end
|
74
|
-
|
75
|
-
|
101
|
+
|
102
|
+
display
|
76
103
|
end
|
77
104
|
|
78
105
|
|
79
106
|
def self.describe_service(provider_name, service_name)
|
80
|
-
service = Aviator::Service.new(provider: provider_name, service: service_name)
|
81
|
-
klasses = service.request_classes
|
82
|
-
|
83
107
|
str = "Available requests for #{ provider_name } #{ service_name }_service:\n"
|
84
108
|
|
85
|
-
|
109
|
+
request_classes(provider_name, service_name).each do |klass|
|
86
110
|
str << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last.underscore }\n"
|
87
111
|
end
|
88
|
-
|
112
|
+
|
89
113
|
str
|
90
114
|
end
|
91
115
|
|
92
116
|
|
117
|
+
class <<self
|
118
|
+
private
|
119
|
+
|
120
|
+
def provider_names
|
121
|
+
Pathname.new(__FILE__)
|
122
|
+
.join('..', '..', '..')
|
123
|
+
.children
|
124
|
+
.select{|c| c.directory? && c.basename.to_s != 'core' }
|
125
|
+
.map{|c| c.basename.to_s }
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
def request_classes(provider_name, service_name)
|
130
|
+
service = Aviator::Service.new(provider: provider_name, service: service_name)
|
131
|
+
service.request_classes
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
def service_names(provider_name)
|
136
|
+
Pathname.new(__FILE__)
|
137
|
+
.join('..', '..', '..', provider_name)
|
138
|
+
.children
|
139
|
+
.select{|c| c.directory? }
|
140
|
+
.map{|c| c.basename.to_s }
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
93
144
|
end
|
94
|
-
|
145
|
+
|
95
146
|
end
|
data/lib/aviator/core/cli.rb
CHANGED
data/lib/aviator/core/request.rb
CHANGED
@@ -53,7 +53,7 @@ module Aviator
|
|
53
53
|
def links
|
54
54
|
self.class.links
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
|
58
58
|
def optional_params
|
59
59
|
self.class.optional_params
|
@@ -83,7 +83,7 @@ module Aviator
|
|
83
83
|
def querystring?
|
84
84
|
self.class.querystring?
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
|
88
88
|
def url?
|
89
89
|
self.class.url?
|
@@ -121,18 +121,23 @@ module Aviator
|
|
121
121
|
def headers?
|
122
122
|
instance_methods.include? :headers
|
123
123
|
end
|
124
|
-
|
125
|
-
|
124
|
+
|
125
|
+
|
126
126
|
def links
|
127
127
|
@links ||= []
|
128
128
|
end
|
129
129
|
|
130
130
|
|
131
|
+
def param_aliases
|
132
|
+
@param_aliases ||= {}
|
133
|
+
end
|
134
|
+
|
135
|
+
|
131
136
|
def params_class
|
132
137
|
all_params = required_params + optional_params
|
133
138
|
|
134
|
-
if all_params.length > 0
|
135
|
-
@params_class
|
139
|
+
if all_params.length > 0 && @params_class.nil?
|
140
|
+
@params_class = build_params_class(all_params, self.param_aliases)
|
136
141
|
end
|
137
142
|
|
138
143
|
@params_class
|
@@ -147,12 +152,12 @@ module Aviator
|
|
147
152
|
def querystring?
|
148
153
|
instance_methods.include? :querystring
|
149
154
|
end
|
150
|
-
|
155
|
+
|
151
156
|
|
152
157
|
def required_params
|
153
158
|
@required_params ||= []
|
154
159
|
end
|
155
|
-
|
160
|
+
|
156
161
|
|
157
162
|
def url?
|
158
163
|
instance_methods.include? :url
|
@@ -162,6 +167,34 @@ module Aviator
|
|
162
167
|
private
|
163
168
|
|
164
169
|
|
170
|
+
def build_params_class(all_params, param_aliases)
|
171
|
+
Struct.new(*all_params) do
|
172
|
+
alias :param_getter :[]
|
173
|
+
alias :param_setter :[]=
|
174
|
+
|
175
|
+
define_method :[] do |key|
|
176
|
+
key = param_aliases[key.to_sym] if param_aliases.keys.include? key.to_sym
|
177
|
+
param_getter(key)
|
178
|
+
end
|
179
|
+
|
180
|
+
define_method :[]= do |key, value|
|
181
|
+
key = param_aliases[key.to_sym] if param_aliases.keys.include? key.to_sym
|
182
|
+
param_setter(key, value)
|
183
|
+
end
|
184
|
+
|
185
|
+
param_aliases.each do |param_alias, param_name|
|
186
|
+
define_method param_alias do
|
187
|
+
param_getter(param_name)
|
188
|
+
end
|
189
|
+
|
190
|
+
define_method "#{ param_alias }=" do |value|
|
191
|
+
param_setter(param_name, value)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
|
165
198
|
def link(rel, href)
|
166
199
|
links << { rel: rel, href: href }
|
167
200
|
end
|
@@ -176,12 +209,16 @@ module Aviator
|
|
176
209
|
self.class.send(attr_name)
|
177
210
|
end
|
178
211
|
end
|
179
|
-
|
212
|
+
|
180
213
|
|
181
214
|
def param(param_name, opts={})
|
182
215
|
opts = opts.with_indifferent_access
|
183
216
|
list = (opts[:required] == false ? optional_params : required_params)
|
184
217
|
list << param_name unless optional_params.include?(param_name)
|
218
|
+
|
219
|
+
if opts[:alias]
|
220
|
+
self.param_aliases[opts[:alias]] = param_name
|
221
|
+
end
|
185
222
|
end
|
186
223
|
|
187
224
|
end
|
@@ -1,37 +1,89 @@
|
|
1
1
|
module Aviator
|
2
2
|
|
3
|
-
class
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
Aviator,
|
10
|
-
class_obj,
|
11
|
-
|
12
|
-
class_obj.provider,
|
13
|
-
class_obj.service,
|
14
|
-
class_obj.api_version,
|
15
|
-
class_obj.endpoint_type,
|
16
|
-
request_name
|
17
|
-
)
|
3
|
+
class BaseRequestNotFoundError < StandardError
|
4
|
+
attr_reader :base_request_hierarchy
|
5
|
+
|
6
|
+
def initialize(base_hierarchy)
|
7
|
+
@base_request_hierarchy = base_hierarchy
|
8
|
+
super("#{ base_request_hierarchy } could not be found!")
|
18
9
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
hierarchy.empty? ? const : set_class_name(const, obj, *hierarchy)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
class RequestAlreadyDefinedError < StandardError
|
14
|
+
attr_reader :namespace,
|
15
|
+
:request_name
|
16
|
+
|
17
|
+
def initialize(namespace, request_name)
|
18
|
+
@namespace = namespace
|
19
|
+
@request_name = request_name
|
20
|
+
super("#{ namespace }::#{ request_name } is already defined")
|
33
21
|
end
|
34
|
-
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
class RequestBuilder
|
26
|
+
|
27
|
+
class << self
|
28
|
+
|
29
|
+
def define_request(root_namespace, request_name, options, &block)
|
30
|
+
base_klass = get_request_class(root_namespace, options[:inherit])
|
31
|
+
|
32
|
+
klass = Class.new(base_klass, &block)
|
33
|
+
|
34
|
+
namespace_arr = [
|
35
|
+
klass.provider,
|
36
|
+
klass.service,
|
37
|
+
klass.api_version,
|
38
|
+
klass.endpoint_type
|
39
|
+
]
|
40
|
+
|
41
|
+
namespace = namespace_arr.inject(root_namespace) do |namespace, sym|
|
42
|
+
const_name = sym.to_s.camelize
|
43
|
+
namespace.const_set(const_name, Module.new) unless namespace.const_defined?(const_name, false)
|
44
|
+
namespace.const_get(const_name, false)
|
45
|
+
end
|
46
|
+
|
47
|
+
klassname = request_name.to_s.camelize
|
48
|
+
|
49
|
+
if namespace.const_defined?(klassname, false)
|
50
|
+
raise RequestAlreadyDefinedError.new(namespace, klassname)
|
51
|
+
end
|
52
|
+
|
53
|
+
namespace.const_set(klassname, klass)
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def get_request_class(root_namespace, request_class_arr)
|
58
|
+
request_class_arr.inject(root_namespace) do |namespace, sym|
|
59
|
+
namespace.const_get(sym.to_s.camelize, false)
|
60
|
+
end
|
61
|
+
rescue NameError => e
|
62
|
+
arr = ['..', '..'] + request_class_arr
|
63
|
+
arr[-1,1] = arr.last.to_s + '.rb'
|
64
|
+
path = Pathname.new(__FILE__).join(*arr.map{|i| i.to_s }).expand_path
|
65
|
+
|
66
|
+
if path.exist?
|
67
|
+
require path
|
68
|
+
request_class_arr.inject(root_namespace) do |namespace, sym|
|
69
|
+
namespace.const_get(sym.to_s.camelize, false)
|
70
|
+
end
|
71
|
+
else
|
72
|
+
raise BaseRequestNotFoundError.new(request_class_arr)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
class << self
|
82
|
+
|
83
|
+
def define_request(request_name, options={ inherit: [:request] }, &block)
|
84
|
+
RequestBuilder.define_request self, request_name, options, &block
|
85
|
+
end
|
86
|
+
|
35
87
|
end # class << self
|
36
88
|
|
37
89
|
end
|