Sha256: b3e24a5be4ce77db66c2e5ed90501dcb9705866b9f6e90b07b83e36042a21615

Contents?: true

Size: 786 Bytes

Versions: 11

Compression:

Stored size: 786 Bytes

Contents

# frozen_string_literal: true

require_relative 'lookups/base'
require_relative 'lookups/name'
require_relative 'lookups/object'

module Coactive
  class Lookup
    class << self
      class_attribute :lookups
      self.lookups = [Lookups::Name, Lookups::Object]

      class_attribute :cache
      self.cache = {}

      def call(klass, coactant)
        with_cache(klass, coactant) do
          lookup = lookups.detect { |lookup| lookup.callable?(coactant) }
          lookup.new(klass, coactant).call if lookup
        end
      end

      private

      def with_cache(klass, coactant)
        if klass.coactive_config.use_cache
          self.cache[klass] ||= {}
          self.cache[klass][coactant] ||= yield
        else
          yield
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
coactive-0.6.0 lib/coactive/lookup.rb
coactive-0.5.2 lib/coactive/lookup.rb
coactive-0.5.1 lib/coactive/lookup.rb
coactive-0.5.0 lib/coactive/lookup.rb
coactive-0.4.1 lib/coactive/lookup.rb
coactive-0.4.0 lib/coactive/lookup.rb
coactive-0.3.0 lib/coactive/lookup.rb
coactive-0.2.2 lib/coactive/lookup.rb
coactive-0.2.1 lib/coactive/lookup.rb
coactive-0.2.0 lib/coactive/lookup.rb
coactive-0.1.2 lib/coactive/lookup.rb