perform-later 1.0.0.alpha.3

Sign up to get free protection for your applications and to get access to all the features.
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: