Sha256: 47b0c75cd28d46e9d5ce3766f30afe845495a206156564b523ad28f6d51f41a6

Contents?: true

Size: 984 Bytes

Versions: 1

Compression:

Stored size: 984 Bytes

Contents

# frozen_string_literal: true

require "dry/core/equalizer"
require "dry/effects/initializer"

module Dry
  module Effects
    class Effect
      extend Initializer

      include ::Dry::Equalizer(:type, :name, :payload, :keywords)

      option :type

      option :name, default: -> { type }

      option :payload, default: -> { EMPTY_ARRAY }

      option :keywords, default: -> { EMPTY_HASH }

      def payload(*payload)
        if payload.empty?
          @payload
        else
          with(payload: payload)
        end
      end

      def keywords(**keywords)
        if keywords.empty?
          @keywords
        else
          with(keywords: @keywords.merge(keywords))
        end
      end

      def call(*args, **kwargs)
        if args.empty?
          if kwargs.empty?
            self
          else
            keywords(**kwargs)
          end
        else
          with(payload: args, keywords: @keywords.merge(kwargs))
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dry-effects-0.2.0 lib/dry/effects/effect.rb