Sha256: 329fb5ac386e3f99f21b774a07fe9d57c1eb88d93fab7ddc0450ef03d8453536

Contents?: true

Size: 850 Bytes

Versions: 2

Compression:

Stored size: 850 Bytes

Contents

# frozen_string_literal: true

require 'immutable_struct_ex'
require_relative 'options_defaultable'
require_relative 'options_validatable'

module MadFlatter
  # Defines methods to create options.
  module Options
    extend MadFlatter::OptionsDefaultable
    extend MadFlatter::OptionsValidatable

    class << self
      def new(**options)
        immutable_struct_ex = ImmutableStructEx.new(**options) do
          def namespace?
            namespace || false
          end

          def metadata?
            metadata || false
          end
        end
        validate_options! options: immutable_struct_ex.to_h
        immutable_struct_ex
      end

      def with_defaults(options, defaults: DEFAULT_OPTIONS)
        new(**defaults.to_h.merge(options.to_h))
      end

      def default
        with_defaults({})
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mad_flatter-1.0.1.pre.beta lib/mad_flatter/options.rb
mad_flatter-1.0.0.pre.beta lib/mad_flatter/options.rb