Sha256: 2c84b59405b6a98557a4b7a6b3a647020947b0bc15a6a1931285b4da916216dc

Contents?: true

Size: 804 Bytes

Versions: 1

Compression:

Stored size: 804 Bytes

Contents

# frozen_string_literal: true

module Micro::Struct
  class Creator
    require_relative 'creator/create_module'
    require_relative 'creator/create_struct'

    def initialize(features)
      @features = Features.require(features)
    end

    ValidateMemberNames = ->(values) do
      Validate::Names.(values, label: 'member')
    end

    def new(*members, _optional: nil, &block)
      required_members = ValidateMemberNames[members]
      optional_members = ValidateMemberNames[_optional]

      container = CreateModule.with(required_members, optional_members, @features)
      struct = CreateStruct.with(required_members, optional_members, @features, &block)

      container.const_set(:Struct, struct)
      struct.const_set(:Container, container)
    end
  end

  private_constant :Creator
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
u-struct-0.6.0 lib/micro/struct/creator.rb