arkency-command_bus 0.4.0 → 0.4.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
- SHA1:
3
- metadata.gz: fa44d11c3221c6935f1e35ce432ba3a1f7a1fc57
4
- data.tar.gz: 1f792ef3941cdbf96f0e21add8df0851688f3041
2
+ SHA256:
3
+ metadata.gz: 4d3914780d62cc5664255fe108ad8cb62059459fe54303516e93ad3bcede3341
4
+ data.tar.gz: e9104088783aa7eace84160d00f0579150f57a52c00a98c3407c94e0f23903a6
5
5
  SHA512:
6
- metadata.gz: af938c22d708124a7b64322bfdd0b7c6753d09065c8b74e8a441df967332fd8ca1bf64033be4234e0ef168894f82f7917b1adda1cc5e575bee131ea690a1a645
7
- data.tar.gz: 97e7789e2e71683f605a8d5ef1ea84a9aa95c1d4e6d9050e8b4d7b94662e25803cc7847eb0a6fdc1064deb0f425e55c9857b59413f05b9361ea2545e9bcd311d
6
+ metadata.gz: 06ef9b01acafff9de818662d38361dfe88efb012998411c1b7b1bc2baa8b175e713bd5801edf1f3f8db4fc9b9eb8dbb347eaa553cd805dd6c16bab480cb4c5be
7
+ data.tar.gz: 38c5c711002e476a25552734855c7ca8feae249ea2d6a4923c6f70579a3eaf97da31a1a4eb7c799558be937345aa99c9c12418d0281690969daddac09066991e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 0.4.1
2
+
3
+ * replace `thread_safe` dependency with `concurrent-ruby`
4
+
1
5
  ### 0.4.0
2
6
 
3
7
  * Find home under Arkency organization.
data/README.md CHANGED
@@ -18,13 +18,67 @@ register = command_bus.method(:register)
18
18
 
19
19
  { FooCommand => FooService.new(event_store: event_store).method(:foo),
20
20
  BarCommand => BarService.new,
21
- }.map(&:register)
21
+ }.map(&register)
22
22
 
23
23
 
24
24
  command_bus.(FooCommand.new)
25
25
 
26
26
  ```
27
27
 
28
+ ### New instance of a service for every command
29
+
30
+ If need a new instance of a service every time it is called with a command or you want to lazily load the responsible services, you can just use `Proc` during registration.
31
+
32
+ ```ruby
33
+ command_bus = Arkency::CommandBus.new
34
+ command_bus.register(FooCommand, -> (foo_cmd) { FooService.new(event_store: event_store).foo(foo_cmd) })
35
+ command_bus.register(BarCommand, -> (bar_cmd) { BarService.new.call(bar_cmd) })
36
+ ```
37
+
38
+ ### Working with Rails development mode
39
+
40
+ In Rails `development` mode when you change a registered class, it is reloaded, and a new class with same name is constructed.
41
+
42
+ ```ruby
43
+ a = User
44
+ a.object_id
45
+ # => 40737760
46
+
47
+ reload!
48
+ # Reloading...
49
+
50
+ b = User
51
+ b.object_id
52
+ # => 48425300
53
+
54
+ h = {a => 1, b => 2}
55
+ h[User]
56
+ # => 2
57
+
58
+ a == b
59
+ # => false
60
+ ```
61
+
62
+ so your `Hash` with mapping from command class to service may not find the new version of reloaded class.
63
+
64
+ To workaround this problem you can use [`to_prepare`](http://api.rubyonrails.org/classes/Rails/Railtie/Configuration.html#method-i-to_prepare) callback which is executed before every code reload in development, and once in production.
65
+
66
+ ```ruby
67
+ config.to_prepare do
68
+ config.command_bus = Arkency::CommandBus.new
69
+ register = command_bus.method(:register)
70
+
71
+ { FooCommand => FooService.new(event_store: event_store).method(:foo),
72
+ BarCommand => BarService.new,
73
+ }.map(&register)
74
+ end
75
+ ```
76
+
77
+ and call it with
78
+
79
+ ```ruby
80
+ Rails.configuration.command_bus.call(FooCommand.new)
81
+ ```
28
82
 
29
83
  ## Convenience alias
30
84
 
@@ -32,7 +86,7 @@ command_bus.(FooCommand.new)
32
86
  require 'arkency/command_bus/alias'
33
87
  ```
34
88
 
35
- From now on you can use top-level `::CommandBus`.
89
+ From now on you can use top-level `CommandBus` instead of `Arkency::CommandBus`.
36
90
 
37
91
  ## About
38
92
 
@@ -41,3 +95,13 @@ From now on you can use top-level `::CommandBus`.
41
95
  Command Bus is funded and maintained by Arkency. Check out our other [open-source projects](https://github.com/arkency).
42
96
 
43
97
  You can also [hire us](http://arkency.com) or [read our blog](http://blog.arkency.com).
98
+
99
+ ## Learn more about DDD & Event Sourcing
100
+
101
+ Check our **Rails + Domain Driven Design Workshop** [more details](http://blog.arkency.com/ddd-training/).
102
+
103
+ Why You should attend? Robert has explained this in [this blogpost](http://blog.arkency.com/2016/12/why-would-you-even-want-to-listen-about-ddd/).
104
+
105
+ Next edition will be held in **September 2017** (Thursday & Friday) in Berlin, Germany.
106
+ Workshop will be held in English.
107
+
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "thread_safe"
21
+ spec.add_dependency "concurrent-ruby"
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.10"
23
+ spec.add_development_dependency "bundler"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
25
  spec.add_development_dependency "rspec", "~> 3.4.0"
26
26
  end
@@ -1,5 +1,5 @@
1
1
  module Arkency
2
2
  class CommandBus
3
- VERSION = '0.4.0'
3
+ VERSION = '0.4.1'
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  require 'arkency/command_bus/version'
2
- require 'thread_safe'
2
+ require 'concurrent/map'
3
3
 
4
4
  module Arkency
5
5
  class CommandBus
@@ -8,7 +8,7 @@ module Arkency
8
8
 
9
9
  def initialize
10
10
  @handlers =
11
- ThreadSafe::Cache.new
11
+ Concurrent::Map.new
12
12
  end
13
13
 
14
14
  def register(klass, handler)
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arkency-command_bus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-01 00:00:00.000000000 Z
11
+ date: 2022-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: thread_safe
14
+ name: concurrent-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.10'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.10'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -103,10 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
- rubyforge_project:
107
- rubygems_version: 2.4.5
106
+ rubygems_version: 3.2.32
108
107
  signing_key:
109
108
  specification_version: 4
110
109
  summary: Command Pattern - decoupling what is done from who does it.
111
110
  test_files: []
112
- has_rdoc: