Module: JSONAPI::Consumer::Utils

Defined in:
lib/jsonapi/consumer/utils.rb

Class Method Summary collapse

Class Method Details

.compute_type(klass, type_name) ⇒ Object

Raises:

  • (NameError)


4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/jsonapi/consumer/utils.rb', line 4

def self.compute_type(klass, type_name)
  # If the type is prefixed with a scope operator then we assume that
  # the type_name is an absolute reference.
  return type_name.constantize if type_name.match(/^::/)

  # Build a list of candidates to search for
  candidates = []
  klass.name.scan(/::|$/) { candidates.unshift "#{$`}::#{type_name}" }
  candidates << type_name

  candidates.each do |candidate|
    begin
      constant = candidate.constantize
      return constant if candidate == constant.to_s
    rescue NameError => e
      # We don't want to swallow NoMethodError < NameError errors
      raise e unless e.instance_of?(NameError)
    end
  end

  raise NameError, "uninitialized constant #{candidates.first}"
end