aviator 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|

|
|
2
2
|
<br/>A lightweight library for communicating with the OpenStack API.
|
|
3
3
|
|
|
4
|
-
## Project Stats
|
|
5
|
-
|
|
6
4
|
[](https://travis-ci.org/aviator/aviator)
|
|
7
5
|
[](https://coveralls.io/r/aviator/aviator?branch=master)
|
|
8
6
|
[](https://codeclimate.com/github/aviator/aviator)
|
|
@@ -10,205 +8,4 @@
|
|
|
10
8
|
[](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
|