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 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: