1. 13 5月, 2020 1 次提交
    • J
      Avoid confliting Kernel-named scopes on Relation · 1b773bca
      John Hawthorn 提交于
      A previous change made singleton methods eagerly define their relation
      methods if it shared a name with a method on Kernel. This caused issues
      with a few methods which were both defined on Kernel and on
      AcitveRecord::Relation.
      
      This commit avoids defining the method if it exists on AR::Relation.
      1b773bca
  2. 10 5月, 2020 3 次提交
  3. 09 5月, 2020 1 次提交
  4. 18 4月, 2020 1 次提交
  5. 27 1月, 2020 1 次提交
    • R
      Expose `klass.default_scoped` as public API · 7cc96c9a
      Ryuta Kamizono 提交于
      `default_scoped` is an only way to enforce returning a scope with
      default scopes in a scoping, and it is needed for migration to avoid
      leaking scope (#35280, #37727).
      
      Closes #38241.
      7cc96c9a
  6. 15 11月, 2019 1 次提交
  7. 02 10月, 2019 1 次提交
  8. 13 6月, 2019 1 次提交
  9. 06 4月, 2019 1 次提交
  10. 15 2月, 2019 1 次提交
  11. 07 2月, 2019 1 次提交
    • R
      Refactor around scoping · 2e018361
      Ryuta Kamizono 提交于
      Don't use `false` as special value to skip to find inherited scope, we
      could use `skip_inherited_scope = true`, and move `_scoping` back on
      Relation.
      2e018361
  12. 05 2月, 2019 1 次提交
    • R
      Chaining named scope is no longer leaking to class level querying methods · 2935d075
      Ryuta Kamizono 提交于
      Active Record uses `scoping` to delegate to named scopes from relations
      for propagating the chaining source scope. It was needed to restore the
      source scope in named scopes, but it was caused undesired behavior that
      pollute all class level querying methods.
      
      Example:
      
      ```ruby
      class Topic < ActiveRecord::Base
        scope :toplevel, -> { where(parent_id: nil) }
        scope :children, -> { where.not(parent_id: nil) }
        scope :has_children, -> { where(id: Topic.children.select(:parent_id)) }
      end
      
      # Works as expected.
      Topic.toplevel.where(id: Topic.children.select(:parent_id))
      
      # Doesn't work due to leaking `toplevel` to `Topic.children`.
      Topic.toplevel.has_children
      ```
      
      Since #29301, the receiver in named scopes has changed from the model
      class to the chaining source scope, so the polluting class level
      querying methods is no longer required for that purpose.
      
      Fixes #14003.
      2935d075
  13. 21 12月, 2018 1 次提交
  14. 09 10月, 2018 1 次提交
    • R
      Generate delegation methods to named scope in the definition time · 136b738c
      Ryuta Kamizono 提交于
      The delegation methods to named scope are defined when `method_missing`
      is invoked on the relation.
      
      Since #29301, the receiver in the named scope is changed to the relation
      like others (e.g. `default_scope`, etc) for consistency.
      
      Most named scopes would be delegated from relation by `method_missing`,
      since we don't allow scopes to be defined which conflict with instance
      methods on `Relation` (#31179). But if a named scope is defined with the
      same name as any method on the `superclass` (e.g. `Kernel.open`), the
      `method_missing` on the relation is not invoked.
      
      To address the issue, make the delegation methods to named scope is
      generated in the definition time.
      
      Fixes #34098.
      136b738c
  15. 11 9月, 2018 2 次提交
  16. 27 3月, 2018 1 次提交
    • R
      Bring back private class methods accessibility in named scope · b9be64cc
      Ryuta Kamizono 提交于
      The receiver in a scope was changed from `klass` to `relation` itself
      for all scopes (named scope, default_scope, and association scope)
      behaves consistently.
      
      In addition. Before 5.2, if both an AR model class and a Relation
      instance have same named methods (e.g. `arel_attribute`,
      `predicate_builder`, etc), named scope doesn't respect relation instance
      information.
      
      For example:
      
      ```ruby
      class Post < ActiveRecord::Base
        has_many :comments1, class_name: "RecentComment1"
        has_many :comments2, class_name: "RecentComment2"
      end
      
      class RecentComment1 < ActiveRecord::Base
        self.table_name = "comments"
        default_scope { where(arel_attribute(:created_at).gteq(2.weeks.ago)) }
      end
      
      class RecentComment2 < ActiveRecord::Base
        self.table_name = "comments"
        default_scope { recent_updated }
        scope :recent_updated, -> { where(arel_attribute(:updated_at).gteq(2.weeks.ago)) }
      end
      ```
      
      If eager loading `Post.eager_load(:comments1, :comments2).to_a`,
      `:comments1` (default_scope) respects aliased table name, but
      `:comments2` (using named scope) may not work correctly since named
      scope doesn't respect relation instance information. See also 801ccab2.
      
      But this is a breaking change between releases without deprecation.
      I decided to bring back private class methods accessibility in named
      scope.
      
      Fixes #31740.
      Fixes #32331.
      b9be64cc
  17. 28 11月, 2017 1 次提交
  18. 06 11月, 2017 1 次提交
  19. 15 8月, 2017 1 次提交
  20. 20 7月, 2017 1 次提交
  21. 02 7月, 2017 1 次提交
  22. 01 7月, 2017 1 次提交
  23. 27 6月, 2017 1 次提交
  24. 01 6月, 2017 1 次提交
    • R
      The receiver in a scope should be a `relation` · 4bdd86fb
      Ryuta Kamizono 提交于
      Currently the receiver in a scope is `klass`, not `relation`.
      I think it is a strange because the receiver in `default_scope` and a
      scope on association is `relation`.
      I fixed to the receiver is to be a `relation` properly for consistency.
      4bdd86fb
  25. 30 5月, 2017 1 次提交
  26. 28 5月, 2017 1 次提交
  27. 24 5月, 2017 1 次提交
  28. 29 12月, 2016 1 次提交
  29. 24 12月, 2016 1 次提交
  30. 27 10月, 2016 1 次提交
  31. 07 8月, 2016 1 次提交
  32. 03 8月, 2016 1 次提交
  33. 28 1月, 2016 1 次提交
    • A
      Revert "Remove valid_scope_name? check - use ruby" · dc925119
      Akira Matsuda 提交于
      This reverts commit f6db31ec.
      
      Reason:
      Scope names can very easily conflict, particularly when sharing Concerns
      within the team, or using multiple gems that extend AR models.
      
      It is true that Ruby has the ability to detect this with the -w option, but the
      reality is that we are depending on too many gems that do not care about Ruby
      warnings, therefore it might not be a realistic solution to turn this switch on
      in our real-world apps.
      dc925119
  34. 14 10月, 2015 1 次提交
    • Y
      applies new doc guidelines to Active Record. · 428d47ad
      Yves Senn 提交于
      The focus of this change is to make the API more accessible.
      References to method and classes should be linked to make it easy to
      navigate around.
      
      This patch makes exzessiv use of `rdoc-ref:` to provide more readable
      docs. This makes it possible to document `ActiveRecord::Base#save` even
      though the method is within a separate module
      `ActiveRecord::Persistence`. The goal here is to bring the API closer to
      the actual code that you would write.
      
      This commit only deals with Active Record. The other gems will be
      updated accordingly but in different commits. The pass through Active
      Record is not completely finished yet. A follow up commit will change
      the spots I haven't yet had the time to update.
      
      /cc @fxn
      428d47ad
  35. 08 10月, 2015 1 次提交
    • T
      Modify the scope method documentation · e2a42243
      Tommaso Visconti 提交于
      Adds a paragraph to the documentation of the `ActiveRecord::Scoping::Named.scope` method,
      explaining that the method is intended to return an ActiveRecord::Relation object to be
      composable with other scopes.
      
      In the case that in the case that `nil` or `false` are returned, the method returns
      an `all` relation instead.
      This unexpected behaviour is mentioned in #19249 #14256 #21465 and #21882 and wasn't
      documented at all. This commit adds this documentation.
      e2a42243
  36. 12 3月, 2015 1 次提交
    • B
      Isolate access to .default_scopes in ActiveRecord::Scoping::Default · c1deb81c
      Ben Woosley 提交于
      Instead use .scope_attributes? consistently in ActiveRecord to check whether
      there are attributes currently associated with the scope.
      
      Move the implementation of .scope_attributes? and .scope_attributes to
      ActiveRecord::Scoping because they don't particularly have to do specifically
      with Named scopes and their only dependency, in the case of
      .scope_attributes?, and only caller, in the case of .scope_attributes is
      contained in Scoping.
      c1deb81c
  37. 12 2月, 2015 1 次提交
    • S
      `current_scope` shouldn't pollute sibling STI classes · 5e0b555b
      Sean Griffin 提交于
      It looks like the only reason `current_scope` was thread local on
      `base_class` instead of `self` is to ensure that when we call a named
      scope created with a proc on the parent class, it correctly uses the
      default scope of the subclass. The reason this wasn't happening was
      because the proc captured `self` as the parent class, and we're not
      actually defining a real method. Using `instance_exec` fixes the
      problem.
      
      Fixes #18806
      5e0b555b