kungfuig 0.8.1 → 0.9.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: 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