Sha256: dbea374bb4f9808fd6545c0b684971a971d812b58e037a916fe362ec504af72b
Contents?: true
Size: 1.58 KB
Versions: 1
Compression:
Stored size: 1.58 KB
Contents
require 'active_record' require 'active_record/validations' require 'much-plugin' require 'mr/model/configuration' module MR; end module MR::Model module Persistence include MuchPlugin plugin_included do include MR::Model::Configuration extend ClassMethods include InstanceMethods end module ClassMethods def transaction(&block) self.record_class.transaction(&block) end end module InstanceMethods def save self.transaction{ record.save! } rescue ActiveRecord::RecordInvalid => exception # `caller` is not consistent between 1.8 and 2.0, if we stop supporting # older versions, we can switch to using `caller` called_from = exception.backtrace[6..-1] raise InvalidError.new(self, self.errors, called_from) end def destroy record.destroy end def transaction(&block) record.transaction(&block) end def errors record.errors.messages end def valid? record.valid? end def new? record.new_record? end def destroyed? record.destroyed? end end end class InvalidError < RuntimeError attr_reader :errors def initialize(model, errors, backtrace = nil) @errors = errors || {} desc = @errors.map do |(attribute, messages)| messages.map{ |message| "#{attribute.inspect} #{message}" } end.sort.join(', ') super "Invalid #{model.class} couldn't be saved: #{desc}" set_backtrace(backtrace) if backtrace end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mr-0.35.2 | lib/mr/model/persistence.rb |