Sha256: 24960024cb9c2e496a41046b66b123133a422c9debc4eb4d4763471f06b8cc6c

Contents?: true

Size: 506 Bytes

Versions: 11

Compression:

Stored size: 506 Bytes

Contents

# frozen_string_literal: true

module Pipeable
  module Steps
    # Validates result via a callable contract.
    class Validate < Abstract
      def initialize contract, as: nil
        super()
        @contract = contract
        @as = as
      end

      def call(result) = result.bind { |payload| cast payload }

      private

      attr_reader :contract, :as

      def cast payload
        contract.call(payload).to_monad.fmap { |data| as ? data.public_send(as) : data }
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
pipeable-1.1.0 lib/pipeable/steps/validate.rb
pipeable-1.0.0 lib/pipeable/steps/validate.rb
pipeable-0.14.0 lib/pipeable/steps/validate.rb
pipeable-0.13.0 lib/pipeable/steps/validate.rb
pipeable-0.12.0 lib/pipeable/steps/validate.rb
pipeable-0.11.0 lib/pipeable/steps/validate.rb
pipeable-0.10.0 lib/pipeable/steps/validate.rb
pipeable-0.9.1 lib/pipeable/steps/validate.rb
pipeable-0.9.0 lib/pipeable/steps/validate.rb
pipeable-0.8.0 lib/pipeable/steps/validate.rb
pipeable-0.7.0 lib/pipeable/steps/validate.rb