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,4 @@
1
+ class Church
2
+ include Mongoid::Document
3
+ has_many :acolytes, validate: false
4
+ end
@@ -0,0 +1,3 @@
1
+ class Circle < Shape
2
+ field :radius, type: Integer, default: 0
3
+ end
@@ -0,0 +1,4 @@
1
+ class Circuit
2
+ include Mongoid::Document
3
+ embeds_many :buses, order: [[ :saturday, :asc], [ :departure_time, :asc], [ :number, :asc ]]
4
+ end
@@ -0,0 +1,7 @@
1
+ class Circus
2
+ include Mongoid::Document
3
+
4
+ field :name
5
+
6
+ embeds_many :animals
7
+ end
@@ -0,0 +1,5 @@
1
+ class Code
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ embedded_in :address
5
+ end
@@ -0,0 +1,16 @@
1
+ class Comment
2
+ include Mongoid::Document
3
+
4
+ field :title, type: String
5
+ field :text, type: String
6
+
7
+ belongs_to :account
8
+ belongs_to :movie
9
+ belongs_to :rating
10
+ belongs_to :wiki_page
11
+
12
+ belongs_to :commentable, polymorphic: true
13
+
14
+ validates :title, presence: true
15
+ validates :movie, :rating, associated: true
16
+ end
@@ -0,0 +1,7 @@
1
+ class Contractor
2
+ include Mongoid::Document
3
+ attr_accessible
4
+ attr_accessible :name, as: :admin
5
+ embedded_in :building
6
+ field :name, type: String
7
+ end
@@ -0,0 +1,6 @@
1
+ class Cookie
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Updated
4
+
5
+ belongs_to :jar
6
+ end
@@ -0,0 +1,8 @@
1
+ class CountryCode
2
+ include Mongoid::Document
3
+
4
+ field :_id, type: Integer, default: ->{ code }
5
+
6
+ field :code, type: Integer
7
+ embedded_in :phone_number, class_name: "Phone"
8
+ end
@@ -0,0 +1,7 @@
1
+ class Definition
2
+ include Mongoid::Document
3
+ field :description, type: String
4
+ field :part, type: String
5
+ field :regular, type: Boolean
6
+ embedded_in :word
7
+ end
@@ -0,0 +1,11 @@
1
+ class Description
2
+ include Mongoid::Document
3
+
4
+ field :details
5
+
6
+ belongs_to :user
7
+ belongs_to :updater, class_name: 'User'
8
+
9
+ validates :user, associated: true
10
+ validates :details, presence: true
11
+ end
@@ -0,0 +1,10 @@
1
+ class Dictionary
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :publisher, type: String
5
+ field :year, type: Integer
6
+ field :published, type: Time
7
+ field :description, type: String, localize: true
8
+ field :l, type: String, as: :language
9
+ has_many :words, validate: false
10
+ end
@@ -0,0 +1,10 @@
1
+ class Division
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ embedded_in :league
5
+ before_destroy :update_parent
6
+
7
+ def update_parent
8
+ league.name = "Destroyed"
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ class Doctor < Person
2
+ field :specialty, as: :spec
3
+ has_and_belongs_to_many :users, validate: false, inverse_of: nil
4
+
5
+ def specialty=(text)
6
+ users.push(User.new)
7
+ super
8
+ end
9
+ end
10
+
11
+ class Doktor < Person
12
+ end
@@ -0,0 +1,6 @@
1
+ class Dog
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ has_and_belongs_to_many :breeds
5
+ default_scope asc(:name)
6
+ end
@@ -0,0 +1,5 @@
1
+ class Dokument
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps
4
+ embeds_many :addresses, as: :addressable, validate: false
5
+ end
@@ -0,0 +1,7 @@
1
+ class Driver
2
+ include Mongoid::Document
3
+ has_one :vehicle
4
+ accepts_nested_attributes_for :vehicle
5
+ end
6
+
7
+ require "app/models/learner"
@@ -0,0 +1,8 @@
1
+ class Drug
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :generic, type: Boolean
5
+ belongs_to :person, counter_cache: true
6
+ attr_accessible :name, as: [ :default, :admin ]
7
+ attr_accessible :person_id
8
+ end
@@ -0,0 +1,6 @@
1
+ class Email
2
+ include Mongoid::Document
3
+ field :address
4
+ validates_uniqueness_of :address
5
+ embedded_in :patient
6
+ end
@@ -0,0 +1,5 @@
1
+ class Employer
2
+ def id
3
+ "1"
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class Entry
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :body, type: String
5
+ recursively_embeds_many
6
+ end
@@ -0,0 +1 @@
1
+ class Eraser < Tool; end
@@ -0,0 +1,22 @@
1
+ class Event
2
+ include Mongoid::Document
3
+
4
+ field :title
5
+ field :date, type: Date
6
+ has_and_belongs_to_many \
7
+ :administrators,
8
+ class_name: 'Person',
9
+ inverse_of: :administrated_events,
10
+ dependent: :nullify
11
+ belongs_to :owner
12
+
13
+ def self.each_day(start_date, end_date)
14
+ groups = only(:date).asc(:date).where(:date.gte => start_date, :date.lte => end_date).group
15
+ groups.each do |hash|
16
+ yield(hash["date"], hash["group"])
17
+ end
18
+ end
19
+
20
+ scope :best, where(:kind.in => [ "party", "concert" ])
21
+ scope :by_kind, ->(kind){ where(:kind.in => [kind]) }
22
+ end
@@ -0,0 +1,4 @@
1
+ class Exhibition
2
+ include Mongoid::Document
3
+ has_many :exhibitors
4
+ end
@@ -0,0 +1,5 @@
1
+ class Exhibitor
2
+ include Mongoid::Document
3
+ belongs_to :exhibition
4
+ has_and_belongs_to_many :artworks
5
+ end
@@ -0,0 +1,9 @@
1
+ class Eye
2
+ include Mongoid::Document
3
+
4
+ field :pupil_dilation, type: Integer
5
+
6
+ belongs_to :eyeable, polymorphic: true
7
+
8
+ belongs_to :suspended_in, polymorphic: true
9
+ end
@@ -0,0 +1,9 @@
1
+ class EyeBowl
2
+ include Mongoid::Document
3
+
4
+ has_many :blue_eyes, class_name: "Eye", as: :eyeable
5
+ has_many :brown_eyes, class_name: "Eye", as: :eyeable
6
+
7
+ has_one :face, as: :suspended_in
8
+ has_one :eye, as: :suspended_in
9
+ end
@@ -0,0 +1,8 @@
1
+ class Face
2
+ include Mongoid::Document
3
+
4
+ has_one :left_eye, class_name: "Eye", as: :eyeable
5
+ has_one :right_eye, class_name: "Eye", as: :eyeable
6
+
7
+ belongs_to :suspended_in, polymorphic: true
8
+ end
@@ -0,0 +1,6 @@
1
+ class Favorite
2
+ include Mongoid::Document
3
+ field :title
4
+ validates_uniqueness_of :title, case_sensitive: false
5
+ embedded_in :perp, inverse_of: :favorites
6
+ end
@@ -0,0 +1,4 @@
1
+ class Filesystem
2
+ include Mongoid::Document
3
+ embedded_in :server
4
+ end
@@ -0,0 +1,4 @@
1
+ class Firefox < Browser
2
+ field :user_agent
3
+ def render; end
4
+ end
@@ -0,0 +1,8 @@
1
+ class Fish
2
+ include Mongoid::Document
3
+ include Mongoid::Paranoia
4
+
5
+ def self.fresh
6
+ where(fresh: true)
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ class Folder
2
+ include Mongoid::Document
3
+
4
+ field :name, type: String
5
+ has_many :folder_items
6
+
7
+ end
@@ -0,0 +1,9 @@
1
+ class FolderItem
2
+
3
+ include Mongoid::Document
4
+
5
+ belongs_to :folder
6
+ field :name, type: String
7
+
8
+ validates :name, uniqueness: {scope: :folder_id}
9
+ end
@@ -0,0 +1,28 @@
1
+ module Fruits
2
+ class Apple
3
+ include Mongoid::Document
4
+ has_many :bananas, class_name: "Fruits::Banana"
5
+ recursively_embeds_many
6
+ end
7
+
8
+ class Banana
9
+ include Mongoid::Document
10
+ belongs_to :apple, class_name: "Fruits::Apple"
11
+ end
12
+
13
+ class Pineapple
14
+ include Mongoid::Document
15
+ recursively_embeds_many cascade_callbacks: true
16
+ end
17
+
18
+ class Mango
19
+ include Mongoid::Document
20
+ recursively_embeds_one cascade_callbacks: true
21
+ end
22
+
23
+ module Big
24
+ class Ananas
25
+ include Mongoid::Document
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ class Game
2
+ include Mongoid::Document
3
+
4
+ field :high_score, type: Integer, default: 500
5
+ field :score, type: Integer, default: 0
6
+ field :name
7
+
8
+ belongs_to :person, index: true, validate: true
9
+ belongs_to :parent, class_name: "Game", foreign_key: "parent-id"
10
+ has_one :video, validate: false
11
+ has_many :ratings, as: :ratable, dependent: :nullify
12
+ accepts_nested_attributes_for :person
13
+
14
+ validates_format_of :name, without: /\$\$\$/
15
+
16
+ attr_protected :_id
17
+
18
+ set_callback(:initialize, :after) do |document|
19
+ write_attribute("name", "Testing") unless name
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ class Ghost
2
+ include Mongoid::Document
3
+
4
+ field :name, type: String
5
+
6
+ belongs_to :movie, autosave: true
7
+ end
@@ -0,0 +1,4 @@
1
+ class Home
2
+ include Mongoid::Document
3
+ belongs_to :person
4
+ end
@@ -0,0 +1,8 @@
1
+ class House
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :model, type: String
5
+ attr_accessible :name, as: [ :default, :admin ]
6
+
7
+ default_scope asc(:name)
8
+ end
@@ -0,0 +1,3 @@
1
+ class HtmlWriter < Writer
2
+ def write; end
3
+ end
@@ -0,0 +1,22 @@
1
+ class Image
2
+ attr_reader :name
3
+
4
+ def initialize(name)
5
+ @name = name
6
+ end
7
+
8
+ def self.demongoize(value)
9
+ Image.new(value)
10
+ end
11
+
12
+ def mongoize
13
+ name
14
+ end
15
+
16
+ def hash_is_hash
17
+ {}.is_a?(Hash)
18
+ end
19
+ end
20
+
21
+ class Thumbnail < Image
22
+ end
@@ -0,0 +1,16 @@
1
+ class Implant
2
+ include Mongoid::Document
3
+
4
+ field :name
5
+ field :impressions, type: Integer, default: 0
6
+
7
+ embedded_in :player, inverse_of: :implants
8
+
9
+ after_build do |doc|
10
+ doc.name = "Cochlear Implant (#{player.frags})"
11
+ end
12
+
13
+ after_find do |doc|
14
+ doc.impressions += 1
15
+ end
16
+ end