aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/models/comment.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test/models/comment.rb')
-rw-r--r--activerecord/test/models/comment.rb92
1 files changed, 92 insertions, 0 deletions
diff --git a/activerecord/test/models/comment.rb b/activerecord/test/models/comment.rb
new file mode 100644
index 0000000000..f0f0576709
--- /dev/null
+++ b/activerecord/test/models/comment.rb
@@ -0,0 +1,92 @@
+# frozen_string_literal: true
+
+# `counter_cache` requires association class before `attr_readonly`.
+class Post < ActiveRecord::Base; end
+
+class Comment < ActiveRecord::Base
+ scope :limit_by, lambda { |l| limit(l) }
+ scope :containing_the_letter_e, -> { where("comments.body LIKE '%e%'") }
+ scope :not_again, -> { where("comments.body NOT LIKE '%again%'") }
+ scope :for_first_post, -> { where(post_id: 1) }
+ scope :for_first_author, -> { joins(:post).where("posts.author_id" => 1) }
+ scope :created, -> { all }
+
+ belongs_to :post, counter_cache: true
+ belongs_to :author, polymorphic: true
+ belongs_to :resource, polymorphic: true
+
+ has_many :ratings
+
+ belongs_to :first_post, foreign_key: :post_id
+ belongs_to :special_post_with_default_scope, foreign_key: :post_id
+
+ has_many :children, class_name: "Comment", foreign_key: :parent_id
+ belongs_to :parent, class_name: "Comment", counter_cache: :children_count
+
+ class ::OopsError < RuntimeError; end
+
+ module OopsExtension
+ def destroy_all(*)
+ raise OopsError
+ end
+ end
+
+ default_scope { extending OopsExtension }
+
+ scope :oops_comments, -> { extending OopsExtension }
+
+ # Should not be called if extending modules that having the method exists on an association.
+ def self.greeting
+ raise
+ end
+
+ def self.what_are_you
+ "a comment..."
+ end
+
+ def self.search_by_type(q)
+ where("#{QUOTED_TYPE} = ?", q)
+ end
+
+ def self.all_as_method
+ all
+ end
+ scope :all_as_scope, -> { all }
+
+ def to_s
+ body
+ end
+end
+
+class SpecialComment < Comment
+ default_scope { where(deleted_at: nil) }
+
+ def self.what_are_you
+ "a special comment..."
+ end
+end
+
+class SubSpecialComment < SpecialComment
+end
+
+class VerySpecialComment < Comment
+end
+
+class CommentThatAutomaticallyAltersPostBody < Comment
+ belongs_to :post, class_name: "PostThatLoadsCommentsInAnAfterSaveHook", foreign_key: :post_id
+
+ after_save do |comment|
+ comment.post.update(body: "Automatically altered")
+ end
+end
+
+class CommentWithDefaultScopeReferencesAssociation < Comment
+ default_scope -> { includes(:developer).order("developers.name").references(:developer) }
+ belongs_to :developer
+end
+
+class CommentWithAfterCreateUpdate < Comment
+ after_create do
+ update(body: "bar")
+ end
+end