activecommand 0.1.0 → 0.2.0
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 +4 -4
- data/.ruby-version +1 -0
- data/.travis.yml +12 -1
- data/README.md +18 -4
- data/activecommand.gemspec +1 -0
- data/lib/active_command.rb +3 -0
- data/lib/active_command/command.rb +13 -0
- data/lib/active_command/command_bus.rb +12 -1
- data/lib/active_command/core.rb +9 -0
- data/lib/active_command/middleware/command_runner.rb +4 -1
- data/lib/active_command/version.rb +1 -1
- data/todo.md +12 -0
- metadata +20 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0bff99477fe2be1ec3d4ac7c189110141d37c1a
|
4
|
+
data.tar.gz: f5fee12ef76e5b5af11ee14356b48a5786c1eecb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efb9b97ed8b2f8d6837cdc12ddca0808266de59db91979113430fb20d56ceefcf46cffde5ef8ae21ef8aad7cccc6aff4fffdb4c436a5fb744ae763e8e53b899f
|
7
|
+
data.tar.gz: 0323cee104f88f74b1c177abcf35e222e7f26cff2c80c953c2f97b9fd708e81a0fcccce788f48bf4747c4bab34dcd54e11fefb69eac72e52400d4b77f1e1f3fd
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.0
|
data/.travis.yml
CHANGED
@@ -1,11 +1,22 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
+
- 2.3.0
|
3
4
|
- 2.2.3
|
4
|
-
- jruby
|
5
|
+
- jruby-9.1.2.0
|
5
6
|
before_install: gem install bundler -v 1.10.6
|
6
7
|
|
8
|
+
env:
|
9
|
+
- JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
|
10
|
+
|
7
11
|
script: 'bundle exec rake'
|
8
12
|
|
13
|
+
branches:
|
14
|
+
only:
|
15
|
+
- master
|
16
|
+
- develop
|
17
|
+
- /^feature\/.*$/
|
18
|
+
- /^release\/.*$/
|
19
|
+
|
9
20
|
notifications:
|
10
21
|
email:
|
11
22
|
recipients:
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# ActiveCommand
|
2
2
|
|
3
|
+
[](https://travis-ci.org/jcarley/activecommand)
|
4
|
+
|
3
5
|
ActiveCommand adds the ability to use the command pattern commonly seen in CQRS.
|
4
6
|
|
5
7
|
## Installation
|
@@ -28,11 +30,23 @@ First create your command. Perhaps adding it to a commands folder under app, if
|
|
28
30
|
- commands
|
29
31
|
- SubmitOrderCommand.rb
|
30
32
|
|
31
|
-
Then inherit from the base command class and implement an execute method.
|
33
|
+
Then inherit from the base command class and implement an execute method. The following example
|
34
|
+
is assuming the Order is an ActiveRecord model and has a submit? method.
|
32
35
|
|
33
36
|
```ruby
|
34
37
|
class SubmitOrderCommand < ActiveCommand::Command
|
38
|
+
|
39
|
+
attribute :order_id, String
|
40
|
+
|
41
|
+
validates :order_id, presence: true
|
42
|
+
|
35
43
|
def execute
|
44
|
+
order = Order.find(order_id)
|
45
|
+
if order.submit?
|
46
|
+
Emailer.send_order_submitted_notification_for(order)
|
47
|
+
else
|
48
|
+
raise OrderSubmitError, "Something went wrong submitting the order '#{order_id}'"
|
49
|
+
end
|
36
50
|
end
|
37
51
|
end
|
38
52
|
```
|
@@ -42,12 +56,12 @@ execute the command, instantiate it and execute it using the CommandBus. The re
|
|
42
56
|
is a CommandResult object. The CommandResult will tell you if the command was successful or not.
|
43
57
|
|
44
58
|
```ruby
|
45
|
-
submit_order_command = SubmitOrderCommand.new
|
59
|
+
submit_order_command = SubmitOrderCommand.new(:order_id => "ABC123")
|
46
60
|
cr = ActiveCommand::CommandBus.execute(submit_order_command)
|
47
61
|
if cr.success?
|
48
62
|
redirect "/"
|
49
63
|
else
|
50
|
-
render
|
64
|
+
render :submit
|
51
65
|
end
|
52
66
|
```
|
53
67
|
|
@@ -59,7 +73,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
59
73
|
|
60
74
|
## Contributing
|
61
75
|
|
62
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
76
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/jcarley/activecommand. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
|
63
77
|
|
64
78
|
|
65
79
|
## License
|
data/activecommand.gemspec
CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.add_dependency 'middleware'
|
18
18
|
spec.add_dependency 'activesupport'
|
19
19
|
spec.add_dependency 'activemodel'
|
20
|
+
spec.add_dependency 'sidekiq'
|
20
21
|
|
21
22
|
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
22
23
|
# delete this section to allow pushing this gem to any host.
|
data/lib/active_command.rb
CHANGED
@@ -3,11 +3,14 @@ require 'middleware'
|
|
3
3
|
require 'active_support'
|
4
4
|
require 'active_support/hash_with_indifferent_access'
|
5
5
|
require 'active_model'
|
6
|
+
require 'sidekiq'
|
6
7
|
|
7
8
|
module ActiveCommand
|
8
9
|
extend ActiveSupport::Autoload
|
9
10
|
|
11
|
+
autoload :Core
|
10
12
|
autoload :Command
|
13
|
+
autoload :BackgroundCommand
|
11
14
|
autoload :CommandBus
|
12
15
|
autoload :CommandResult
|
13
16
|
autoload :CommandNotValidError
|
@@ -1,9 +1,13 @@
|
|
1
1
|
module ActiveCommand
|
2
2
|
class Command
|
3
|
+
include Core
|
4
|
+
include Sidekiq::Worker
|
3
5
|
include Virtus.model
|
4
6
|
include ActiveModel::Validations
|
5
7
|
include ActiveModel::Serializers::JSON
|
6
8
|
|
9
|
+
attribute :job_id, String
|
10
|
+
|
7
11
|
def self.from_json(json)
|
8
12
|
klass = self.new
|
9
13
|
klass.from_json(json)
|
@@ -16,6 +20,15 @@ module ActiveCommand
|
|
16
20
|
alias_method :to_hash, :to_params
|
17
21
|
|
18
22
|
def run
|
23
|
+
self.class.perform_async self.to_params.to_json
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform(job_data)
|
27
|
+
self.from_json(job_data)
|
28
|
+
self.perform_now
|
29
|
+
end
|
30
|
+
|
31
|
+
def perform_now
|
19
32
|
if self.valid?
|
20
33
|
self.execute
|
21
34
|
else
|
@@ -8,7 +8,18 @@ module ActiveCommand
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def execute(command)
|
11
|
-
env = {:command => command}
|
11
|
+
env = {:command => command, :at => :later}
|
12
|
+
default_middleware.call(env)
|
13
|
+
env[:command_result]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.execute_now(command)
|
17
|
+
bus = self.instance
|
18
|
+
bus.execute_now(command)
|
19
|
+
end
|
20
|
+
|
21
|
+
def execute_now(command)
|
22
|
+
env = {:command => command, :at => :now}
|
12
23
|
default_middleware.call(env)
|
13
24
|
env[:command_result]
|
14
25
|
end
|
@@ -8,12 +8,15 @@ module ActiveCommand
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def call(env)
|
11
|
+
|
12
|
+
at = env.fetch(:at, :later)
|
11
13
|
cmd = env.fetch(:command, nil)
|
12
14
|
|
13
15
|
result = CommandResult.new(cmd).tap do |cr|
|
14
16
|
begin
|
15
17
|
raise MissingCommandError if cr.command.nil?
|
16
|
-
cr.command.run
|
18
|
+
cr.command.run if at == :later
|
19
|
+
cr.command.perform_now if at == :now
|
17
20
|
rescue StandardError => e
|
18
21
|
cr.error = e
|
19
22
|
end
|
data/todo.md
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activecommand
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jefferson Carley
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sidekiq
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,6 +132,7 @@ files:
|
|
118
132
|
- ".gitignore"
|
119
133
|
- ".rbenv-gemsets"
|
120
134
|
- ".rspec"
|
135
|
+
- ".ruby-version"
|
121
136
|
- ".travis.yml"
|
122
137
|
- CODE_OF_CONDUCT.md
|
123
138
|
- Gemfile
|
@@ -132,9 +147,11 @@ files:
|
|
132
147
|
- lib/active_command/command_bus.rb
|
133
148
|
- lib/active_command/command_not_valid_error.rb
|
134
149
|
- lib/active_command/command_result.rb
|
150
|
+
- lib/active_command/core.rb
|
135
151
|
- lib/active_command/middleware/command_runner.rb
|
136
152
|
- lib/active_command/version.rb
|
137
153
|
- lib/activecommand.rb
|
154
|
+
- todo.md
|
138
155
|
homepage: https://github.com/jcarley/activecommand
|
139
156
|
licenses:
|
140
157
|
- MIT
|
@@ -156,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
173
|
version: '0'
|
157
174
|
requirements: []
|
158
175
|
rubyforge_project:
|
159
|
-
rubygems_version: 2.
|
176
|
+
rubygems_version: 2.5.1
|
160
177
|
signing_key:
|
161
178
|
specification_version: 4
|
162
179
|
summary: ActiveCommand adds the ability to use the command pattern commonly seen in
|