Sha256: fafd2241239e932045ddfb26334523a6c27fdcd61342ae435f57e67430250812

Contents?: true

Size: 1.92 KB

Versions: 34

Compression:

Stored size: 1.92 KB

Contents

require 'inch/language/elixir/provider/reader/object/base'
require 'inch/language/elixir/provider/reader/object/function_object'
require 'inch/language/elixir/provider/reader/object/module_object'
require 'inch/language/elixir/provider/reader/object/type_object'

module Inch
  module Language
    module Elixir
      module Provider
        module Reader
          # CodeObject::Provider::JSDoc::Object object represent code objects.
          #
          module Object
            class << self
              def clear_cache
                @cache = {}
              end

              # Returns a Proxy object for the given +json_object+
              #
              # @param json_object [Hash]
              # @return [Provider::JSDoc::Object]
              def for(json_object)
                @cache ||= {}
                if (proxy_object = @cache[cache_key(json_object)])
                  proxy_object
                else
                  @cache[cache_key(json_object)] =
                    class_for(json_object).new(json_object)
                end
              end

              private

              # Returns a Proxy class for the given +json_object+
              #
              # @param json_object [Hash]
              # @return [Class]
              def class_for(json_object)
                class_name = json_object['object_type']
                Reader::Object.const_get(class_name)
              rescue NameError
                Reader::Object::Base
              end

              # Returns a cache key for the given +json_object+
              #
              # @param json_object [Hash]
              # @return [String]
              def cache_key(json_object)
                [
                  json_object['id'],
                  json_object['module_id'],
                  json_object['signature']
                ].map(&:to_s).join('.')
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
inch-0.9.0.rc1 lib/inch/language/elixir/provider/reader/object.rb
inch-0.8.0 lib/inch/language/elixir/provider/reader/object.rb
inch-0.8.0.rc2 lib/inch/language/elixir/provider/reader/object.rb
inch-0.8.0.rc1 lib/inch/language/elixir/provider/reader/object.rb
inch-0.7.1 lib/inch/language/elixir/provider/reader/object.rb
inch-0.7.0 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.4 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.3 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.2 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.1 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.0 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.0.rc6 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.0.rc5 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.0.rc4 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.0.rc3 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.0.rc2 lib/inch/language/elixir/provider/reader/object.rb
inch-0.6.0.rc1 lib/inch/language/elixir/provider/reader/object.rb
inch-0.5.10 lib/inch/language/elixir/provider/reader/object.rb
inch-0.5.9 lib/inch/language/elixir/provider/reader/object.rb
inch-0.5.8 lib/inch/language/elixir/provider/reader/object.rb