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,2 @@
1
+ class Actress < Actor
2
+ end
@@ -0,0 +1,72 @@
1
+ class Address
2
+ include Mongoid::Document
3
+
4
+ field :_id, type: String, default: ->{ street.try(:parameterize) }
5
+
6
+ attr_accessor :mode
7
+
8
+ field :address_type
9
+ field :number, type: Integer
10
+ field :street
11
+ field :city
12
+ field :state
13
+ field :post_code
14
+ field :parent_title
15
+ field :services, type: Array
16
+ field :latlng, type: Array
17
+ field :map, type: Hash
18
+ field :move_in, type: DateTime
19
+ field :s, type: String, as: :suite
20
+ field :name, localize: true
21
+
22
+ embeds_many :locations, validate: false
23
+ embeds_one :code, validate: false
24
+ embeds_one :target, as: :targetable, validate: false
25
+
26
+ embedded_in :addressable, polymorphic: true do
27
+ def extension
28
+ "Testing"
29
+ end
30
+ def doctor?
31
+ title == "Dr"
32
+ end
33
+ end
34
+
35
+ accepts_nested_attributes_for :code, :target
36
+ accepts_nested_attributes_for :locations, allow_destroy: true
37
+
38
+ belongs_to :account
39
+ belongs_to :band
40
+
41
+ scope :without_postcode, where(postcode: nil)
42
+ scope :rodeo, where(street: "Rodeo Dr") do
43
+ def mansion?
44
+ all? { |address| address.street == "Rodeo Dr" }
45
+ end
46
+ end
47
+
48
+ validates_presence_of :street, on: :update
49
+ validates_format_of :street, with: /\D/, allow_nil: true
50
+
51
+ def set_parent=(set = false)
52
+ self.parent_title = addressable.title if set
53
+ end
54
+
55
+ def <=>(other)
56
+ street <=> other.street
57
+ end
58
+
59
+ class << self
60
+ def california
61
+ where(state: "CA")
62
+ end
63
+
64
+ def homes
65
+ where(address_type: "Home")
66
+ end
67
+
68
+ def streets
69
+ all.map(&:street)
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,5 @@
1
+ class AddressComponent
2
+ include Mongoid::Document
3
+ field :street, type: String
4
+ embedded_in :person
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddressNumber
2
+ include Mongoid::Document
3
+ field :country_code, type: Integer, default: 1
4
+ field :number
5
+ embedded_in :slave
6
+ end
@@ -0,0 +1,5 @@
1
+ class Agency
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Updated
4
+ has_many :agents, validate: false
5
+ end
@@ -0,0 +1,12 @@
1
+ class Agent
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Updated
4
+ field :title, type: String
5
+ field :number, type: String
6
+ field :dob, type: Time
7
+ embeds_many :names, as: :namable
8
+ belongs_to :game
9
+ belongs_to :agency, touch: true, autobuild: true
10
+
11
+ has_and_belongs_to_many :accounts
12
+ end
@@ -0,0 +1,14 @@
1
+ class Album
2
+ include Mongoid::Document
3
+
4
+ belongs_to :artist
5
+ before_destroy :set_parent_name
6
+
7
+ attr_accessor :before_add_called
8
+
9
+ private
10
+
11
+ def set_parent_name
12
+ artist.name = "destroyed"
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ class Alert
2
+ include Mongoid::Document
3
+ field :message, type: String
4
+ belongs_to :account
5
+ end
@@ -0,0 +1,25 @@
1
+ class Animal
2
+ include Mongoid::Document
3
+
4
+ field :_id, type: String, default: ->{ name.try(:parameterize) }
5
+
6
+ field :name
7
+ field :height, type: Integer
8
+ field :weight, type: Integer
9
+ field :tags, type: Array
10
+
11
+ embedded_in :person
12
+ embedded_in :circus
13
+
14
+ validates_format_of :name, without: /\$\$\$/
15
+
16
+ accepts_nested_attributes_for :person
17
+
18
+ def tag_list
19
+ tags.join(", ")
20
+ end
21
+
22
+ def tag_list=(_tag_list)
23
+ self.tags = _tag_list.split(",").map(&:strip)
24
+ end
25
+ end
@@ -0,0 +1,4 @@
1
+ class Answer
2
+ include Mongoid::Document
3
+ embedded_in :question
4
+ end
@@ -0,0 +1,7 @@
1
+ class Appointment
2
+ include Mongoid::Document
3
+ field :active, type: Boolean, default: true
4
+ field :timed, type: Boolean, default: true
5
+ embedded_in :person
6
+ default_scope where(active: true)
7
+ end
@@ -0,0 +1,13 @@
1
+ class Article
2
+ include Mongoid::Document
3
+
4
+ field :title, type: String
5
+ field :is_rss, type: Boolean, default: false
6
+ field :user_login, type: String
7
+
8
+ attr_accessible :title, as: [:default, :parser]
9
+ attr_accessible :is_rss, as: :parser
10
+ attr_accessible :user_login
11
+ has_and_belongs_to_many :tags, validate: false
12
+ has_and_belongs_to_many :preferences, inverse_of: nil, validate: false
13
+ end
@@ -0,0 +1,66 @@
1
+ class Artist
2
+ include Mongoid::Document
3
+
4
+ attr_accessor :before_add_called, :after_add_called, :before_add_referenced_called, :after_add_referenced_called, :before_remove_embedded_called, :after_remove_embedded_called, :before_remove_referenced_called, :after_remove_referenced_called
5
+
6
+ field :name, type: String
7
+
8
+ embeds_many :songs, before_add: [ :before_add_song, Proc.new { |artist, song| song.before_add_called = true } ], before_remove: :before_remove_song
9
+ embeds_many :labels, after_add: :after_add_label, after_remove: :after_remove_label
10
+ has_many :albums, dependent: :destroy, before_add: [:before_add_album, Proc.new { |artist, album| album.before_add_called = true} ], after_add: :after_add_album, before_remove: :before_remove_album, after_remove: :after_remove_album
11
+
12
+ before_create :before_create_stub
13
+ after_create :create_songs
14
+ before_save :before_save_stub
15
+ before_destroy :before_destroy_stub
16
+
17
+ protected
18
+ def before_create_stub
19
+ true
20
+ end
21
+
22
+ def before_save_stub
23
+ true
24
+ end
25
+
26
+ def before_destroy_stub
27
+ true
28
+ end
29
+
30
+ def create_songs
31
+ 2.times { |n| songs.create!(title: "#{n}") }
32
+ end
33
+
34
+ def before_add_song(song)
35
+ @before_add_called = true
36
+ end
37
+
38
+ def after_add_label(label)
39
+ @after_add_called = true
40
+ end
41
+
42
+ def before_add_album(album)
43
+ @before_add_referenced_called = true
44
+ end
45
+
46
+ def after_add_album(album)
47
+ @after_add_referenced_called = true
48
+ end
49
+
50
+ def before_remove_song(song)
51
+ @before_remove_embedded_called = true
52
+ end
53
+
54
+ def after_remove_label(label)
55
+ @after_remove_embedded_called = true
56
+ end
57
+
58
+ def before_remove_album(album)
59
+ @before_remove_referenced_called = true
60
+ end
61
+
62
+ def after_remove_album(album)
63
+ @after_remove_referenced_called = true
64
+ end
65
+
66
+ end
@@ -0,0 +1,4 @@
1
+ class Artwork
2
+ include Mongoid::Document
3
+ has_and_belongs_to_many :exhibitors
4
+ end
@@ -0,0 +1,11 @@
1
+ class Augmentation
2
+ include Mongoid::Document
3
+
4
+ field :name
5
+
6
+ embedded_in :player, inverse_of: :augmentation
7
+
8
+ after_build do
9
+ self.name = "Infolink (#{player.frags})"
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ class Author
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+
5
+ belongs_to :paranoid_post
6
+ end
@@ -0,0 +1,25 @@
1
+ class Band
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :active, type: Boolean, default: true
5
+ field :origin, type: String
6
+ field :genres, type: Array
7
+ field :member_count, type: Integer
8
+ field :mems, as: :members, type: Array
9
+ field :likes, type: Integer
10
+ field :views, type: Integer
11
+ field :rating, type: Float
12
+ field :upserted, type: Boolean, default: false
13
+ field :created, type: DateTime
14
+ field :sales, type: BigDecimal
15
+ field :y, as: :years, type: Integer
16
+ field :founded, type: Date
17
+
18
+ embeds_many :records, cascade_callbacks: true
19
+ embeds_many :notes, as: :noteable, cascade_callbacks: true, validate: false
20
+ embeds_one :label, cascade_callbacks: true
21
+
22
+ after_upsert do |doc|
23
+ doc.upserted = true
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ class Bar
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :location, type: Array
5
+ field :lat_lng, type: LatLng
6
+
7
+ has_one :rating, as: :ratable
8
+ index location: "2d"
9
+ end
@@ -0,0 +1,6 @@
1
+ class Basic
2
+ include Mongoid::Document
3
+ end
4
+
5
+ class SubBasic < Basic
6
+ end
@@ -0,0 +1 @@
1
+ class Bed; end
@@ -0,0 +1,2 @@
1
+ class BigPalette < Palette
2
+ end
@@ -0,0 +1,13 @@
1
+ class Birthday
2
+ include Mongoid::Document
3
+ field :title
4
+ field :date, type: Date
5
+ embedded_in :owner, inverse_of: :birthdays
6
+
7
+ def self.each_day(start_date, end_date)
8
+ groups = only(:date).asc(:date).where(:date.gte => start_date, :date.lte => end_date).group
9
+ groups.each do |date, group|
10
+ yield(date, group)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ class Book
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :chapters, type: Integer
5
+ belongs_to :series
6
+ belongs_to :person, autobuild: true
7
+ has_one :rating, as: :ratable, dependent: :nullify
8
+
9
+ after_initialize do |doc|
10
+ doc.chapters = 5
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ class Breed
2
+ include Mongoid::Document
3
+ has_and_belongs_to_many :dogs
4
+ end
@@ -0,0 +1,6 @@
1
+ class Browser < Canvas
2
+ field :version, type: Integer
3
+ def render; end
4
+ end
5
+
6
+ require "app/models/firefox"
@@ -0,0 +1,7 @@
1
+ class Building
2
+ include Mongoid::Document
3
+ attr_accessible
4
+ attr_accessible :building_address, :contractors, as: :admin
5
+ embeds_one :building_address
6
+ embeds_many :contractors
7
+ end
@@ -0,0 +1,7 @@
1
+ class BuildingAddress
2
+ include Mongoid::Document
3
+ attr_accessible
4
+ attr_accessible :city, as: :admin
5
+ embedded_in :building
6
+ field :city, type: String
7
+ end
@@ -0,0 +1,7 @@
1
+ class Bus
2
+ include Mongoid::Document
3
+ field :saturday, type: Boolean, default: false
4
+ field :departure_time, type: Time
5
+ field :number, type: Integer
6
+ embedded_in :circuit
7
+ end
@@ -0,0 +1,5 @@
1
+ class Business
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ has_and_belongs_to_many :owners, class_name: "User", validate: false
5
+ end
@@ -0,0 +1,25 @@
1
+ class CallbackRecorder < Mongoid::Observer
2
+ observe :actor
3
+
4
+ attr_reader :last_callback, :call_count, :last_record
5
+
6
+ def initialize
7
+ reset
8
+ super
9
+ end
10
+
11
+ def reset
12
+ @last_callback = nil
13
+ @call_count = Hash.new(0)
14
+ @last_record = {}
15
+ end
16
+
17
+ Mongoid::Callbacks.observables.each do |callback|
18
+ define_method(callback) do |record, &block|
19
+ @last_callback = callback
20
+ @call_count[callback] += 1
21
+ @last_record[callback] = record
22
+ block ? block.call : true
23
+ end
24
+ end
25
+ end