Separate injection methods so that we can have a separate behaviour for lists without having to check their types

This change is required for rails 4.1 where the relations api changed
This commit is contained in:
Luis Ramos
2020-08-06 20:46:28 +01:00
parent 6b826423c1
commit 08d26102d2
2 changed files with 32 additions and 30 deletions

View File

@@ -4,7 +4,7 @@ module InjectionHelper
include SerializerHelper
def inject_enterprises(enterprises = nil)
inject_json_ams(
inject_json_list(
"enterprises",
enterprises || default_enterprise_query,
Api::EnterpriseSerializer,
@@ -15,7 +15,7 @@ module InjectionHelper
def inject_groups
select_only = required_attributes EnterpriseGroup, Api::GroupListSerializer
inject_json_ams(
inject_json_list(
"groups",
EnterpriseGroup.on_front_page.by_position.select(select_only).
includes(enterprises: [:shipping_methods, { address: [:state, :country] }],
@@ -26,7 +26,7 @@ module InjectionHelper
end
def inject_enterprise_shopfront(enterprise)
inject_json_ams(
inject_json(
"shopfront",
enterprise,
Api::EnterpriseShopfrontSerializer
@@ -36,7 +36,7 @@ module InjectionHelper
def inject_enterprise_shopfront_list
select_only = required_attributes Enterprise, Api::EnterpriseShopfrontListSerializer
inject_json_ams(
inject_json_list(
"enterprises",
Enterprise.activated.visible.select(select_only).includes(address: [:state, :country]).all,
Api::EnterpriseShopfrontListSerializer
@@ -50,13 +50,13 @@ module InjectionHelper
includes(:properties, address: [:state, :country], supplied_products: :properties).
all
inject_json_ams "enterprises",
enterprises_and_relatives,
Api::EnterpriseSerializer, enterprise_injection_data
inject_json_list "enterprises",
enterprises_and_relatives,
Api::EnterpriseSerializer, enterprise_injection_data
end
def inject_group_enterprises
inject_json_ams(
inject_json_list(
"enterprises",
@group.enterprises.activated.all,
Api::EnterpriseSerializer,
@@ -65,11 +65,11 @@ module InjectionHelper
end
def inject_current_hub
inject_json_ams "currentHub", current_distributor, Api::EnterpriseSerializer, enterprise_injection_data
inject_json "currentHub", current_distributor, Api::EnterpriseSerializer, enterprise_injection_data
end
def inject_current_order
inject_json_ams "currentOrder", current_order, Api::CurrentOrderSerializer, current_distributor: current_distributor, current_order_cycle: current_order_cycle
inject_json "currentOrder", current_order, Api::CurrentOrderSerializer, current_distributor: current_distributor, current_order_cycle: current_order_cycle
end
def inject_current_order_cycle
@@ -79,29 +79,29 @@ module InjectionHelper
end
def inject_available_shipping_methods
inject_json_ams "shippingMethods", available_shipping_methods,
Api::ShippingMethodSerializer, current_order: current_order
inject_json_list "shippingMethods", available_shipping_methods,
Api::ShippingMethodSerializer, current_order: current_order
end
def inject_available_payment_methods
inject_json_ams "paymentMethods", available_payment_methods,
Api::PaymentMethodSerializer, current_order: current_order
inject_json_list "paymentMethods", available_payment_methods,
Api::PaymentMethodSerializer, current_order: current_order
end
def inject_taxons
inject_json_ams "taxons", Spree::Taxon.all.to_a, Api::TaxonSerializer
inject_json_list "taxons", Spree::Taxon.all.to_a, Api::TaxonSerializer
end
def inject_properties
inject_json_ams "properties", Spree::Property.all.to_a, Api::PropertySerializer
inject_json_list "properties", Spree::Property.all.to_a, Api::PropertySerializer
end
def inject_currency_config
inject_json_ams "currencyConfig", {}, Api::CurrencyConfigSerializer
inject_json "currencyConfig", {}, Api::CurrencyConfigSerializer
end
def inject_open_street_map_config
inject_json_ams "openStreetMapConfig", {}, Api::OpenStreetMapConfigSerializer
inject_json "openStreetMapConfig", {}, Api::OpenStreetMapConfigSerializer
end
def inject_spree_api_key
@@ -109,7 +109,7 @@ module InjectionHelper
end
def inject_available_countries
inject_json_ams "availableCountries", available_countries, Api::CountrySerializer
inject_json_list "availableCountries", available_countries, Api::CountrySerializer
end
def inject_enterprise_attributes
@@ -117,35 +117,37 @@ module InjectionHelper
end
def inject_orders
inject_json_ams "orders", @orders.all, Api::OrderSerializer
inject_json_list "orders", @orders.all, Api::OrderSerializer
end
def inject_shops
customers = spree_current_user.customers
shops = Enterprise.where(id: @orders.pluck(:distributor_id).uniq | customers.pluck(:enterprise_id))
inject_json_ams "shops", shops.all, Api::ShopForOrdersSerializer
inject_json_list "shops", shops.all, Api::ShopForOrdersSerializer
end
def inject_saved_credit_cards
data = spree_current_user ? spree_current_user.credit_cards.with_payment_profile.all : []
inject_json_ams "savedCreditCards", data, Api::CreditCardSerializer
inject_json_list "savedCreditCards", data, Api::CreditCardSerializer
end
def inject_current_user
inject_json_ams "user", spree_current_user, Api::UserSerializer
inject_json "user", spree_current_user, Api::UserSerializer
end
def inject_rails_flash
inject_json_ams "railsFlash", OpenStruct.new(flash.to_hash), Api::RailsFlashSerializer
inject_json "railsFlash", OpenStruct.new(flash.to_hash), Api::RailsFlashSerializer
end
def inject_json_ams(name, data, serializer, opts = {})
if data.is_a?(Array)
opts = { each_serializer: serializer }.merge(opts)
serializer = ActiveModel::ArraySerializer
end
def inject_json_list(name, data, serializer, opts = {})
opts = { each_serializer: serializer }.merge(opts)
serializer = ActiveModel::ArraySerializer
inject_json(name, data, serializer, opts)
end
def inject_json(name, data, serializer, opts = {})
serializer_instance = serializer.new(data, opts)
json = serializer_instance.to_json
render partial: "json/injection_ams", locals: { name: name, json: json }

View File

@@ -11,7 +11,7 @@ describe InjectionHelper, type: :helper do
let!(:d2o1) { create(:completed_order_with_totals, distributor: distributor2, user_id: user.id) }
it "will inject via AMS" do
expect(helper.inject_json_ams("test", [enterprise], Api::IdSerializer)).to match /#{enterprise.id}/
expect(helper.inject_json_list("test", [enterprise], Api::IdSerializer)).to match /#{enterprise.id}/
end
it "injects enterprises" do