Class: Kungfuig::Jobber
- Inherits:
-
Object
- Object
- Kungfuig::Jobber
- Defined in:
- lib/kungfuig/jobber.rb
Overview
Generic helper for massive attaching aspects
Defined Under Namespace
Classes: Dummy, DummyExecutor
Constant Summary collapse
- RESPOND_TO =
->(m, r) { r.respond_to? m.to_sym }
Class Method Summary collapse
- .bottleneck(method: nil, receiver: nil, result: nil, **params) ⇒ Object
-
.bulk(hos) ⇒ Object
‘Test’: ‘*’: ‘YoJob’.
- .delay(target, name) ⇒ Object
- .digest(result, target, name) ⇒ Object
- .patch_receiver(receiver, target, name) ⇒ Object
Class Method Details
.bottleneck(method: nil, receiver: nil, result: nil, **params) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/kungfuig/jobber.rb', line 77 def bottleneck(method: nil, receiver: nil, result: nil, **params) return unless (receiver_class = receiver.class.ancestors.detect do |c| @hash[c.name] && @hash[c.name][method] end) receiver, worker = patch_receiver(receiver, receiver_class.name, method) worker_params = { receiver: receiver, method: method, result: result, **params } if (delay = delay(receiver_class.name, method)) Dummy.perform_async( digest: digest(receiver, receiver_class.name, method), delay: delay, worker: worker.to_s, worker_params: worker_params ) else worker.perform_async(worker_params) end rescue => e Kungfuig.✍(receiver: [ "Fail [#{e.}]", *e.backtrace.unshift("Backtrace:").join("#{$/}⮩ "), "while #{receiver}" ].join($/), method: method, result: result, args: params) end |
.bulk(hos) ⇒ Object
‘Test’:
'*': 'YoJob'
68 69 70 71 72 73 74 75 |
# File 'lib/kungfuig/jobber.rb', line 68 def bulk(hos) @hash = Kungfuig.load_stuff hos Kungfuig::Aspector.bulk( @hash.map do |klazz, hash| [klazz, { after: hash.map { |k, _| [k, 'Kungfuig::Jobber#bottleneck'] }.to_h }] end.to_h ) end |
.delay(target, name) ⇒ Object
123 124 125 |
# File 'lib/kungfuig/jobber.rb', line 123 def delay target, name @hash[target][name].is_a?(Hash) && @hash[target][name]['delay'].to_i || nil end |
.digest(result, target, name) ⇒ Object
127 128 129 130 131 132 |
# File 'lib/kungfuig/jobber.rb', line 127 def digest result, target, name fields = @hash[target][name].is_a?(Hash) && @hash[target][name]['compare_by'] Digest::SHA256.hexdigest( (fields.nil? ? result : fields.map { |f| result[f] }).inspect ) end |
.patch_receiver(receiver, target, name) ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/kungfuig/jobber.rb', line 104 def patch_receiver(receiver, target, name) r = case receiver when Hash, Array, String then receiver when RESPOND_TO.curry[:to_hash] then receiver.to_hash when RESPOND_TO.curry[:to_h] then receiver.to_h else receiver end klazz = case @hash[target][name] when String, Symbol then @hash[target][name] when Hash then @hash[target][name]['class'] else return end [r, Kernel.const_get(klazz).tap do |c| c.send(:prepend, Kungfuig::Worker) unless c.ancestors.include? Kungfuig::Worker end] end |