Sha256: 9cf572c02ff2ef279f4b11ddbe8e71e9aa4e826131a3fac37d8198bbd901c7df

Contents?: true

Size: 1.84 KB

Versions: 2

Compression:

Stored size: 1.84 KB

Contents

module SafeAttributes
  extend ActiveSupport::Concern

  module ClassMethods
    # 
    # Within your model call this method once with a list of 
    # methods matching either attribute() or attribute=() for 
    # attributes (column names) you do not want to create the
    # the normal method for.  You should not need to do this
    # but the option is there in case the default list is 
    # inadequate.
    #
    def bad_attribute_names(*attrs)
      @bad_attribute_names ||= lambda {
        methods = Array.new(attrs.collect { |x| x.to_sym })
        methods += ActiveRecord::Base.public_instance_methods.collect { |x| x.to_sym }
        methods += ActiveRecord::Base.protected_instance_methods.collect { |x| x.to_sym }
        methods += ActiveRecord::Base.private_instance_methods.collect { |x| x.to_sym }
        methods -= [:id]
        return methods
      }.call
    end

    # 
    # Override the default implementation to not create the
    # attribute() method if that method name is in the list of
    # bad names
    #
    def define_method_attribute(attr_name)
      return if (bad_attribute_names.include?(attr_name.to_sym))
      super(attr_name)
    end

    #
    # Override the default implementation to not create the
    # attribute= method if that method name is in the list of
    # bad names
    #
    def define_method_attribute=(attr_name)
      method = attr_name + '='
      return if (bad_attribute_names.include?(method.to_sym))
      super(attr_name)
    end

    def instance_method_already_implemented?(method_name)
      begin 
        return super(method_name)
      rescue ActiveRecord::DangerousAttributeError
        return true
      end
      return false
    end
  end

  module InstanceMethods
    def read_attribute_for_validation(attr)
      self[attr.to_sym]
    end
  end

end

require 'safe_attributes/railtie.rb' if defined?(Rails)

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
safe_attributes-1.0.6 lib/safe_attributes.rb
safe_attributes-1.0.5 lib/safe_attributes.rb