mongoid-paranoia 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. data/.gitignore +25 -0
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile +7 -0
  4. data/README.md +65 -0
  5. data/Rakefile +7 -0
  6. data/lib/mongoid/paranoia.rb +133 -0
  7. data/lib/mongoid/paranoia/version.rb +5 -0
  8. data/mongoid-paranoia.gemspec +18 -0
  9. data/spec/app/models/account.rb +32 -0
  10. data/spec/app/models/acolyte.rb +16 -0
  11. data/spec/app/models/actor.rb +19 -0
  12. data/spec/app/models/actor_observer.rb +15 -0
  13. data/spec/app/models/actress.rb +2 -0
  14. data/spec/app/models/address.rb +72 -0
  15. data/spec/app/models/address_component.rb +5 -0
  16. data/spec/app/models/address_number.rb +6 -0
  17. data/spec/app/models/agency.rb +5 -0
  18. data/spec/app/models/agent.rb +12 -0
  19. data/spec/app/models/album.rb +14 -0
  20. data/spec/app/models/alert.rb +5 -0
  21. data/spec/app/models/animal.rb +25 -0
  22. data/spec/app/models/answer.rb +4 -0
  23. data/spec/app/models/appointment.rb +7 -0
  24. data/spec/app/models/article.rb +13 -0
  25. data/spec/app/models/artist.rb +66 -0
  26. data/spec/app/models/artwork.rb +4 -0
  27. data/spec/app/models/augmentation.rb +11 -0
  28. data/spec/app/models/author.rb +6 -0
  29. data/spec/app/models/band.rb +25 -0
  30. data/spec/app/models/bar.rb +9 -0
  31. data/spec/app/models/basic.rb +6 -0
  32. data/spec/app/models/bed.rb +1 -0
  33. data/spec/app/models/big_palette.rb +2 -0
  34. data/spec/app/models/birthday.rb +13 -0
  35. data/spec/app/models/book.rb +12 -0
  36. data/spec/app/models/breed.rb +4 -0
  37. data/spec/app/models/browser.rb +6 -0
  38. data/spec/app/models/building.rb +7 -0
  39. data/spec/app/models/building_address.rb +7 -0
  40. data/spec/app/models/bus.rb +7 -0
  41. data/spec/app/models/business.rb +5 -0
  42. data/spec/app/models/callback_recorder.rb +25 -0
  43. data/spec/app/models/callback_test.rb +9 -0
  44. data/spec/app/models/canvas.rb +25 -0
  45. data/spec/app/models/car.rb +1 -0
  46. data/spec/app/models/cat.rb +8 -0
  47. data/spec/app/models/category.rb +8 -0
  48. data/spec/app/models/child.rb +4 -0
  49. data/spec/app/models/child_doc.rb +22 -0
  50. data/spec/app/models/church.rb +4 -0
  51. data/spec/app/models/circle.rb +3 -0
  52. data/spec/app/models/circuit.rb +4 -0
  53. data/spec/app/models/circus.rb +7 -0
  54. data/spec/app/models/code.rb +5 -0
  55. data/spec/app/models/comment.rb +16 -0
  56. data/spec/app/models/contractor.rb +7 -0
  57. data/spec/app/models/cookie.rb +6 -0
  58. data/spec/app/models/country_code.rb +8 -0
  59. data/spec/app/models/definition.rb +7 -0
  60. data/spec/app/models/description.rb +11 -0
  61. data/spec/app/models/dictionary.rb +10 -0
  62. data/spec/app/models/division.rb +10 -0
  63. data/spec/app/models/doctor.rb +12 -0
  64. data/spec/app/models/dog.rb +6 -0
  65. data/spec/app/models/dokument.rb +5 -0
  66. data/spec/app/models/driver.rb +7 -0
  67. data/spec/app/models/drug.rb +8 -0
  68. data/spec/app/models/email.rb +6 -0
  69. data/spec/app/models/employer.rb +5 -0
  70. data/spec/app/models/entry.rb +6 -0
  71. data/spec/app/models/eraser.rb +1 -0
  72. data/spec/app/models/event.rb +22 -0
  73. data/spec/app/models/exhibition.rb +4 -0
  74. data/spec/app/models/exhibitor.rb +5 -0
  75. data/spec/app/models/eye.rb +9 -0
  76. data/spec/app/models/eye_bowl.rb +9 -0
  77. data/spec/app/models/face.rb +8 -0
  78. data/spec/app/models/favorite.rb +6 -0
  79. data/spec/app/models/filesystem.rb +4 -0
  80. data/spec/app/models/firefox.rb +4 -0
  81. data/spec/app/models/fish.rb +8 -0
  82. data/spec/app/models/folder.rb +7 -0
  83. data/spec/app/models/folder_item.rb +9 -0
  84. data/spec/app/models/fruits.rb +28 -0
  85. data/spec/app/models/game.rb +21 -0
  86. data/spec/app/models/ghost.rb +7 -0
  87. data/spec/app/models/home.rb +4 -0
  88. data/spec/app/models/house.rb +8 -0
  89. data/spec/app/models/html_writer.rb +3 -0
  90. data/spec/app/models/image.rb +22 -0
  91. data/spec/app/models/implant.rb +16 -0
  92. data/spec/app/models/item.rb +12 -0
  93. data/spec/app/models/jar.rb +7 -0
  94. data/spec/app/models/label.rb +40 -0
  95. data/spec/app/models/language.rb +5 -0
  96. data/spec/app/models/lat_lng.rb +15 -0
  97. data/spec/app/models/league.rb +11 -0
  98. data/spec/app/models/learner.rb +2 -0
  99. data/spec/app/models/line_item.rb +6 -0
  100. data/spec/app/models/location.rb +8 -0
  101. data/spec/app/models/login.rb +8 -0
  102. data/spec/app/models/manufacturer.rb +7 -0
  103. data/spec/app/models/meat.rb +4 -0
  104. data/spec/app/models/membership.rb +4 -0
  105. data/spec/app/models/mixed_drink.rb +4 -0
  106. data/spec/app/models/movie.rb +12 -0
  107. data/spec/app/models/my_hash.rb +2 -0
  108. data/spec/app/models/name.rb +23 -0
  109. data/spec/app/models/node.rb +5 -0
  110. data/spec/app/models/note.rb +12 -0
  111. data/spec/app/models/ordered_post.rb +6 -0
  112. data/spec/app/models/ordered_preference.rb +6 -0
  113. data/spec/app/models/oscar.rb +15 -0
  114. data/spec/app/models/override.rb +16 -0
  115. data/spec/app/models/ownable.rb +6 -0
  116. data/spec/app/models/owner.rb +6 -0
  117. data/spec/app/models/page.rb +5 -0
  118. data/spec/app/models/page_question.rb +4 -0
  119. data/spec/app/models/palette.rb +7 -0
  120. data/spec/app/models/paranoid_phone.rb +25 -0
  121. data/spec/app/models/paranoid_post.rb +36 -0
  122. data/spec/app/models/parent.rb +5 -0
  123. data/spec/app/models/parent_doc.rb +6 -0
  124. data/spec/app/models/passport.rb +5 -0
  125. data/spec/app/models/patient.rb +9 -0
  126. data/spec/app/models/pdf_writer.rb +3 -0
  127. data/spec/app/models/pencil.rb +1 -0
  128. data/spec/app/models/person.rb +200 -0
  129. data/spec/app/models/pet.rb +23 -0
  130. data/spec/app/models/pet_owner.rb +6 -0
  131. data/spec/app/models/phone.rb +11 -0
  132. data/spec/app/models/phone_observer.rb +6 -0
  133. data/spec/app/models/pizza.rb +7 -0
  134. data/spec/app/models/player.rb +35 -0
  135. data/spec/app/models/post.rb +42 -0
  136. data/spec/app/models/powerup.rb +11 -0
  137. data/spec/app/models/preference.rb +9 -0
  138. data/spec/app/models/princess.rb +8 -0
  139. data/spec/app/models/product.rb +15 -0
  140. data/spec/app/models/profile.rb +5 -0
  141. data/spec/app/models/pronunciation.rb +5 -0
  142. data/spec/app/models/purchase.rb +4 -0
  143. data/spec/app/models/question.rb +8 -0
  144. data/spec/app/models/quiz.rb +10 -0
  145. data/spec/app/models/rating.rb +8 -0
  146. data/spec/app/models/record.rb +46 -0
  147. data/spec/app/models/registry.rb +4 -0
  148. data/spec/app/models/role.rb +5 -0
  149. data/spec/app/models/root_category.rb +4 -0
  150. data/spec/app/models/sandwich.rb +4 -0
  151. data/spec/app/models/scheduler.rb +7 -0
  152. data/spec/app/models/seo.rb +7 -0
  153. data/spec/app/models/series.rb +4 -0
  154. data/spec/app/models/server.rb +13 -0
  155. data/spec/app/models/service.rb +22 -0
  156. data/spec/app/models/shape.rb +12 -0
  157. data/spec/app/models/shelf.rb +5 -0
  158. data/spec/app/models/shipping_container.rb +5 -0
  159. data/spec/app/models/shop.rb +6 -0
  160. data/spec/app/models/short_agent.rb +4 -0
  161. data/spec/app/models/short_quiz.rb +5 -0
  162. data/spec/app/models/slave.rb +6 -0
  163. data/spec/app/models/song.rb +8 -0
  164. data/spec/app/models/square.rb +4 -0
  165. data/spec/app/models/strategy.rb +3 -0
  166. data/spec/app/models/sub_item.rb +3 -0
  167. data/spec/app/models/survey.rb +5 -0
  168. data/spec/app/models/symptom.rb +6 -0
  169. data/spec/app/models/tag.rb +8 -0
  170. data/spec/app/models/target.rb +5 -0
  171. data/spec/app/models/template.rb +5 -0
  172. data/spec/app/models/thing.rb +9 -0
  173. data/spec/app/models/title.rb +4 -0
  174. data/spec/app/models/tool.rb +8 -0
  175. data/spec/app/models/topping.rb +5 -0
  176. data/spec/app/models/track.rb +38 -0
  177. data/spec/app/models/translation.rb +5 -0
  178. data/spec/app/models/tree.rb +9 -0
  179. data/spec/app/models/truck.rb +3 -0
  180. data/spec/app/models/user.rb +20 -0
  181. data/spec/app/models/user_account.rb +10 -0
  182. data/spec/app/models/validation_callback.rb +10 -0
  183. data/spec/app/models/vehicle.rb +11 -0
  184. data/spec/app/models/version.rb +5 -0
  185. data/spec/app/models/vet_visit.rb +5 -0
  186. data/spec/app/models/video.rb +17 -0
  187. data/spec/app/models/weapon.rb +11 -0
  188. data/spec/app/models/wiki_page.rb +17 -0
  189. data/spec/app/models/word.rb +12 -0
  190. data/spec/app/models/word_origin.rb +11 -0
  191. data/spec/app/models/writer.rb +11 -0
  192. data/spec/config/mongoid.yml +40 -0
  193. data/spec/mongoid/paranoia_spec.rb +715 -0
  194. data/spec/spec_helper.rb +80 -0
  195. metadata +271 -0
