hey-pubsub 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 47678c0e57e35fa02d880ddb05d0905f5a1fdb35
4
- data.tar.gz: 1675e2ed28ae1f7a7f9b7211d647f7e34cac8998
3
+ metadata.gz: db65819c7adc7ad9daaa79ce3a84a7f8a8d14d13
4
+ data.tar.gz: e8e130a00d678bc0bb8e3d432106b5682dcea1d6
5
5
  SHA512:
6
- metadata.gz: 220af4af52b73ce75ceb3aa127002750d077b3283c2aebb69e42a72351a9ce2ea721cf8bb9bdbfd73af44a7d245675e68fc6d927b01c557ee748b01ca63cac5c
7
- data.tar.gz: 33a541aefdef8390cbf7faf0783c451e7b7c5f5ba072e01f7319621164f20234a40b2b27cff44a9b46b3d5e4300e614e20bfe07964b04656fa17611995b26743
6
+ metadata.gz: b7bfdd6b8a72804d692e6bdf5501db7ca5fdfb5934a0221d2d250a6315ade1411851d735462f3c2391ceac57c8cb8cb2462d7a4ad56f98790c76eb0dd4da56bc
7
+ data.tar.gz: dcf7cf396f92c79b9e484523cc9ebcc3f60f7eea1ea345194a727a7b49b092d9f6ecb44515220493868177cd78598b515b5953a012093725a32bb82a0d47ee56
data/README.md CHANGED
@@ -5,7 +5,6 @@ some convenience utilities to:
5
5
 
6
6
  * Track a chain of events
7
7
  * Sanitize sensitive data from event payloads
8
- * Record who originally kicked off the chain of events (the actor)
9
8
  * Set arbitrary data that will be included on every event published on the same thread
10
9
 
11
10
  ## Installation
@@ -42,19 +41,6 @@ your code.
42
41
 
43
42
  Hey provides utilities to share metadata across all events published on the same thread.
44
43
 
45
- ### Setting the current actor
46
-
47
- It's often useful to know who kicked off a chain of events, whether it's a user, employee or the system itself via
48
- some automated process. We call this entity the "current actor".
49
-
50
- As soon as you know who the current actor is for a a business process, you should set it:
51
-
52
- ```ruby
53
- Hey.set_current_actor!(id: 13234, type: "Employee", name: "Jack Ship")
54
- ```
55
-
56
- Any events published for the life of the current thread with include `current_actor` in their payloads.
57
-
58
44
  ### Event chain UUID
59
45
 
60
46
  The first time an event is published via Hey a UUID will be assigned and stored on the current thread.
@@ -85,6 +71,11 @@ If you need to set arbitrary values to be included on every event payload for th
85
71
  ```ruby
86
72
  Hey.set(:ip_address, "127.0.0.1")
87
73
  ```
74
+
75
+ ### Writing customer setters
76
+
77
+ TODO
78
+
88
79
  ## Event publishing and subscribing
89
80
 
90
81
  ### Adapters
data/hey-pubsub.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["ShippingEasy"]
10
10
  spec.email = ["dev@shippingeasy.com"]
11
11
 
12
- spec.summary = %q{Pubsub wrapper with utilities to chain events, sanitize payloads and record the actor.}
12
+ spec.summary = %q{Pubsub wrapper with utilities to chain events, sanitize payloads and record data on all events on the same thread.}
13
13
  spec.homepage = "https://github.com/ShippingEasy/hey-pubsub"
14
14
  spec.license = "MIT"
15
15
 
@@ -1,7 +1,8 @@
1
1
  class Hey::Configuration
2
- attr_accessor :pubsub_adapter
2
+ attr_accessor :pubsub_adapter, :namespace
3
3
 
4
4
  def initialize
5
5
  @pubsub_adapter = Hey::Pubsub::Adapters::AsnAdapter
6
+ @namespace = "pubsub"
6
7
  end
7
8
  end
@@ -6,26 +6,23 @@ module Hey::Pubsub::Adapters
6
6
  if block_given?
7
7
  ActiveSupport::Notifications.subscribe(event_name) do |*args|
8
8
  asn_event = ActiveSupport::Notifications::Event.new(*args)
