Class: RabbitJobs::Configuration

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/rabbit_jobs/configuration.rb

Constant Summary collapse

DEFAULT_EXCHANGE_PARAMS =
{
  auto_delete: false,
  durable: true
}
DEFAULT_QUEUE_PARAMS =
{
  auto_delete: false,
  exclusive: false,
  durable: true,
  ack: true
}
DEFAULT_MESSAGE_PARAMS =
{
  persistent: true,
  mandatory: true,
  immediate: false
}

Instance Method Summary collapse

Methods included from Helpers

#constantize, #symbolize_keys!

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



63
64
65
66
67
68
69
70
71
# File 'lib/rabbit_jobs/configuration.rb', line 63

def initialize
  @data = {
    error_log: true,
    workers: {},
    servers: [],
    prefix: 'rabbit_jobs',
    queues: {}
  }
end

Instance Method Details

#[](name) ⇒ Object



73
74
75
# File 'lib/rabbit_jobs/configuration.rb', line 73

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

#convert_yaml_config(yaml) ⇒ Object



188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/rabbit_jobs/configuration.rb', line 188

def convert_yaml_config(yaml)
  if yaml['rabbit_jobs']
    convert_yaml_config(yaml['rabbit_jobs'])
  elsif defined?(Rails) && yaml[Rails.env.to_s]
    convert_yaml_config(yaml[Rails.env.to_s])
  else
    @data = {prefix: nil, queues: {}}
    %w(prefix mail_errors_to mail_errors_from).each do |m|
      self.send(m, yaml[m])
    end
    yaml['servers'].split(",").each do |value|
      server normalize_url(value)
    end
    yaml['queues'].each do |name, params|
      queue name, symbolize_keys!(params) || {}
    end
  end
end

#default_queueObject



170
171
172
173
# File 'lib/rabbit_jobs/configuration.rb', line 170

def default_queue
  queue('default', DEFAULT_QUEUE_PARAMS) if @data[:queues].empty?
  worker_queues.first
end

#disable_error_logObject



97
98
99
# File 'lib/rabbit_jobs/configuration.rb', line 97

def disable_error_log
  @data[:error_log] = false
end

#error_logObject



93
94
95
# File 'lib/rabbit_jobs/configuration.rb', line 93

def error_log
  @data[:error_log]
end

#init_default_queueObject



162
163
164
# File 'lib/rabbit_jobs/configuration.rb', line 162

def init_default_queue
  queue('default', DEFAULT_QUEUE_PARAMS) if @data[:queues].empty?
end

#load_file(filename) ⇒ Object



180
181
182
# File 'lib/rabbit_jobs/configuration.rb', line 180

def load_file(filename)
  load_yaml(File.read(filename))
end

#load_yaml(text) ⇒ Object



184
185
186
# File 'lib/rabbit_jobs/configuration.rb', line 184

def load_yaml(text)
  convert_yaml_config(YAML.load(text))
end

#mail_errors_from(email = nil) ⇒ Object



85
86
87
88
89
90
91
# File 'lib/rabbit_jobs/configuration.rb', line 85

def mail_errors_from(email = nil)
  if email
    @data[:mail_errors_from] = email
  else
    @data[:mail_errors_from]
  end
end

#mail_errors_to(email = nil) ⇒ Object



77
78
79
80
81
82
83
# File 'lib/rabbit_jobs/configuration.rb', line 77

def mail_errors_to(email = nil)
  if email
    @data[:mail_errors_to] = email
  else
    @data[:mail_errors_to]
  end
end

#prefix(value = nil) ⇒ Object



117
118
119
120
121
122
123
124
# File 'lib/rabbit_jobs/configuration.rb', line 117

def prefix(value = nil)
  if value
    raise ArgumentError unless value.is_a?(String) && value != ""
    @data[:prefix] = value.downcase
  else
    @data[:prefix]
  end
end

#queue(name, params = {}) ⇒ Object

Raises:

  • (ArgumentError)


126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/rabbit_jobs/configuration.rb', line 126

def queue(name, params = {})
  raise ArgumentError.new("name is #{name.inspect}") unless name && name.is_a?(String) && name != ""
  raise ArgumentError.new("params is #{params.inspect}") unless params && params.is_a?(Hash)

  name = name.downcase.to_sym

  if @data[:queues][name]
    @data[:queues][name].merge!(params)
  else
    @data[:queues][name] = DEFAULT_QUEUE_PARAMS.merge(params)
  end
end

#queue_name(routing_key) ⇒ Object



175
176
177
178
# File 'lib/rabbit_jobs/configuration.rb', line 175

def queue_name(routing_key)
  routing_key = routing_key.to_sym
  @data[:queues][routing_key][:ignore_prefix] ? routing_key : [@data[:prefix], routing_key].compact.join('#')
end

#routing_keysObject



158
159
160
# File 'lib/rabbit_jobs/configuration.rb', line 158

def routing_keys
  @data[:queues].keys
end

#server(value = nil) ⇒ Object



110
111
112
113
114
115
# File 'lib/rabbit_jobs/configuration.rb', line 110

def server(value = nil)
  raise unless value && !value.to_s.empty?
  value = normalize_url(value.to_s.strip)
  @data[:servers] ||= []
  @data[:servers] << value unless @data[:servers].include?(value)
end

#servers(*value) ⇒ Object



101
102
103
104
105
106
107
108
# File 'lib/rabbit_jobs/configuration.rb', line 101

def servers(*value)
  unless value.empty?
    @data[:servers] = value.map(&:to_s).map(&:strip).keep_if{|url|!url.empty?}.map {|url|
      normalize_url(url)
    }
  end
  @data[:servers]
end

#to_hashObject



59
60
61
# File 'lib/rabbit_jobs/configuration.rb', line 59

def to_hash
  @data.dup
end

#worker(name, params = {}) ⇒ Object

Raises:

  • (ArgumentError)


143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/rabbit_jobs/configuration.rb', line 143

def worker(name, params = {})
  raise ArgumentError.new("name is #{name.inspect}") unless name && name.is_a?(String) && name != ""
  raise ArgumentError.new("params is #{params.inspect}") unless params && params.is_a?(Hash)
  raise ArgumentError.new("params should have :instances and :queues keys.") unless params[:instances] && params[:queues]

  name = name.downcase.to_sym

  @data[:workers] ||= {}
  if @data[:workers][name]
    @data[:workers][name].merge!(params)
  else
    @data[:workers][name] = params
  end
end

#worker_queuesObject



166
167
168
# File 'lib/rabbit_jobs/configuration.rb', line 166

def worker_queues
  @data[:workers].values.map{|w| w[:queues].to_s.split(' ')}.flatten.uniq.sort
end

#workersObject



139
140
141
# File 'lib/rabbit_jobs/configuration.rb', line 139

def workers
  @data[:workers] ||= {}
end