mongoid-paranoia 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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