action_pubsub 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4a0328f1cb7e3a3a0155c4b0957cd3dc566eaed
4
- data.tar.gz: be1336cd5d743520ff2c97f6a6b3034357d197f3
3
+ metadata.gz: 84b10ab5fca7e4529071e72418eaf0848f2b76c5
4
+ data.tar.gz: 97a02cce5b9147716c7a80a497c2262227bc99c5
5
5
  SHA512:
6
- metadata.gz: ff793a319ee02b8d4cb58d14a0ce0cf3b6146e1211e6d3d5f20e73c559ff5b46174cc062dd4b49c7e0835072b23bcb13fa71014e076af0d22c254da5776ca6e9
7
- data.tar.gz: b89adff807fb7cb898ad689df79d6dac365623f31f7e838330e56ea617175e2147e0d7117e75a72b75ff8048f8ec5d11bace7a537156379317b7013b4d5afbf7
6
+ metadata.gz: 2098f79665ee6c3d0b067ab86a2f586613610a60c09e05b8b1b5c5dea6d289d16bbef56b2a1b887c1c408c0031a540fcc9b0e9c208106489776192827e130110
7
+ data.tar.gz: 17bd202a32d8393e5d62c34c5e5cf0a93b1760ddb0164721a1477edfb48ff35abb11e96e36c52dc789ffa7cc0e23a3066f88e5975ffff654395fd3f747e50f5d
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency "active_attr"
26
26
  spec.add_dependency "activesupport"
27
27
  spec.add_dependency "concurrent-ruby"
28
+ spec.add_dependency "trax_core"
28
29
  spec.add_development_dependency "bundler", "~> 1.10"
29
30
  spec.add_development_dependency 'guard', '~> 2'
30
31
  spec.add_development_dependency 'guard-rspec', '~> 4'
@@ -7,18 +7,32 @@ module ActionPubsub
7
7
  ::ActionPubsub.exchange_registry[target_exchange][subscriber_key] << :subscribe
8
8
  -> message {
9
9
  ::ActiveRecord::Base.connection_pool.with_connection do
10
- message = ::ActionPubsub.deserialize_event(message)
11
- reaction = self.class.subscriber.reactions[message["action"]]
12
- record = message["record"]
10
+ begin
11
+ message = ::ActionPubsub.deserialize_event(message)
12
+ reaction = self.class.subscriber.reactions[message["action"]]
13
+ record = message["record"]
13
14
 
14
- if self.class.subscriber.react?(message["action"], reaction, record)
15
- self.class.subscriber.increment_event_triggered_count!
15
+ if self.class.subscriber.react?(message["action"], reaction, record)
16
+ self.class.subscriber.increment_event_triggered_count!
17
+ subscriber_instance = self.class.subscriber.new(record)
18
+ subscriber_instance.instance_exec(record, &reaction[:block])
19
+ end
16
20
 
17
- subscriber_instance = self.class.subscriber.new(record)
18
- subscriber_instance.instance_exec(record, &reaction[:block])
19
- end
21
+ self.class.bind_subscription(target_exchange, subscriber_key)
22
+ rescue => e
23
+ #ensure we rebind subscription regardless
24
+ self.class.bind_subscription(target_exchange, subscriber_key)
25
+ message = ::ActionPubsub.deserialize_event(message)
26
+
27
+ failure_message = ::ActionPubsub::Types::SubscriptionReactionError.new(
28
+ :target_exchange => target_exchange,
29
+ :subscriber_key => subscriber_key,
30
+ :error => e,
31
+ :message => message
32
+ )
20
33
 
21
- self.class.bind_subscription(target_exchange, subscriber_key)
34
+ ::ActionPubsub.config._on_error_block.call(failure_message) if ::ActionPubsub.config._on_error_block
35
+ end
22
36
  end
23
37
  }
24
38
  end
@@ -7,6 +7,7 @@ module ActionPubsub
7
7
 
8
8
  self[:debug] = false
9
9
  self[:serializer] = nil
10
+ self[:_on_error_block] = nil
10
11
  end
11
12
 
12
13
  def debug=(val)
@@ -18,5 +19,9 @@ module ActionPubsub
18
19
  ::ActionPubsub.include(val)
19
20
  end
20
21
  end
22
+
23
+ def on_error(&block)
24
+ self[:_on_error_block] = block
25
+ end
21
26
  end
22
27
  end
@@ -0,0 +1,19 @@
1
+ require 'trax_core'
2
+
3
+ module ActionPubsub
4
+ class Types < ::Trax::Core::Blueprint
5
+ class SubscriptionReactionError < ::Trax::Core::Types::Struct
6
+ string :target_exchange
7
+ string :subscriber_key
8
+
9
+ attr_accessor :message, :error
10
+
11
+ def initialize(*args, message:, error:, **options)
12
+ super(*args, **options)
13
+
14
+ @message = message
15
+ @error = error
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module ActionPubsub
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/action_pubsub.rb CHANGED
@@ -5,6 +5,7 @@ require "active_attr"
5
5
  require "concurrent/lazy_register"
6
6
  require "concurrent/actor"
7
7
  require "concurrent/agent"
8
+ require "trax_core"
8
9
 
9
10
  module ActionPubsub
10
11
  extend ::ActiveSupport::Autoload
@@ -19,9 +20,14 @@ module ActionPubsub
19
20
  autoload :Logging
20
21
  autoload :Subscriber
21
22
  autoload :Queue
23
+ autoload :Types
22
24
 
23
25
  @configuration ||= ::ActionPubsub::Config.new
24
26
 
27
+ def self.configure(&block)
28
+ block.call(config)
29
+ end
30
+
25
31
  def self.event_count
26
32
  @event_count ||= ::Concurrent::Agent.new(0)
27
33
  end
@@ -30,8 +36,6 @@ module ActionPubsub
30
36
  @exchange_registry ||= ::ActionPubsub::ExchangeRegistry.new
31
37
  end
32
38
 
33
- @some_registry = ::Concurrent::LazyRegister.new
34
-
35
39
  def self.destination_tuple_from_path(path_string)
36
40
  segs = path_string.split("/")
37
41
  worker_index = segs.pop
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Ayre
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-14 00:00:00.000000000 Z
11
+ date: 2015-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_attr
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: trax_core
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -283,6 +297,7 @@ files:
283
297
  - lib/action_pubsub/serialization.rb
284
298
  - lib/action_pubsub/serialization/marshal.rb
285
299
  - lib/action_pubsub/subscriber.rb
300
+ - lib/action_pubsub/types.rb
286
301
  - lib/action_pubsub/version.rb
287
302
  homepage: http://github.com/jasonayre/action_pubsub
288
303
  licenses: