Sha256: 336388b6f5e90d67764c4a99cf77e9f5aa403305671b23565cbcc4cf8d8359a6

Contents?: true

Size: 1.09 KB

Versions: 5

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

module Strict
  module Attributes
    class Dsl < BasicObject
      class << self
        def run(&block)
          dsl = new
          dsl.instance_eval(&block)
          ::Strict::Attributes::Configuration.new(attributes: dsl.__strict_dsl_internal_attributes.values)
        end
      end

      include ::Strict::Dsl::Coercible
      include ::Strict::Dsl::Validatable

      attr_reader :__strict_dsl_internal_attributes

      def initialize
        @__strict_dsl_internal_attributes = {}
      end

      def strict_attribute(*args, **kwargs)
        attribute = ::Strict::Attribute.make(*args, **kwargs)
        __strict_dsl_internal_attributes[attribute.name] = attribute
        nil
      end

      def method_missing(name, *args, **kwargs)
        if respond_to_missing?(name)
          strict_attribute(name, *args, **kwargs)
        else
          super
        end
      end

      def respond_to_missing?(method_name, _include_private = nil)
        first_letter = method_name.to_s.each_char.first
        first_letter.eql?(first_letter.downcase)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
strict-1.5.0 lib/strict/attributes/dsl.rb
strict-1.4.0 lib/strict/attributes/dsl.rb
strict-1.3.1 lib/strict/attributes/dsl.rb
strict-1.3.0 lib/strict/attributes/dsl.rb
strict-1.2.0 lib/strict/attributes/dsl.rb