spree_api 6.0.0.beta4 → 6.0.0.rc2
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 +4 -4
- data/Rakefile +4 -48
- data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
- data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
- data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
- data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
- data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
- data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
- data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
- data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
- data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
- data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
- data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
- data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
- data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
- data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
- data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
- data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
- data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
- data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
- data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
- data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
- data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
- data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
- data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
- data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
- data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
- data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
- data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
- data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
- data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
- data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
- data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
- data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
- data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
- data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
- data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
- data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
- data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
- data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
- data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
- data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
- data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
- data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
- data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
- data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
- data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
- data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
- data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
- data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
- data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
- data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
- data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
- data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
- data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
- data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
- data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
- data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
- data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
- data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
- data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
- data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
- data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
- data/app/controllers/spree/api/v3/base_controller.rb +12 -0
- data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
- data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
- data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
- data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
- data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
- data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
- data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
- data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
- data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
- data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
- data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
- data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
- data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
- data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
- data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
- data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
- data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
- data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
- data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
- data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
- data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
- data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
- data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
- data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
- data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
- data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
- data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
- data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
- data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
- data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
- data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
- data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
- data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
- data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
- data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
- data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
- data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
- data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
- data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
- data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
- data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
- data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
- data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
- data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
- data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
- data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
- data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
- data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
- data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
- data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
- data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
- data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
- data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
- data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
- data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
- data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
- data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
- data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
- data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
- data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
- data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
- data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
- data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
- data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
- data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
- data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
- data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
- data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
- data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
- data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
- data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
- data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
- data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
- data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
- data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
- data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
- data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
- data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
- data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
- data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
- data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
- data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
- data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
- data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
- data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
- data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
- data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
- data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
- data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
- data/app/services/spree/api/v3/filter_predicates.rb +29 -0
- data/app/services/spree/api/v3/filter_table.rb +337 -0
- data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
- data/app/services/spree/api/v3/request_schema.rb +430 -0
- data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
- data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
- data/config/initializers/pagy.rb +1 -1
- data/config/initializers/typelizer.rb +7 -9
- data/config/locales/ar.yml +15 -0
- data/config/locales/be.yml +15 -0
- data/config/locales/bg.yml +15 -0
- data/config/locales/ca.yml +15 -0
- data/config/locales/cs.yml +15 -0
- data/config/locales/da.yml +15 -0
- data/config/locales/de-CH.yml +11 -0
- data/config/locales/de.yml +15 -0
- data/config/locales/el.yml +15 -0
- data/config/locales/en.yml +5 -40
- data/config/locales/es-CL.yml +10 -0
- data/config/locales/es-EC.yml +11 -0
- data/config/locales/es-MX.yml +12 -0
- data/config/locales/es.yml +15 -0
- data/config/locales/et.yml +15 -0
- data/config/locales/fa.yml +15 -0
- data/config/locales/fi.yml +15 -0
- data/config/locales/fr.yml +15 -0
- data/config/locales/hu.yml +15 -0
- data/config/locales/id.yml +15 -0
- data/config/locales/it.yml +15 -0
- data/config/locales/ja.yml +15 -0
- data/config/locales/km.yml +15 -0
- data/config/locales/ko.yml +15 -0
- data/config/locales/ku.yml +15 -0
- data/config/locales/lt.yml +15 -0
- data/config/locales/lv.yml +15 -0
- data/config/locales/nb.yml +15 -0
- data/config/locales/ne.yml +15 -0
- data/config/locales/nl.yml +15 -0
- data/config/locales/pl.yml +15 -0
- data/config/locales/pt-BR.yml +13 -0
- data/config/locales/pt.yml +15 -0
- data/config/locales/ro.yml +15 -0
- data/config/locales/ru.yml +15 -0
- data/config/locales/sk.yml +15 -0
- data/config/locales/sl-SI.yml +15 -0
- data/config/locales/sv.yml +15 -0
- data/config/locales/th.yml +15 -0
- data/config/locales/tr.yml +15 -0
- data/config/locales/uk.yml +15 -0
- data/config/locales/vi.yml +15 -0
- data/config/locales/zh-CN.yml +15 -0
- data/config/locales/zh-TW.yml +15 -0
- data/config/routes.rb +54 -102
- data/lib/spree/api/configuration.rb +5 -0
- data/lib/spree/api/dependencies.rb +54 -274
- data/lib/spree/api/middleware/request_size_limit.rb +24 -3
- data/lib/spree/api/openapi/filter_documentation.rb +136 -0
- data/lib/spree/api/openapi/schema_helper.rb +127 -81
- data/lib/spree/api/preference_families.rb +46 -0
- data/lib/spree/api/preference_types.rb +138 -0
- data/lib/spree/api/typelizer_generation.rb +39 -0
- data/lib/spree/api/webhook_event_types.rb +140 -0
- data/lib/spree/api.rb +0 -2
- data/lib/tasks/filters.rake +12 -0
- data/lib/typelizer/open_enums.rb +10 -0
- metadata +125 -40
- data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
- data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
- data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
- data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
- data/config/i18n-tasks.yml +0 -40
- data/config/initializers/alba.rb +0 -5
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
# What one write endpoint accepts, declared once. The controller permits
|
|
5
|
+
# from it, the API reference documents it, and the SDK request types are
|
|
6
|
+
# generated from the reference, so the three cannot disagree.
|
|
7
|
+
#
|
|
8
|
+
# request_params :product do |body|
|
|
9
|
+
# body.attribute :name, :string, required: true, on: :create
|
|
10
|
+
# body.attribute :status, :string, choices: Spree::Product::STATUSES, open: true
|
|
11
|
+
# body.attribute :category_ids, :array, of: :id
|
|
12
|
+
# body.attribute :metadata, :hash
|
|
13
|
+
# body.attribute :prices, :array, of: Spree::Api::V3::PriceRequestSchema
|
|
14
|
+
# body.attribute :options, :array do |option|
|
|
15
|
+
# option.attribute :name, :string, required: true
|
|
16
|
+
# end
|
|
17
|
+
# end
|
|
18
|
+
#
|
|
19
|
+
# The vocabulary is the `preference` one: a type symbol, `of:` for what
|
|
20
|
+
# an `:array` holds, `choices:` for a closed list (`open: true` when
|
|
21
|
+
# extensions may extend it), `:hash` for any keys. `required: true` is
|
|
22
|
+
# required on both actions; add `on: :create` to require it when
|
|
23
|
+
# creating only. `only: :create` (or `:update`) accepts the field on one
|
|
24
|
+
# action alone. `permit: false` documents a field the controller reads
|
|
25
|
+
# from the raw params itself. `format:` documents a string's format
|
|
26
|
+
# (`email`, `uri`). `deprecated: 'Use country_code. Removed in 6.1.'`
|
|
27
|
+
# keeps a field working while the API reference and the SDK types flag it.
|
|
28
|
+
class RequestSchema
|
|
29
|
+
KINDS = {
|
|
30
|
+
string: { type: :string },
|
|
31
|
+
integer: { type: :integer },
|
|
32
|
+
# Measurements a client sends as JSON numbers (weights, dimensions,
|
|
33
|
+
# coordinates). Money is never a number: use `decimal`.
|
|
34
|
+
number: { type: :number },
|
|
35
|
+
# Amounts, rates and quantities with decimals travel as canonical
|
|
36
|
+
# decimal strings, never JSON numbers (see Spree::Money::Rounding).
|
|
37
|
+
decimal: { type: :string, format: :decimal, pattern: '^-?\d+(\.\d+)?$' },
|
|
38
|
+
boolean: { type: :boolean },
|
|
39
|
+
date: { type: :string, format: :date },
|
|
40
|
+
datetime: { type: :string, format: :'date-time' },
|
|
41
|
+
id: { type: :string },
|
|
42
|
+
any: {},
|
|
43
|
+
# ISO codes, from the closed lists below.
|
|
44
|
+
country: { type: :string },
|
|
45
|
+
currency: { type: :string },
|
|
46
|
+
locale: { type: :string }
|
|
47
|
+
}.freeze
|
|
48
|
+
|
|
49
|
+
# The ISO lists a `country` or `currency` field takes, published once
|
|
50
|
+
# per API as a named component — the same `CountryCode` and
|
|
51
|
+
# `CurrencyCode` types the serializers declare, so a value read from
|
|
52
|
+
# a response is the type a request takes.
|
|
53
|
+
CODE_LISTS = {
|
|
54
|
+
country: ['CountryCode', -> { Spree::IsoData.country_codes }],
|
|
55
|
+
currency: ['CurrencyCode', -> { Spree::Money::Rounding::CURRENCY_CODES }],
|
|
56
|
+
locale: ['LocaleCode', -> { Spree::Locales::ALL }]
|
|
57
|
+
}.freeze
|
|
58
|
+
|
|
59
|
+
ACTIONS = %i[create update].freeze
|
|
60
|
+
|
|
61
|
+
OPEN_LIST_NOTE = 'The values listed are the built-in ones; extensions may add more.'.freeze
|
|
62
|
+
|
|
63
|
+
class Field
|
|
64
|
+
attr_reader :name, :kind, :array, :required, :nullable, :description, :example, :enum, :open, :only, :schema,
|
|
65
|
+
:permit, :format, :deprecated
|
|
66
|
+
|
|
67
|
+
def initialize(name, kind, array: false, required: false, nullable: false, description: nil,
|
|
68
|
+
example: nil, enum: nil, open: false, only: nil, schema: nil, permit: true, format: nil,
|
|
69
|
+
deprecated: nil)
|
|
70
|
+
raise ArgumentError, "deprecated: says what to use instead (#{name})" if deprecated == true
|
|
71
|
+
|
|
72
|
+
raise ArgumentError, "open: needs an enum: list of the built-in values (#{name})" if open && enum.nil?
|
|
73
|
+
|
|
74
|
+
unless required.in?([true, false, :create])
|
|
75
|
+
raise ArgumentError, "required: must be true, false or :create (#{name})"
|
|
76
|
+
end
|
|
77
|
+
raise ArgumentError, "only: must be :create or :update (#{name})" if only && !only.in?(ACTIONS)
|
|
78
|
+
|
|
79
|
+
@name = name.to_sym
|
|
80
|
+
@kind = kind
|
|
81
|
+
@array = array
|
|
82
|
+
@required = required
|
|
83
|
+
@nullable = nullable
|
|
84
|
+
@description = description
|
|
85
|
+
@example = example
|
|
86
|
+
@enum = enum&.map(&:to_s)
|
|
87
|
+
@open = open
|
|
88
|
+
@only = only
|
|
89
|
+
@schema = schema
|
|
90
|
+
@permit = permit
|
|
91
|
+
@format = format
|
|
92
|
+
@deprecated = deprecated
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# @param action [Symbol, nil]
|
|
96
|
+
def accepted_on?(action)
|
|
97
|
+
only.nil? || action.nil? || only == action
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# @param action [Symbol, nil]
|
|
101
|
+
def required_on?(action)
|
|
102
|
+
required == true || (required == :create && action == :create)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# This field, required on `on` (`:create`) or always. A field
|
|
106
|
+
# already required always stays required always.
|
|
107
|
+
#
|
|
108
|
+
# @param on [Symbol, nil] `:create`, or nil for every action
|
|
109
|
+
# @return [Field]
|
|
110
|
+
def required_copy(on)
|
|
111
|
+
copy = dup
|
|
112
|
+
copy.instance_variable_set(:@required, required == true ? true : on || true)
|
|
113
|
+
copy
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# A hash of any keys, such as `metadata` or `provider_settings`.
|
|
117
|
+
def free_object?
|
|
118
|
+
kind == :object && schema.nil?
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
attr_reader :name, :fields
|
|
123
|
+
|
|
124
|
+
# The types an attribute takes: the scalars above, plus `:hash` (any
|
|
125
|
+
# keys), `:object` (a block or a `shape:`) and `:array` (`of:` a type
|
|
126
|
+
# or a shape, or a block of fields).
|
|
127
|
+
TYPES = (KINDS.keys + %i[hash object array]).freeze
|
|
128
|
+
|
|
129
|
+
# A shape shared between several endpoints (a price, an address),
|
|
130
|
+
# published as its own component so each SDK has one type for it.
|
|
131
|
+
#
|
|
132
|
+
# @param name [String] the component name, such as `PriceParams`
|
|
133
|
+
# @return [RequestSchema]
|
|
134
|
+
def self.shape(name, &block)
|
|
135
|
+
raise ArgumentError, "a shape's name ends in Params (#{name})" unless name.to_s.end_with?('Params')
|
|
136
|
+
|
|
137
|
+
new(name, &block)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# A shape several endpoints share is a class in app/request_schemas,
|
|
141
|
+
# declared the way a model declares its attributes:
|
|
142
|
+
#
|
|
143
|
+
# class Spree::Api::V3::PriceRequestSchema < Spree::Api::V3::RequestSchema
|
|
144
|
+
# publishes 'PriceParams'
|
|
145
|
+
#
|
|
146
|
+
# attribute :currency, :currency, required: true
|
|
147
|
+
# end
|
|
148
|
+
#
|
|
149
|
+
# A subclass starts from its parent's attributes, so the Admin API's
|
|
150
|
+
# address extends the shared one. Without `publishes` the class is a
|
|
151
|
+
# set of attributes other declarations include rather than a type of
|
|
152
|
+
# its own.
|
|
153
|
+
class << self
|
|
154
|
+
# @param name [String] the component name, ending in `Params`
|
|
155
|
+
def publishes(name)
|
|
156
|
+
raise ArgumentError, "a shape's name ends in Params (#{name})" unless name.to_s.end_with?('Params')
|
|
157
|
+
raise ArgumentError, "#{self.name}: `publishes` goes before the attributes" if @definition
|
|
158
|
+
|
|
159
|
+
@published_name = name.to_s
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# @return [RequestSchema] what the class declares
|
|
163
|
+
def definition
|
|
164
|
+
@definition ||= new(@published_name).tap do |schema|
|
|
165
|
+
schema.include_attributes(superclass) if superclass < RequestSchema
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# @param value [RequestSchema, Class] an instance or a declared class
|
|
170
|
+
# @return [RequestSchema, nil]
|
|
171
|
+
def resolve(value)
|
|
172
|
+
value.is_a?(Class) ? value.definition : value
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
%i[attribute include_attributes require_attributes external_references].each do |method|
|
|
176
|
+
define_method(method) { |*args, **options, &block| definition.public_send(method, *args, **options, &block) }
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# @param name [String, Symbol, nil] the resource, `product` publishing
|
|
181
|
+
# `ProductCreateParams` and `ProductUpdateParams`; or a name ending
|
|
182
|
+
# in `Params`, published as given for every action
|
|
183
|
+
# @yieldparam schema [RequestSchema] the schema, to declare attributes on
|
|
184
|
+
def initialize(name = nil)
|
|
185
|
+
@name = name&.to_s
|
|
186
|
+
@fields = {}
|
|
187
|
+
yield self if block_given?
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Declares one attribute of the body.
|
|
191
|
+
#
|
|
192
|
+
# @param name [Symbol]
|
|
193
|
+
# @param type [Symbol] one of TYPES
|
|
194
|
+
# @param of [Symbol, Class, RequestSchema, nil] what an `:array` holds:
|
|
195
|
+
# a scalar type, or a shared shape
|
|
196
|
+
# @param shape [Class, RequestSchema, nil] what an `:object` holds
|
|
197
|
+
# @param as [String, nil] publishes a block's object (or the objects
|
|
198
|
+
# of an `:array`) as a component of this name
|
|
199
|
+
# @param choices [Array, nil] the values the attribute takes
|
|
200
|
+
# @param required [Boolean]
|
|
201
|
+
# @param on [Symbol, nil] `:create` to require it only when creating
|
|
202
|
+
# @yieldparam schema [RequestSchema] a nested object's attributes
|
|
203
|
+
def attribute(name, type, of: nil, shape: nil, as: nil, choices: nil, required: false, on: nil, **options, &block)
|
|
204
|
+
raise ArgumentError, "#{name}: unknown type #{type.inspect}; use one of #{TYPES.join(', ')}" unless TYPES.include?(type)
|
|
205
|
+
raise ArgumentError, "#{name}: `on:` scopes `required: true` and is `:create`" if on && (!required || on != :create)
|
|
206
|
+
|
|
207
|
+
options = options.merge(required: on || required, enum: choices)
|
|
208
|
+
nested = nested_schema(type, of: of, shape: shape, as: as, &block)
|
|
209
|
+
|
|
210
|
+
case type
|
|
211
|
+
when :array then add_array(name, of, nested, options)
|
|
212
|
+
when :object
|
|
213
|
+
raise ArgumentError, "#{name}: an :object needs a block or `shape:`; use :hash for any keys" unless nested
|
|
214
|
+
|
|
215
|
+
add(Field.new(name, :object, schema: nested, **options))
|
|
216
|
+
when :hash then add(Field.new(name, :object, **options))
|
|
217
|
+
else add(Field.new(name, type, **options))
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# The identities a record has in external systems, which the Admin API
|
|
222
|
+
# reads from the raw params (Admin::Concerns::ExternalReferences).
|
|
223
|
+
def external_references
|
|
224
|
+
attribute :external_references, :hash, permit: false, description: <<~TEXT.squish
|
|
225
|
+
Identities the record has in external systems, keyed by system: the same
|
|
226
|
+
`{ system: external_id }` map the Admin API renders, so what you read can be
|
|
227
|
+
sent straight back. Systems you do not name keep the reference they have.
|
|
228
|
+
A list of `{ system, external_id }` entries is accepted too.
|
|
229
|
+
TEXT
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# Adds the attributes of another schema, for endpoints that extend a
|
|
233
|
+
# shared set.
|
|
234
|
+
#
|
|
235
|
+
# @param other [RequestSchema, Class]
|
|
236
|
+
def include_attributes(other)
|
|
237
|
+
RequestSchema.resolve(other).fields.each_value { |field| add(field) }
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# Marks attributes this schema took from another as required, for an
|
|
241
|
+
# endpoint whose model needs what the shared set leaves optional.
|
|
242
|
+
#
|
|
243
|
+
# @param names [Array<Symbol>]
|
|
244
|
+
# @param on [Symbol, nil] `:create` to require them only when creating
|
|
245
|
+
# @return [void]
|
|
246
|
+
def require_attributes(*names, on: nil)
|
|
247
|
+
raise ArgumentError, '`on:` is :create' if on && on != :create
|
|
248
|
+
|
|
249
|
+
names.each do |name|
|
|
250
|
+
field = fields.fetch(name) { raise ArgumentError, "#{name} is not an attribute of this schema" }
|
|
251
|
+
fields[name] = field.required_copy(on)
|
|
252
|
+
end
|
|
253
|
+
@permit_lists = nil
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# The `params.permit` list for an action.
|
|
257
|
+
#
|
|
258
|
+
# @param action [Symbol, String, nil] `create` or `update`; nil
|
|
259
|
+
# accepts every field
|
|
260
|
+
# @return [Array<Symbol, Hash>]
|
|
261
|
+
def permit_list(action = nil)
|
|
262
|
+
action = action&.to_sym
|
|
263
|
+
(@permit_lists ||= {})[action] ||= build_permit_list(action).freeze
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
# The JSON Schema of the request body for an action.
|
|
267
|
+
#
|
|
268
|
+
# @param action [Symbol, String, nil]
|
|
269
|
+
# @return [Hash]
|
|
270
|
+
def json_schema(action = nil)
|
|
271
|
+
action = action&.to_sym
|
|
272
|
+
fields = fields_for(action)
|
|
273
|
+
required = fields.select { |field| field.required_on?(action) }.map { |field| field.name.to_s }
|
|
274
|
+
|
|
275
|
+
schema = { type: :object, properties: fields.to_h { |field| [field.name, property_schema(field)] } }
|
|
276
|
+
schema[:required] = required if required.any?
|
|
277
|
+
schema
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# The component name published for an action.
|
|
281
|
+
#
|
|
282
|
+
# @param action [Symbol, String]
|
|
283
|
+
# @return [String]
|
|
284
|
+
def component_name(action)
|
|
285
|
+
return name if name.end_with?('Params')
|
|
286
|
+
|
|
287
|
+
"#{name.camelize}#{action.to_s.camelize}Params"
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# Every named shape this schema reaches, nested ones included.
|
|
291
|
+
#
|
|
292
|
+
# @return [Array<RequestSchema>]
|
|
293
|
+
def shapes
|
|
294
|
+
fields.each_value.flat_map do |field|
|
|
295
|
+
next [] unless field.schema
|
|
296
|
+
|
|
297
|
+
nested = field.schema.shapes
|
|
298
|
+
shape?(field.schema) ? [field.schema, *nested] : nested
|
|
299
|
+
end.uniq
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# The ISO code lists this schema's fields reach, nested ones included,
|
|
303
|
+
# as the components they publish.
|
|
304
|
+
#
|
|
305
|
+
# @return [Hash{String => Hash}]
|
|
306
|
+
def code_lists
|
|
307
|
+
fields.each_value.each_with_object({}) do |field, lists|
|
|
308
|
+
lists.merge!(field.schema.code_lists) if field.schema
|
|
309
|
+
next unless CODE_LISTS.key?(field.kind)
|
|
310
|
+
|
|
311
|
+
name, values = CODE_LISTS[field.kind]
|
|
312
|
+
lists[name] = { type: :string, enum: values.call }
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
def shape?(schema)
|
|
317
|
+
schema.name.present?
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
private
|
|
321
|
+
|
|
322
|
+
def nested_schema(type, of:, shape:, as:, &block)
|
|
323
|
+
return RequestSchema.resolve(shape) if shape
|
|
324
|
+
return RequestSchema.resolve(of) if of.is_a?(Class) || of.is_a?(RequestSchema)
|
|
325
|
+
return unless block
|
|
326
|
+
|
|
327
|
+
as ? RequestSchema.shape(as, &block) : RequestSchema.new(&block)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def add_array(name, of, nested, options)
|
|
331
|
+
return add(Field.new(name, :object, schema: nested, array: true, **options)) if nested
|
|
332
|
+
|
|
333
|
+
unless of.is_a?(Symbol) && KINDS.key?(of)
|
|
334
|
+
raise ArgumentError, "#{name}: an :array needs `of:` a scalar type or a shape, or a block of attributes"
|
|
335
|
+
end
|
|
336
|
+
# Rails permits a list of scalars, never a list of any-key hashes.
|
|
337
|
+
if of == :any && options.fetch(:permit, true)
|
|
338
|
+
raise ArgumentError, "#{name}: a list of :any values cannot be permitted; declare its items or use `permit: false`"
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
add(Field.new(name, of, array: true, **options))
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
def add(field)
|
|
345
|
+
raise ArgumentError, "#{field.name} is declared twice" if fields.key?(field.name)
|
|
346
|
+
|
|
347
|
+
@permit_lists = nil
|
|
348
|
+
fields[field.name] = field
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def build_permit_list(action)
|
|
352
|
+
scalars = []
|
|
353
|
+
nested = []
|
|
354
|
+
|
|
355
|
+
fields_for(action).each do |field|
|
|
356
|
+
next unless field.permit
|
|
357
|
+
|
|
358
|
+
if field.schema
|
|
359
|
+
nested << { field.name => field.schema.permit_list }
|
|
360
|
+
elsif field.free_object?
|
|
361
|
+
nested << { field.name => {} }
|
|
362
|
+
elsif field.kind == :any
|
|
363
|
+
# A value of any JSON type: a scalar, a list or a hash.
|
|
364
|
+
scalars << field.name
|
|
365
|
+
nested << { field.name => [] } << { field.name => {} }
|
|
366
|
+
elsif field.array
|
|
367
|
+
nested << { field.name => [] }
|
|
368
|
+
else
|
|
369
|
+
scalars << field.name
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
scalars + nested
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def fields_for(action)
|
|
378
|
+
fields.values.select { |field| field.accepted_on?(action) }
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
def property_schema(field)
|
|
382
|
+
item = item_schema(field)
|
|
383
|
+
description = [field.description, (OPEN_LIST_NOTE if field.open), deprecation_note(field)].compact.join(' ').presence
|
|
384
|
+
documentation = { description: description, example: field.example }.compact
|
|
385
|
+
documentation[:deprecated] = true if field.deprecated
|
|
386
|
+
|
|
387
|
+
if field.array
|
|
388
|
+
schema = { type: :array, items: item }.merge(documentation)
|
|
389
|
+
schema[:nullable] = true if field.nullable
|
|
390
|
+
return schema
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
# A $ref ignores the keys beside it, so a described or nullable
|
|
394
|
+
# reference wraps it.
|
|
395
|
+
if item.key?(:$ref) && (documentation.any? || field.nullable)
|
|
396
|
+
item = { allOf: [item] }
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
item = item.merge(documentation)
|
|
400
|
+
item[:nullable] = true if field.nullable
|
|
401
|
+
item
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
def deprecation_note(field)
|
|
405
|
+
"Deprecated: #{field.deprecated}" if field.deprecated
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
def item_schema(field)
|
|
409
|
+
return { '$ref': "#/components/schemas/#{CODE_LISTS[field.kind].first}" } if CODE_LISTS.key?(field.kind)
|
|
410
|
+
|
|
411
|
+
if field.schema
|
|
412
|
+
return { '$ref': "#/components/schemas/#{field.schema.name}" } if shape?(field.schema)
|
|
413
|
+
|
|
414
|
+
return field.schema.json_schema
|
|
415
|
+
end
|
|
416
|
+
return { type: :object, additionalProperties: true } if field.free_object?
|
|
417
|
+
|
|
418
|
+
schema = KINDS.fetch(field.kind).dup
|
|
419
|
+
schema[:format] = field.format if field.format
|
|
420
|
+
return schema unless field.enum
|
|
421
|
+
return schema.merge(enum: field.enum) unless field.open
|
|
422
|
+
|
|
423
|
+
# The same open list the serializers publish (`enum_type_name`):
|
|
424
|
+
# clients autocomplete the built-in values and still accept any other.
|
|
425
|
+
{ anyOf: [schema.merge(enum: field.enum), schema] }
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
end
|
|
@@ -90,10 +90,14 @@ module Spree
|
|
|
90
90
|
http_options = { open_timeout: TIMEOUT, read_timeout: TIMEOUT, verify_mode: ssl_verify_mode }
|
|
91
91
|
|
|
92
92
|
# SSRF protection is disabled in development so webhooks can reach
|
|
93
|
-
# localhost / host.docker.internal (the storefront running on the host)
|
|
94
|
-
|
|
93
|
+
# localhost / host.docker.internal (the storefront running on the host),
|
|
94
|
+
# and for hosts the operator explicitly trusts
|
|
95
|
+
# (Spree::Api::Config.webhooks_allowed_internal_hosts).
|
|
96
|
+
if Rails.env.development? || Spree::WebhookEndpoint.allowed_internal_host?(@delivery.url)
|
|
95
97
|
uri = URI.parse(@delivery.url)
|
|
96
|
-
|
|
98
|
+
# No proxy, as SsrfFilter: an egress proxy from the environment would
|
|
99
|
+
# carry this in-cluster (or localhost) request out of the network.
|
|
100
|
+
http = Net::HTTP.new(uri.hostname, uri.port, nil)
|
|
97
101
|
http.use_ssl = uri.scheme == 'https'
|
|
98
102
|
http_options.each { |k, v| http.send(:"#{k}=", v) }
|
|
99
103
|
|
|
@@ -17,19 +17,12 @@ module Spree
|
|
|
17
17
|
class WebhookEventSubscriber < Spree::Subscriber
|
|
18
18
|
subscribes_to '*'
|
|
19
19
|
|
|
20
|
-
# Admin and seller auth events carry live credentials (password reset
|
|
21
|
-
# tokens) and have no legitimate external consumer — core delivers those
|
|
22
|
-
# emails itself. Never forward them to webhook endpoints, including '*'
|
|
23
|
-
# subscriptions.
|
|
24
|
-
NON_DELIVERABLE_EVENTS = %w[
|
|
25
|
-
admin_user.password_reset_requested
|
|
26
|
-
seller_user.password_reset_requested
|
|
27
|
-
].freeze
|
|
28
|
-
|
|
29
20
|
def handle(event)
|
|
30
21
|
return unless Spree::Api::Config.webhooks_enabled
|
|
31
22
|
return if event.store_id.blank?
|
|
32
|
-
|
|
23
|
+
# Events declared `webhook: false` (staff and seller password reset
|
|
24
|
+
# requests) never leave Spree, whatever an endpoint subscribes to.
|
|
25
|
+
return unless Spree::Events.catalog.webhook?(event.name)
|
|
33
26
|
|
|
34
27
|
# Only load the columns we need for matching and delivery
|
|
35
28
|
endpoints = Spree::WebhookEndpoint
|
data/config/initializers/pagy.rb
CHANGED
|
@@ -15,18 +15,16 @@ Rails.application.config.after_initialize do
|
|
|
15
15
|
config.plugin_configs = {
|
|
16
16
|
alba: {
|
|
17
17
|
ts_mapper: Typelizer::SerializerPlugins::Alba::ALBA_TS_MAPPER.merge(
|
|
18
|
-
'iso8601' => { type: :string }
|
|
18
|
+
'iso8601' => { type: :string },
|
|
19
|
+
'string' => { type: :string }
|
|
19
20
|
)
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
# Serializers that exist only for Admin API
|
|
24
|
+
# Serializers that exist only for the Admin API. Event serializers stay in:
|
|
25
|
+
# they describe the `data` of the typed webhook events the Store SDK ships.
|
|
24
26
|
store_excluded = %w[
|
|
25
|
-
Asset CartPromotion OrderPromotion
|
|
26
|
-
StockLevel StockMovement StockTransfer
|
|
27
|
-
Report Export Import ImportRow
|
|
28
|
-
TaxCategory Exchange ExchangeLineItem
|
|
29
|
-
SupplierEvent PurchaseOrderEvent StockReceiptEvent
|
|
27
|
+
Asset CartPromotion OrderPromotion Report TaxCategory
|
|
30
28
|
].to_set
|
|
31
29
|
|
|
32
30
|
# Store SDK — no prefix, package provides namespace
|
|
@@ -34,7 +32,7 @@ Rails.application.config.after_initialize do
|
|
|
34
32
|
c.output_dir = api_root.join('../../packages/sdk/src/types/generated')
|
|
35
33
|
c.reject_class = ->(serializer:) {
|
|
36
34
|
name = serializer.name.to_s
|
|
37
|
-
name.include?('::Admin::') || name.include?('::Seller::') ||
|
|
35
|
+
!name.start_with?('Spree::Api::V3::') || name.include?('::Admin::') || name.include?('::Seller::') ||
|
|
38
36
|
store_excluded.include?(name.sub(/\ASpree::Api::V3::/, '').sub(/Serializer\z/, ''))
|
|
39
37
|
}
|
|
40
38
|
c.serializer_name_mapper = ->(serializer) {
|
|
@@ -77,7 +75,7 @@ Rails.application.config.after_initialize do
|
|
|
77
75
|
# serializer this branch inherits references them, so their types still
|
|
78
76
|
# have to exist in the package.
|
|
79
77
|
store_nested_for_seller = %w[
|
|
80
|
-
|
|
78
|
+
Category CustomField OptionType OptionValue Seller
|
|
81
79
|
].to_set
|
|
82
80
|
|
|
83
81
|
config.writer(:seller) do |c|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
ar:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
cannot_delete: لا يمكن حذف %{model}
|
|
6
|
+
current_password_invalid: كلمة المرور الحالية غير صحيحة أو مفقودة
|
|
7
|
+
newsletter_verification_token_invalid: رمز التحقق من النشرة الإخبارية غير صالح أو انتهت صلاحيته.
|
|
8
|
+
password_reset_requested: إذا كان هناك حساب مرتبط بهذا البريد الإلكتروني، فقد تم إرسال تعليمات إعادة تعيين كلمة المرور.
|
|
9
|
+
password_reset_token_invalid: رمز إعادة تعيين كلمة المرور غير صالح أو انتهت صلاحيته.
|
|
10
|
+
record_not_found: "%{model} غير موجود"
|
|
11
|
+
unauthorized: أنت غير مخوّل لتنفيذ هذا الإجراء.
|
|
12
|
+
v3:
|
|
13
|
+
payments:
|
|
14
|
+
method_unavailable: طريقة الدفع هذه غير متاحة لهذا الطلب.
|
|
15
|
+
session_required: تتطلب طريقة الدفع هذه جلسة دفع. استخدم نقطة نهاية جلسات الدفع بدلًا من ذلك.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
be:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
cannot_delete: "%{model} немагчыма выдаліць"
|
|
6
|
+
current_password_invalid: Бягучы пароль няправільны або адсутнічае
|
|
7
|
+
newsletter_verification_token_invalid: Токен пацверджання рассылкі няправільны або яго тэрмін дзеяння скончыўся.
|
|
8
|
+
password_reset_requested: Калі для гэтай электроннай пошты існуе ўліковы запіс, інструкцыі па скіду пароля былі адпраўлены.
|
|
9
|
+
password_reset_token_invalid: Токен скіду пароля няправільны або яго тэрмін дзеяння скончыўся.
|
|
10
|
+
record_not_found: "%{model} не знойдзена"
|
|
11
|
+
unauthorized: Вы не маеце дазволу на выкананне гэтага дзеяння.
|
|
12
|
+
v3:
|
|
13
|
+
payments:
|
|
14
|
+
method_unavailable: Гэты спосаб аплаты недаступны для гэтага заказу.
|
|
15
|
+
session_required: Гэты спосаб аплаты патрабуе плацёжнай сесіі. Замест гэтага скарыстайцеся канчатковым пунктам плацёжных сесій.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
bg:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
cannot_delete: "%{model} не може да бъде изтрит"
|
|
6
|
+
current_password_invalid: Текущата парола е невалидна или липсва
|
|
7
|
+
newsletter_verification_token_invalid: Токенът за потвърждение на бюлетина е невалиден или е изтекъл.
|
|
8
|
+
password_reset_requested: Ако съществува акаунт за този имейл, бяха изпратени инструкции за нулиране на паролата.
|
|
9
|
+
password_reset_token_invalid: Токенът за нулиране на паролата е невалиден или е изтекъл.
|
|
10
|
+
record_not_found: "%{model} не е намерен"
|
|
11
|
+
unauthorized: Нямате право да извършвате това действие.
|
|
12
|
+
v3:
|
|
13
|
+
payments:
|
|
14
|
+
method_unavailable: Този начин на плащане не е наличен за тази поръчка.
|
|
15
|
+
session_required: Този начин на плащане изисква платежна сесия. Вместо това използвайте крайната точка за платежни сесии.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
ca:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
cannot_delete: No es pot eliminar %{model}
|
|
6
|
+
current_password_invalid: La contrasenya actual no és vàlida o falta
|
|
7
|
+
newsletter_verification_token_invalid: El token de verificació del butlletí no és vàlid o ha caducat.
|
|
8
|
+
password_reset_requested: Si existeix un compte per a aquest correu electrònic, s'han enviat les instruccions per restablir la contrasenya.
|
|
9
|
+
password_reset_token_invalid: El token de restabliment de contrasenya no és vàlid o ha caducat.
|
|
10
|
+
record_not_found: No s'ha trobat %{model}
|
|
11
|
+
unauthorized: No teniu autorització per dur a terme aquesta acció.
|
|
12
|
+
v3:
|
|
13
|
+
payments:
|
|
14
|
+
method_unavailable: Aquest mètode de pagament no està disponible per a aquesta comanda.
|
|
15
|
+
session_required: Aquest mètode de pagament requereix una sessió de pagament. Utilitzeu el punt de connexió de sessions de pagament.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
cs:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
cannot_delete: "%{model} nelze odstranit"
|
|
6
|
+
current_password_invalid: Aktuální heslo je neplatné nebo chybí
|
|
7
|
+
newsletter_verification_token_invalid: Ověřovací token newsletteru je neplatný nebo vypršela jeho platnost.
|
|
8
|
+
password_reset_requested: Pokud pro tento e-mail existuje účet, byly odeslány pokyny k obnovení hesla.
|
|
9
|
+
password_reset_token_invalid: Token pro obnovení hesla je neplatný nebo vypršela jeho platnost.
|
|
10
|
+
record_not_found: "%{model} nebyl nalezen"
|
|
11
|
+
unauthorized: Nemáte oprávnění provést tuto akci.
|
|
12
|
+
v3:
|
|
13
|
+
payments:
|
|
14
|
+
method_unavailable: Tato platební metoda není pro tuto objednávku dostupná.
|
|
15
|
+
session_required: Tato platební metoda vyžaduje platební relaci. Použijte prosím endpoint platebních relací.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
da:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
cannot_delete: "%{model} kan ikke slettes"
|
|
6
|
+
current_password_invalid: Den nuværende adgangskode er ugyldig eller mangler
|
|
7
|
+
newsletter_verification_token_invalid: Bekræftelsestokenet for nyhedsbrevet er ugyldigt eller er udløbet.
|
|
8
|
+
password_reset_requested: Hvis der findes en konto for den e-mail, er instruktioner til nulstilling af adgangskode blevet sendt.
|
|
9
|
+
password_reset_token_invalid: Tokenet til nulstilling af adgangskode er ugyldigt eller er udløbet.
|
|
10
|
+
record_not_found: "%{model} blev ikke fundet"
|
|
11
|
+
unauthorized: Du har ikke tilladelse til at udføre denne handling.
|
|
12
|
+
v3:
|
|
13
|
+
payments:
|
|
14
|
+
method_unavailable: Denne betalingsmetode er ikke tilgængelig for denne ordre.
|
|
15
|
+
session_required: Denne betalingsmetode kræver en betalingssession. Brug i stedet endepunktet for betalingssessioner.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
de-CH:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
newsletter_verification_token_invalid: Der Newsletter-Bestätigungstoken ist ungültig oder abgelaufen.
|
|
6
|
+
password_reset_requested: Falls für diese E-Mail-Adresse ein Konto besteht, wurden Anweisungen zum Zurücksetzen des Passworts versendet.
|
|
7
|
+
password_reset_token_invalid: Der Token zum Zurücksetzen des Passworts ist ungültig oder abgelaufen.
|
|
8
|
+
v3:
|
|
9
|
+
payments:
|
|
10
|
+
method_unavailable: Diese Zahlungsart ist für diese Bestellung nicht verfügbar.
|
|
11
|
+
session_required: Diese Zahlungsart erfordert eine Zahlungssitzung. Verwenden Sie stattdessen den Endpunkt für Zahlungssitzungen.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
de:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
cannot_delete: "%{model} kann nicht gelöscht werden"
|
|
6
|
+
current_password_invalid: Aktuelles Passwort ist ungültig oder fehlt
|
|
7
|
+
newsletter_verification_token_invalid: Das Newsletter-Bestätigungstoken ist ungültig oder abgelaufen.
|
|
8
|
+
password_reset_requested: Falls ein Konto für diese E-Mail-Adresse besteht, wurden Anweisungen zum Zurücksetzen des Passworts versendet.
|
|
9
|
+
password_reset_token_invalid: Das Token zum Zurücksetzen des Passworts ist ungültig oder abgelaufen.
|
|
10
|
+
record_not_found: "%{model} nicht gefunden"
|
|
11
|
+
unauthorized: Sie sind nicht berechtigt, diese Aktion auszuführen.
|
|
12
|
+
v3:
|
|
13
|
+
payments:
|
|
14
|
+
method_unavailable: Diese Zahlungsmethode ist für diese Bestellung nicht verfügbar.
|
|
15
|
+
session_required: Diese Zahlungsmethode erfordert eine Zahlungssitzung. Verwenden Sie stattdessen den Endpunkt für Zahlungssitzungen.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
el:
|
|
3
|
+
spree:
|
|
4
|
+
api:
|
|
5
|
+
cannot_delete: Δεν είναι δυνατή η διαγραφή του %{model}
|
|
6
|
+
current_password_invalid: Ο τρέχων κωδικός πρόσβασης είναι μη έγκυρος ή λείπει
|
|
7
|
+
newsletter_verification_token_invalid: Το token επαλήθευσης ενημερωτικού δελτίου είναι μη έγκυρο ή έχει λήξει.
|
|
8
|
+
password_reset_requested: Αν υπάρχει λογαριασμός για αυτό το email, έχουν σταλεί οδηγίες επαναφοράς κωδικού πρόσβασης.
|
|
9
|
+
password_reset_token_invalid: Το token επαναφοράς κωδικού πρόσβασης είναι μη έγκυρο ή έχει λήξει.
|
|
10
|
+
record_not_found: Δεν βρέθηκε %{model}
|
|
11
|
+
unauthorized: Δεν έχετε εξουσιοδότηση να εκτελέσετε αυτή την ενέργεια.
|
|
12
|
+
v3:
|
|
13
|
+
payments:
|
|
14
|
+
method_unavailable: Αυτή η μέθοδος πληρωμής δεν είναι διαθέσιμη για αυτή την παραγγελία.
|
|
15
|
+
session_required: Αυτή η μέθοδος πληρωμής απαιτεί μια συνεδρία πληρωμής. Χρησιμοποιήστε αντ' αυτού το σημείο πρόσβασης συνεδριών πληρωμής.
|