Module: ActiveFedora::AttributeMethods::ClassMethods
- Defined in:
 - lib/active_fedora/attribute_methods.rb
 
Instance Method Summary collapse
- 
  
    
      #class_method_defined_within?(name, klass, superklass = klass.superclass)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - 
  
    
      #dangerous_attribute_method?(name)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
A method name is ‘dangerous’ if it is already (re)defined by Active Fedora, but not by any ancestors.
 - 
  
    
      #dangerous_class_method?(method_name)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
A class method is ‘dangerous’ if it is already (re)defined by Active Record, but not by any ancestors.
 - 
  
    
      #inherited(child_class)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - 
  
    
      #initialize_generated_modules  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - 
  
    
      #instance_method_already_implemented?(method_name)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Raises an ActiveFedora::DangerousAttributeError exception when an Active Record method is defined in the model, otherwise
false. - 
  
    
      #method_defined_within?(name, klass, superklass = klass.superclass)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 
Instance Method Details
#class_method_defined_within?(name, klass, superklass = klass.superclass) ⇒ Boolean
:nodoc:
      87 88 89 90 91 92 93 94 95 96 97  | 
    
      # File 'lib/active_fedora/attribute_methods.rb', line 87 def class_method_defined_within?(name, klass, superklass = klass.superclass) # :nodoc: if klass.respond_to?(name, true) if superklass.respond_to?(name, true) klass.method(name).owner != superklass.method(name).owner else true end else false end end  | 
  
#dangerous_attribute_method?(name) ⇒ Boolean
A method name is ‘dangerous’ if it is already (re)defined by Active Fedora, but not by any ancestors. (So ‘puts’ is not dangerous but ‘save’ is.)
      65 66 67  | 
    
      # File 'lib/active_fedora/attribute_methods.rb', line 65 def dangerous_attribute_method?(name) # :nodoc: method_defined_within?(name, Base) end  | 
  
#dangerous_class_method?(method_name) ⇒ Boolean
A class method is ‘dangerous’ if it is already (re)defined by Active Record, but not by any ancestors. (So ‘puts’ is not dangerous but ‘new’ is.)
      83 84 85  | 
    
      # File 'lib/active_fedora/attribute_methods.rb', line 83 def dangerous_class_method?(method_name) RESTRICTED_CLASS_METHODS.include?(method_name.to_s) || class_method_defined_within?(method_name, Base) end  | 
  
#inherited(child_class) ⇒ Object
:nodoc:
      22 23 24 25  | 
    
      # File 'lib/active_fedora/attribute_methods.rb', line 22 def inherited(child_class) # :nodoc: child_class.initialize_generated_modules super end  | 
  
#initialize_generated_modules ⇒ Object
:nodoc:
      27 28 29 30 31 32 33  | 
    
      # File 'lib/active_fedora/attribute_methods.rb', line 27 def initialize_generated_modules # :nodoc: @generated_attribute_methods = GeneratedAttributeMethods.new { extend Mutex_m } @attribute_methods_generated = false include @generated_attribute_methods super end  | 
  
#instance_method_already_implemented?(method_name) ⇒ Boolean
Raises an ActiveFedora::DangerousAttributeError exception when an Active Record method is defined in the model, otherwise false.
class Person < ActiveRecord::Base
  def save
    'already defined by Active Fedora'
  end
end
Person.instance_method_already_implemented?(:save)
# => ActiveFedora::DangerousAttributeError: save is defined by Active Record. Check to make sure that you don't have an attribute or method with the same name.
Person.instance_method_already_implemented?(:name)
# => false
  
      49 50 51 52 53 54 55 56 57 58 59 60 61  | 
    
      # File 'lib/active_fedora/attribute_methods.rb', line 49 def instance_method_already_implemented?(method_name) raise DangerousAttributeError, "#{method_name} is defined by Active Fedora. Check to make sure that you don't have an attribute or method with the same name." if dangerous_attribute_method?(method_name) if superclass == Base super else # If ThisClass < ... < SomeSuperClass < ... < Base and SomeSuperClass # defines its own attribute method, then we don't want to overwrite that. defined = method_defined_within?(method_name, superclass, Base) && !superclass.instance_method(method_name).owner.is_a?(GeneratedAttributeMethods) defined || super end end  | 
  
#method_defined_within?(name, klass, superklass = klass.superclass) ⇒ Boolean
:nodoc:
      69 70 71 72 73 74 75 76 77 78 79  | 
    
      # File 'lib/active_fedora/attribute_methods.rb', line 69 def method_defined_within?(name, klass, superklass = klass.superclass) # :nodoc: if klass.method_defined?(name) || klass.private_method_defined?(name) if superklass.method_defined?(name) || superklass.private_method_defined?(name) klass.instance_method(name).owner != superklass.instance_method(name).owner else true end else false end end  |