@@ -32,26 +32,22 @@ def call
3232 private
3333
3434 def perform_order_benefits ( lane_benefits , lane )
35- lane_benefits . select { | benefit | benefit . respond_to? ( :perform ) } . each do |benefit |
36- benefit . perform ( order )
35+ lane_benefits . filter_map do |benefit |
36+ benefit . respond_to? ( :perform ) && benefit . perform ( order )
3737 end
3838
39- automated_line_items = order . line_items . select ( &:managed_by_order_benefit )
40- return if automated_line_items . empty?
41-
42- ineligible_line_items = automated_line_items . select do |line_item |
43- line_item . managed_by_order_benefit . promotion . lane == lane && !line_item . managed_by_order_benefit . in? ( lane_benefits )
44- end
45-
46- ineligible_line_items . each do |line_item |
47- line_item . managed_by_order_benefit . remove_from ( order )
39+ order . line_items . filter_map do |line_item |
40+ line_item . managed_by_order_benefit &&
41+ line_item . managed_by_order_benefit . promotion . lane == lane &&
42+ !line_item . managed_by_order_benefit . in? ( lane_benefits ) &&
43+ line_item . managed_by_order_benefit . remove_from ( order )
4844 end
4945 end
5046
5147 def adjust_line_items ( benefits )
52- order . discountable_line_items . select do |line_item |
53- line_item . variant . product . promotionable?
54- end . map do | line_item |
48+ order . discountable_line_items . filter_map do |line_item |
49+ next unless line_item . variant . product . promotionable?
50+
5551 discounts = generate_discounts ( benefits , line_item )
5652 chosen_item_discounts = SolidusPromotions . config . discount_chooser_class . new ( discounts ) . call
5753 [ line_item , chosen_item_discounts ]
@@ -67,7 +63,9 @@ def adjust_shipments(benefits)
6763 end
6864
6965 def adjust_shipping_rates ( benefits )
70- order . shipments . flat_map ( &:shipping_rates ) . select ( &:cost ) . map do |rate |
66+ order . shipments . flat_map ( &:shipping_rates ) . filter_map do |rate |
67+ next unless rate . cost
68+
7169 discounts = generate_discounts ( benefits , rate )
7270 chosen_item_discounts = SolidusPromotions . config . discount_chooser_class . new ( discounts ) . call
7371 [ rate , chosen_item_discounts ]
@@ -82,11 +80,9 @@ def eligible_benefits_for_promotable(possible_benefits, promotable)
8280
8381 def generate_discounts ( possible_benefits , item )
8482 eligible_benefits = eligible_benefits_for_promotable ( possible_benefits , item )
85- eligible_benefits . select do |benefit |
86- benefit . can_discount? ( item )
87- end . map do |benefit |
88- benefit . discount ( item )
89- end . compact
83+ eligible_benefits . filter_map do |benefit |
84+ benefit . can_discount? ( item ) && benefit . discount ( item )
85+ end
9086 end
9187 end
9288 end
0 commit comments