Avoid loading enterprise injection data when it's not be needed due to caching

This commit is contained in:
Rohan Mitchell
2015-05-22 12:17:09 +10:00
parent dd761719ee
commit 31b726613d
3 changed files with 40 additions and 17 deletions

View File

@@ -1,6 +1,8 @@
require 'open_food_network/enterprise_injection_data'
module InjectionHelper
def inject_enterprises
inject_json_ams "enterprises", Enterprise.activated.all, Api::EnterpriseSerializer, enterprise_injection_data
inject_json_ams "enterprises", Enterprise.activated.includes(:address).all, Api::EnterpriseSerializer, enterprise_injection_data
end
def inject_group_enterprises
@@ -66,14 +68,8 @@ module InjectionHelper
private
def enterprise_injection_data
@active_distributors ||= Enterprise.distributors_with_active_order_cycles
@earliest_closing_times ||= OrderCycle.earliest_closing_times
@shipping_method_services ||= Spree::ShippingMethod.services
@relatives ||= EnterpriseRelationship.relatives
@supplied_taxons ||= Spree::Taxon.supplied_taxons
@distributed_taxons ||= Spree::Taxon.distributed_taxons
{active_distributors: @active_distributors, earliest_closing_times: @earliest_closing_times, shipping_method_services: @shipping_method_services, relatives: @relatives, supplied_taxons: @supplied_taxons, distributed_taxons: @distributed_taxons}
@enterprise_injection_data ||= OpenFoodNetwork::EnterpriseInjectionData.new
{data: @enterprise_injection_data}
end
end

View File

@@ -21,11 +21,11 @@ class Api::UncachedEnterpriseSerializer < ActiveModel::Serializer
attributes :orders_close_at, :active
def orders_close_at
options[:earliest_closing_times][object.id]
options[:data].earliest_closing_times[object.id]
end
def active
options[:active_distributors].andand.include? object
options[:data].active_distributors.andand.include? object
end
end
@@ -45,20 +45,20 @@ class Api::CachedEnterpriseSerializer < ActiveModel::Serializer
def taxons
options[:distributed_taxons][object.id]
options[:data].distributed_taxons[object.id]
end
def supplied_taxons
options[:supplied_taxons][object.id]
options[:data].supplied_taxons[object.id]
end
def pickup
services = options[:shipping_method_services][object.id]
services = options[:data].shipping_method_services[object.id]
services ? services[:pickup] : false
end
def delivery
services = options[:shipping_method_services][object.id]
services = options[:data].shipping_method_services[object.id]
services ? services[:delivery] : false
end
@@ -83,12 +83,12 @@ class Api::CachedEnterpriseSerializer < ActiveModel::Serializer
end
def producers
relatives = options[:relatives][object.id]
relatives = options[:data].relatives[object.id]
relatives ? relatives[:producers] : []
end
def hubs
relatives = options[:relatives][object.id]
relatives = options[:data].relatives[object.id]
relatives ? relatives[:distributors] : []
end

View File

@@ -0,0 +1,27 @@
module OpenFoodNetwork
class EnterpriseInjectionData
def active_distributors
@active_distributors ||= Enterprise.distributors_with_active_order_cycles
end
def earliest_closing_times
@earliest_closing_times ||= OrderCycle.earliest_closing_times
end
def shipping_method_services
@shipping_method_services ||= Spree::ShippingMethod.services
end
def relatives
@relatives ||= EnterpriseRelationship.relatives
end
def supplied_taxons
@supplied_taxons ||= Spree::Taxon.supplied_taxons
end
def distributed_taxons
@distributed_taxons ||= Spree::Taxon.distributed_taxons
end
end
end