Sha256: d698a71a1dec2332ef6ca18eed166857ef91dc50547316b4d514147787a8e6ae
Contents?: true
Size: 1.11 KB
Versions: 2
Compression:
Stored size: 1.11 KB
Contents
# frozen_string_literal: true class Micro::Struct::Creator module CreateStruct extend self def with(required_members, optional_members, features, &block) struct = ::Struct.new(*(required_members + optional_members), &block) struct.send(:private_class_method, :new) def_to_ary(struct) if features[:to_ary] def_to_hash(struct) if features[:to_hash] def_readonly(struct) if features[:readonly] def_instance_copy(struct) if features[:readonly] || features[:instance_copy] struct end private def def_to_ary(struct) struct.send(:alias_method, :to_ary, :to_a) end def def_to_hash(struct) struct.send(:alias_method, :to_hash, :to_h) end def def_readonly(struct) struct.send(:private, *struct.members.map { |member| "#{member}=" }) end def def_instance_copy(struct) struct.class_eval(<<-RUBY, __FILE__, __LINE__ + 1) def with(**members) self.class.const_get(:Container, false).new(**to_h.merge(members)) end RUBY end end private_constant :CreateStruct end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
u-struct-0.8.0 | lib/micro/struct/creator/create_struct.rb |
u-struct-0.7.0 | lib/micro/struct/creator/create_struct.rb |