Class: NxtRegistry::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/nxt_registry/registry.rb

Direct Known Subclasses

RecursiveRegistry

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = object_id.to_s, **options, &config) ⇒ Registry

Returns a new instance of Registry.



3
4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/nxt_registry/registry.rb', line 3

def initialize(name = object_id.to_s, **options, &config)
  @options = options
  @name = name
  @parent = options[:parent]
  @is_leaf = true
  @namespace = build_namespace
  @config = config
  @store = {}
  @configured = false
  @patterns = []
  @config = config

  configure(&config)
end

Instance Attribute Details

#configuredObject

Returns the value of attribute configured.



19
20
21
# File 'lib/nxt_registry/registry.rb', line 19

def configured
  @configured
end

#nameObject (readonly)

Returns the value of attribute name.



18
19
20
# File 'lib/nxt_registry/registry.rb', line 18

def name
  @name
end

Instance Method Details

#[](key) ⇒ Object



110
111
112
# File 'lib/nxt_registry/registry.rb', line 110

def [](key)
  resolve!(key)
end

#[]=(key, value) ⇒ Object



114
115
116
# File 'lib/nxt_registry/registry.rb', line 114

def []=(key, value)
  register(key, value)
end

#allowed_keys(*keys) ⇒ Object Also known as: attrs



57
58
59
60
61
62
# File 'lib/nxt_registry/registry.rb', line 57

def allowed_keys(*keys)
  @allowed_keys ||= []
  return @allowed_keys if keys.empty?

  @allowed_keys += keys.map { |key| transformed_key(key) }
end

#attr(key) ⇒ Object



66
67
68
# File 'lib/nxt_registry/registry.rb', line 66

def attr(key)
  allowed_keys(key) # @deprecated
end

#configure(&block) ⇒ Object



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/nxt_registry/registry.rb', line 141

def configure(&block)
  setup_defaults(options)
  define_accessors
  define_interface
  allowed_keys(*Array(options.fetch(:allowed_keys, [])))
  required_keys(*Array(options.fetch(:required_keys, [])))

  if block.present?
    if block.arity == 1
      instance_exec(self, &block)
    else
      instance_exec(&block)
    end
  end

  validate_required_keys_given
  self.configured = true
end

#exclude?(key) ⇒ Boolean

Returns:

  • (Boolean)


130
131
132
# File 'lib/nxt_registry/registry.rb', line 130

def exclude?(key)
  store.exclude?(transformed_key(key))
end

#fetch(key, *args, &block) ⇒ Object



134
135
136
137
# File 'lib/nxt_registry/registry.rb', line 134

def fetch(key, *args, &block)
  key = matching_key(key)
  store.fetch(key, *args, &block)
end

#include?(key) ⇒ Boolean

Returns:

  • (Boolean)


126
127
128
# File 'lib/nxt_registry/registry.rb', line 126

def include?(key)
  store.include?(transformed_key(key))
end

#key?(key) ⇒ Boolean

Returns:

  • (Boolean)


122
123
124
# File 'lib/nxt_registry/registry.rb', line 122

def key?(key)
  store.key?(transformed_key(key))
end

#keysObject



118
119
120
# File 'lib/nxt_registry/registry.rb', line 118

def keys
  store.keys.map(&method(:transformed_key))
end

#level(name, **options, &config) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/nxt_registry/registry.rb', line 21

def level(name, **options, &config)
  options = options.merge(parent: self)

  if is_a_blank?(default)
    self.is_leaf = false

    self.default = RegistryBuilder.new do
      Registry.new(name, **options, &config)
    end

    # Call the builder once to guarantee we do not create a registry with a broken setup
    default.call
  elsif default.is_a?(RegistryBuilder)
    raise ArgumentError, 'Multiple nestings on the same level'
  else
    raise ArgumentError, 'Default values cannot be defined on registries that nest others'
  end
end

#register(key = Blank.new, value = Blank.new, **options, &block) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
# File 'lib/nxt_registry/registry.rb', line 70

def register(key = Blank.new, value = Blank.new, **options, &block)
  if block_given?
    if is_a_blank?(value)
      registry(key, **options, &block)
    else
      raise_register_argument_error
    end
  else
    __register(key, value, raise_on_key_already_registered: true)
  end
end

#register!(key = Blank.new, value = Blank.new, **options, &block) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/nxt_registry/registry.rb', line 82

def register!(key = Blank.new, value = Blank.new, **options, &block)
  if block_given?
    if is_a_blank?(value)
      registry!(key, **options, &block)
    else
      raise_register_argument_error
    end
  else
    __register(key, value, raise_on_key_already_registered: false)
  end
end

#registry(name, **options, &config) ⇒ Object



40
41
42
43
# File 'lib/nxt_registry/registry.rb', line 40

def registry(name, **options, &config)
  opts = conditionally_inherit_options(options)
  register(name, Registry.new(name, **opts, &config))
end

#registry!(name, **options, &config) ⇒ Object



45
46
47
48
# File 'lib/nxt_registry/registry.rb', line 45

def registry!(name, **options, &config)
  opts = conditionally_inherit_options(options)
  register!(name, Registry.new(name, **opts, &config))
end

#required_keys(*keys) ⇒ Object



50
51
52
53
54
55
# File 'lib/nxt_registry/registry.rb', line 50

def required_keys(*keys)
  @required_keys ||= []
  return @required_keys if keys.empty?

  @required_keys += keys.map { |key| transformed_key(key) }
end

#resolve(*keys) ⇒ Object



100
101
102
103
104
# File 'lib/nxt_registry/registry.rb', line 100

def resolve(*keys)
  keys.inject(self) do |current_registry, key|
    current_registry.send(:__resolve, key, raise_on_key_not_registered: false) || break
  end
end

#resolve!(*keys) ⇒ Object



94
95
96
97
98
# File 'lib/nxt_registry/registry.rb', line 94

def resolve!(*keys)
  keys.inject(self) do |current_registry, key|
    current_registry.send(:__resolve, key, raise_on_key_not_registered: true)
  end
end

#to_hObject



106
107
108
# File 'lib/nxt_registry/registry.rb', line 106

def to_h
  store
end

#to_sObject Also known as: inspect



160
161
162
# File 'lib/nxt_registry/registry.rb', line 160

def to_s
  "Registry[#{name}] -> #{store.to_s}"
end