Class: Spree::ShippingMethod
Constant Summary
collapse
- MEMOIZED_METHODS =
%w[display_estimated_price digital?]
- DISPLAY_ON_FRONT_END =
1
- DISPLAY_ON_BACK_END =
2
Constants included
from DisplayOn
DisplayOn::DISPLAY
Class Method Summary
collapse
Instance Method Summary
collapse
money_methods
Methods included from Metadata
#metadata, #metadata=, #public_metadata=
Class Method Details
.calculators ⇒ Object
82
83
84
85
|
# File 'app/models/spree/shipping_method.rb', line 82
def self.calculators
spree_calculators.send(model_name_without_spree_namespace).
select { |c| c.to_s.constantize < Spree::ShippingCalculator }
end
|
Instance Method Details
#available_to_display?(display_filter) ⇒ Boolean
87
88
89
90
|
# File 'app/models/spree/shipping_method.rb', line 87
def available_to_display?(display_filter)
(frontend? && display_filter == DISPLAY_ON_FRONT_END) ||
(backend? && display_filter == DISPLAY_ON_BACK_END)
end
|
#build_tracking_url(tracking) ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'app/models/spree/shipping_method.rb', line 60
def build_tracking_url(tracking)
return if tracking.blank?
tracking = tracking.upcase
if tracking_url.blank?
tracking_number_service(tracking).tracking_url if tracking_number_service(tracking).valid?
else
tracking_url.gsub(/:tracking/, ERB::Util.url_encode(tracking)) end
end
|
#delivery_range ⇒ Object
92
93
94
95
96
97
98
99
100
|
# File 'app/models/spree/shipping_method.rb', line 92
def delivery_range
return unless estimated_transit_business_days_min || estimated_transit_business_days_max
if estimated_transit_business_days_min == estimated_transit_business_days_max
estimated_transit_business_days_min.to_s
else
[estimated_transit_business_days_min, estimated_transit_business_days_max].compact.join("-")
end
end
|
Returns true if the shipping method is digital
#display_estimated_price ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'app/models/spree/shipping_method.rb', line 102
def display_estimated_price
return unless calculator
@display_estimated_price ||= begin
calculator.description + ': ' +
if calculator.is_a?(Spree::Calculator::Shipping::FlatRate)
if calculator.preferred_amount == 0
Spree.t(:free)
else
Spree::Money.new(calculator.preferred_amount, { currency: calculator.preferred_currency }).to_s
end
elsif calculator.is_a?(Spree::Calculator::Shipping::FlexiRate)
Spree::Money.new(calculator.preferred_first_item, { currency: calculator.preferred_currency }).to_s
elsif calculator.is_a?(Spree::Calculator::Shipping::FlatPercentItemTotal)
ActionController::Base.helpers.number_to_percentage(calculator.preferred_flat_percent, precision: 2)
else
''
end
end
end
|
#include?(address) ⇒ Boolean
47
48
49
50
51
52
53
54
|
# File 'app/models/spree/shipping_method.rb', line 47
def include?(address)
return true unless requires_zone_check?
return false unless address
zones.includes(:zone_members).any? do |zone|
zone.include?(address)
end
end
|
#tracking_number_service(tracking) ⇒ Object
your shipping method subclasses can override this method to provide a custom tracking number service
78
79
80
|
# File 'app/models/spree/shipping_method.rb', line 78
def tracking_number_service(tracking)
@tracking_number_service ||= Spree.tracking_number_service.new(tracking)
end
|