module Skr::Concerns::ImmutableModel::ClassMethods

Public Instance Methods

is_immutable(options = {}) click to toggle source

Once it's created it may not be updated or destroyed. @raise [ActiveRecord::ReadOnlyRecord] if destroy, delete or save is called after it's been created.

# File lib/skr/concerns/immutable_model.rb, line 12
def is_immutable(options = {})

    options[:except] = [*options[:except]].map{|name| name.to_s } # make sure except is present and an array

    before_destroy do
        raise ActiveRecord::ReadOnlyRecord.new( "Can not destroy #{self.class.model_name}, only create is allowed" )
    end

    before_update do
        unless ( changes.keys - change_tracking_fields - options[:except] ).blank?
            raise ActiveRecord::ReadOnlyRecord.new(  "Can not update, only create #{self.class.model_name}" )
        end
    end

end