mongoid-versioning 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 +2 -0
  3. data/Gemfile +7 -0
  4. data/README.md +73 -0
  5. data/Rakefile +7 -0
  6. data/lib/mongoid/versioning.rb +217 -0
  7. data/lib/mongoid/versioning/version.rb +5 -0
  8. data/mongoid-versioning.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/versioning_spec.rb +540 -0
  194. data/spec/spec_helper.rb +80 -0
  195. metadata +271 -0
@@ -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
@@ -0,0 +1,8 @@
1
+ class Song
2
+ include Mongoid::Document
3
+ field :title
4
+ embedded_in :artist
5
+
6
+ attr_accessor :before_add_called
7
+
8
+ end
@@ -0,0 +1,4 @@
1
+ class Square < Shape
2
+ field :width, type: Integer, default: 0
3
+ field :height, type: Integer, default: 0
4
+ end
@@ -0,0 +1,3 @@
1
+ class Strategy
2
+ include Mongoid::Document
3
+ end
@@ -0,0 +1,3 @@
1
+ class SubItem < Item
2
+ embedded_in :parent
3
+ end
@@ -0,0 +1,5 @@
1
+ class Survey
2
+ include Mongoid::Document
3
+ embeds_many :questions
4
+ accepts_nested_attributes_for :questions, reject_if: ->(a){ a[:content].blank? }, allow_destroy: true
5
+ end
@@ -0,0 +1,6 @@
1
+ class Symptom
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ embedded_in :person
5
+ default_scope asc(:name)
6
+ end
@@ -0,0 +1,8 @@
1
+ class Tag
2
+ include Mongoid::Document
3
+ field :text, type: String
4
+ has_and_belongs_to_many :actors
5
+ has_and_belongs_to_many :articles
6
+ has_and_belongs_to_many :posts
7
+ has_and_belongs_to_many :related, class_name: "Tag", inverse_of: :related
8
+ end
@@ -0,0 +1,5 @@
1
+ class Target
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ embedded_in :targetable, polymorphic: true
5
+ end
@@ -0,0 +1,5 @@
1
+ class Template
2
+ include Mongoid::Document
3
+ field :active, type: Boolean, default: false
4
+ validates :active, presence: true
5
+ end
@@ -0,0 +1,9 @@
1
+ class Thing
2
+ include Mongoid::Document
3
+ before_destroy :dont_do_it
4
+ embedded_in :actor
5
+
6
+ def dont_do_it
7
+ false
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ class Title
2
+ include Mongoid::Document
3
+ belongs_to :paranoid_post
4
+ end
@@ -0,0 +1,8 @@
1
+ class Tool
2
+ include Mongoid::Document
3
+ embedded_in :palette
4
+ accepts_nested_attributes_for :palette
5
+ end
6
+
7
+ require "app/models/eraser"
8
+ require "app/models/pencil"
@@ -0,0 +1,5 @@
1
+ class Topping
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ belongs_to :pizza
5
+ end
@@ -0,0 +1,38 @@
1
+ class Track
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 :record
12
+
13
+ before_create :before_create_stub
14
+ before_save :before_save_stub
15
+ before_update :before_update_stub
16
+ before_validation :before_validation_stub
17
+ before_destroy :before_destroy_stub
18
+
19
+ def before_create_stub
20
+ self.before_create_called = true
21
+ end
22
+
23
+ def before_save_stub
24
+ self.before_save_called = true
25
+ end
26
+
27
+ def before_update_stub
28
+ self.before_update_called = true
29
+ end
30
+
31
+ def before_validation_stub
32
+ self.before_validation_called = true
33
+ end
34
+
35
+ def before_destroy_stub
36
+ self.before_destroy_called = true
37
+ end
38
+ end
@@ -0,0 +1,5 @@
1
+ class Translation
2
+ include Mongoid::Document
3
+ field :language
4
+ embedded_in :name
5
+ end
@@ -0,0 +1,9 @@
1
+ class Tree
2
+ include Mongoid::Document
3
+
4
+ field :name
5
+ field :evergreen, type: Boolean
6
+
7
+ scope :verdant, where(evergreen: true)
8
+ default_scope asc(:name)
9
+ end
@@ -0,0 +1,3 @@
1
+ class Truck < Vehicle
2
+ embeds_one :bed
3
+ end
@@ -0,0 +1,20 @@
1
+ class User
2
+ include Mongoid::Document
3
+
4
+ field :name
5
+ field :last_login, type: DateTime
6
+ field :account_expires, type: Date
7
+
8
+ has_one :account, foreign_key: :creator_id, validate: false
9
+ has_many :posts, foreign_key: :author_id, validate: false
10
+ has_many :descriptions
11
+
12
+ has_and_belongs_to_many :followed_shops, inverse_of: :followers, class_name: "Shop"
13
+ has_and_belongs_to_many :businesses, class_name: "Business", validate: false
14
+ has_one :shop
15
+
16
+ belongs_to :next, class_name: "User"
17
+
18
+ accepts_nested_attributes_for :posts
19
+ index name: 1
20
+ end
@@ -0,0 +1,10 @@
1
+ class UserAccount
2
+ include Mongoid::Document
3
+ field :username, type: String
4
+ field :name, type: String
5
+ field :email, type: String
6
+ validates_uniqueness_of :username, message: "is not unique"
7
+ validates_uniqueness_of :email, message: "is not unique", case_sensitive: false
8
+ validates_length_of :name, minimum: 2, allow_nil: true
9
+ has_and_belongs_to_many :people
10
+ end
@@ -0,0 +1,10 @@
1
+ class ValidationCallback
2
+ include Mongoid::Document
3
+ field :history, type: Array, default: []
4
+ validate do
5
+ self.history << :validate
6
+ end
7
+
8
+ before_validation { self.history << :before_validation }
9
+ after_validation { self.history << :after_validation }
10
+ end