Class: Apiwork::API::TypeRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/apiwork/api/type_registry.rb,
lib/apiwork/api/type_registry/definition.rb

Defined Under Namespace

Classes: Definition

Instance Method Summary collapse

Constructor Details

#initializeTypeRegistry

Returns a new instance of TypeRegistry.



6
7
8
# File 'lib/apiwork/api/type_registry.rb', line 6

def initialize
  @store = {}
end

Instance Method Details

#[](name) ⇒ Object



41
42
43
# File 'lib/apiwork/api/type_registry.rb', line 41

def [](name)
  @store[name]
end

#clear!Object



74
75
76
# File 'lib/apiwork/api/type_registry.rb', line 74

def clear!
  @store.clear
end

#each_pair(&block) ⇒ Object



49
50
51
# File 'lib/apiwork/api/type_registry.rb', line 49

def each_pair(&block)
  @store.each_pair(&block)
end

#exists?(name, scope: nil) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/apiwork/api/type_registry.rb', line 53

def exists?(name, scope: nil)
  find(name, scope:).present?
end

#find(name, scope: nil) ⇒ Object



57
58
59
60
# File 'lib/apiwork/api/type_registry.rb', line 57

def find(name, scope: nil)
  definition = scope ? @store[scoped_name(scope, name)] : nil
  definition || @store[name]
end

#key?(name) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/apiwork/api/type_registry.rb', line 45

def key?(name)
  @store.key?(name)
end

#register(name, kind:, scope: nil, deprecated: false, description: nil, discriminator: nil, example: nil, fragment: false, &block) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/apiwork/api/type_registry.rb', line 10

def register(
  name,
  kind:,
  scope: nil,
  deprecated: false,
  description: nil,
  discriminator: nil,
  example: nil,
  fragment: false,
  &block
)
  key = scoped_name(scope, name)

  if @store.key?(key)
    validate_kind_consistency!(key, kind)
    merge(key, block:, deprecated:, description:, example:)
  else
    @store[key] = Definition.new(
      key,
      block:,
      deprecated:,
      description:,
      discriminator:,
      example:,
      fragment:,
      kind:,
      scope:,
    )
  end
end

#scoped_name(scope, name) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/apiwork/api/type_registry.rb', line 62

def scoped_name(scope, name)
  return name unless scope

  prefix = scope.respond_to?(:scope_prefix) ? scope.scope_prefix : nil
  return name unless prefix
  return prefix.to_sym if name.nil?
  return prefix.to_sym if name.to_s.empty?
  return name.to_sym if name.to_s == prefix

  [prefix, name].join('_').to_sym
end