mongoid-versioning 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 +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