perform-later 1.0.0.alpha.3
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/lib/perform-later.rb +13 -0
- data/lib/perform_later/aliasing.rb +48 -0
- data/lib/perform_later/delegation.rb +20 -0
- data/lib/perform_later/initialization.rb +22 -0
- metadata +122 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 26e3ae1d908f8515ff08b2ed050597a08a94626b
|
4
|
+
data.tar.gz: f5e372b075e58ceed29e79be4334e21b4fec5bf6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8da92402504d2d281566988dc0d43ef2795b1eefe7e1a5f63a151b3f5fc3f639247fe5edc69d5e5dc3e9899e8d4285014050401a6db6997b4c2b27c963f766fc
|
7
|
+
data.tar.gz: 234a48699e96f361b6890ce3db68a76f946a26dcf9d399c4b43a907f22166b106f8819df67bc66b2e2ffce886d8540db25494d509cceaa7e3155b2e1ed777b82
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
require_relative 'perform_later/initialization'
|
3
|
+
require_relative 'perform_later/aliasing'
|
4
|
+
|
5
|
+
module PerformLater
|
6
|
+
def self.included(base)
|
7
|
+
base.class_eval do
|
8
|
+
prepend Initialization
|
9
|
+
include ::Sidekiq::Worker
|
10
|
+
extend Aliasing
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'delegation'
|
2
|
+
|
3
|
+
module PerformLater
|
4
|
+
module Aliasing
|
5
|
+
|
6
|
+
def self.extended(base)
|
7
|
+
base.class_eval do
|
8
|
+
# methods configured for execution
|
9
|
+
# through an asyncronous bus.
|
10
|
+
#
|
11
|
+
# example:
|
12
|
+
# { :do_work => {after_initialize: :setup_from_async}}
|
13
|
+
#
|
14
|
+
# note: sidekiq has implementation of class_attribute
|
15
|
+
class_attribute :perform_later_configs
|
16
|
+
self.perform_later_configs = {}
|
17
|
+
|
18
|
+
include Delegation
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# configre a method to be performed asyncronously
|
23
|
+
#
|
24
|
+
# ex:
|
25
|
+
# class Foo
|
26
|
+
#
|
27
|
+
# def do_work
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# perform_later :do_work, after_initialize: :setup_from_async
|
31
|
+
#
|
32
|
+
# private
|
33
|
+
#
|
34
|
+
# def setup_from_async(arg1, arg2)
|
35
|
+
# @obj1 = Parser.parse(arg1)
|
36
|
+
# @obj2 = Lookup.lookup(arg2)
|
37
|
+
# end
|
38
|
+
# end
|
39
|
+
def perform_later(method, opts={})
|
40
|
+
self.perform_later_configs[method.to_s] = opts
|
41
|
+
|
42
|
+
define_singleton_method "#{method}_later", ->(*args) do
|
43
|
+
perform_async(method, *args)
|
44
|
+
end
|
45
|
+
singleton_class.send(:alias_method, "#{method}_async", "#{method}_later")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module PerformLater
|
2
|
+
module Delegation
|
3
|
+
|
4
|
+
def perform(method, *args)
|
5
|
+
config = perform_later_configs[method] || {}
|
6
|
+
call_after_initialize(config[:after_initialize], *args)
|
7
|
+
|
8
|
+
self.send method
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def call_after_initialize(call, *args)
|
14
|
+
case call
|
15
|
+
when Symbol
|
16
|
+
self.send(call, *args)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module PerformLater
|
2
|
+
module Initialization
|
3
|
+
def self.included(base)
|
4
|
+
raise "#{self.name} must be prepended, not included for it to have any effect on #{base.name}"
|
5
|
+
end
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
# initialization with explicit
|
9
|
+
# args, pass on
|
10
|
+
if args.length > 0
|
11
|
+
super(*args)
|
12
|
+
else
|
13
|
+
# initialization without args,
|
14
|
+
# dynamically match message signature
|
15
|
+
# with nil values
|
16
|
+
super_params = method(__method__).super_method.parameters
|
17
|
+
nil_args = Array.new(super_params.count{|param_array| param_array.first == :req}, nil)
|
18
|
+
super(*nil_args)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: perform-later
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0.alpha.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Evan Prothro
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-05-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sidekiq
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.4'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: generator_spec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: benchmark-ips
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: perform-later provides asyncronous worker/job support for objects with
|
84
|
+
a convention that encourages better object oriented design. It is a simple and lightweight
|
85
|
+
adapter that helps decouple job/worker initialization from object behavior/logic/algorithm.
|
86
|
+
It helps encourage objects with async/job/worker behavior that are more maintainable,
|
87
|
+
easier to change, and faster to test thoroughly.
|
88
|
+
email: evan.prothro@gmail.com
|
89
|
+
executables: []
|
90
|
+
extensions: []
|
91
|
+
extra_rdoc_files: []
|
92
|
+
files:
|
93
|
+
- lib/perform-later.rb
|
94
|
+
- lib/perform_later/aliasing.rb
|
95
|
+
- lib/perform_later/delegation.rb
|
96
|
+
- lib/perform_later/initialization.rb
|
97
|
+
homepage: https://github.com/eprothro/perform-later
|
98
|
+
licenses:
|
99
|
+
- MIT
|
100
|
+
metadata: {}
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 1.3.1
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 2.5.2
|
118
|
+
signing_key:
|
119
|
+
specification_version: 4
|
120
|
+
summary: Sidekiq support for ruby objects that encourages objected oriented design
|
121
|
+
test_files: []
|
122
|
+
has_rdoc:
|