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,9 @@
1
+ class CallbackTest
2
+ include Mongoid::Document
3
+ around_save :execute
4
+
5
+ def execute
6
+ yield(self)
7
+ true
8
+ end
9
+ end
@@ -0,0 +1,25 @@
1
+ class Canvas
2
+ include Mongoid::Document
3
+ field :name
4
+ embeds_many :shapes
5
+ embeds_one :writer
6
+ embeds_one :palette
7
+
8
+ field :foo, type: String, default: ->{ "original" }
9
+
10
+ has_many :comments, as: :commentable
11
+
12
+ accepts_nested_attributes_for :shapes
13
+ accepts_nested_attributes_for :writer
14
+
15
+ def render
16
+ shapes.each { |shape| render }
17
+ end
18
+
19
+ class Test < Canvas
20
+
21
+ field :foo, type: String, default: ->{ "overridden" }
22
+ end
23
+ end
24
+
25
+ require "app/models/browser"
@@ -0,0 +1 @@
1
+ class Car < Vehicle; end
@@ -0,0 +1,8 @@
1
+ class Cat
2
+ include Mongoid::Document
3
+
4
+ field :name
5
+
6
+ belongs_to :person, primary_key: :username
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ class Category
2
+ include Mongoid::Document
3
+ embedded_in :root_category
4
+ embedded_in :category
5
+ embeds_many :categories
6
+
7
+ field :name
8
+ end
@@ -0,0 +1,4 @@
1
+ class Child
2
+ include Mongoid::Document
3
+ embedded_in :parent, inverse_of: :childable, polymorphic: true
4
+ end
@@ -0,0 +1,22 @@
1
+ class ChildDoc
2
+ include Mongoid::Document
3
+
4
+ embedded_in :parent_doc
5
+
6
+ attr_writer :position
7
+
8
+ after_save :update_position
9
+
10
+ def position
11
+ exsited_position = parent_doc.children_order.index(id)
12
+ exsited_position ? exsited_position + 1 : parent_doc.aspects.size
13
+ end
14
+
15
+ def update_position
16
+ if @position && (@position.to_i > 0)
17
+ parent_doc.children_order.delete(id)
18
+ parent_doc.children_order.insert(@position.to_i - 1, id)
19
+ parent_doc.save
20
+ end
21
+ end
22
+ end
@@ -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