Sha256: fe83ad981e0d58f402219984daf6698627cd463201b228aafafd07470bdda7d2

Contents?: true

Size: 1.28 KB

Versions: 6

Compression:

Stored size: 1.28 KB

Contents

require 'enum_plus/version'

unless String.methods.include? 'underscore'
  class String
    def underscore
      self.gsub(/::/, '/').
      gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
      gsub(/([a-z\d])([A-Z])/,'\1_\2').
      tr("-", "_").
      downcase
    end
  end
end

class Object
  def self.enum name, enumeration
    name = name.to_s
    class_eval "
      attr_accessor :#{name}
      def self.#{name}_values
        #{enumeration}
      end
      def self.#{name}_captions
        #{enumeration}.map do |value|
          humanize_#{name} value
        end
      end"
    enumeration.each do |value|
      value = value.to_s
      eval "
        def #{value}?
          self.#{name} == '#{value}'
        end
        def #{value}!
          self.#{name} = '#{value}'
        end"
    end
    eval "
      def humanize_#{name} value
        value = value.to_s
        begin
          Required::Module::const_get 'I18n'
          ::I18n.t \"enum.#{self.to_s.underscore}.#{name}.#{'#{value}'}\"
        rescue NameError
          value
        end
      end
      def #{name}_caption
        self.#{name}.nil? ? self.#{name} : humanize_#{name}(self.#{name})
      end"

    # validates_inclusion_of name.to_sym, { allow_nil: true, in: enumeration } if self.ancestors.include? 'ActiveRecord::Base'
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
enum_plus-0.3.5 lib/enum_plus.rb
enum_plus-0.3.4 lib/enum_plus.rb
enum_plus-0.3.3 lib/enum_plus.rb
enum_plus-0.3.2 lib/enum_plus.rb
enum_plus-0.3.1 lib/enum_plus.rb
enum_plus-0.3.0 lib/enum_plus.rb