forked from bskaplou/waffle
-
Notifications
You must be signed in to change notification settings - Fork 3
/
waffle.rb
107 lines (90 loc) · 2.44 KB
/
waffle.rb
1
2
3
4
5
6
7
8
9
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
require 'rubygems'
require 'bundler/setup'
require 'waffle/version'
require 'multi_json'
require 'time'
module Waffle
extend self
module Transports
autoload :Base, 'waffle/transports/base'
autoload :Rabbitmq, 'waffle/transports/rabbitmq' if defined?(Bunny)
autoload :Redis, 'waffle/transports/redis' if defined?(::Redis)
module_function
def create config
"Waffle::Transports::#{config.transport.camelize}".constantize.new(config)
end
end
autoload :Config, 'waffle/config'
autoload :Event, 'waffle/event'
class Config
autoload :Node, 'waffle/config'
end
module Encoders
autoload :Json, 'waffle/encoders/json'
autoload :Marshal, 'waffle/encoders/marshal'
autoload :Noop, 'waffle/encoders/noop'
end
def reset_config!
config.reset_config! if config
end
def configure options = nil, &block
if block_given?
Config.class_eval(&block)
else
options = {:path => 'config/waffle.yml'} unless options
Config.load!(options)
end
end
def config
Config if Config.configured?
end
def queue name = :default
config.queues[name] or raise "Transport '#{name}' is not configured"
end
def publish flow = 'events', message = ''
raise "Waffle is not configured" unless Config.configured?
config.queues[:default].publish(flow, message)
end
def subscribe flow = '', &block
raise "Waffle is not configured" unless Config.configured?
config.queues[:default].subscribe(flow, &block)
end
def method_missing meth, *args
if Config.configured?
config.queues[:default].send(meth, *args)
else
super
end
end
end
unless defined?(ActiveSupport::Inflector)
class String
def constantize
names = self.split('::')
names.shift if names.empty? || names.first.empty?
constant = Object
names.each do |name|
constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
end
constant
end
def camelize
string = sub(/^[a-z\d]*/){$&.capitalize}
string.gsub(/(?:_|(\/))([a-z\d]*)/){ "#{$1}#{$2.capitalize}" }.gsub('/', '::')
end
end
end
unless defined?(ActiveSupport)
class Hash
def symbolize_keys!
keys.each do |key|
self[(key.to_sym rescue key) || key] = delete(key)
end
self
end
def symbolize_keys
dup.symbolize_keys!
end
end
end