Sha256: 668d88d0c588a8747292ff86e134e3225655997e201d735cbaf63ba32c6c339e

Contents?: true

Size: 1.89 KB

Versions: 3

Compression:

Stored size: 1.89 KB

Contents

module Acfs
  #
  # Global Acfs module methods.
  #
  module Global
    #
    # @api private
    # @return [Runner]
    #
    def runner
      Thread.current[:acfs_runner] ||= Runner.new Adapter::Typhoeus.new
    end

    # @api public
    #
    # Run all queued operations.
    #
    # @return [undefined]
    #
    def run
      ::ActiveSupport::Notifications.instrument 'acfs.before_run'
      ::ActiveSupport::Notifications.instrument 'acfs.run' do
        runner.start
      end
    end

    # @api public
    #
    # Configure acfs using given block.
    #
    # @return [undefined]
    # @see Configuration#configure
    #
    def configure(&block)
      Configuration.current.configure(&block)
    end

    # @api public
    #
    # Reset all queues, stubs and internal state.
    #
    def reset
      ::ActiveSupport::Notifications.instrument 'acfs.reset' do
        runner.clear
        Acfs::Stub.clear
      end
    end

    # @api public
    #
    # Add an additional callback hook to not loaded resource.
    # If given resource already loaded callback will be invoked immediately.
    #
    # This method will be replaced by explicit callback
    # handling when query methods return explicit future objects.
    #
    # @example
    #   user = MyUser.find 1, &callback_one
    #   Acfs.add_callback(user, &callback_two)
    #
    def add_callback(resource, &block)
      unless resource.respond_to?(:__callbacks__)
        raise ArgumentError.new 'Given resource is not an Acfs resource ' \
          "delegator but a: #{resource.class.name}"
      end
      return false if block.nil?

      if resource.loaded?
        block.call resource
      else
        resource.__callbacks__ << block
      end
    end

    def on(*resources)
      resources.each do |resource|
        add_callback resource do |_|
          yield(*resources) unless resources.any? {|res| !res.loaded? }
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
acfs-0.43.2 lib/acfs/global.rb
acfs-0.43.1 lib/acfs/global.rb
acfs-0.43.0 lib/acfs/global.rb