Sha256: 3fafe3a9d929bee2b1510f8e6c704c0fd7ef42b52819cd5dba24d4e37d544f39

Contents?: true

Size: 1.07 KB

Versions: 7

Compression:

Stored size: 1.07 KB

Contents

class MLS::Attribute
	DEFAULT_OPTIONS = { :serialize => :always	}
	
	attr_reader :model, :name, :instance_variable_name, :options, :default
	attr_reader :reader_visibility, :writer_visibility

	def initialize(name, options={})
		@name                   = name
		@instance_variable_name = "@#{@name}".freeze
		@options                = DEFAULT_OPTIONS.merge(options)

		set_default_value
		determine_visibility
	end

	def set_default_value
		@default = @options[:default]
	end

	def determine_visibility # default :public
		@reader_visibility = @options[:reader] || :public
		@writer_visibility = @options[:writer] || :public
	end

	def self.determine_class(type)
		return type if type < MLS::Attribute
		find_class(::ActiveSupport::Inflector.demodulize(type))
	end

	def self.inherited(descendant)
		demodulized_names[::ActiveSupport::Inflector.demodulize(descendant.name)] ||= descendant
	end

	def self.demodulized_names
		@demodulized_names ||= {}
	end

	def self.find_class(name)
		klass   = demodulized_names[name]
		klass ||= const_get(name) if const_defined?(name)
		klass
	end
	
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mls-0.14.0 lib/mls/attribute.rb
mls-0.13.0 lib/mls/attribute.rb
mls-0.12.5 lib/mls/attribute.rb
mls-0.12.4 lib/mls/attribute.rb
mls-0.12.2 lib/mls/attribute.rb
mls-0.12.3 lib/mls/attribute.rb
mls-0.12.1 lib/mls/attribute.rb