9
-
10
- payload = asn_event.payload.dup
11
- event = Hey::Pubsub::Event.new(uuid: payload.delete(:uuid),
12
- name: asn_event.name,
9
+ event = Hey::Pubsub::Event.new(name: asn_event.name,
13
10
  started_at: asn_event.time,
14
11
  ended_at: asn_event.end,
15
- metadata: payload)
12
+ metadata: asn_event.payload.dup)
16
13
 
17
- yield(event.to_hash)
14
+ yield(event.to_h)
18
15
  end
19
16
  end
20
17
  end
21
18
 
22
- def self.publish!(event_name, payload = {})
19
+ def self.publish!(event)
23
20
  if block_given?
24
- ActiveSupport::Notifications.instrument(event_name, payload) do
21
+ ActiveSupport::Notifications.instrument(event.name, event.metadata) do
25
22
  yield
26
23
  end
27
24
  else
28
- ActiveSupport::Notifications.instrument(event_name, payload)
25
+ ActiveSupport::Notifications.instrument(event.name, event.metadata)
29
26
  end
30
27
  end
31
28
  end
@@ -1,28 +1,45 @@
1
1
  class Hey::Pubsub::Event
2
- def initialize(name:, uuid:, started_at:, ended_at:, metadata: {})
2
+ attr_writer :name, :metadata, :started_at, :ended_at
3
+
4
+ def initialize(name:, started_at: nil, ended_at: nil, metadata: {})
3
5
  @name = name
4
- @uuid = uuid
5
6
  @started_at = started_at
6
7
  @ended_at = ended_at
7
8
  @metadata = metadata
8
9
  end
9
10
 
10
- def to_hash
11
- {
12
- uuid: uuid,
13
- name: name,
14
- started_at: started_at,
15
- ended_at: ended_at,
16
- duration: duration,
17
- metadata: metadata
18
- }
11
+ def to_h
12
+ hash = { uuid: Hey::ThreadCargo.uuid, name: name, metadata: metadata }
13
+ hash[:started_at] = started_at unless started_at.nil?
14
+ hash[:ended_at] = ended_at unless ended_at.nil?
15
+ hash[:duration] = duration unless duration.nil?
16
+ hash
17
+ end
18
+
19
+ def started_at
20
+ return if @started_at.nil?
21
+ @started_at.strftime("%Y-%m-%dT%H:%M:%S.%L")
19
22
  end
20
23
 
21
- private
24
+ def ended_at
25
+ return if @ended_at.nil?
26
+ @ended_at.strftime("%Y-%m-%dT%H:%M:%S.%L")
27
+ end
22
28
 
23
- attr_reader :name, :uuid, :metadata, :started_at, :ended_at
29
+ def metadata
30
+ merged_data = Hey::ThreadCargo.to_h.merge(@metadata)
31
+ merged_data.delete(:uuid)
32
+ merged_data.delete(Hey::ThreadCargo::SANITIZABLE_VALUES_KEY)
33
+ Hey::SanitizedHash.new(merged_data).to_h
34
+ end
35
+
36
+ def name
37
+ return @name if Hey.configuration.namespace.nil?
38
+ "#{Hey.configuration.namespace}.#{@name}"
39
+ end
24
40
 
25
41
  def duration
26
- @duration ||= 1000.0 * (ended_at - started_at)
42
+ return if @ended_at.nil? || @started_at.nil?
43
+ 1000.0 * (@ended_at - @started_at)
27
44
  end
28
45
  end
@@ -14,21 +14,11 @@ class Hey::ThreadCargo
14
14
  Thread.current[:hey][name]
15
15
  end
16
16
 
17
- # Returns the actor from the current thread
18
- def self.current_actor
19
- get(:current_actor)
20
- end
21
-
22
17
  def self.uuid
23
18
  return set(:uuid, SecureRandom.uuid) if get(:uuid).nil?
24
19
  get(:uuid)
25
20
  end
26
21
 
27
- # Sets the actor to the current thread
28
- def self.set_current_actor(name:, type: nil, id: nil)
29
- set(:current_actor, { name: name, type: type, id: id})
30
- end
31
-
32
22
  # Adds the supplied values to the sanitized values array. It removes nils and duplicate values from the array.
