Sha256: 5c6339d9fac1888de31cc02bb1fe5bb71da56d7f505a8cf2d2ea87235358ead2

Contents?: true

Size: 1.04 KB

Versions: 11

Compression:

Stored size: 1.04 KB

Contents

module CassandraObject
  class RecordInvalid < 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

  module Validation
    extend ActiveSupport::Concern
    include ActiveModel::Validations
    
    included do
      define_model_callbacks :validation
      define_callbacks :validate, :scope => :name
    end
    
    module ClassMethods
      def create!(attributes)
        new(attributes).tap &:save!
      end
    end
    
    module InstanceMethods
      def valid?
        run_callbacks :validation do
          super
        end
      end

      def save(options={})
        perform_validations(options) ?  super : false
      end
      
      def save!
        save || RecordInvalid.raise_error(self)
      end

    protected
      
      def perform_validations(options={})
        (options[:validate] != false) ? valid? : true
      end
      
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
gotime-cassandra_object-0.9.1 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.9.0 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.8.7 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.8.6 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.8.5 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.8.4 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.8.3 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.8.2 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.8.1 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.8.0 lib/cassandra_object/validation.rb
gotime-cassandra_object-0.7.8 lib/cassandra_object/validation.rb