kungfuig 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2a0b46dbfa1f0a7552ee0d0402229d32610e5471
4
- data.tar.gz: 0ff22f3f9ca89fc09c2d91b0edf6315d976adaf9
3
+ metadata.gz: c46ca10e03faa3bb4f6d9eeb8216011c5dbb10f8
4
+ data.tar.gz: b6c314ca7222809ffdc2693c6d497f81c93a0948
5
5
  SHA512:
6
- metadata.gz: d76c042ca4cb9b223fd161dfe0ad9ddd3f378a9b41067cc9f1f2532b84656412df6fca2638bd8342c71c7e98031d67a04806b2978c793462517ce306c0967991
7
- data.tar.gz: c01808c5f08bfe545bedb768e41de95fc4c371ed4a5bfb5044e8caac78ff13d5b8e5e0daae1ac130a5838e2cc36c948226d600627043e02955ed0b8525556625
6
+ metadata.gz: c57384f359cf7f73a3acf92a5aa2914619e0d126c2fcbd62049e4bb5f26da953ade875cdc1a801b91df012a9f25dd6ba9b8c40e779888a28b3ab4416f61cfbe4
7
+ data.tar.gz: 8ffb336572f9d1a222c4e416046b14d9a505f61ce14f7f1509cb4e7dcbc2fc8246355261b4a4ea687ad40750e1446ff6e8ca01f0ef5f6f30a81b23243564e95e
data/.rubocop.yml CHANGED
@@ -17,13 +17,13 @@ Metrics/LineLength:
17
17
  Max: 180
18
18
 
19
19
  Metrics/MethodLength:
20
- Max: 42
20
+ Max: 50
21
21
 
22
22
  Metrics/PerceivedComplexity:
23
- Max: 20
23
+ Max: 30
24
24
 
25
25
  Metrics/AbcSize:
26
- Max: 42
26
+ Max: 50
27
27
 
28
28
  Style/EmptyCaseCondition:
29
29
  Exclude:
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
- # spec.add_development_dependency 'mock_redis', '~> 0.17'
38
+ spec.add_development_dependency 'mock_redis', '~> 0.17'
38
39
  end
@@ -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
- destination = Kernel.const_get(destination(receiver_class.name, method))
60
- destination.send(:prepend, Kungfuig::Worker) unless destination.ancestors.include? Kungfuig::Worker
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
- digest = digest(result, receiver_class.name, method)
63
- Sidekiq::Queue.new(destination.sidekiq_options_hash['queue'])
64
- .find_job(@delayed.delete(digest)).tap { |j| j.delete if j }
65
- @delayed[digest] = destination.perform_in(delay, receiver: r, method: method, result: result, **params)
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
- destination.perform_async(receiver: r, method: method, result: result, **params)
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
- def destination target, name
78
- case @hash[target][name]
79
- when NilClass then nil
80
- when String, Symbol then @hash[target][name]
81
- when Hash then @hash[target][name]['class']
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
@@ -1,3 +1,3 @@
1
1
  module Kungfuig
2
- VERSION = '0.9.0'.freeze
2
+ VERSION = '0.10.0'.freeze
3
3
  end
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.9.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-09-24 00:00:00.000000000 Z
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