33
23
  def self.sanitize!(*values)
34
24
  set(SANITIZABLE_VALUES_KEY, []) if get(SANITIZABLE_VALUES_KEY).nil?
@@ -45,10 +35,8 @@ class Hey::ThreadCargo
45
35
  Array(get(SANITIZABLE_VALUES_KEY))
46
36
  end
47
37
 
48
- def self.to_hash
38
+ def self.to_h
49
39
  Thread.current[:hey] = {} if Thread.current[:hey].nil?
50
- hash = Thread.current[:hey].clone
51
- hash.delete(SANITIZABLE_VALUES_KEY)
52
- hash
40
+ Thread.current[:hey].clone
53
41
  end
54
42
  end
data/lib/hey/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hey
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/hey.rb CHANGED
@@ -13,26 +13,26 @@ module Hey
13
13
  configuration.pubsub_adapter
14
14
  end
15
15
 
16
- def self.publish!(event_name, payload = {}, &block)
17
- payload = Hey::Pubsub::Payload.new(payload)
18
- pubsub_adapter.publish!(event_name, payload.to_h, &block)
19
- end
16
+ module Behavior
17
+ def publish!(event_name, payload = {}, &block)
18
+ event = Hey::Pubsub::Event.new(name: event_name, metadata: payload)
19
+ pubsub_adapter.publish!(event, &block)
20
+ end
20
21
 
21
- def self.subscribe!(event_name, &block)
22
- pubsub_adapter.subscribe!(event_name, &block)
23
- end
22
+ def subscribe!(event_name, &block)
23
+ pubsub_adapter.subscribe!(event_name, &block)
24
+ end
24
25
 
25
- def self.set(name, value)
26
- Hey::ThreadCargo.set(name, value)
27
- end
26
+ def set(name, value)
27
+ Hey::ThreadCargo.set(name, value)
28
+ end
28
29
 
29
- def self.set_current_actor!(name:, id: nil, type: nil)
30
- Hey::ThreadCargo.set_current_actor(name: name, id: id, type: type)
30
+ def sanitize!(*values)
31
+ Hey::ThreadCargo.sanitize!(values)
32
+ end
31
33
  end
32
34
 
33
- def self.sanitize!(*values)
34
- Hey::ThreadCargo.sanitize!(values)
35
- end
35
+ extend Hey::Behavior
36
36
  end
37
37
 
38
38
  require "securerandom"
@@ -40,6 +40,5 @@ require "hey/configuration"
40
40
  require "hey/thread_cargo"
41
41
  require "hey/sanitized_hash"
42
42
  require "hey/pubsub"
43
- require "hey/pubsub/payload"
44
43
  require "hey/pubsub/event"
45
44
  require "hey/pubsub/adapters/asn_adapter"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hey-pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - ShippingEasy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-20 00:00:00.000000000 Z
11
+ date: 2015-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -88,7 +88,6 @@ files:
88
88
  - lib/hey/pubsub.rb
89
89
  - lib/hey/pubsub/adapters/asn_adapter.rb
90
90
  - lib/hey/pubsub/event.rb
91
- - lib/hey/pubsub/payload.rb
92
91
  - lib/hey/sanitized_hash.rb
93
92
  - lib/hey/thread_cargo.rb
94
93
  - lib/hey/version.rb
@@ -116,5 +115,5 @@ rubygems_version: 2.4.6
116
115
  signing_key:
117
116
  specification_version: 4
118
117
  summary: Pubsub wrapper with utilities to chain events, sanitize payloads and record
119
- the actor.
118
+ data on all events on the same thread.
120
119
  test_files: []
@@ -1,19 +0,0 @@
1
- class Hey::Pubsub::Payload
2
- def initialize(values = {})
3
- @values = values
4
- merge_values!
5
- end
6
-
7
- def to_h
8
- Hey::SanitizedHash.new(values).to_h
9
- end
10
-
11
- private
12
-
13
- attr_accessor :values
14
-
15
- def merge_values!
16
- Hey::ThreadCargo.uuid # initialize if it has never been set
17
- self.values = Hey::ThreadCargo.to_hash.merge(values)
18
- end
19
- end