kungfuig 0.8.1 → 0.9.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: 4b21d1d90f71efc1f08b5472f05e3d0d8bcca115
4
- data.tar.gz: 910b4944ad13fda6c3031f3bbc09ed37486927c5
3
+ metadata.gz: 2a0b46dbfa1f0a7552ee0d0402229d32610e5471
4
+ data.tar.gz: 0ff22f3f9ca89fc09c2d91b0edf6315d976adaf9
5
5
  SHA512:
6
- metadata.gz: 76022f6d1a5583771ad2e3cfb275fb98779348034a139d06603f8befc5d6b65c3afc1f3bfece8c3891addd4fb5c10ce9b241ee47d5ab844199ac5870d31388fc
7
- data.tar.gz: cf576e3d60781a60eacc9873553f4bed98261425e42c7cddc244d004eb9128d30476f6aa165d4c16f1e99c3aa996757d152e520428810603f1dffdc476c4ca61
6
+ metadata.gz: d76c042ca4cb9b223fd161dfe0ad9ddd3f378a9b41067cc9f1f2532b84656412df6fca2638bd8342c71c7e98031d67a04806b2978c793462517ce306c0967991
7
+ data.tar.gz: c01808c5f08bfe545bedb768e41de95fc4c371ed4a5bfb5044e8caac78ff13d5b8e5e0daae1ac130a5838e2cc36c948226d600627043e02955ed0b8525556625
data/kungfuig.gemspec CHANGED
@@ -33,4 +33,6 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency 'yard', '~> 0'
34
34
 
35
35
  spec.add_development_dependency 'rspec-sidekiq', '~> 2'
36
+ spec.add_development_dependency 'flexmock', '~> 1.3'
37
+ # spec.add_development_dependency 'mock_redis', '~> 0.17'
36
38
  end
@@ -1,8 +1,10 @@
1
- require_relative './aspector'
1
+ require 'digest'
2
2
  require 'rubygems/exceptions'
3
+ require 'kungfuig/aspector'
3
4
 
4
5
  begin
5
6
  require 'sidekiq'
7
+ require 'sidekiq/api'
6
8
  fail LoadError.new unless Kernel.const_defined?('Sidekiq')
7
9
  rescue LoadError
8
10
  raise(Gem::DependencyError, "Sidekiq id required to use this functionality!")
@@ -32,6 +34,7 @@ module Kungfuig
32
34
  # 'Test':
33
35
  # '*': 'YoJob'
34
36
  def bulk(hos)
37
+ @delayed ||= {}
35
38
  @hash = Kungfuig.load_stuff hos
36
39
  Kungfuig::Aspector.bulk(
37
40
  @hash.map do |klazz, hash|
@@ -53,9 +56,16 @@ module Kungfuig
53
56
  @hash[c.name] && @hash[c.name][method]
54
57
  end)
55
58
 
56
- destination = Kernel.const_get(@hash[receiver_class.name][method])
59
+ destination = Kernel.const_get(destination(receiver_class.name, method))
57
60
  destination.send(:prepend, Kungfuig::Worker) unless destination.ancestors.include? Kungfuig::Worker
58
- destination.perform_async(receiver: r, method: method, result: result, **params)
61
+ 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)
66
+ else
67
+ destination.perform_async(receiver: r, method: method, result: result, **params)
68
+ end
59
69
  rescue => e
60
70
  Kungfuig.✍(receiver: [
61
71
  "Fail [#{e.message}]",
@@ -63,6 +73,25 @@ module Kungfuig
63
73
  "while #{receiver}"
64
74
  ].join($/), method: method, result: result, args: params)
65
75
  end
76
+
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']
82
+ end
83
+ end
84
+
85
+ def delay target, name
86
+ @hash[target][name].is_a?(Hash) && @hash[target][name]['delay'].to_i || nil
87
+ end
88
+
89
+ def digest result, target, name
90
+ fields = @hash[target][name].is_a?(Hash) && @hash[target][name]['compare_by']
91
+ Digest::SHA256.hexdigest(
92
+ (fields.nil? ? result : fields.map { |f| result[f] }).inspect
93
+ )
94
+ end
66
95
  end
67
96
  end
68
97
  end
@@ -1,3 +1,3 @@
1
1
  module Kungfuig
2
- VERSION = '0.8.1'.freeze
2
+ VERSION = '0.9.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.8.1
4
+ version: 0.9.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-13 00:00:00.000000000 Z
11
+ date: 2016-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -142,6 +142,20 @@ dependencies:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
144
  version: '2'
145
+ - !ruby/object:Gem::Dependency
146
+ name: flexmock
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '1.3'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '1.3'
145
159
  description: Config with goodnesses.
146
160
  email:
147
161
  - aleksei.matiushkin@kantox.com