Sha256: dc70f5c65563611608d5413938142990dab17ed8805f2bc5589e13892ea2ac20

Contents?: true

Size: 979 Bytes

Versions: 4

Compression:

Stored size: 979 Bytes

Contents

# frozen_string_literal: true

require 'dry/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

4 entries across 4 versions & 1 rubygems

Version Path
dry-effects-0.1.5 lib/dry/effects/effect.rb
dry-effects-0.1.4 lib/dry/effects/effect.rb
dry-effects-0.1.3 lib/dry/effects/effect.rb
dry-effects-0.1.2 lib/dry/effects/effect.rb