Sha256: 71f6e0ffb0b30b0e832ffec94fee111636e182b34e18548085a3761848e72e5b

Contents?: true

Size: 715 Bytes

Versions: 1

Compression:

Stored size: 715 Bytes

Contents

module Hollaback
  class Sequence
    attr_reader :befores, :afters, :main

    def initialize(args = {}, &main)
      @main    = main
      @befores = args.fetch(:befores, [])
      @afters  = args.fetch(:afters, [])
    end

    def before(&before)
      befores << before
      self
    end

    def after(&after)
      afters << after
      self
    end

    # rubocop:disable Performance/RedundantBlockCall
    def around(&around)
      Sequence.new do |target|
        around.call(target) { call(target) }
      end
    end

    def call(target)
      befores.each { |before| before.call(target) }
      value = main.call(target)
      afters.each { |after| after.call(target) }
      value
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hollaback-0.1.0 lib/hollaback/sequence.rb