Files
openfoodnetwork/app/helpers/injection_helper.rb
David Rodríguez 4c6d894bc0 Bump RuboCop to 1.86.6
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`.
2025-10-27 11:30:33 +01:00

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