class LunaPark::Entities::Nested

add description

Public Class Methods

namespace(name, &block) click to toggle source
# File lib/luna_park/entities/nested.rb, line 9
def self.namespace(name, &block) # rubocop:disable Metrics/MethodLength
  serializable_attributes(name)
  comparable_attributes(name)

  namespace_class = Class.new(Nested)
  namespace_class.define_singleton_method(:name) { "Namespace:#{name}" }
  namespace_class.class_eval(&block)

  anonym_mixin = Module.new do
    attr_reader(name)

    define_method(:"#{name}=") do |input|
      instance_variable_set(:"@#{name}", namespace_class.wrap(input))
    end
  end
  include(anonym_mixin)
end