Skip to content

Instantly share code, notes, and snippets.

@nicksieger
Last active July 29, 2017 17:54
Show Gist options
  • Select an option

  • Save nicksieger/8854494c085d30af1a9bae32eb9e8166 to your computer and use it in GitHub Desktop.

Select an option

Save nicksieger/8854494c085d30af1a9bae32eb9e8166 to your computer and use it in GitHub Desktop.

Revisions

  1. nicksieger revised this gist Jul 29, 2017. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions delayed_job_990_monkeypatch.rb
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,8 @@ class InvalidPayload
    ParseObjectFromYaml = %r{\!ruby/\w+\:([^\s]+)} # rubocop:disable ConstantName

    def initialize(handler, exception)
    @handler, @exception = handler, deserialization_error(exception)
    @handler = handler
    @exception = deserialization_error(exception)
    end

    def display_name
    @@ -18,7 +19,7 @@ def perform
    end

    def deserialization_error(e)
    return e if e.kind_of?(DeserializationError)
    return e if e.is_a?(DeserializationError)
    DeserializationError.new "Job failed to load: #{e.message}. Handler: #{@handler.inspect}"
    end
    end
  2. nicksieger created this gist Jul 29, 2017.
    44 changes: 44 additions & 0 deletions delayed_job_990_monkeypatch.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    ## Monkeypatch payload_object like https://github.com/collectiveidea/delayed_job/pull/990
    module Delayed
    module Backend
    class InvalidPayload
    ParseObjectFromYaml = %r{\!ruby/\w+\:([^\s]+)} # rubocop:disable ConstantName

    def initialize(handler, exception)
    @handler, @exception = handler, deserialization_error(exception)
    end

    def display_name
    result = ParseObjectFromYaml.match(@handler)
    result && result[1] || self.class.name
    end

    def perform
    raise @exception
    end

    def deserialization_error(e)
    return e if e.kind_of?(DeserializationError)
    DeserializationError.new "Job failed to load: #{e.message}. Handler: #{@handler.inspect}"
    end
    end
    end
    end

    module Delayed
    module Backend
    module Base
    def payload_object
    return @payload_object if @payload_object
    @payload_object = YAML.load_dj(handler)
    unless @payload_object.respond_to?(:perform)
    @payload_object = Backend::InvalidPayload.new(handler, NoMethodError.new("undefined method `perform' for #{@payload_object.inspect}"))
    end
    @payload_object
    rescue Exception => e # rubocop:disable RescueException
    @payload_object = Backend::InvalidPayload.new(handler, e)
    end
    end
    end
    end
    ## End Monkeypatch #990