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

Version Path
shippo-4.0.0 lib/shippo/api/category.rb
shippo-3.1.0 lib/shippo/api/category.rb
shippo-3.0.1 lib/shippo/api/category.rb
shippo-3.0.0 lib/shippo/api/category.rb
shippo-2.0.8 lib/shippo/api/category.rb
shippo-2.0.7 lib/shippo/api/category.rb
shippo-2.0.6 lib/shippo/api/category.rb
shippo-2.0.5 lib/shippo/api/category.rb
shippo-2.0.4 lib/shippo/api/category.rb
shippo-2.0.3 lib/shippo/api/category.rb