Module: Degu::Renum::EnumeratedValueTypeFactory
- Defined in:
- lib/degu/renum/enumerated_value_type_factory.rb
Class Method Summary collapse
- .create(nest, type_name, values, &block) ⇒ Object
- .create_class(nest, type_name) ⇒ Object
- .create_values(klass, values, &block) ⇒ Object
- .setup_for_definition_in_block(klass) ⇒ Object
- .teardown_from_definition_in_block(klass) ⇒ Object
Class Method Details
.create(nest, type_name, values, &block) ⇒ Object
7 8 9 10 |
# File 'lib/degu/renum/enumerated_value_type_factory.rb', line 7 def create nest, type_name, values, &block klass = create_class nest, type_name create_values klass, values, &block end |
.create_class(nest, type_name) ⇒ Object
12 13 14 15 16 |
# File 'lib/degu/renum/enumerated_value_type_factory.rb', line 12 def create_class nest, type_name klass = Class.new EnumeratedValue nest.const_set(type_name, klass) klass end |
.create_values(klass, values, &block) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/degu/renum/enumerated_value_type_factory.rb', line 18 def create_values klass, values, &block setup_for_definition_in_block(klass) if values == :defined_in_block klass.class_eval &block if block_given? if values == :defined_in_block begin klass.block_defined_values.each do |value_name, init_args, instance_block| value = klass.new(value_name) klass.const_set(value_name, value) value.instance_eval &instance_block if instance_block value.init *init_args if value.respond_to? :init end ensure teardown_from_definition_in_block(klass) end else values.each do |name| klass.const_set(name, klass.new(name)) end end klass.values.freeze end |
.setup_for_definition_in_block(klass) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/degu/renum/enumerated_value_type_factory.rb', line 40 def setup_for_definition_in_block klass klass.class_eval do def self.block_defined_values @block_defined_values ||= [] end def self.method_missing value_name, *init_args, &instance_block block_defined_values << [value_name, init_args, instance_block] end end end |
.teardown_from_definition_in_block(klass) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/degu/renum/enumerated_value_type_factory.rb', line 52 def teardown_from_definition_in_block klass class << klass remove_method :block_defined_values remove_method :method_missing end end |