Skip to content

Instantly share code, notes, and snippets.

@xpepper
Created April 16, 2013 12:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xpepper/5395523 to your computer and use it in GitHub Desktop.
Save xpepper/5395523 to your computer and use it in GitHub Desktop.
class ShippingOption
@options = []
def self.inherited(child)
@options << child
end
def self.for(weight, international)
@options.select { |o| o.can_ship?(weight, international)}
end
end
class MediaMail < ShippingOption
def self.can_ship?(weight, international)
!international
end
end
class PriorityFlatRate < ShippingOption
def self.can_ship?(weight, international)
!international && weight < 4*16
end
end
options = ShippingOption.for(3*16, false)
puts options.inspect # == [MediaMail, PriorityFlatRate]
options = ShippingOption.for(5*16, false)
puts options.inspect # == [MediaMail]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment