harpiya_api 4.3.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +5 -0
- data/LICENSE +26 -0
- data/Rakefile +29 -0
- data/app/assets/javascripts/harpiya/api/main.js +36 -0
- data/app/assets/javascripts/harpiya/api/storefront/cart.js +49 -0
- data/app/controllers/concerns/harpiya/api/v2/storefront/order_concern.rb +52 -0
- data/app/controllers/harpiya/api/base_controller.rb +171 -0
- data/app/controllers/harpiya/api/errors_controller.rb +9 -0
- data/app/controllers/harpiya/api/v1/addresses_controller.rb +46 -0
- data/app/controllers/harpiya/api/v1/checkouts_controller.rb +106 -0
- data/app/controllers/harpiya/api/v1/classifications_controller.rb +20 -0
- data/app/controllers/harpiya/api/v1/countries_controller.rb +22 -0
- data/app/controllers/harpiya/api/v1/credit_cards_controller.rb +26 -0
- data/app/controllers/harpiya/api/v1/customer_returns_controller.rb +25 -0
- data/app/controllers/harpiya/api/v1/images_controller.rb +58 -0
- data/app/controllers/harpiya/api/v1/inventory_units_controller.rb +54 -0
- data/app/controllers/harpiya/api/v1/line_items_controller.rb +70 -0
- data/app/controllers/harpiya/api/v1/option_types_controller.rb +60 -0
- data/app/controllers/harpiya/api/v1/option_values_controller.rb +62 -0
- data/app/controllers/harpiya/api/v1/orders_controller.rb +156 -0
- data/app/controllers/harpiya/api/v1/payments_controller.rb +82 -0
- data/app/controllers/harpiya/api/v1/product_properties_controller.rb +73 -0
- data/app/controllers/harpiya/api/v1/products_controller.rb +131 -0
- data/app/controllers/harpiya/api/v1/promotions_controller.rb +30 -0
- data/app/controllers/harpiya/api/v1/properties_controller.rb +70 -0
- data/app/controllers/harpiya/api/v1/reimbursements_controller.rb +25 -0
- data/app/controllers/harpiya/api/v1/return_authorizations_controller.rb +70 -0
- data/app/controllers/harpiya/api/v1/shipments_controller.rb +196 -0
- data/app/controllers/harpiya/api/v1/states_controller.rb +36 -0
- data/app/controllers/harpiya/api/v1/stock_items_controller.rb +82 -0
- data/app/controllers/harpiya/api/v1/stock_locations_controller.rb +53 -0
- data/app/controllers/harpiya/api/v1/stock_movements_controller.rb +45 -0
- data/app/controllers/harpiya/api/v1/stores_controller.rb +56 -0
- data/app/controllers/harpiya/api/v1/taxonomies_controller.rb +67 -0
- data/app/controllers/harpiya/api/v1/taxons_controller.rb +100 -0
- data/app/controllers/harpiya/api/v1/users_controller.rb +97 -0
- data/app/controllers/harpiya/api/v1/variants_controller.rb +81 -0
- data/app/controllers/harpiya/api/v1/zones_controller.rb +55 -0
- data/app/controllers/harpiya/api/v2/base_controller.rb +167 -0
- data/app/controllers/harpiya/api/v2/platform/addresses_controller.rb +19 -0
- data/app/controllers/harpiya/api/v2/platform/countries_controller.rb +19 -0
- data/app/controllers/harpiya/api/v2/platform/menu_items_controller.rb +35 -0
- data/app/controllers/harpiya/api/v2/platform/menus_controller.rb +19 -0
- data/app/controllers/harpiya/api/v2/platform/option_types_controller.rb +15 -0
- data/app/controllers/harpiya/api/v2/platform/option_values_controller.rb +19 -0
- data/app/controllers/harpiya/api/v2/platform/products_controller.rb +27 -0
- data/app/controllers/harpiya/api/v2/platform/resource_controller.rb +102 -0
- data/app/controllers/harpiya/api/v2/platform/taxons_controller.rb +27 -0
- data/app/controllers/harpiya/api/v2/platform/users_controller.rb +23 -0
- data/app/controllers/harpiya/api/v2/resource_controller.rb +59 -0
- data/app/controllers/harpiya/api/v2/storefront/account/addresses_controller.rb +75 -0
- data/app/controllers/harpiya/api/v2/storefront/account/credit_cards_controller.rb +39 -0
- data/app/controllers/harpiya/api/v2/storefront/account/orders_controller.rb +46 -0
- data/app/controllers/harpiya/api/v2/storefront/account_controller.rb +52 -0
- data/app/controllers/harpiya/api/v2/storefront/cart_controller.rb +195 -0
- data/app/controllers/harpiya/api/v2/storefront/checkout_controller.rb +136 -0
- data/app/controllers/harpiya/api/v2/storefront/countries_controller.rb +50 -0
- data/app/controllers/harpiya/api/v2/storefront/menus_controller.rb +42 -0
- data/app/controllers/harpiya/api/v2/storefront/order_status_controller.rb +34 -0
- data/app/controllers/harpiya/api/v2/storefront/products_controller.rb +55 -0
- data/app/controllers/harpiya/api/v2/storefront/stores_controller.rb +23 -0
- data/app/controllers/harpiya/api/v2/storefront/taxons_controller.rb +47 -0
- data/app/helpers/harpiya/api/api_helpers.rb +190 -0
- data/app/helpers/harpiya/api/v2/collection_options_helpers.rb +46 -0
- data/app/helpers/harpiya/api/v2/display_money_helper.rb +43 -0
- data/app/models/concerns/harpiya/user_api_authentication.rb +19 -0
- data/app/models/concerns/harpiya/user_api_methods.rb +7 -0
- data/app/models/harpiya/api_configuration.rb +8 -0
- data/app/models/harpiya/api_dependencies.rb +98 -0
- data/app/serializers/concerns/harpiya/api/v2/resource_serializer_concern.rb +16 -0
- data/app/serializers/harpiya/api/v2/base_serializer.rb +32 -0
- data/app/serializers/harpiya/api/v2/platform/address_serializer.rb +15 -0
- data/app/serializers/harpiya/api/v2/platform/base_serializer.rb +10 -0
- data/app/serializers/harpiya/api/v2/platform/country_serializer.rb +13 -0
- data/app/serializers/harpiya/api/v2/platform/image_serializer.rb +11 -0
- data/app/serializers/harpiya/api/v2/platform/menu_item_serializer.rb +22 -0
- data/app/serializers/harpiya/api/v2/platform/menu_serializer.rb +14 -0
- data/app/serializers/harpiya/api/v2/platform/option_type_serializer.rb +13 -0
- data/app/serializers/harpiya/api/v2/platform/option_value_serializer.rb +13 -0
- data/app/serializers/harpiya/api/v2/platform/product_property_serializer.rb +11 -0
- data/app/serializers/harpiya/api/v2/platform/product_serializer.rb +28 -0
- data/app/serializers/harpiya/api/v2/platform/state_serializer.rb +13 -0
- data/app/serializers/harpiya/api/v2/platform/store_serializer.rb +14 -0
- data/app/serializers/harpiya/api/v2/platform/taxon_image_serializer.rb +11 -0
- data/app/serializers/harpiya/api/v2/platform/taxon_serializer.rb +37 -0
- data/app/serializers/harpiya/api/v2/platform/taxonomy_serializer.rb +11 -0
- data/app/serializers/harpiya/api/v2/platform/user_serializer.rb +21 -0
- data/app/serializers/harpiya/api/v2/platform/variant_serializer.rb +15 -0
- data/app/serializers/harpiya/v2/storefront/address_serializer.rb +20 -0
- data/app/serializers/harpiya/v2/storefront/base_serializer.rb +10 -0
- data/app/serializers/harpiya/v2/storefront/cart_serializer.rb +36 -0
- data/app/serializers/harpiya/v2/storefront/country_serializer.rb +24 -0
- data/app/serializers/harpiya/v2/storefront/credit_card_serializer.rb +13 -0
- data/app/serializers/harpiya/v2/storefront/estimated_shipping_rate_serializer.rb +29 -0
- data/app/serializers/harpiya/v2/storefront/image_serializer.rb +11 -0
- data/app/serializers/harpiya/v2/storefront/line_item_serializer.rb +19 -0
- data/app/serializers/harpiya/v2/storefront/menu_item_serializer.rb +38 -0
- data/app/serializers/harpiya/v2/storefront/menu_serializer.rb +14 -0
- data/app/serializers/harpiya/v2/storefront/option_type_serializer.rb +13 -0
- data/app/serializers/harpiya/v2/storefront/option_value_serializer.rb +13 -0
- data/app/serializers/harpiya/v2/storefront/payment_method_serializer.rb +11 -0
- data/app/serializers/harpiya/v2/storefront/payment_serializer.rb +15 -0
- data/app/serializers/harpiya/v2/storefront/product_property_serializer.rb +19 -0
- data/app/serializers/harpiya/v2/storefront/product_serializer.rb +67 -0
- data/app/serializers/harpiya/v2/storefront/promotion_serializer.rb +12 -0
- data/app/serializers/harpiya/v2/storefront/shipment_serializer.rb +20 -0
- data/app/serializers/harpiya/v2/storefront/shipping_rate_serializer.rb +16 -0
- data/app/serializers/harpiya/v2/storefront/state_serializer.rb +11 -0
- data/app/serializers/harpiya/v2/storefront/stock_location_serializer.rb +11 -0
- data/app/serializers/harpiya/v2/storefront/store_credit_category_serializer.rb +11 -0
- data/app/serializers/harpiya/v2/storefront/store_credit_event_serializer.rb +15 -0
- data/app/serializers/harpiya/v2/storefront/store_credit_serializer.rb +17 -0
- data/app/serializers/harpiya/v2/storefront/store_credit_type_serializer.rb +11 -0
- data/app/serializers/harpiya/v2/storefront/store_serializer.rb +23 -0
- data/app/serializers/harpiya/v2/storefront/taxon_image_serializer.rb +11 -0
- data/app/serializers/harpiya/v2/storefront/taxon_serializer.rb +36 -0
- data/app/serializers/harpiya/v2/storefront/taxonomy_serializer.rb +11 -0
- data/app/serializers/harpiya/v2/storefront/user_serializer.rb +31 -0
- data/app/serializers/harpiya/v2/storefront/variant_serializer.rb +49 -0
- data/app/services/harpiya/api/error_handler.rb +40 -0
- data/app/views/harpiya/api/errors/gateway_error.rabl +2 -0
- data/app/views/harpiya/api/errors/invalid_api_key.rabl +2 -0
- data/app/views/harpiya/api/errors/invalid_resource.rabl +3 -0
- data/app/views/harpiya/api/errors/must_specify_api_key.rabl +2 -0
- data/app/views/harpiya/api/errors/not_found.rabl +2 -0
- data/app/views/harpiya/api/errors/unauthorized.rabl +2 -0
- data/app/views/harpiya/api/v1/addresses/show.rabl +10 -0
- data/app/views/harpiya/api/v1/adjustments/show.rabl +4 -0
- data/app/views/harpiya/api/v1/countries/index.rabl +7 -0
- data/app/views/harpiya/api/v1/countries/show.rabl +5 -0
- data/app/views/harpiya/api/v1/credit_cards/index.rabl +7 -0
- data/app/views/harpiya/api/v1/credit_cards/show.rabl +3 -0
- data/app/views/harpiya/api/v1/customer_returns/index.rabl +7 -0
- data/app/views/harpiya/api/v1/images/index.rabl +4 -0
- data/app/views/harpiya/api/v1/images/new.rabl +3 -0
- data/app/views/harpiya/api/v1/images/show.rabl +6 -0
- data/app/views/harpiya/api/v1/inventory_units/show.rabl +2 -0
- data/app/views/harpiya/api/v1/line_items/new.rabl +3 -0
- data/app/views/harpiya/api/v1/line_items/show.rabl +14 -0
- data/app/views/harpiya/api/v1/option_types/index.rabl +3 -0
- data/app/views/harpiya/api/v1/option_types/new.rabl +3 -0
- data/app/views/harpiya/api/v1/option_types/show.rabl +5 -0
- data/app/views/harpiya/api/v1/option_values/index.rabl +3 -0
- data/app/views/harpiya/api/v1/option_values/new.rabl +3 -0
- data/app/views/harpiya/api/v1/option_values/show.rabl +2 -0
- data/app/views/harpiya/api/v1/orders/address.rabl +0 -0
- data/app/views/harpiya/api/v1/orders/canceled.rabl +0 -0
- data/app/views/harpiya/api/v1/orders/cart.rabl +0 -0
- data/app/views/harpiya/api/v1/orders/complete.rabl +0 -0
- data/app/views/harpiya/api/v1/orders/could_not_apply_coupon.rabl +2 -0
- data/app/views/harpiya/api/v1/orders/could_not_transition.rabl +3 -0
- data/app/views/harpiya/api/v1/orders/index.rabl +7 -0
- data/app/views/harpiya/api/v1/orders/insufficient_quantity.rabl +2 -0
- data/app/views/harpiya/api/v1/orders/invalid_shipping_method.rabl +2 -0
- data/app/views/harpiya/api/v1/orders/mine.rabl +9 -0
- data/app/views/harpiya/api/v1/orders/order.rabl +10 -0
- data/app/views/harpiya/api/v1/orders/payment.rabl +3 -0
- data/app/views/harpiya/api/v1/orders/show.rabl +51 -0
- data/app/views/harpiya/api/v1/payments/credit_over_limit.rabl +2 -0
- data/app/views/harpiya/api/v1/payments/index.rabl +7 -0
- data/app/views/harpiya/api/v1/payments/new.rabl +5 -0
- data/app/views/harpiya/api/v1/payments/show.rabl +2 -0
- data/app/views/harpiya/api/v1/payments/update_forbidden.rabl +2 -0
- data/app/views/harpiya/api/v1/product_properties/index.rabl +7 -0
- data/app/views/harpiya/api/v1/product_properties/new.rabl +2 -0
- data/app/views/harpiya/api/v1/product_properties/show.rabl +2 -0
- data/app/views/harpiya/api/v1/products/index.rabl +9 -0
- data/app/views/harpiya/api/v1/products/new.rabl +3 -0
- data/app/views/harpiya/api/v1/products/product.rabl +1 -0
- data/app/views/harpiya/api/v1/products/show.rabl +36 -0
- data/app/views/harpiya/api/v1/promotions/handler.rabl +5 -0
- data/app/views/harpiya/api/v1/promotions/show.rabl +2 -0
- data/app/views/harpiya/api/v1/properties/index.rabl +7 -0
- data/app/views/harpiya/api/v1/properties/new.rabl +2 -0
- data/app/views/harpiya/api/v1/properties/show.rabl +2 -0
- data/app/views/harpiya/api/v1/reimbursements/index.rabl +7 -0
- data/app/views/harpiya/api/v1/return_authorizations/index.rabl +7 -0
- data/app/views/harpiya/api/v1/return_authorizations/new.rabl +3 -0
- data/app/views/harpiya/api/v1/return_authorizations/show.rabl +2 -0
- data/app/views/harpiya/api/v1/shared/stock_location_required.rabl +2 -0
- data/app/views/harpiya/api/v1/shipments/big.rabl +48 -0
- data/app/views/harpiya/api/v1/shipments/cannot_ready_shipment.rabl +2 -0
- data/app/views/harpiya/api/v1/shipments/mine.rabl +9 -0
- data/app/views/harpiya/api/v1/shipments/show.rabl +32 -0
- data/app/views/harpiya/api/v1/shipments/small.rabl +37 -0
- data/app/views/harpiya/api/v1/shipping_rates/show.rabl +2 -0
- data/app/views/harpiya/api/v1/states/index.rabl +12 -0
- data/app/views/harpiya/api/v1/states/show.rabl +2 -0
- data/app/views/harpiya/api/v1/stock_items/index.rabl +7 -0
- data/app/views/harpiya/api/v1/stock_items/show.rabl +5 -0
- data/app/views/harpiya/api/v1/stock_locations/index.rabl +7 -0
- data/app/views/harpiya/api/v1/stock_locations/show.rabl +8 -0
- data/app/views/harpiya/api/v1/stock_movements/index.rabl +7 -0
- data/app/views/harpiya/api/v1/stock_movements/show.rabl +5 -0
- data/app/views/harpiya/api/v1/stores/index.rabl +4 -0
- data/app/views/harpiya/api/v1/stores/show.rabl +2 -0
- data/app/views/harpiya/api/v1/tags/index.rabl +9 -0
- data/app/views/harpiya/api/v1/taxonomies/index.rabl +7 -0
- data/app/views/harpiya/api/v1/taxonomies/jstree.rabl +7 -0
- data/app/views/harpiya/api/v1/taxonomies/nested.rabl +11 -0
- data/app/views/harpiya/api/v1/taxonomies/new.rabl +3 -0
- data/app/views/harpiya/api/v1/taxonomies/show.rabl +15 -0
- data/app/views/harpiya/api/v1/taxons/index.rabl +10 -0
- data/app/views/harpiya/api/v1/taxons/jstree.rabl +7 -0
- data/app/views/harpiya/api/v1/taxons/new.rabl +3 -0
- data/app/views/harpiya/api/v1/taxons/show.rabl +6 -0
- data/app/views/harpiya/api/v1/taxons/taxons.rabl +5 -0
- data/app/views/harpiya/api/v1/users/index.rabl +7 -0
- data/app/views/harpiya/api/v1/users/new.rabl +3 -0
- data/app/views/harpiya/api/v1/users/show.rabl +11 -0
- data/app/views/harpiya/api/v1/variants/big.rabl +14 -0
- data/app/views/harpiya/api/v1/variants/index.rabl +9 -0
- data/app/views/harpiya/api/v1/variants/new.rabl +2 -0
- data/app/views/harpiya/api/v1/variants/show.rabl +3 -0
- data/app/views/harpiya/api/v1/variants/small.rabl +18 -0
- data/app/views/harpiya/api/v1/zones/index.rabl +7 -0
- data/app/views/harpiya/api/v1/zones/show.rabl +6 -0
- data/config/initializers/doorkeeper.rb +48 -0
- data/config/initializers/json_api_mime_types.rb +8 -0
- data/config/initializers/rabl.rb +9 -0
- data/config/initializers/user_class_extensions.rb +7 -0
- data/config/locales/en.yml +36 -0
- data/config/routes.rb +295 -0
- data/db/migrate/20100107141738_add_api_key_to_harpiya_users.rb +7 -0
- data/db/migrate/20120411123334_resize_api_key_field.rb +7 -0
- data/db/migrate/20120530054546_rename_api_key_to_harpiya_api_key.rb +7 -0
- data/db/migrate/20131017162334_add_index_to_user_harpiya_api_key.rb +7 -0
- data/db/migrate/20180320110726_create_doorkeeper_tables.rb +69 -0
- data/docs/oauth/index.yml +140 -0
- data/docs/v2/platform/index.yaml +599 -0
- data/docs/v2/storefront/index.yaml +5585 -0
- data/harpiya_api.gemspec +36 -0
- data/lib/harpiya/api.rb +11 -0
- data/lib/harpiya/api/controller_setup.rb +19 -0
- data/lib/harpiya/api/engine.rb +30 -0
- data/lib/harpiya/api/responders.rb +11 -0
- data/lib/harpiya/api/responders/rabl_template.rb +28 -0
- data/lib/harpiya/api/testing_support/caching.rb +10 -0
- data/lib/harpiya/api/testing_support/helpers.rb +44 -0
- data/lib/harpiya/api/testing_support/setup.rb +16 -0
- data/lib/harpiya/api/testing_support/v2/base.rb +13 -0
- data/lib/harpiya/api/testing_support/v2/current_order.rb +79 -0
- data/lib/harpiya/api/testing_support/v2/platform_contexts.rb +213 -0
- data/lib/harpiya_api.rb +4 -0
- data/script/rails +9 -0
- data/spec/fixtures/thinking-cat.jpg +0 -0
- metadata +418 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 409c86a0349c916e9e9c52be9bd722c36448dddd00ce047f803420f3e63d4ba8
|
4
|
+
data.tar.gz: f968607c6a8a35226467cd989bb6857cfc2dc3aa369d6c181af1294a67222bf9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3a1e701ab0f0b8a0b2e71592d0b89439f50a5ca48f37b68980376a1a02035bf1f8d501f23eb519cecb96c71d48acef70e39105bb7968c3d187a18f0d2eec4bea
|
7
|
+
data.tar.gz: bf6958a28183d38407b2f9482f25b41077888c5ae8b50e8cd24c17e6806b3f9f2830d5e17276e3098caf90638bd967a4a26a64222865eec03570c7e346477d69
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2007-2015, Harpiya Commerce, Inc. and other contributors
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
* Neither the name Harpiya nor the names of its contributors may be used to
|
13
|
+
endorse or promote products derived from this software without specific
|
14
|
+
prior written permission.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
20
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'harpiya/testing_support/common_rake'
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new
|
8
|
+
|
9
|
+
task default: :spec
|
10
|
+
|
11
|
+
desc "Generates a dummy app for testing"
|
12
|
+
task :test_app do
|
13
|
+
ENV['LIB_NAME'] = 'harpiya/api'
|
14
|
+
Rake::Task['common:test_app'].invoke
|
15
|
+
end
|
16
|
+
|
17
|
+
namespace :rswag do
|
18
|
+
namespace :specs do
|
19
|
+
desc 'Generate Swagger JSON files from integration specs'
|
20
|
+
RSpec::Core::RakeTask.new('swaggerize') do |t|
|
21
|
+
t.pattern = ENV.fetch(
|
22
|
+
'PATTERN',
|
23
|
+
'spec/integration/**/*_spec.rb'
|
24
|
+
)
|
25
|
+
|
26
|
+
t.rspec_opts = ['--format Rswag::Specs::SwaggerFormatter', '--order defined']
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
//= require harpiya
|
2
|
+
|
3
|
+
var HarpiyaAPI = {
|
4
|
+
oauthToken: null, // user Bearer token to authorize operations for the given user
|
5
|
+
orderToken: null // order token to authorize operations on current order (cart)
|
6
|
+
}
|
7
|
+
|
8
|
+
HarpiyaAPI.Storefront = {}
|
9
|
+
HarpiyaAPI.Platform = {}
|
10
|
+
|
11
|
+
// API routes
|
12
|
+
Harpiya.routes.api_v2_storefront_cart_create = Harpiya.pathFor('api/v2/storefront/cart')
|
13
|
+
Harpiya.routes.api_v2_storefront_cart_add_item = Harpiya.pathFor('api/v2/storefront/cart/add_item')
|
14
|
+
Harpiya.routes.api_v2_storefront_cart_apply_coupon_code = Harpiya.pathFor('api/v2/storefront/cart/apply_coupon_code')
|
15
|
+
|
16
|
+
// helpers
|
17
|
+
HarpiyaAPI.handle500error = function () {
|
18
|
+
alert('Internal Server Error')
|
19
|
+
}
|
20
|
+
|
21
|
+
HarpiyaAPI.prepareHeaders = function (headers) {
|
22
|
+
if (typeof headers === 'undefined') {
|
23
|
+
headers = {}
|
24
|
+
}
|
25
|
+
|
26
|
+
// if signed in we need to pass the Bearer authorization token
|
27
|
+
// so backend will recognize that actions are authorized in scope of this user
|
28
|
+
if (HarpiyaAPI.oauthToken) {
|
29
|
+
headers['Authorization'] = 'Bearer ' + HarpiyaAPI.oauthToken
|
30
|
+
}
|
31
|
+
|
32
|
+
// default headers, required for POST/PATCH/DELETE requests
|
33
|
+
headers['Accept'] = 'application/json'
|
34
|
+
headers['Content-Type'] = 'application/json'
|
35
|
+
return headers
|
36
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
//= require harpiya/api/main
|
2
|
+
|
3
|
+
HarpiyaAPI.Storefront.createCart = function (successCallback, failureCallback) {
|
4
|
+
fetch(Harpiya.routes.api_v2_storefront_cart_create, {
|
5
|
+
method: 'POST',
|
6
|
+
headers: HarpiyaAPI.prepareHeaders()
|
7
|
+
}).then(function (response) {
|
8
|
+
switch (response.status) {
|
9
|
+
case 422:
|
10
|
+
response.json().then(function (json) { failureCallback(json.error) })
|
11
|
+
break
|
12
|
+
case 500:
|
13
|
+
HarpiyaAPI.handle500error()
|
14
|
+
break
|
15
|
+
case 201:
|
16
|
+
response.json().then(function (json) {
|
17
|
+
HarpiyaAPI.orderToken = json.data.attributes.token
|
18
|
+
successCallback()
|
19
|
+
})
|
20
|
+
break
|
21
|
+
}
|
22
|
+
})
|
23
|
+
}
|
24
|
+
|
25
|
+
HarpiyaAPI.Storefront.addToCart = function (variantId, quantity, options, successCallback, failureCallback) {
|
26
|
+
fetch(Harpiya.routes.api_v2_storefront_cart_add_item, {
|
27
|
+
method: 'POST',
|
28
|
+
headers: HarpiyaAPI.prepareHeaders({ 'X-Harpiya-Order-Token': HarpiyaAPI.orderToken }),
|
29
|
+
body: JSON.stringify({
|
30
|
+
variant_id: variantId,
|
31
|
+
quantity: quantity,
|
32
|
+
options: options
|
33
|
+
})
|
34
|
+
}).then(function (response) {
|
35
|
+
switch (response.status) {
|
36
|
+
case 422:
|
37
|
+
response.json().then(function (json) { failureCallback(json.error) })
|
38
|
+
break
|
39
|
+
case 500:
|
40
|
+
HarpiyaAPI.handle500error()
|
41
|
+
break
|
42
|
+
case 200:
|
43
|
+
response.json().then(function (json) {
|
44
|
+
successCallback(json.data)
|
45
|
+
})
|
46
|
+
break
|
47
|
+
}
|
48
|
+
})
|
49
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Harpiya
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
module OrderConcern
|
6
|
+
private
|
7
|
+
|
8
|
+
def render_order(result)
|
9
|
+
if result.success?
|
10
|
+
render_serialized_payload { serialized_current_order }
|
11
|
+
else
|
12
|
+
render_error_payload(result.error)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def ensure_order
|
17
|
+
raise ActiveRecord::RecordNotFound if harpiya_current_order.nil?
|
18
|
+
end
|
19
|
+
|
20
|
+
def order_token
|
21
|
+
request.headers['X-Harpiya-Order-Token'] || params[:order_token]
|
22
|
+
end
|
23
|
+
|
24
|
+
def harpiya_current_order
|
25
|
+
@harpiya_current_order ||= find_harpiya_current_order
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_harpiya_current_order
|
29
|
+
Harpiya::Api::Dependencies.storefront_current_order_finder.constantize.new.execute(
|
30
|
+
store: current_store,
|
31
|
+
user: harpiya_current_user,
|
32
|
+
token: order_token,
|
33
|
+
currency: current_currency
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def serialized_current_order
|
38
|
+
serialize_resource(harpiya_current_order)
|
39
|
+
end
|
40
|
+
|
41
|
+
def serialize_order(order)
|
42
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
43
|
+
`OrderConcern#serialize_order` is deprecated and will be removed in Harpiya 5.0.
|
44
|
+
Please use `serializer_resource` method
|
45
|
+
DEPRECATION
|
46
|
+
serialize_resource(order)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require_dependency 'harpiya/api/controller_setup'
|
2
|
+
|
3
|
+
module Harpiya
|
4
|
+
module Api
|
5
|
+
class BaseController < ActionController::API
|
6
|
+
include Harpiya::Api::ControllerSetup
|
7
|
+
include Harpiya::Core::ControllerHelpers::Store
|
8
|
+
include Harpiya::Core::ControllerHelpers::StrongParameters
|
9
|
+
include Harpiya::Core::ControllerHelpers::Locale
|
10
|
+
include Harpiya::Core::ControllerHelpers::Currency
|
11
|
+
|
12
|
+
attr_accessor :current_api_user
|
13
|
+
|
14
|
+
before_action :set_content_type
|
15
|
+
before_action :load_user
|
16
|
+
before_action :authorize_for_order, if: proc { order_token.present? }
|
17
|
+
before_action :authenticate_user
|
18
|
+
before_action :load_user_roles
|
19
|
+
|
20
|
+
rescue_from ActionController::ParameterMissing, with: :error_during_processing
|
21
|
+
rescue_from ActiveRecord::RecordInvalid, with: :error_during_processing
|
22
|
+
rescue_from ActiveRecord::RecordNotFound, with: :not_found
|
23
|
+
rescue_from CanCan::AccessDenied, with: :unauthorized
|
24
|
+
rescue_from Harpiya::Core::GatewayError, with: :gateway_error
|
25
|
+
|
26
|
+
helper Harpiya::Api::ApiHelpers
|
27
|
+
|
28
|
+
# users should be able to set price when importing orders via api
|
29
|
+
def permitted_line_item_attributes
|
30
|
+
if @current_user_roles.include?('admin')
|
31
|
+
super + [:price, :variant_id, :sku]
|
32
|
+
else
|
33
|
+
super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def content_type
|
38
|
+
case params[:format]
|
39
|
+
when 'json'
|
40
|
+
'application/json; charset=utf-8'
|
41
|
+
when 'xml'
|
42
|
+
'text/xml; charset=utf-8'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def set_content_type
|
49
|
+
headers['Content-Type'] = content_type
|
50
|
+
end
|
51
|
+
|
52
|
+
def load_user
|
53
|
+
@current_api_user = Harpiya.user_class.find_by(harpiya_api_key: api_key.to_s)
|
54
|
+
end
|
55
|
+
|
56
|
+
def authenticate_user
|
57
|
+
return if @current_api_user
|
58
|
+
|
59
|
+
if requires_authentication? && api_key.blank? && order_token.blank?
|
60
|
+
must_specify_api_key and return
|
61
|
+
elsif order_token.blank? && (requires_authentication? || api_key.present?)
|
62
|
+
invalid_api_key and return
|
63
|
+
else
|
64
|
+
# An anonymous user
|
65
|
+
@current_api_user = Harpiya.user_class.new
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def invalid_api_key
|
70
|
+
render 'harpiya/api/errors/invalid_api_key', status: 401
|
71
|
+
end
|
72
|
+
|
73
|
+
def must_specify_api_key
|
74
|
+
render 'harpiya/api/errors/must_specify_api_key', status: 401
|
75
|
+
end
|
76
|
+
|
77
|
+
def load_user_roles
|
78
|
+
@current_user_roles = @current_api_user ? @current_api_user.harpiya_roles.pluck(:name) : []
|
79
|
+
end
|
80
|
+
|
81
|
+
def unauthorized
|
82
|
+
render 'harpiya/api/errors/unauthorized', status: 401 and return
|
83
|
+
end
|
84
|
+
|
85
|
+
def error_during_processing(exception)
|
86
|
+
message = if exception.respond_to?(:original_message)
|
87
|
+
exception.original_message
|
88
|
+
else
|
89
|
+
exception.message
|
90
|
+
end
|
91
|
+
|
92
|
+
Rails.logger.error message
|
93
|
+
Rails.logger.error exception.backtrace.join("\n")
|
94
|
+
|
95
|
+
unprocessable_entity(message)
|
96
|
+
end
|
97
|
+
|
98
|
+
def unprocessable_entity(message)
|
99
|
+
render plain: { exception: message }.to_json, status: 422
|
100
|
+
end
|
101
|
+
|
102
|
+
def gateway_error(exception)
|
103
|
+
@order.errors.add(:base, exception.message)
|
104
|
+
invalid_resource!(@order)
|
105
|
+
end
|
106
|
+
|
107
|
+
def requires_authentication?
|
108
|
+
Harpiya::Api::Config[:requires_authentication]
|
109
|
+
end
|
110
|
+
|
111
|
+
def not_found
|
112
|
+
render 'harpiya/api/errors/not_found', status: 404 and return
|
113
|
+
end
|
114
|
+
|
115
|
+
def current_ability
|
116
|
+
Harpiya::Dependencies.ability_class.constantize.new(current_api_user)
|
117
|
+
end
|
118
|
+
|
119
|
+
def invalid_resource!(resource)
|
120
|
+
@resource = resource
|
121
|
+
render 'harpiya/api/errors/invalid_resource', status: 422
|
122
|
+
end
|
123
|
+
|
124
|
+
def api_key
|
125
|
+
request.headers['X-Harpiya-Token'] || params[:token]
|
126
|
+
end
|
127
|
+
helper_method :api_key
|
128
|
+
|
129
|
+
def order_token
|
130
|
+
request.headers['X-Harpiya-Order-Token'] || params[:order_token]
|
131
|
+
end
|
132
|
+
|
133
|
+
def find_product(id)
|
134
|
+
@product = product_scope.friendly.distinct(false).find(id.to_s)
|
135
|
+
rescue ActiveRecord::RecordNotFound
|
136
|
+
@product = product_scope.find_by(id: id)
|
137
|
+
not_found unless @product
|
138
|
+
end
|
139
|
+
|
140
|
+
def product_scope
|
141
|
+
if @current_user_roles.include?('admin')
|
142
|
+
scope = Product.with_deleted.accessible_by(current_ability, :show).includes(*product_includes)
|
143
|
+
|
144
|
+
scope = scope.not_deleted unless params[:show_deleted]
|
145
|
+
scope = scope.not_discontinued unless params[:show_discontinued]
|
146
|
+
else
|
147
|
+
scope = Product.accessible_by(current_ability, :show).active.includes(*product_includes)
|
148
|
+
end
|
149
|
+
|
150
|
+
scope
|
151
|
+
end
|
152
|
+
|
153
|
+
def variants_associations
|
154
|
+
[{ option_values: :option_type }, :default_price, :images]
|
155
|
+
end
|
156
|
+
|
157
|
+
def product_includes
|
158
|
+
[:option_types, :taxons, product_properties: :property, variants: variants_associations, master: variants_associations]
|
159
|
+
end
|
160
|
+
|
161
|
+
def order_id
|
162
|
+
params[:order_id] || params[:checkout_id] || params[:order_number]
|
163
|
+
end
|
164
|
+
|
165
|
+
def authorize_for_order
|
166
|
+
@order = Harpiya::Order.find_by(number: order_id)
|
167
|
+
authorize! :show, @order, order_token
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Harpiya
|
2
|
+
module Api
|
3
|
+
module V1
|
4
|
+
class AddressesController < Harpiya::Api::BaseController
|
5
|
+
before_action :find_order
|
6
|
+
|
7
|
+
def show
|
8
|
+
authorize! :show, @order, order_token
|
9
|
+
@address = find_address
|
10
|
+
respond_with(@address)
|
11
|
+
end
|
12
|
+
|
13
|
+
def update
|
14
|
+
authorize! :update, @order, order_token
|
15
|
+
@address = find_address
|
16
|
+
|
17
|
+
if @address.update(address_params)
|
18
|
+
respond_with(@address, default_template: :show)
|
19
|
+
else
|
20
|
+
invalid_resource!(@address)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def address_params
|
27
|
+
params.require(:address).permit(permitted_address_attributes)
|
28
|
+
end
|
29
|
+
|
30
|
+
def find_order
|
31
|
+
@order = Harpiya::Order.find_by!(number: order_id)
|
32
|
+
end
|
33
|
+
|
34
|
+
def find_address
|
35
|
+
if @order.bill_address_id == params[:id].to_i
|
36
|
+
@order.bill_address
|
37
|
+
elsif @order.ship_address_id == params[:id].to_i
|
38
|
+
@order.ship_address
|
39
|
+
else
|
40
|
+
raise CanCan::AccessDenied
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|