Sha256: 7f0ca4aa6db1f1a7c51d935c78372822ff9ee44ee9fe737c01fb9d82f91bc821
Contents?: true
Size: 1.37 KB
Versions: 10
Compression:
Stored size: 1.37 KB
Contents
require 'hashie/dash' require 'active_support/inflector' require 'shippo/exceptions' module Shippo module API # For enumerations with discrete possible set of values, +Category+ class # offers it's subclasses and users tremendous benefits. # # Categories should be always created via the Facåde # +Shippo::API::Category.for(name, value)+. Although it is possible to # directly instantiate subclasses, it is not recommended for performance reasons. # # == Example # # ```ruby # require 'shippo/api' # class My::Big::Module::Size < ::Shippo::API::Category::Base # allowed_values :small, :medium, :large, :xlarge, :xxlarge # end # # ⤷ [:small, :medium, :large, :xlarge, :xxlarge] # # my_size = Shippo::API::Category.for('size', 'xlarge') # # ⤷ XLARGE # my_size.class.name # # ⤷ My::Big::Module::Size # ``` module Category @categories = {} class << self attr_accessor :categories end class DuplicateValueError < ::Shippo::Exceptions::APIError; end def self.key(value) value.to_s.downcase.to_sym end def self.for(name, value) cat = self.categories[name.to_s.downcase.to_sym] cat ? cat[value.to_s.downcase.to_sym] : nil end end end end Dir[File.dirname(__FILE__) + '/category/*.rb'].each {|file| require file }
Version data entries
10 entries across 10 versions & 1 rubygems