mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-11 18:26:50 +00:00
There were a few changes needed: * Plugins are now specified through `plugin:` config keyword. * All plugin gems need to be specified explicitly in Gemfile since they are no longer dependencies of plugins already specified explicitly. * All plugin gems need to be updated in other to use the new APIs. * One cop was renamed. * New offenses safe to correct were corrected directly with `bundle exec rubocop -a`. * New offenses unsafe to correct were added to the TODO configuration with `bundle exec rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 1400 --no-auto-gen-timestamp`.
165 lines
4.7 KiB
Ruby
165 lines
4.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'open_food_network/enterprise_injection_data'
|
|
|
|
module InjectionHelper
|
|
include SerializerHelper
|
|
include EnterprisesHelper
|
|
include OrderCyclesHelper
|
|
|
|
def inject_enterprises(enterprises = nil)
|
|
enterprises ||= default_enterprise_query
|
|
|
|
inject_json_array(
|
|
"enterprises",
|
|
enterprises,
|
|
Api::EnterpriseSerializer,
|
|
enterprise_injection_data(enterprises.map(&:id)),
|
|
)
|
|
end
|
|
|
|
def inject_groups
|
|
select_only = required_attributes EnterpriseGroup, Api::GroupListSerializer
|
|
|
|
inject_json_array(
|
|
"groups",
|
|
EnterpriseGroup.on_front_page.by_position.select(select_only).
|
|
includes(enterprises: [:shipping_methods, { address: [:state, :country] }],
|
|
address: :state).
|
|
all,
|
|
Api::GroupListSerializer
|
|
)
|
|
end
|
|
|
|
def inject_enterprise_shopfront(enterprise)
|
|
inject_json(
|
|
"shopfront",
|
|
enterprise,
|
|
Api::EnterpriseShopfrontSerializer
|
|
)
|
|
end
|
|
|
|
def inject_enterprise_shopfront_list
|
|
select_only = required_attributes Enterprise, Api::EnterpriseShopfrontListSerializer
|
|
|
|
inject_json_array(
|
|
"enterprises",
|
|
Enterprise.activated.visible.select(select_only).includes(address: [:state, :country]).all,
|
|
Api::EnterpriseShopfrontListSerializer
|
|
)
|
|
end
|
|
|
|
def inject_enterprise_and_relatives
|
|
enterprises_and_relatives = current_distributor.
|
|
relatives_including_self.
|
|
activated.
|
|
includes(:properties, address: [:state, :country], supplied_products: :properties).
|
|
all
|
|
|
|
inject_json_array "enterprises",
|
|
enterprises_and_relatives,
|
|
Api::EnterpriseSerializer,
|
|
enterprise_injection_data(enterprises_and_relatives.map(&:id))
|
|
end
|
|
|
|
def inject_group_enterprises(group)
|
|
enterprises = group.enterprises.activated.visible.all
|
|
inject_json_array(
|
|
"enterprises",
|
|
enterprises,
|
|
Api::EnterpriseSerializer,
|
|
enterprise_injection_data(enterprises.map(&:id)),
|
|
)
|
|
end
|
|
|
|
def inject_current_hub
|
|
inject_json "currentHub",
|
|
current_distributor,
|
|
Api::EnterpriseSerializer,
|
|
enterprise_injection_data(current_distributor ? [current_distributor.id] : nil)
|
|
end
|
|
|
|
def inject_current_order
|
|
inject_json "currentOrder",
|
|
current_order,
|
|
Api::CurrentOrderSerializer,
|
|
current_distributor:,
|
|
current_order_cycle:
|
|
end
|
|
|
|
def inject_current_order_cycle
|
|
serializer = Api::OrderCycleSerializer.new(current_order_cycle)
|
|
json = serializer.object.present? ? serializer.to_json : "{}"
|
|
render partial: "json/injection_ams", locals: { name: "orderCycleData", json: }
|
|
end
|
|
|
|
def inject_taxons
|
|
inject_json_array "taxons", Spree::Taxon.all.to_a, Api::TaxonSerializer
|
|
end
|
|
|
|
def inject_properties
|
|
inject_json_array "properties", Spree::Property.all.to_a, Api::PropertySerializer
|
|
end
|
|
|
|
def inject_currency_config
|
|
inject_json "currencyConfig", {}, Api::CurrencyConfigSerializer
|
|
end
|
|
|
|
def inject_open_street_map_config
|
|
inject_json "openStreetMapConfig", {}, Api::OpenStreetMapConfigSerializer
|
|
end
|
|
|
|
def inject_spree_api_key(spree_api_key)
|
|
render partial: "json/injection_ams",
|
|
locals: { name: 'spreeApiKey', json: "'#{spree_api_key}'" }
|
|
end
|
|
|
|
def inject_available_countries
|
|
inject_json_array "availableCountries", available_countries, Api::CountrySerializer
|
|
end
|
|
|
|
def inject_enterprise_attributes(enterprise_attributes)
|
|
render partial: "json/injection_ams",
|
|
locals: { name: 'enterpriseAttributes', json: enterprise_attributes.to_json }
|
|
end
|
|
|
|
def inject_saved_credit_cards
|
|
data = spree_current_user ? spree_current_user.credit_cards.with_payment_profile.all : []
|
|
|
|
inject_json_array "savedCreditCards", data, Api::CreditCardSerializer
|
|
end
|
|
|
|
def inject_current_user
|
|
inject_json "user", spree_current_user, Api::UserSerializer
|
|
end
|
|
|
|
def inject_rails_flash
|
|
inject_json "railsFlash", OpenStruct.new(flash.to_hash), Api::RailsFlashSerializer
|
|
end
|
|
|
|
def inject_json_array(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:, json: }
|
|
end
|
|
|
|
private
|
|
|
|
def default_enterprise_query
|
|
Enterprise.activated.includes(address: [:state, :country]).all
|
|
end
|
|
|
|
def enterprise_injection_data(enterprise_ids)
|
|
{
|
|
data: OpenFoodNetwork::EnterpriseInjectionData.new(enterprise_ids)
|
|
}
|
|
end
|
|
end
|