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,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
@@ -0,0 +1,12 @@
1
+ class Item
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :is_rss, type: Boolean, default: false
5
+ field :user_login, type: String
6
+
7
+ attr_protected :title, as: [:default, :parser]
8
+ attr_protected :is_rss, as: :parser
9
+ attr_protected :user_login
10
+ end
11
+
12
+ require "app/models/sub_item"
@@ -0,0 +1,7 @@
1
+ class Jar
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Updated
4
+
5
+ field :_id, type: Integer
6
+ has_many :cookies, class_name: "Cookie"
7
+ end
@@ -0,0 +1,40 @@
1
+ class Label
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Updated::Short
4
+
5
+ field :name, type: String
6
+ field :after_create_called, type: Boolean, default: false
7
+ field :after_save_called, type: Boolean, default: false
8
+ field :after_update_called, type: Boolean, default: false
9
+ field :after_validation_called, type: Boolean, default: false
10
+
11
+ embedded_in :artist
12
+ embedded_in :band
13
+
14
+ after_create :after_create_stub
15
+ after_save :after_save_stub
16
+ after_update :after_update_stub
17
+ after_validation :after_validation_stub
18
+ before_validation :cleanup
19
+
20
+ def after_create_stub
21
+ self.after_create_called = true
22
+ end
23
+
24
+ def after_save_stub
25
+ self.after_save_called = true
26
+ end
27
+
28
+ def after_update_stub
29
+ self.after_update_called = true
30
+ end
31
+
32
+ def after_validation_stub
33
+ self.after_validation_called = true
34
+ end
35
+
36
+ private
37
+ def cleanup
38
+ self.name = self.name.downcase.capitalize
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ class Language
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ embedded_in :translatable, polymorphic: true
5
+ end
@@ -0,0 +1,15 @@
1
+ class LatLng
2
+ attr_accessor :lat, :lng
3
+
4
+ def self.demongoize(object)
5
+ LatLng.new(object[1], object[0])
6
+ end
7
+
8
+ def initialize(lat, lng)
9
+ @lat, @lng = lat, lng
10
+ end
11
+
12
+ def mongoize
13
+ [ lng, lat ]
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ class League
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ embeds_many :divisions
5
+ accepts_nested_attributes_for :divisions, allow_destroy: true
6
+ before_destroy :destroy_children
7
+
8
+ def destroy_children
9
+ divisions.destroy_all
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ class Learner < Driver
2
+ end
@@ -0,0 +1,6 @@
1
+ class LineItem
2
+ include Mongoid::Document
3
+ embedded_in :purchase
4
+ belongs_to :product, polymorphic: true
5
+ validates :product, presence: true
6
+ end
@@ -0,0 +1,8 @@
1
+ class Location
2
+ include Mongoid::Document
3
+ field :name
4
+ field :info, type: Hash
5
+ field :occupants, type: Array
6
+ field :number, type: Integer
7
+ embedded_in :address
8
+ end
@@ -0,0 +1,8 @@
1
+ class Login
2
+ include Mongoid::Document
3
+
4
+ field :_id, type: String, default: ->{ username }
5
+
6
+ field :username, type: String
7
+ field :application_id, type: Integer
8
+ end
@@ -0,0 +1,7 @@
1
+ class Manufacturer
2
+ include Mongoid::Document
3
+
4
+ field :products, type: Array, default: []
5
+
6
+ validates_presence_of :products
7
+ end
@@ -0,0 +1,4 @@
1
+ class Meat
2
+ include Mongoid::Document
3
+ has_and_belongs_to_many :sandwiches
4
+ end
@@ -0,0 +1,4 @@
1
+ class Membership
2
+ include Mongoid::Document
3
+ embedded_in :account
4
+ end
@@ -0,0 +1,4 @@
1
+ class MixedDrink
2
+ include Mongoid::Document
3
+ field :name
4
+ end
@@ -0,0 +1,12 @@
1
+ class Movie
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :poster, type: Image
5
+ field :poster_thumb, type: Thumbnail
6
+ has_many :ratings, as: :ratable, dependent: :nullify
7
+ has_many :comments
8
+
9
+ def global_set
10
+ Set.new
11
+ end
12
+ end
@@ -0,0 +1,2 @@
1
+ class MyHash < ::Hash
2
+ end
@@ -0,0 +1,23 @@
1
+ class Name
2
+ include Mongoid::Document
3
+
4
+ field :_id, type: String, default: ->{
5
+ "#{first_name}-#{last_name}"
6
+ }
7
+
8
+ field :first_name, type: String
9
+ field :last_name, type: String
10
+ field :parent_title, type: String
11
+
12
+ embeds_many :translations, validate: false
13
+ embeds_one :language, as: :translatable, validate: false
14
+ embedded_in :namable, polymorphic: true
15
+
16
+ accepts_nested_attributes_for :language
17
+
18
+ attr_protected :_id, :id
19
+
20
+ def set_parent=(set = false)
21
+ self.parent_title = namable.title if set
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ class Node
2
+ include Mongoid::Document
3
+ has_many :servers
4
+ accepts_nested_attributes_for :servers
5
+ end
@@ -0,0 +1,12 @@
1
+ class Note
2
+ include Mongoid::Document
3
+ field :text, type: String
4
+ field :saved, type: Boolean, default: false
5
+ embedded_in :noteable, polymorphic: true
6
+
7
+ after_save :update_saved
8
+
9
+ def update_saved
10
+ self.saved = true
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ class OrderedPost
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :rating, type: Integer
5
+ belongs_to :person
6
+ end
@@ -0,0 +1,6 @@
1
+ class OrderedPreference
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :value, type: String
5
+ has_and_belongs_to_many :people, validate: false
6
+ end
@@ -0,0 +1,15 @@
1
+ class Oscar
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :destroy_after_save, type: Boolean, default: false
5
+ before_save :complain
6
+
7
+ def complain
8
+ if destroy_after_save?
9
+ destroy
10
+ true
11
+ else
12
+ false
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ class Override
2
+ include Mongoid::Document
3
+
4
+ def self.public_method
5
+ end
6
+
7
+ protected
8
+
9
+ def self.protected_method
10
+ end
11
+
12
+ private
13
+
14
+ def self.private_method
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ module Ownable
2
+ extend ActiveSupport::Concern
3
+ included do
4
+ belongs_to :user
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class Owner
2
+ include Mongoid::Document
3
+ field :name
4
+ has_many :events
5
+ embeds_many :birthdays
6
+ end
@@ -0,0 +1,5 @@
1
+ class Page
2
+ include Mongoid::Document
3
+ embedded_in :quiz
4
+ embeds_many :page_questions
5
+ end
@@ -0,0 +1,4 @@
1
+ class PageQuestion
2
+ include Mongoid::Document
3
+ embedded_in :page
4
+ end
@@ -0,0 +1,7 @@
1
+ class Palette
2
+ include Mongoid::Document
3
+ embedded_in :canvas
4
+ embeds_many :tools
5
+ end
6
+
7
+ require "app/models/big_palette"
@@ -0,0 +1,25 @@
1
+ class ParanoidPhone
2
+ include Mongoid::Document
3
+ include Mongoid::Paranoia
4
+
5
+ attr_accessor :after_destroy_called, :before_destroy_called
6
+
7
+ field :number, type: String
8
+
9
+ embedded_in :person
10
+
11
+ before_destroy :before_destroy_stub, :halt_me
12
+ after_destroy :after_destroy_stub
13
+
14
+ def before_destroy_stub
15
+ self.before_destroy_called = true
16
+ end
17
+
18
+ def after_destroy_stub
19
+ self.after_destroy_called = true
20
+ end
21
+
22
+ def halt_me
23
+ person.age == 42 ? false : true
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ class ParanoidPost
2
+ include Mongoid::Document
3
+ include Mongoid::Versioning
4
+ include Mongoid::Paranoia
5
+
6
+ max_versions 2
7
+
8
+ field :title, type: String
9
+
10
+ attr_accessor :after_destroy_called, :before_destroy_called
11
+
12
+ belongs_to :person
13
+
14
+ has_and_belongs_to_many :tags
15
+ has_many :authors, dependent: :delete
16
+ has_many :titles, dependent: :restrict
17
+
18
+ scope :recent, where(created_at: { "$lt" => Time.now, "$gt" => 30.days.ago })
19
+
20
+ before_destroy :before_destroy_stub
21
+ after_destroy :after_destroy_stub
22
+
23
+ def before_destroy_stub
24
+ self.before_destroy_called = true
25
+ end
26
+
27
+ def after_destroy_stub
28
+ self.after_destroy_called = true
29
+ end
30
+
31
+ class << self
32
+ def old
33
+ where(created_at: { "$lt" => 30.days.ago })
34
+ end
35
+ end
36
+ end