Sha256: 27a98da793897c16343e649e45be2142f136eba6bdeb0fcbd2a4dbd168a7a89f
Contents?: true
Size: 1.31 KB
Versions: 4
Compression:
Stored size: 1.31 KB
Contents
module ActiveHash module Enum DuplicateEnumAccessor = Class.new(RuntimeError) def self.included(base) base.extend(Methods) end module Methods def enum_accessor(field_name) @enum_accessor = field_name reload end def insert(record) super set_constant(record) if @enum_accessor.present? end def delete_all if @enum_accessor.present? @records.each do |record| constant = constant_for(record.attributes[@enum_accessor]) remove_const(constant) if const_defined?(constant) end end super end def set_constant(record) constant = constant_for(record.attributes[@enum_accessor]) return nil if constant.blank? unless const_defined?(constant) const_set(constant, record) else raise DuplicateEnumAccessor, "#{constant} already defined for #{self.class}" unless const_get(constant) == record end end private :set_constant def constant_for(field_value) if constant = field_value.try(:dup) constant.gsub!(/[^A-Za-z]+/, "_") constant.gsub!(/^_|_$/, '') constant.upcase! constant end end private :constant_for end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
active_hash-0.8.6 | lib/enum/enum.rb |
active_hash-0.8.5 | lib/enum/enum.rb |
active_hash-0.8.4 | lib/enum/enum.rb |
active_hash-0.8.3 | lib/enum/enum.rb |