Class: QueueBus::Application
- Inherits:
-
Object
- Object
- QueueBus::Application
- Defined in:
- lib/queue_bus/application.rb
Overview
An Application is the top level unifier for a number of subscriptions. It allows for the toggling of an entire applications subscriptions.
Instance Attribute Summary collapse
-
#app_key ⇒ Object
readonly
Returns the value of attribute app_key.
-
#redis_key ⇒ Object
readonly
Returns the value of attribute redis_key.
Class Method Summary collapse
Instance Method Summary collapse
- #_hydrate_redis_hash(hash) ⇒ Object
- #event_display_tuples ⇒ Object
-
#initialize(app_key) ⇒ Application
constructor
A new instance of Application.
- #no_connect_queue_names_for(subscriptions) ⇒ Object
- #subscribe(subscription_list, log = false) ⇒ Object
- #subscription_matches(attributes) ⇒ Object
- #unsubscribe ⇒ Object
- #unsubscribe_queue(queue) ⇒ Object
Constructor Details
#initialize(app_key) ⇒ Application
Returns a new instance of Application.
31 32 33 34 35 36 |
# File 'lib/queue_bus/application.rb', line 31 def initialize(app_key) @app_key = self.class.normalize(app_key) @redis_key = "#{self.class.app_single_key}:#{@app_key}" # raise error if only other chars raise 'Invalid application name' if @app_key.gsub('_', '').empty? end |
Instance Attribute Details
#app_key ⇒ Object (readonly)
Returns the value of attribute app_key.
29 30 31 |
# File 'lib/queue_bus/application.rb', line 29 def app_key @app_key end |
#redis_key ⇒ Object (readonly)
Returns the value of attribute redis_key.
29 30 31 |
# File 'lib/queue_bus/application.rb', line 29 def redis_key @redis_key end |
Class Method Details
.all ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/queue_bus/application.rb', line 8 def all # note the names arent the same as we started with ::QueueBus.redis do |redis| app_keys = redis.smembers(app_list_key) apps = app_keys.collect { |val| new(val) } hashes = redis.pipelined do apps.each do |app| redis.hgetall(app.redis_key) end end apps.zip(hashes).each do |app, hash| app._hydrate_redis_hash(hash) end apps end end |
Instance Method Details
#_hydrate_redis_hash(hash) ⇒ Object
108 109 110 |
# File 'lib/queue_bus/application.rb', line 108 def _hydrate_redis_hash(hash) @raw_redis_hash = hash end |
#event_display_tuples ⇒ Object
100 101 102 103 104 105 106 |
# File 'lib/queue_bus/application.rb', line 100 def event_display_tuples out = [] subscriptions.all.each do |sub| out << [sub.class_name, sub.queue_name, sub.matcher.filters] end out end |
#no_connect_queue_names_for(subscriptions) ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'lib/queue_bus/application.rb', line 82 def no_connect_queue_names_for(subscriptions) out = [] subscriptions.all.each do |sub| queue = "#{app_key}_#{sub.queue_name}" out << queue end out << "#{app_key}_default" out.uniq end |
#subscribe(subscription_list, log = false) ⇒ Object
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 |
# File 'lib/queue_bus/application.rb', line 38 def subscribe(subscription_list, log = false) @subscriptions = nil if subscription_list.nil? || subscription_list.empty? unsubscribe return true end temp_key = "temp_#{redis_key}:#{rand(999_999_999)}" ::QueueBus.redis do |redis| redis_hash = subscription_list.to_redis redis_hash.each do |key, hash| redis.hset(temp_key, key, QueueBus::Util.encode(hash)) end # make it the real one redis.rename(temp_key, redis_key) redis.sadd(self.class.app_list_key, app_key) redis.hgetall(redis_key).inspect if log end true end |
#subscription_matches(attributes) ⇒ Object
92 93 94 95 96 97 98 |
# File 'lib/queue_bus/application.rb', line 92 def subscription_matches(attributes) out = subscriptions.matches(attributes) out.each do |sub| sub.app_key = app_key end out end |
#unsubscribe ⇒ Object
74 75 76 77 78 79 80 |
# File 'lib/queue_bus/application.rb', line 74 def unsubscribe # Remove everything. ::QueueBus.redis do |redis| redis.srem(self.class.app_list_key, app_key) redis.del(redis_key) end end |
#unsubscribe_queue(queue) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/queue_bus/application.rb', line 65 def unsubscribe_queue(queue) # Filters out all subscriptions that match the supplied queue name. ::QueueBus.redis do |redis| read_redis_hash.each do |key, hash_details| redis.hdel(redis_key, key) if queue == hash_details["queue_name"] end end end |