class HoboFields::Types::EnumString

Constants

COLUMN_TYPE

Attributes

detranslated_values[RW]
translated_values[RW]
values[RW]

Public Class Methods

for(*values) click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 44
def for(*values)
  options = values.extract_options!
  values = values.*.to_s
  c = Class.new(EnumString) do
    values.each do |v|
      const_name = v.upcase.gsub(/[^a-z0-9_]/, '_').gsub(/_+/, '_')
      const_name = "V" + const_name if const_name =~ /^[0-9_]/ || const_name.blank?
      const_set(const_name, self.new(v)) unless const_defined?(const_name)

      method_name = "is_#{v.underscore}?"
      define_method(method_name) { self == v } unless self.respond_to?(method_name)
    end
  end
  c.with_values(*values)
  c.set_name(options[:name]) if options[:name]
  c
end
inspect() click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 62
def inspect
  name.blank? ? "#<EnumString #{(values || []) * ' '}>" : name
end
Also aliased as: to_s
name() click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 71
def name
  @name || super
end
new(value) click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 79
def initialize(value)
  super(self.class.detranslated_values.nil? ? value : self.class.detranslated_values[value.to_s])
end
set_name(name) click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 67
def set_name(name)
  @name = name
end
to_s() click to toggle source
Alias for: inspect
with_values(*values) click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 15
def with_values(*values)
  @values = values.*.to_s
  @translated_values = Hash.new do |hash, value|
    if name.blank? || value.blank?
      hash[value] = value
    else
      hash[value] = I18n.t("#{name.tableize}.#{value}", :default => value)
      @detranslated_values[hash[value]] = value
      hash[value]
    end
  end

  @detranslated_values = Hash.new do |hash, value|
    if name.blank?
      hash[value] = value
    else
      hash[value] = @values.detect(proc { value } ) {|v|
        @translated_values[v]==value
      }
    end
  end
end

Public Instance Methods

==(other) click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 91
def ==(other)
  if other.is_a?(Symbol)
    super(other.to_s)
  else
    super
  end
end
to_html(xmldoctype = true) click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 87
def to_html(xmldoctype = true)
  self.class.translated_values[self].html_safe
end
validate() click to toggle source
# File lib/hobo_fields/types/enum_string.rb, line 83
def validate
  "must be one of #{self.class.values.map{|v| v.blank? ? '\'\'' : v} * ', '}" unless self.in?(self.class.values)
end