@@ -0,0 +1,23 @@
1
+ class Pet
2
+ include Mongoid::Document
3
+ field :name
4
+ field :weight, type: Float, default: 0.0
5
+ embeds_many :vet_visits
6
+ embedded_in :pet_owner
7
+
8
+ after_destroy :set_destroy_flag
9
+ attr_writer :destroy_flag
10
+
11
+ def set_destroy_flag
12
+ @destroy_flag = true
13
+ end
14
+
15
+ def destroy_flag
16
+ @destroy_flag ||= false
17
+ end
18
+
19
+ def visits_count=(count)
20
+ vet_visits.destroy_all
21
+ count.times { vet_visits.new }
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ class PetOwner
2
+ include Mongoid::Document
3
+ field :title
4
+ embeds_one :pet, cascade_callbacks: true
5
+ embeds_one :address, as: :addressable
6
+ end
@@ -0,0 +1,11 @@
1
+ class Phone
2
+ include Mongoid::Document
3
+
4
+ attr_accessor :number_in_observer
5
+
6
+ field :_id, type: String, default: ->{ number }
7
+
8
+ field :number
9
+ embeds_one :country_code
10
+ embedded_in :person
11
+ end
@@ -0,0 +1,6 @@
1
+ class PhoneObserver < Mongoid::Observer
2
+
3
+ def after_save(phone)
4
+ phone.number_in_observer = phone.number
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ class Pizza
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ has_one :topping, autosave: true
5
+ validates_presence_of :topping
6
+ accepts_nested_attributes_for :topping
7
+ end
@@ -0,0 +1,35 @@
1
+ class Player
2
+ include Mongoid::Document
3
+ field :active, type: Boolean
4
+ field :frags, type: Integer
5
+ field :deaths, type: Integer
6
+ field :impressions, type: Integer, default: 0
7
+ field :status
8
+
9
+ scope :active, where(active: true) do
10
+ def extension
11
+ "extension"
12
+ end
13
+ end
14
+
15
+ scope :inactive, where(active: false)
16
+ scope :frags_over, ->(count) { where(:frags.gt => count) }
17
+ scope :deaths_under, ->(count) { where(:deaths.lt => count) }
18
+ scope :deaths_over, ->(count) { where(:deaths.gt => count) }
19
+
20
+ has_many :weapons
21
+ has_one :powerup
22
+
23
+ embeds_many :implants
24
+ embeds_one :augmentation
25
+
26
+ after_find do |doc|
27
+ doc.impressions += 1
28
+ end
29
+
30
+ class << self
31
+ def alive
32
+ where(status: "Alive")
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ class Post
2
+ include Mongoid::Document
3
+
4
+ field :title, type: String
5
+ field :content, type: String
6
+ field :rating, type: Integer
7
+ field :person_title, type: String, default: ->{ person.try(:title) }
8
+
9
+ attr_accessor :before_add_called, :after_add_called, :before_remove_called, :after_remove_called
10
+
11
+ belongs_to :person, counter_cache: true
12
+ belongs_to :author, foreign_key: :author_id, class_name: "User"
13
+ has_and_belongs_to_many :tags, before_add: :before_add_tag, after_add: :after_add_tag, before_remove: :before_remove_tag, after_remove: :after_remove_tag
14
+ has_many :videos, validate: false
15
+
16
+ scope :recent, where(created_at: { "$lt" => Time.now, "$gt" => 30.days.ago })
17
+ scope :posting, where(:content.in => [ "Posting" ])
18
+
19
+ validates_format_of :title, without: /\$\$\$/
20
+
21
+ def before_add_tag(tag)
22
+ @before_add_called = true
23
+ end
24
+
25
+ def after_add_tag(tag)
26
+ @after_add_called = true
27
+ end
28
+
29
+ def before_remove_tag(tag)
30
+ @before_remove_called = true
31
+ end
32
+
33
+ def after_remove_tag(tag)
34
+ @after_remove_called = true
35
+ end
36
+
37
+ class << self
38
+ def old
39
+ where(created_at: { "$lt" => 30.days.ago })
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,11 @@
1
+ class Powerup
2
+ include Mongoid::Document
3
+
4
+ field :name
5
+
6
+ belongs_to :player, inverse_of: :powerup
7
+
8
+ after_build do
9
+ self.name = "Quad Damage (#{player.frags})"
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class Preference
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :value, type: String
5
+ field :ranking, type: Integer
6
+ has_and_belongs_to_many :people, validate: false
7
+ validates_length_of :name, minimum: 2, allow_nil: true
8
+ scope :posting, where(:value.in => [ "Posting" ])
9
+ end
@@ -0,0 +1,8 @@
1
+ class Princess
2
+ include Mongoid::Document
3
+ field :primary_color
4
+ def color
5
+ primary_color.to_s
6
+ end
7
+ validates_presence_of :color
8
+ end
@@ -0,0 +1,15 @@
1
+ class Product
2
+ include Mongoid::Document
3
+ field :description, localize: true
4
+ field :name, localize: true, default: "no translation"
5
+ field :price, type: Integer
6
+ field :brand_name
7
+ field :stores, type: Array
8
+ field :website, localize: true
9
+ alias_attribute :cost, :price
10
+
11
+ validates :name, presence: true
12
+ validates :website, format: { with: URI.regexp, allow_blank: true }
13
+
14
+ embeds_one :seo, as: :seo_tags, cascade_callbacks: true, autobuild: true
15
+ end
@@ -0,0 +1,5 @@
1
+ class Profile
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ shard_key :name
5
+ end
@@ -0,0 +1,5 @@
1
+ class Pronunciation
2
+ include Mongoid::Document
3
+ field :sound, type: String
4
+ embedded_in :word
5
+ end
@@ -0,0 +1,4 @@
1
+ class Purchase
2
+ include Mongoid::Document
3
+ embeds_many :line_items
4
+ end
@@ -0,0 +1,8 @@
1
+ class Question
2
+ include Mongoid::Document
3
+ field :content
4
+ embedded_in :survey
5
+ embeds_many :answers
6
+
7
+ accepts_nested_attributes_for :answers, reject_if: ->(a){ a[:content].blank? }, allow_destroy: true
8
+ end
@@ -0,0 +1,10 @@
1
+ class Quiz
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Created
4
+ field :name, type: String
5
+ field :topic, type: String
6
+ embeds_many :pages
7
+
8
+ attr_accessible :topic, as: [ :default, :admin ]
9
+ attr_accessible :name, as: :default
10
+ end
@@ -0,0 +1,8 @@
1
+ class Rating
2
+ include Mongoid::Document
3
+ field :value, type: Integer
4
+ belongs_to :ratable, polymorphic: true
5
+ has_many :comments
6
+ validates_numericality_of :value, less_than: 100, allow_nil: true
7
+ validates :ratable, associated: true
8
+ end
@@ -0,0 +1,46 @@
1
+ class Record
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+
5
+ field :before_create_called, type: Boolean, default: false
6
+ field :before_save_called, type: Boolean, default: false
7
+ field :before_update_called, type: Boolean, default: false
8
+ field :before_validation_called, type: Boolean, default: false
9
+ field :before_destroy_called, type: Boolean, default: false
10
+
11
+ embedded_in :band
12
+ embeds_many :tracks, cascade_callbacks: true
13
+ embeds_many :notes, as: :noteable, cascade_callbacks: true, validate: false
14
+
15
+ before_create :before_create_stub
16
+ before_save :before_save_stub
17
+ before_update :before_update_stub
18
+ before_validation :before_validation_stub
19
+ before_destroy :before_destroy_stub
20
+
21
+ after_destroy :access_band
22
+
23
+ def before_create_stub
24
+ self.before_create_called = true
25
+ end
26
+
27
+ def before_save_stub
28
+ self.before_save_called = true
29
+ end
30
+
31
+ def before_update_stub
32
+ self.before_update_called = true
33
+ end
34
+
35
+ def before_validation_stub
36
+ self.before_validation_called = true
37
+ end
38
+
39
+ def before_destroy_stub
40
+ self.before_destroy_called = true
41
+ end
42
+
43
+ def access_band
44
+ band.name
45
+ end
46
+ end
@@ -0,0 +1,4 @@
1
+ class Registry
2
+ include Mongoid::Document
3
+ field :data, type: Moped::BSON::Binary
4
+ end
@@ -0,0 +1,5 @@
1
+ class Role
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ recursively_embeds_many
5
+ end
@@ -0,0 +1,4 @@
1
+ class RootCategory
2
+ include Mongoid::Document
3
+ embeds_many :categories
4
+ end
@@ -0,0 +1,4 @@
1
+ class Sandwich
2
+ include Mongoid::Document
3
+ has_and_belongs_to_many :meats
4
+ end
@@ -0,0 +1,7 @@
1
+ class Scheduler
2
+ include Mongoid::Document
3
+
4
+ def strategy
5
+ Strategy.new
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class Seo
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps
4
+ field :title, type: String
5
+
6
+ embedded_in :seo_tags, polymorphic: true
7
+ end
@@ -0,0 +1,4 @@
1
+ class Series
2
+ include Mongoid::Document
3
+ has_many :books
4
+ end
@@ -0,0 +1,13 @@
1
+ class Server
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :after, type: Boolean, default: false
5
+ belongs_to :node
6
+ embeds_many :filesystems, validate: false
7
+ accepts_nested_attributes_for :filesystems
8
+ validates :name, presence: { allow_blank: false }
9
+
10
+ after_create do |server|
11
+ server.update_attribute(:after, !after)
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ class Service
2
+ include Mongoid::Document
3
+ field :sid
4
+ field :before_destroy_called, type: Boolean, default: false
5
+ field :after_destroy_called, type: Boolean, default: false
6
+ field :after_initialize_called, type: Boolean, default: false
7
+ embedded_in :person
8
+ belongs_to :target, class_name: "User"
9
+ validates_numericality_of :sid
10
+
11
+ before_destroy do |doc|
12
+ doc.before_destroy_called = true
13
+ end
14
+
15
+ after_destroy do |doc|
16
+ doc.after_destroy_called = true
17
+ end
18
+
19
+ after_initialize do |doc|
20
+ doc.after_initialize_called = true
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ class Shape
2
+ include Mongoid::Document
3
+ field :x, type: Integer, default: 0
4
+ field :y, type: Integer, default: 0
5
+
6
+ embedded_in :canvas
7
+
8
+ def render; end
9
+ end
10
+
11
+ require "app/models/circle"
12
+ require "app/models/square"
@@ -0,0 +1,5 @@
1
+ class Shelf
2
+ include Mongoid::Document
3
+ field :level, type: Integer
4
+ recursively_embeds_one
5
+ end
@@ -0,0 +1,5 @@
1
+ class ShippingContainer
2
+ include Mongoid::Document
3
+ has_many :vehicles
4
+ accepts_nested_attributes_for :vehicles
5
+ end
@@ -0,0 +1,6 @@
1
+ class Shop
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ has_and_belongs_to_many :followers, inverse_of: :followed_shops, class_name: "User"
5
+ belongs_to :user
6
+ end
@@ -0,0 +1,4 @@
1
+ class ShortAgent
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Updated::Short
4
+ end
@@ -0,0 +1,5 @@
1
+ class ShortQuiz
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Created::Short
4
+ field :name, type: String
5
+ end
@@ -0,0 +1,6 @@
1
+ class Slave
2
+ include Mongoid::Document
3
+ field :first_name
4
+ field :last_name
5
+ embeds_many :address_numbers
6
+ end