Class: NatsWork::Registry

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/natswork/registry.rb

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



12
13
14
15
16
# File 'lib/natswork/registry.rb', line 12

def initialize
  @mutex = Mutex.new
  @jobs = Concurrent::Hash.new
  @metadata = Concurrent::Hash.new
end

Instance Method Details

#alias(alias_name, source_name) ⇒ Object



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

def alias(alias_name, source_name)
  source_class = lookup!(source_name)
   = @metadata[source_name.to_s]

  @mutex.synchronize do
    @jobs[alias_name.to_s] = source_class
    @metadata[alias_name.to_s] = .dup if 
  end
end

#allObject



52
53
54
# File 'lib/natswork/registry.rb', line 52

def all
  @jobs.to_a
end

#clear!Object



60
61
62
63
64
65
# File 'lib/natswork/registry.rb', line 60

def clear!
  @mutex.synchronize do
    @jobs.clear
    @metadata.clear
  end
end

#jobs_for_queue(queue_name) ⇒ Object



41
42
43
44
45
46
# File 'lib/natswork/registry.rb', line 41

def jobs_for_queue(queue_name)
  @jobs.select do |name, _|
     = @metadata[name]
     && [:queue] == queue_name
  end.to_a
end

#load_from_hash(config) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/natswork/registry.rb', line 96

def load_from_hash(config)
  @mutex.synchronize do
    config.each do |name, settings|
      class_name = settings['class'] || settings[:class]
      job_class = Object.const_get(class_name)

      options = settings.dup
      options.delete('class')
      options.delete(:class)

      @jobs[name] = job_class
      @metadata[name] = (job_class, symbolize_keys(options))
    end
  end
end

#lookup(name) ⇒ Object



26
27
28
# File 'lib/natswork/registry.rb', line 26

def lookup(name)
  @jobs[name.to_s]
end

#lookup!(name) ⇒ Object

Raises:



30
31
32
33
34
35
# File 'lib/natswork/registry.rb', line 30

def lookup!(name)
  job_class = lookup(name)
  raise UnknownJobError, "Unknown job: #{name}" unless job_class

  job_class
end

#metadata_for(name) ⇒ Object



67
68
69
# File 'lib/natswork/registry.rb', line 67

def (name)
  @metadata[name.to_s]
end

#queuesObject



48
49
50
# File 'lib/natswork/registry.rb', line 48

def queues
  @metadata.values.map { |m| m[:queue] }.compact.uniq
end

#register(name, job_class, options = {}) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/natswork/registry.rb', line 18

def register(name, job_class, options = {})
  name = name.to_s
  @mutex.synchronize do
    @jobs[name] = job_class
    @metadata[name] = (job_class, options)
  end
end

#registered?(name) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/natswork/registry.rb', line 37

def registered?(name)
  @jobs.key?(name.to_s)
end

#scan_directory(path) ⇒ Object



112
113
114
115
116
# File 'lib/natswork/registry.rb', line 112

def scan_directory(path)
  Dir.glob(File.join(path, '**', '*.rb')).sort.each do |file|
    require file
  end
end

#sizeObject



56
57
58
# File 'lib/natswork/registry.rb', line 56

def size
  @jobs.size
end

#to_hObject



81
82
83
84
85
86
87
88
# File 'lib/natswork/registry.rb', line 81

def to_h
  @mutex.synchronize do
    @jobs.each_with_object({}) do |(name, klass), hash|
       = @metadata[name] || {}
      hash[name] = .merge(class: klass.name)
    end
  end
end

#to_json(*args) ⇒ Object



90
91
92
93
94
# File 'lib/natswork/registry.rb', line 90

def to_json(*args)
  to_h.transform_values do |meta|
    meta.except(:class).merge('class' => meta[:class])
  end.to_json(*args)
end