Sha256: 78f890ba09202c5a97c897426f8aeabb3e33d7a096c0c97fd06874c59dec6f93

Contents?: true

Size: 1.78 KB

Versions: 3

Compression:

Stored size: 1.78 KB

Contents

require 'remarkable/core/dsl/assertions'
require 'remarkable/core/dsl/optionals'
require 'remarkable/core/dsl/callbacks'

module Remarkable
  # The DSL module is responsable for all Remarkable convenience methods.
  # It has three main submodules:
  #
  #   * <tt>Assertions</tt> - adds a class methods to define matcher initialization and assertions,
  #                           allowing matches? to be hidden from the matcher developer and dealing
  #                           with I18n in the expectations messages;
  #
  #   * <tt>Callbacks</tt> - provides API for after_initialize and before_assert callbacks;
  #
  #   * <tt>Optionals</tt> - add an optionals DSL, which is also used for the auto configuring blocks
  #                          and dynamic descriptions.
  #
  module DSL
    ATTR_READERS = [
      :matcher_arguments,
      :matcher_optionals,
      :matcher_optionals_splat,
      :matcher_optionals_block,
      :matcher_single_assertions,
      :matcher_collection_assertions,
      :before_assert_callbacks,
      :after_initialize_callbacks
    ] unless self.const_defined?(:ATTR_READERS)

    def self.extended(base) #:nodoc:
      base.send :include, Assertions
      base.send :include, Callbacks
      base.send :include, Optionals

      # Initialize matcher_arguments hash with names as an empty array
      base.instance_variable_set('@matcher_arguments', { :names => [] })
    end

    # Make Remarkable::Base DSL inheritable.
    #
    def inherited(base) #:nodoc:
      base.class_eval do
        class << self
          attr_reader *ATTR_READERS
        end
      end

      ATTR_READERS.each do |attr|
        current_value = self.instance_variable_get("@#{attr}")
        base.instance_variable_set("@#{attr}", current_value ? current_value.dup : [])
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
remarkable-4.0.0.alpha4 lib/remarkable/core/dsl.rb
remarkable-4.0.0.alpha3 lib/remarkable/core/dsl.rb
remarkable-4.0.0.alpha2 lib/remarkable/core/dsl.rb