class SimplerEnum::Generator
Public Class Methods
new(klass, enum_name, enum_values)
click to toggle source
# File lib/simpler_enum/generator.rb, line 3 def initialize(klass, enum_name, enum_values) @klass = klass @enum_name = enum_name @enum_values = case when enum_values.is_a?(Array) enum_values.zip(0...enum_values.size).reduce({}) do |hash, (key, val)| hash.merge!(key => val) end when enum_values.is_a?(Hash) enum_values else fail ArgumentError end end
Public Instance Methods
execute!()
click to toggle source
# File lib/simpler_enum/generator.rb, line 19 def execute! define_read_enum_values_method_to_class! define_read_attribute_to_instance! define_write_attribute_to_instance! define_read_enum_value_method_to_instance! define_write_enum_value_method_to_instance! @enum_values.each do |key, _| define_query_enum_state_method_to_instance!(key) define_change_enum_state_method_to_instance!(key) end end
Private Instance Methods
define_change_enum_state_method_to_instance!(value_name)
click to toggle source
# File lib/simpler_enum/generator.rb, line 104 def define_change_enum_state_method_to_instance!(value_name) @klass.class_exec(@enum_name) do |enum_name| define_method "#{value_name}!" do next_value = self.class.public_send(enum_name.to_s.pluralize.to_sym)[value_name] write_attribute(enum_name, next_value) public_send(enum_name) end end end
define_query_enum_state_method_to_instance!(value_name)
click to toggle source
# File lib/simpler_enum/generator.rb, line 95 def define_query_enum_state_method_to_instance!(value_name) @klass.class_exec(@enum_name) do |enum_name| define_method "#{value_name}?" do current_value = read_attribute(enum_name) current_value == self.class.public_send(enum_name.to_s.pluralize.to_sym)[value_name] end end end
define_read_attribute_to_instance!()
click to toggle source
Calls superclass method
# File lib/simpler_enum/generator.rb, line 57 def define_read_attribute_to_instance! @klass.class_eval do define_method :read_attribute do |key| begin super(key) rescue instance_variable_get("@#{key}") end end end end
define_read_enum_value_method_to_instance!()
click to toggle source
# File lib/simpler_enum/generator.rb, line 69 def define_read_enum_value_method_to_instance! @klass.class_exec(@enum_name) do |enum_name| define_method "#{enum_name}" do value = read_attribute(enum_name) self.class.public_send(enum_name.to_s.pluralize.to_sym).key(value) end end end
define_read_enum_values_method_to_class!()
click to toggle source
# File lib/simpler_enum/generator.rb, line 36 def define_read_enum_values_method_to_class! @klass.class_exec(@enum_name.to_s.pluralize, @enum_values) do |pluralized_name, enum_values| instance_variable_set("@#{pluralized_name}", enum_values) define_singleton_method pluralized_name do instance_variable_get "@#{pluralized_name}" end end end
define_write_attribute_to_instance!()
click to toggle source
Calls superclass method
# File lib/simpler_enum/generator.rb, line 45 def define_write_attribute_to_instance! @klass.class_eval do define_method :write_attribute do |key, val| begin super(key, val) rescue instance_variable_set("@#{key}", val) end end end end
define_write_enum_value_method_to_instance!()
click to toggle source
# File lib/simpler_enum/generator.rb, line 78 def define_write_enum_value_method_to_instance! @klass.class_exec(@enum_name) do |enum_name| define_method "#{enum_name}=" do |value| next_value = case when value.is_a?(Symbol) self.class.public_send(enum_name.to_s.pluralize.to_sym)[value] when value.is_a?(String) self.class.public_send(enum_name.to_s.pluralize.to_sym)[value.to_sym] else value end write_attribute(enum_name, next_value) end end end