Sha256: e94f5f6123f8964c7935b41dff09ffa5578f79ba7a0965a0a6a84b2ea28fc14d

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

module CassandraObject
  module Validation
    class RecordInvalidError < StandardError
      attr_reader :record
      def initialize(record)
        @record = record
        super("Invalid record: #{@record.errors.full_messages.to_sentence}")
      end
      
      def self.raise_error(record)
        raise new(record)
      end
    end
    extend ActiveSupport::Concern
    include ActiveModel::Validations
    
    included do
      define_model_callbacks :validation
      if CassandraObject.old_active_support
        define_callbacks :validate
      else
        define_callbacks :validate, :scope => :name
      end
    end
    
    module ClassMethods
      def create!(attributes)
        returning new(attributes), &:save!
      end
    end
    
    module InstanceMethods
      def valid?
        run_callbacks :validation do
          super
        end
      end

      def save
        if valid?
          super
        else
          false
        end
      end
      
      def save!
        save || RecordInvalidError.raise_error(self)
      end
      
      if CassandraObject.old_active_support
        def _run_validate_callbacks
          run_callbacks :validate
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cassandra_object-0.6.0.pre lib/cassandra_object/validation.rb