class Delayed::PsychExt::ToRuby
Public Class Methods
create()
click to toggle source
# File lib/delayed/psych_ext.rb, line 25 def self.create new end
Public Instance Methods
jruby_is_seriously_borked()
click to toggle source
defined? is triggering something really messed up in jruby causing both the if AND else clauses to execute, however if the check is run here, everything is fine
# File lib/delayed/psych_ext.rb, line 84 def jruby_is_seriously_borked defined?(ActiveRecord::Base) end
resolve_class(klass_name)
click to toggle source
Calls superclass method
# File lib/delayed/psych_ext.rb, line 88 def resolve_class(klass_name) return nil if !klass_name || klass_name.empty? klass_name.constantize rescue super end
visit_Psych_Nodes_Mapping(object)
click to toggle source
Calls superclass method
# File lib/delayed/psych_ext.rb, line 30 def visit_Psych_Nodes_Mapping(object) # rubocop:disable CyclomaticComplexity, MethodName, PerceivedComplexity return revive(Psych.load_tags[object.tag], object) if Psych.load_tags[object.tag] case object.tag when %r{^!ruby/object} result = super if jruby_is_seriously_borked && result.is_a?(ActiveRecord::Base) klass = result.class id = result[klass.primary_key] begin klass.unscoped.find(id) rescue ActiveRecord::RecordNotFound => error # rubocop:disable BlockNesting raise Delayed::DeserializationError, "ActiveRecord::RecordNotFound, class: #{klass}, primary key: #{id} (#{error.message})" end else result end when %r{^!ruby/ActiveRecord:(.+)$} klass = resolve_class(Regexp.last_match[1]) payload = Hash[*object.children.map { |c| accept c }] id = payload['attributes'][klass.primary_key] id = id.value if defined?(ActiveRecord::Attribute) && id.is_a?(ActiveRecord::Attribute) begin klass.unscoped.find(id) rescue ActiveRecord::RecordNotFound => error raise Delayed::DeserializationError, "ActiveRecord::RecordNotFound, class: #{klass}, primary key: #{id} (#{error.message})" end when %r{^!ruby/Mongoid:(.+)$} klass = resolve_class(Regexp.last_match[1]) payload = Hash[*object.children.map { |c| accept c }] id = payload['attributes']['_id'] begin klass.find(id) rescue Mongoid::Errors::DocumentNotFound => error raise Delayed::DeserializationError, "Mongoid::Errors::DocumentNotFound, class: #{klass}, primary key: #{id} (#{error.message})" end when %r{^!ruby/DataMapper:(.+)$} klass = resolve_class(Regexp.last_match[1]) payload = Hash[*object.children.map { |c| accept c }] begin primary_keys = klass.properties.select(&:key?) key_names = primary_keys.map { |p| p.name.to_s } klass.get!(*key_names.map { |k| payload['attributes'][k] }) rescue DataMapper::ObjectNotFoundError => error raise Delayed::DeserializationError, "DataMapper::ObjectNotFoundError, class: #{klass} (#{error.message})" end else super end end