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