Sha256: d230e47561503b397dfb0c036ea89c5738f662bc5c458dddc005a91d29fe9b90

Contents?: true

Size: 980 Bytes

Versions: 3

Compression:

Stored size: 980 Bytes

Contents

module EnumeratedAttribute
	module Attribute
		class AttributeDescriptor < Array		
			attr_reader :name
			
			def initialize(name, enums=[], opts={})
				super enums
				@name = name
				@options = opts
				@labels_hash = Hash[*self.collect{|e| [e, e.to_s.gsub(/_/, ' ').squeeze(' ').capitalize]}.flatten]
			end
			
			def allows_nil?
				@options.key?(:nil) ? @options[:nil] : true
			end
			def allows_value?(value)
				self.include?(value.to_sym)
			end
				
			def enums
				self
			end
			def label(value)
				@labels_hash[value]
			end
			def labels
				@labels_array ||= self.map{|e| @labels_hash[e]}
			end
			def hash
				@labels_hash
			end
			def select_options
				@select_options ||= self.map{|e| [@labels_hash[e], e.to_s]}
			end
			
			def set_label(enum_value, label_string)
				reset_labels
				@labels_hash[enum_value.to_sym] = label_string
			end
			
			private
			def reset_labels
				@labels_array = nil
				@select_options = nil
			end
			
		end
	end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
jeffp-enumerated_attribute-0.2.0.2 lib/enumerated_attribute/attribute/attribute_descriptor.rb
jeffp-enumerated_attribute-0.2.1 lib/enumerated_attribute/attribute/attribute_descriptor.rb
jeffp-enumerated_attribute-0.2.2 lib/enumerated_attribute/attribute/attribute_descriptor.rb