Sha256: d1f6904b12769411ac255155e7ad1c9fbc773ebab376470fcba759ebb65f0259
Contents?: true
Size: 1.49 KB
Versions: 1
Compression:
Stored size: 1.49 KB
Contents
require 'delegate' module DBViewCTI module Model class ModelDelegator < SimpleDelegator attr_reader :cti_target_class def initialize(object, target_class) @cti_object = object @cti_converted_object = object.convert_to(target_class) if !@cti_converted_object @cti_converted_object = object.becomes(target_class.constantize) @cti_is_new = true end @cti_target_class = target_class super( @cti_converted_object ) end def cti_is_new? @cti_is_new end def save(*args, &block) return super unless cti_is_new? # special case for new objects, we need som hackish id-juggling old_id = @cti_object.id new_id = @cti_object.convert_to( @cti_target_class ).id # since @cti_converted_object was created using 'becomes', @cti_object.id changes # as well in the following statement. So we saved it in old_id and restore it after the # call to save (i.e. super) @cti_object.reload # only needed in rails 4 self.id = new_id self.created_at = @cti_object.created_at # only needed in rails 4 self.updated_at = @cti_object.updated_at # only needed in rails 4 retval = !!super @cti_is_new = false @cti_object.id = old_id @cti_converted_object = @cti_object.convert_to( @cti_target_class ) __setobj__(@cti_converted_object) retval end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dbview_cti-0.1.2 | lib/db_view_cti/model/model_delegator.rb |