class Jobler::BaseJobler
Attributes
args[R]
controller[RW]
format[RW]
job[R]
Public Class Methods
after_jobling(&blk)
click to toggle source
# File lib/jobler/base_jobler.rb, line 10 def self.after_jobling(&blk) @@after_jobling ||= [] # rubocop:disable Style/ClassVars @@after_jobling << blk end
before_jobling(&blk)
click to toggle source
# File lib/jobler/base_jobler.rb, line 5 def self.before_jobling(&blk) @@before_jobling ||= [] # rubocop:disable Style/ClassVars @@before_jobling << blk end
new(args:, job:)
click to toggle source
# File lib/jobler/base_jobler.rb, line 15 def initialize(args:, job:) @args = args @job = job end
Public Instance Methods
call_after_callbacks()
click to toggle source
# File lib/jobler/base_jobler.rb, line 26 def call_after_callbacks @@after_jobling&.each do |after_callback| instance_eval(&after_callback) end end
call_before_callbacks()
click to toggle source
# File lib/jobler/base_jobler.rb, line 20 def call_before_callbacks @@before_jobling&.each do |before_callback| instance_eval(&before_callback) end end
create_result!(content: nil, name:, result: nil, temp_file: nil, save_in_database: false)
click to toggle source
# File lib/jobler/base_jobler.rb, line 32 def create_result!(content: nil, name:, result: nil, temp_file: nil, save_in_database: false) jobler_result = job.results.new(name: name) if content && !temp_file temp_file = Tempfile.new(name) temp_file.write(content) temp_file.close end if result jobler_result.result = result else raise "No tempfile could be found" unless temp_file handle_file(jobler_result: jobler_result, save_in_database: save_in_database, temp_file: temp_file) end jobler_result.save! jobler_result end
execute!()
click to toggle source
# File lib/jobler/base_jobler.rb, line 53 def execute! raise NoMethodError, "You should define the 'execute!' method on #{self.class.name}" end
increment_progress!(value: 1.0)
click to toggle source
# File lib/jobler/base_jobler.rb, line 69 def increment_progress!(value: 1.0) @_progress_count ||= 0.0 @_progress_count += value.to_f new_progress = @_progress_count / @_progress_total if @_current_progress.nil? update = true else progress_difference = new_progress - @_current_progress update = true if progress_difference > 0.01 end if update job.update!(progress: new_progress) @_current_progress = new_progress end end
jobler_name()
click to toggle source
# File lib/jobler/base_jobler.rb, line 57 def jobler_name new_name = "" parts = self.class.name.split("::") parts.each do |part| new_name << "/" unless new_name.empty? new_name << part.underscore end new_name end
progress_total(new_total)
click to toggle source
# File lib/jobler/base_jobler.rb, line 88 def progress_total(new_total) @_progress_total = new_total.to_f end
render(template_path, locals = {})
click to toggle source
# File lib/jobler/base_jobler.rb, line 92 def render(template_path, locals = {}) template_path = "joblers/#{jobler_name}/#{template_path}" if template_path.is_a?(Symbol) request = ActionDispatch::Request.new( "HTTP_HOST" => "#{job.host}:#{job.port}", "HTTP_X_FORWARDED_PROTO" => job.protocol ) controller = ::ApplicationJoblerController.new controller.instance_variable_set(:@jobler, self) controller.request = request controller.response = ActionDispatch::Response.new render_result = controller.render(template_path, layout: false, locals: {jobler: self}.merge(locals)) if render_result.is_a?(String) # Rails 5 behaviour render_result else # Rails 4 behaviour render_result.join end end
result()
click to toggle source
# File lib/jobler/base_jobler.rb, line 116 def result raise NoMethodError, "You should define the 'result' method on #{self.class.name}" end
temp_file_for_result(name:)
click to toggle source
# File lib/jobler/base_jobler.rb, line 120 def temp_file_for_result(name:) job_result = job.results.where(name: name).first raise "No result by that name: #{name}" unless job_result temp_file = ::Tempfile.new("jobler_tempfile") temp_file.binmode temp_file.write(job_result.result) temp_file.close temp_file end
url_for_result(name:)
click to toggle source
# File lib/jobler/base_jobler.rb, line 131 def url_for_result(name:) job_result = job.results.where(name: name).first raise "No result by that name: #{name}" unless job_result Rails.application.routes.url_helpers.rails_blob_path(job_result.file.attachment, only_path: true) end
Private Instance Methods
handle_file(jobler_result:, save_in_database:, temp_file:)
click to toggle source
# File lib/jobler/base_jobler.rb, line 140 def handle_file(jobler_result:, save_in_database:, temp_file:) if save_in_database temp_file = temp_file temp_file.close unless temp_file.closed? content = File.read(temp_file.path) jobler_result.result = content else jobler_result.file.attach( filename: File.basename(temp_file.path), io: File.open(temp_file.path) ) end end