1. 24 2月, 2014 1 次提交
    • G
      Fixed STI classes not defining an attribute method if there is a · 41554319
      Godfrey Chan 提交于
      conflicting private method defined on its ancestors.
      
      The problem is that `method_defined_within?(name, klass, superklass)`
      only works correclty when `klass` and `superklass` are both `Class`es.
      
      If both `klass` and `superklass` are both `Class`es, they share the
      same inheritance chain, so if a method is defined on `klass` but not
      `superklass`, this method must be introduced at some point between
      `klass` and `superklass`.
      
      This does not work when `superklass` is a `Module`. A `Module`'s
      inheritance chain contains just itself. So if a method is defined on
      `klass` but not on `superklass`, the method could still be defined
      somewhere upstream, e.g. in `Object`.
      
      This fix works by avoiding calling `method_defined_within?` with a
      module while still fufilling the requirement (checking that the
      method is defined withing `superclass` but not is not a generated
      attribute method).
      
      4d8ee288 is likely an attempted partial fix for this problem. This
      unrolls that fix and properly check the `superclass` as intended.
      
      Fixes #11569.
      41554319
  2. 23 2月, 2014 10 次提交
  3. 21 2月, 2014 13 次提交
  4. 20 2月, 2014 8 次提交
  5. 19 2月, 2014 8 次提交