Sha256: 013df6bd853849340da84a3704df08bec4a7af09b9fafe0220e2ba580e6a4955

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

module BelongsToEnum
  class Enum
    def Enum.add_item(key,value)
      @hash ||= {}
      @hash[key]=value
    end

    def Enum.method_missing(key, *args)
      @hash[key] || super
    end
    
    def Enum.respond_to?(key)
      return true if super(key)
      return @hash && @hash[key]
    end

    def Enum.each
      @hash.each {|key,value| yield(key,value)}
    end

    def Enum.map
      @hash.map {|key,value| yield(key,value)}
    end

    def Enum.keys
      @hash.values
    end

    def Enum.items_for_select
      @hash.sort{|a,b| a[1]<=>b[1]}.map{|i|[i[0].to_s.gsub("_", " ").capitalize,i[1]]}
    end
    
    def Enum.items
      warn "DEPRECIATED belongs_to_enum: Use pretty items instead"
      items_for_select
    end

    def Enum.get(value)
      @hash.key(value)
    end

    def Enum.display(value)
      get(value).to_s.gsub("_", " ").titleize
    end

    def Enum.raw_hash
      @hash
    end

    def self.create(name, parent, keys)
      
      # Check to see if this has already been defined...
      return if parent.const_defined?(name.to_s.camelize)

      klass = Class.new(Enum)
      parent.const_set(name.to_s.camelize, klass)

      if keys.respond_to? :raw_hash
        keys.raw_hash.each do |k,v|
          klass.add_item(k,v)
        end

      elsif(keys.is_a? Hash)
        keys.each do |k,v|
          klass.add_item(k,v)
        end
      #elsif(keys.respond_to? :raw_hash)
      #  keys.send(:raw_hash).each do |k,v|
      #    klass.add_item(k,v)
      #  end
      else
        keys.each_with_index do |key, index|
          klass.add_item(key, index + 1)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
belongs_to_enum-0.2 lib/belongs_to_enum/enum.rb