kungfuig 0.9.0 → 0.10.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/.rubocop.yml +3 -3
- data/kungfuig.gemspec +2 -1
- data/lib/kungfuig/jobber.rb +60 -21
- data/lib/kungfuig/version.rb +1 -1
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c46ca10e03faa3bb4f6d9eeb8216011c5dbb10f8
|
4
|
+
data.tar.gz: b6c314ca7222809ffdc2693c6d497f81c93a0948
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c57384f359cf7f73a3acf92a5aa2914619e0d126c2fcbd62049e4bb5f26da953ade875cdc1a801b91df012a9f25dd6ba9b8c40e779888a28b3ab4416f61cfbe4
|
7
|
+
data.tar.gz: 8ffb336572f9d1a222c4e416046b14d9a505f61ce14f7f1509cb4e7dcbc2fc8246355261b4a4ea687ad40750e1446ff6e8ca01f0ef5f6f30a81b23243564e95e
|
data/.rubocop.yml
CHANGED
data/kungfuig.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_dependency 'hashie', '~> 3'
|
25
25
|
spec.add_dependency 'sidekiq', '~> 3.5', '>= 3.5.2'
|
26
|
+
spec.add_dependency 'redis', '~> 3.2'
|
26
27
|
|
27
28
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
28
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
@@ -34,5 +35,5 @@ Gem::Specification.new do |spec|
|
|
34
35
|
|
35
36
|
spec.add_development_dependency 'rspec-sidekiq', '~> 2'
|
36
37
|
spec.add_development_dependency 'flexmock', '~> 1.3'
|
37
|
-
|
38
|
+
spec.add_development_dependency 'mock_redis', '~> 0.17'
|
38
39
|
end
|
data/lib/kungfuig/jobber.rb
CHANGED
@@ -30,11 +30,42 @@ module Kungfuig
|
|
30
30
|
|
31
31
|
# Generic helper for massive attaching aspects
|
32
32
|
class Jobber
|
33
|
+
RESPOND_TO = ->(m, r) { r.respond_to? m.to_sym }
|
34
|
+
|
35
|
+
class Dummy
|
36
|
+
prepend Kungfuig::Worker
|
37
|
+
|
38
|
+
def perform digest: nil, delay: nil, worker: nil, worker_params: nil
|
39
|
+
Sidekiq.redis { |redis| redis.set(digest, worker_params.to_json) }
|
40
|
+
DummyExecutor.perform_in(delay, digest: digest, worker: worker)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class DummyExecutor
|
45
|
+
prepend Kungfuig::Worker
|
46
|
+
|
47
|
+
def perform digest: nil, worker: nil
|
48
|
+
params = Sidekiq.redis do |redis|
|
49
|
+
redis.multi do
|
50
|
+
redis.get(digest)
|
51
|
+
redis.del(digest)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
Kernel.const_get(worker).perform_async(atomize_keys(params.first)) if params.last > 0
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def atomize_keys params
|
60
|
+
params = JSON.parse(params) if params.is_a?(String)
|
61
|
+
params.map { |k, v| [k.to_sym, v] }.to_h
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
33
65
|
class << self
|
34
66
|
# 'Test':
|
35
67
|
# '*': 'YoJob'
|
36
68
|
def bulk(hos)
|
37
|
-
@delayed ||= {}
|
38
69
|
@hash = Kungfuig.load_stuff hos
|
39
70
|
Kungfuig::Aspector.bulk(
|
40
71
|
@hash.map do |klazz, hash|
|
@@ -44,27 +75,21 @@ module Kungfuig
|
|
44
75
|
end
|
45
76
|
|
46
77
|
def bottleneck(method: nil, receiver: nil, result: nil, **params)
|
47
|
-
respond_to = ->(m, r) { r.respond_to? m.to_sym }
|
48
|
-
|
49
|
-
r = case receiver
|
50
|
-
when Hash, Array, String then receiver
|
51
|
-
when respond_to.curry[:to_hash] then receiver.to_hash
|
52
|
-
when respond_to.curry[:to_h] then receiver.to_h
|
53
|
-
else receiver
|
54
|
-
end
|
55
78
|
return unless (receiver_class = receiver.class.ancestors.detect do |c|
|
56
79
|
@hash[c.name] && @hash[c.name][method]
|
57
80
|
end)
|
58
81
|
|
59
|
-
|
60
|
-
|
82
|
+
r, worker = patch_receiver(receiver_class.name, method)
|
83
|
+
worker_params = { receiver: r, method: method, result: result, **params }
|
61
84
|
if (delay = delay(receiver_class.name, method))
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
85
|
+
Dummy.perform_async(
|
86
|
+
digest: digest(result, receiver_class.name, method),
|
87
|
+
delay: delay,
|
88
|
+
worker: worker,
|
89
|
+
worker_params: worker_params
|
90
|
+
)
|
66
91
|
else
|
67
|
-
|
92
|
+
worker.perform_async(worker_params)
|
68
93
|
end
|
69
94
|
rescue => e
|
70
95
|
Kungfuig.✍(receiver: [
|
@@ -74,14 +99,28 @@ module Kungfuig
|
|
74
99
|
].join($/), method: method, result: result, args: params)
|
75
100
|
end
|
76
101
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
when Hash then
|
102
|
+
##########################################################################
|
103
|
+
|
104
|
+
def primitivize(receiver)
|
105
|
+
case receiver
|
106
|
+
when Hash, Array, String then receiver
|
107
|
+
when RESPOND_TO.curry[:to_hash] then receiver.to_hash
|
108
|
+
when RESPOND_TO.curry[:to_h] then receiver.to_h
|
109
|
+
else receiver
|
82
110
|
end
|
83
111
|
end
|
84
112
|
|
113
|
+
def patch_receiver target, name
|
114
|
+
klazz = case @hash[target][name]
|
115
|
+
when String, Symbol then @hash[target][name]
|
116
|
+
when Hash then @hash[target][name]['class']
|
117
|
+
else return
|
118
|
+
end
|
119
|
+
[klazz, Kernel.const_get(klazz).tap do |c|
|
120
|
+
c.send(:prepend, Kungfuig::Worker) unless c.ancestors.include? Kungfuig::Worker
|
121
|
+
end]
|
122
|
+
end
|
123
|
+
|
85
124
|
def delay target, name
|
86
125
|
@hash[target][name].is_a?(Hash) && @hash[target][name]['delay'].to_i || nil
|
87
126
|
end
|
data/lib/kungfuig/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kungfuig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kantox LTD
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 3.5.2
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: redis
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.2'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.2'
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: bundler
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,6 +170,20 @@ dependencies:
|
|
156
170
|
- - "~>"
|
157
171
|
- !ruby/object:Gem::Version
|
158
172
|
version: '1.3'
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: mock_redis
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - "~>"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0.17'
|
180
|
+
type: :development
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - "~>"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0.17'
|
159
187
|
description: Config with goodnesses.
|
160
188
|
email:
|
161
189
|
- aleksei.matiushkin@kantox.com
|