mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Merge pull request #5037 from luisramos0/strong_params_subs
[Spree 2.1] Implement strong params in subscriptions controller
This commit is contained in:
@@ -11,7 +11,7 @@ module Admin
|
||||
respond_to :json
|
||||
|
||||
def build
|
||||
@subscription_line_item.assign_attributes(params[:subscription_line_item])
|
||||
@subscription_line_item.assign_attributes(subscription_line_item_params)
|
||||
@subscription_line_item.price_estimate = price_estimate
|
||||
render json: @subscription_line_item, serializer: Api::Admin::SubscriptionLineItemSerializer,
|
||||
shop: @shop, schedule: @schedule
|
||||
@@ -27,7 +27,7 @@ module Admin
|
||||
@shop = Enterprise.managed_by(spree_current_user).find_by(id: params[:shop_id])
|
||||
@schedule = permissions.editable_schedules.find_by(id: params[:schedule_id])
|
||||
@order_cycle = @schedule.andand.current_or_next_order_cycle
|
||||
@variant = variant_if_eligible(params[:subscription_line_item][:variant_id]) if @shop.present?
|
||||
@variant = variant_if_eligible(subscription_line_item_params[:variant_id]) if @shop.present?
|
||||
end
|
||||
|
||||
def new_actions
|
||||
@@ -58,5 +58,9 @@ module Admin
|
||||
def variant_if_eligible(variant_id)
|
||||
SubscriptionVariantsService.eligible_variants(@shop).find_by(id: variant_id)
|
||||
end
|
||||
|
||||
def subscription_line_item_params
|
||||
params.require(:subscription_line_item).permit(:quantity, :variant_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -65,7 +65,7 @@ module Admin
|
||||
private
|
||||
|
||||
def save_form_and_render(render_issues = true)
|
||||
form = SubscriptionForm.new(@subscription, params[:subscription])
|
||||
form = SubscriptionForm.new(@subscription, subscription_params)
|
||||
unless form.save
|
||||
render json: { errors: form.json_errors }, status: :unprocessable_entity
|
||||
return
|
||||
@@ -149,11 +149,15 @@ module Admin
|
||||
# Overriding Spree method to load data from params here so that
|
||||
# we can authorise #create using an object with required attributes
|
||||
def build_resource
|
||||
Subscription.new(params[:subscription])
|
||||
Subscription.new(subscription_params)
|
||||
end
|
||||
|
||||
def ams_prefix_whitelist
|
||||
[:index]
|
||||
end
|
||||
|
||||
def subscription_params
|
||||
PermittedAttributes::Subscription.new(params).call
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
37
app/services/permitted_attributes/subscription.rb
Normal file
37
app/services/permitted_attributes/subscription.rb
Normal file
@@ -0,0 +1,37 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module PermittedAttributes
|
||||
class Subscription
|
||||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
return @params[:subscription] if @params[:subscription].empty?
|
||||
|
||||
@params.require(:subscription).permit(basic_permitted_attributes + other_permitted_attributes)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def basic_permitted_attributes
|
||||
[
|
||||
:id, :shop_id, :schedule_id, :customer_id,
|
||||
:payment_method_id, :shipping_method_id,
|
||||
:begins_at, :ends_at,
|
||||
:canceled_at, :paused_at,
|
||||
:shipping_fee_estimate, :payment_fee_estimate,
|
||||
]
|
||||
end
|
||||
|
||||
def other_permitted_attributes
|
||||
[
|
||||
subscription_line_items_attributes: [
|
||||
:id, :quantity, :variant_id, :price_estimate, :_destroy
|
||||
],
|
||||
bill_address_attributes: PermittedAttributes::Address.attributes,
|
||||
ship_address_attributes: PermittedAttributes::Address.attributes
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,21 +1,21 @@
|
||||
require 'open_food_network/proxy_order_syncer'
|
||||
|
||||
class SubscriptionForm
|
||||
attr_accessor :subscription, :params, :order_update_issues, :validator, :order_syncer, :estimator
|
||||
attr_accessor :subscription, :subscription_params, :order_update_issues, :validator, :order_syncer, :estimator
|
||||
|
||||
delegate :json_errors, :valid?, to: :validator
|
||||
delegate :order_update_issues, to: :order_syncer
|
||||
|
||||
def initialize(subscription, params = {})
|
||||
def initialize(subscription, subscription_params = {})
|
||||
@subscription = subscription
|
||||
@params = params
|
||||
@subscription_params = subscription_params
|
||||
@estimator = SubscriptionEstimator.new(subscription)
|
||||
@validator = SubscriptionValidator.new(subscription)
|
||||
@order_syncer = OrderSyncer.new(subscription)
|
||||
end
|
||||
|
||||
def save
|
||||
subscription.assign_attributes(params)
|
||||
subscription.assign_attributes(subscription_params)
|
||||
return false unless valid?
|
||||
|
||||
subscription.transaction do
|
||||
|
||||
Reference in New Issue
Block a user