activeduty 0.1.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 +7 -0
- data/README.md +3 -0
- data/lib/active_duty.rb +19 -0
- data/lib/active_duty/base.rb +30 -0
- data/lib/active_duty/call_async.rb +15 -0
- data/lib/active_duty/callbacks.rb +27 -0
- data/lib/active_duty/context.rb +9 -0
- data/lib/active_duty/errors.rb +15 -0
- data/lib/active_duty/fail.rb +14 -0
- data/lib/active_duty/initializers.rb +34 -0
- data/lib/active_duty/job.rb +11 -0
- data/lib/active_duty/rollback.rb +24 -0
- data/lib/active_duty/run.rb +39 -0
- data/lib/active_duty/success.rb +7 -0
- data/lib/active_duty/version.rb +3 -0
- metadata +126 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3851ef284433a3cf609e6934fee1eb357c0f1a8d97bd2db3677ef16732adc2a1
|
4
|
+
data.tar.gz: 3a24b9d50c907e610b17062ff1468fc3bde330150da2492132c255986c99a64b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 62d7527dced5eca2869d9ad7ce69b7ecfdd1b4ecf0c3a2249f72e18790fbfca384f3ab49798ca36cdc9021650a2c7864df2be2beed4d64d63f5b18884146a8c3
|
7
|
+
data.tar.gz: 126a2cc3b05c4dbd1cc7b9688c5b96f0d863948c8de9a97378acbd429b5030d9cda087873ffe25edc057b013cdbc7c54195cdff81a0bdc638ff2de43aaa7cf22
|
data/README.md
ADDED
data/lib/active_duty.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "active_duty/version"
|
2
|
+
|
3
|
+
require "active_support"
|
4
|
+
require "active_model"
|
5
|
+
|
6
|
+
module ActiveDuty
|
7
|
+
Failure = Class.new(StandardError)
|
8
|
+
|
9
|
+
extend ActiveSupport::Autoload
|
10
|
+
autoload :Base
|
11
|
+
autoload :Job
|
12
|
+
|
13
|
+
mattr_accessor :job_queue
|
14
|
+
self.job_queue = :active_duty
|
15
|
+
|
16
|
+
mattr_accessor :job_parent_class
|
17
|
+
self.job_parent_class = 'ActiveJob::Base'
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'active_duty/initializers'
|
2
|
+
require 'active_duty/run'
|
3
|
+
require 'active_duty/fail'
|
4
|
+
require 'active_duty/success'
|
5
|
+
require 'active_duty/callbacks'
|
6
|
+
require 'active_duty/context'
|
7
|
+
require 'active_duty/errors'
|
8
|
+
require 'active_duty/rollback'
|
9
|
+
|
10
|
+
module ActiveDuty
|
11
|
+
class Base
|
12
|
+
include Callbacks
|
13
|
+
include Context
|
14
|
+
include Errors
|
15
|
+
include Fail
|
16
|
+
include Initializers
|
17
|
+
include Rollback
|
18
|
+
include Run
|
19
|
+
include Success
|
20
|
+
|
21
|
+
class << self
|
22
|
+
alias_method :__new, :new
|
23
|
+
def new(*args)
|
24
|
+
e = __new(*args)
|
25
|
+
e.after_initialize!
|
26
|
+
e
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ActiveDuty
|
2
|
+
module CallAsync
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
def call_async(*args)
|
6
|
+
self.class.call_async(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def call_async(*args)
|
11
|
+
ActiveDuty.async_job.perform_async(self.name, *args)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module ActiveDuty
|
2
|
+
module Callbacks
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
included do
|
5
|
+
extend ActiveModel::Callbacks
|
6
|
+
define_model_callbacks :call, only: [:before, :after, :around]
|
7
|
+
|
8
|
+
def self.after_initialize(&block)
|
9
|
+
@_after_initialize_block = block
|
10
|
+
end
|
11
|
+
|
12
|
+
def self._after_initialize_block
|
13
|
+
if defined?(@_after_initialize_block)
|
14
|
+
@_after_initialize_block
|
15
|
+
else
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def after_initialize!
|
21
|
+
if self.class._after_initialize_block
|
22
|
+
instance_exec(self, &self.class._after_initialize_block)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module ActiveDuty
|
2
|
+
module Initializers
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
module ClassMethods
|
5
|
+
def init_with(*args)
|
6
|
+
kwargs = args.extract_options!
|
7
|
+
|
8
|
+
if kwargs.empty?
|
9
|
+
define_method :initialize do |*initialize_args|
|
10
|
+
args.zip(initialize_args) do |name, value|
|
11
|
+
instance_variable_set("@#{name}", value)
|
12
|
+
end
|
13
|
+
self.class.attr_reader *args
|
14
|
+
end
|
15
|
+
elsif kwargs.is_a?(Hash)
|
16
|
+
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
17
|
+
def initialize(#{kwargs.keys.map { |key| "#{key}:" }.join(', ')})
|
18
|
+
#{kwargs.map { |key, value|
|
19
|
+
"
|
20
|
+
instance_variable_set(:\"@#{value}\", #{key})
|
21
|
+
self.class.attr_reader :#{value}
|
22
|
+
"
|
23
|
+
}.join("\n")
|
24
|
+
}
|
25
|
+
end
|
26
|
+
METHOD
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module ActiveDuty
|
2
|
+
if Object.const_defined?(ActiveDuty.job_parent_class)
|
3
|
+
class Job < Object.const_get(ActiveDuty.job_parent_class)
|
4
|
+
def perform(klass, *args)
|
5
|
+
klass.call!(args)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
else
|
9
|
+
puts "#{ActiveDuty.job_parent_class} not defined. No job."
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ActiveDuty
|
2
|
+
module Rollback
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def rollback(&block)
|
7
|
+
@_rollback = block
|
8
|
+
end
|
9
|
+
|
10
|
+
def _rollback
|
11
|
+
return unless defined?(@_rollback)
|
12
|
+
@_rollback
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def rollback!
|
17
|
+
if self.class._rollback
|
18
|
+
instance_eval(&self.class._rollback)
|
19
|
+
elsif self.respond_to?(:rollback)
|
20
|
+
rollback
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module ActiveDuty
|
2
|
+
module Run
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
def call(*args)
|
5
|
+
begin #
|
6
|
+
call!(*args)
|
7
|
+
rescue => error
|
8
|
+
rollback!
|
9
|
+
if error.is_a?(Failure)
|
10
|
+
self.errors.add(:base, error.message)
|
11
|
+
return self
|
12
|
+
end
|
13
|
+
raise error
|
14
|
+
end
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def call!(*args)
|
19
|
+
run(*args)
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
module ClassMethods
|
24
|
+
def run(*args, &block)
|
25
|
+
define_method :run do |*args|
|
26
|
+
self.instance_exec *args, &block
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def call(*args)
|
31
|
+
new(*args).call
|
32
|
+
end
|
33
|
+
|
34
|
+
def call!(*args)
|
35
|
+
new(*args).call!
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: activeduty
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Josh Brody
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activemodel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '12.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '12.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '5.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '5.0'
|
83
|
+
description: Service objects.
|
84
|
+
email: josh@josh.mn
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- README.md
|
90
|
+
- lib/active_duty.rb
|
91
|
+
- lib/active_duty/base.rb
|
92
|
+
- lib/active_duty/call_async.rb
|
93
|
+
- lib/active_duty/callbacks.rb
|
94
|
+
- lib/active_duty/context.rb
|
95
|
+
- lib/active_duty/errors.rb
|
96
|
+
- lib/active_duty/fail.rb
|
97
|
+
- lib/active_duty/initializers.rb
|
98
|
+
- lib/active_duty/job.rb
|
99
|
+
- lib/active_duty/rollback.rb
|
100
|
+
- lib/active_duty/run.rb
|
101
|
+
- lib/active_duty/success.rb
|
102
|
+
- lib/active_duty/version.rb
|
103
|
+
homepage: https://github.com/joshmn/activeduty
|
104
|
+
licenses:
|
105
|
+
- MIT
|
106
|
+
metadata: {}
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
require_paths:
|
110
|
+
- lib
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: 2.5.0
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubygems_version: 3.1.4
|
123
|
+
signing_key:
|
124
|
+
specification_version: 4
|
125
|
+
summary: Service objects.
|
126
|
+
test_files: []
|