Class: Spree::Zone
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Spree::Zone
- Defined in:
- app/models/spree/zone.rb
Class Method Summary collapse
- .default_tax ⇒ Object
-
.match(address) ⇒ Object
Returns the matching zone with the highest priority zone type (State, Country, Zone.) Returns nil in the case of no matches.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
-
#contains?(target) ⇒ Boolean
Indicates whether the specified zone falls entirely within the zone performing the check.
-
#country_list ⇒ Object
convenience method for returning the countries contained within a zone.
- #include?(address) ⇒ Boolean
- #kind ⇒ Object
- #kind=(value) ⇒ Object
-
#zoneables ⇒ Object
All zoneables belonging to the zone members.
Class Method Details
.default_tax ⇒ Object
83 84 85 |
# File 'app/models/spree/zone.rb', line 83 def self.default_tax Zone.where(:default_tax => true).first end |
.match(address) ⇒ Object
Returns the matching zone with the highest priority zone type (State, Country, Zone.) Returns nil in the case of no matches.
48 49 50 51 52 53 54 55 56 57 |
# File 'app/models/spree/zone.rb', line 48 def self.match(address) return unless matches = self.order('created_at').select { |zone| zone.include? address } ['state', 'country'].each do |zone_kind| if match = matches.detect { |zone| zone_kind == zone.kind } return match end end matches.first end |
Instance Method Details
#<=>(other) ⇒ Object
73 74 75 |
# File 'app/models/spree/zone.rb', line 73 def <=>(other) name <=> other.name end |
#contains?(target) ⇒ Boolean
Indicates whether the specified zone falls entirely within the zone performing the check.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/models/spree/zone.rb', line 89 def contains?(target) return false if kind == 'state' && target.kind == 'country' return false if zone_members.empty? || target.zone_members.empty? if kind == target.kind target.zoneables.each do |target_zoneable| return false unless zoneables.include?(target_zoneable) end else target.zoneables.each do |target_state| return false unless zoneables.include?(target_state.country) end end true end |
#country_list ⇒ Object
convenience method for returning the countries contained within a zone
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'app/models/spree/zone.rb', line 60 def country_list members.map { |zone_member| case zone_member.zoneable_type when 'Spree::Country' zone_member.zoneable when 'Spree::State' zone_member.zoneable.country else nil end }.flatten.compact.uniq end |
#include?(address) ⇒ Boolean
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'app/models/spree/zone.rb', line 30 def include?(address) return false unless address # NOTE: This is complicated by the fact that include? for HMP is broken in Rails 2.1 (so we use awkward index method) members.any? do |zone_member| case zone_member.zoneable_type when 'Spree::Country' zone_member.zoneable_id == address.country_id when 'Spree::State' zone_member.zoneable_id == address.state_id else false end end end |
#kind ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'app/models/spree/zone.rb', line 16 def kind member = members.last case member && member.zoneable_type when 'Spree::State' then 'state' else 'country' end end |
#kind=(value) ⇒ Object
26 27 28 |
# File 'app/models/spree/zone.rb', line 26 def kind=(value) # do nothing - just here to satisfy the form end |
#zoneables ⇒ Object
All zoneables belonging to the zone members. Will be a colelction of either countries or states depending on the zone type.
79 80 81 |
# File 'app/models/spree/zone.rb', line 79 def zoneables members.collect { |m| m.zoneable } end |