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(target, name) ⇒ Object
- .primitivize(receiver) ⇒ 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) r, worker = patch_receiver(receiver_class.name, method) worker_params = { receiver: r, method: method, result: result, **params } if (delay = delay(receiver_class.name, method)) Dummy.perform_async( digest: digest(result, receiver_class.name, method), delay: delay, worker: r, 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
124 125 126 |
# File 'lib/kungfuig/jobber.rb', line 124 def delay target, name @hash[target][name].is_a?(Hash) && @hash[target][name]['delay'].to_i || nil end |
.digest(result, target, name) ⇒ Object
128 129 130 131 132 133 |
# File 'lib/kungfuig/jobber.rb', line 128 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(target, name) ⇒ Object
113 114 115 116 117 118 119 120 121 122 |
# File 'lib/kungfuig/jobber.rb', line 113 def patch_receiver target, name klazz = case @hash[target][name] when String, Symbol then @hash[target][name] when Hash then @hash[target][name]['class'] else return end [klazz, Kernel.const_get(klazz).tap do |c| c.send(:prepend, Kungfuig::Worker) unless c.ancestors.include? Kungfuig::Worker end] end |
.primitivize(receiver) ⇒ Object
104 105 106 107 108 109 110 111 |
# File 'lib/kungfuig/jobber.rb', line 104 def primitivize(receiver) 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 end |