mm-versioning 0.0.2

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.
Binary file
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+ gem "bson_ext", "~> 1.3.1"
3
+ gem "mongo_mapper", "~> 0.9.1"
4
+ group :test do
5
+ gem "rspec"
6
+ gem "timecop"
7
+ end
@@ -0,0 +1,39 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.9)
5
+ activesupport (= 3.0.9)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.5.0)
8
+ activesupport (3.0.9)
9
+ bson (1.3.1)
10
+ bson_ext (1.3.1)
11
+ builder (2.1.2)
12
+ diff-lcs (1.1.2)
13
+ i18n (0.5.0)
14
+ mongo (1.3.1)
15
+ bson (>= 1.3.1)
16
+ mongo_mapper (0.9.1)
17
+ activemodel (~> 3.0)
18
+ activesupport (~> 3.0)
19
+ plucky (~> 0.3.8)
20
+ plucky (0.3.8)
21
+ mongo (~> 1.3)
22
+ rspec (2.6.0)
23
+ rspec-core (~> 2.6.0)
24
+ rspec-expectations (~> 2.6.0)
25
+ rspec-mocks (~> 2.6.0)
26
+ rspec-core (2.6.4)
27
+ rspec-expectations (2.6.0)
28
+ diff-lcs (~> 1.1.2)
29
+ rspec-mocks (2.6.0)
30
+ timecop (0.3.5)
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ bson_ext (~> 1.3.1)
37
+ mongo_mapper (~> 0.9.1)
38
+ rspec
39
+ timecop
@@ -0,0 +1,32 @@
1
+ mm-versioning
2
+ =============
3
+
4
+ Simple versioning for MongoMapper with proper specs.
5
+
6
+ Basic Usage
7
+ -----------
8
+
9
+ ```ruby
10
+ class Versioned do
11
+ include MongoMapper::Document
12
+ include MongoMapper::Plugins::Versioning
13
+ key :title
14
+ versioning
15
+ end
16
+ v = Versioned.new :title => "Alpha"
17
+ v.save!
18
+ v.versions.size # -> 1
19
+ v.update_attribute :title, "Beta"
20
+ v.versions.size # -> 2
21
+ v.versions.first.original.title # -> "Alpha"
22
+ ```
23
+
24
+ Advanced Usage
25
+ --------------
26
+
27
+ See specs.
28
+
29
+ Licence
30
+ -------
31
+
32
+ This gem is released under MIT Licence.
@@ -0,0 +1,7 @@
1
+ require "bundler"
2
+ require "rspec/core/rake_task"
3
+ Bundler::GemHelper.install_tasks
4
+ RSpec::Core::RakeTask.new("spec").tap do |config|
5
+ config.rspec_opts = "--color"
6
+ end
7
+ task :default => :spec
@@ -0,0 +1,52 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Plugins
4
+ module Versioning
5
+ extend ActiveSupport::Concern
6
+
7
+ class Version
8
+ include ::MongoMapper::Document
9
+ key :data, Hash
10
+ key :original_class_name, String
11
+ key :versioned_at, Time
12
+ before_create :set_versioned_at
13
+ def original
14
+ original_class_name.constantize.from_mongo data
15
+ end
16
+ private
17
+ def set_versioned_at
18
+ self.versioned_at = Time.current.utc
19
+ end
20
+ end
21
+
22
+ module ClassMethods
23
+ def versioning(scheme=:simple, opts={})
24
+ case scheme
25
+ when :simple
26
+ after_save :version_simple_save
27
+ else
28
+ raise ArgumentError, "unknown versioning scheme #{scheme.inspect}"
29
+ end
30
+ @version_class = opts[:class_name].constantize if opts[:class_name]
31
+ end
32
+
33
+ def version_class
34
+ @version_class ||= ::MongoMapper::Plugins::Versioning::Version
35
+ end
36
+ end
37
+
38
+ module InstanceMethods
39
+ def version_simple_save
40
+ version = self.class.version_class.new :data => attributes.dup
41
+ version.original_class_name = self.class.name
42
+ version.versioned_at = Time.current.utc
43
+ version.save
44
+ end
45
+
46
+ def versions
47
+ self.class.version_class.where("data._id" => id, :original_class_name => self.class.name).order :versioned_at.asc
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,7 @@
1
+ module MongoMapper
2
+ module Plugins
3
+ module Versioning
4
+ VERSION = "0.0.2"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,100 @@
1
+ MongoDB logging. Please note that logging negatively impacts performance and should be disabled for high-performance production apps.
2
+ MONGODB admin['$cmd'].find({:ismaster=>1})
3
+ MONGODB admin['$cmd'].find({:ismaster=>1})
4
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400994dcf5f90d76000001')}, {"_id"=>BSON::ObjectId('4e400994dcf5f90d76000001'), "title"=>"Alpha", "items"=>[], "created_at"=>2011-08-08 16:06:44 UTC, "updated_at"=>2011-08-08 16:06:44 UTC})
5
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400994dcf5f90d76000003')}, {"_id"=>BSON::ObjectId('4e400994dcf5f90d76000003'), "data"=>{"_id"=>BSON::ObjectId('4e400994dcf5f90d76000001'), "title"=>"Alpha", "items"=>[], "created_at"=>2011-08-08 16:06:44 UTC, "updated_at"=>2011-08-08 16:06:44 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2011-08-08 16:06:44 UTC})
6
+ MONGODB mm-versioning['$cmd'].find({"count"=>"mongo_mapper.plugins.versioning.versions", "query"=>{:"data._id"=>BSON::ObjectId('4e400994dcf5f90d76000001'), :original_class_name=>"Versioned"}, "fields"=>nil})
7
+ MONGODB mm-versioning['system.namespaces'].find({})
8
+ MONGODB mm-versioning['versioneds'].remove({})
9
+ MONGODB mm-versioning['system.indexes'].remove({})
10
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
11
+ MONGODB mm-versioning['system.namespaces'].find({})
12
+ MONGODB mm-versioning['versioneds'].remove({})
13
+ MONGODB mm-versioning['system.indexes'].remove({})
14
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
15
+ MONGODB mm-versioning['system.namespaces'].find({})
16
+ MONGODB mm-versioning['versioneds'].remove({})
17
+ MONGODB mm-versioning['system.indexes'].remove({})
18
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
19
+ MongoDB logging. Please note that logging negatively impacts performance and should be disabled for high-performance production apps.
20
+ MONGODB admin['$cmd'].find({:ismaster=>1})
21
+ MONGODB admin['$cmd'].find({:ismaster=>1})
22
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e4009ebdcf5f90dcf000001')}, {"_id"=>BSON::ObjectId('4e4009ebdcf5f90dcf000001'), "title"=>"Alpha", "items"=>[], "created_at"=>2011-08-08 16:08:11 UTC, "updated_at"=>2011-08-08 16:08:11 UTC})
23
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e4009ebdcf5f90dcf000003')}, {"_id"=>BSON::ObjectId('4e4009ebdcf5f90dcf000003'), "data"=>{"_id"=>BSON::ObjectId('4e4009ebdcf5f90dcf000001'), "title"=>"Alpha", "items"=>[], "created_at"=>2011-08-08 16:08:11 UTC, "updated_at"=>2011-08-08 16:08:11 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2011-08-08 16:08:11 UTC})
24
+ MONGODB mm-versioning['$cmd'].find({"count"=>"mongo_mapper.plugins.versioning.versions", "query"=>{:"data._id"=>BSON::ObjectId('4e4009ebdcf5f90dcf000001'), :original_class_name=>"Versioned"}, "fields"=>nil})
25
+ MONGODB mm-versioning['system.namespaces'].find({})
26
+ MONGODB mm-versioning['versioneds'].remove({})
27
+ MONGODB mm-versioning['system.indexes'].remove({})
28
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
29
+ MONGODB mm-versioning['system.namespaces'].find({})
30
+ MONGODB mm-versioning['versioneds'].remove({})
31
+ MONGODB mm-versioning['system.indexes'].remove({})
32
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
33
+ MONGODB mm-versioning['system.namespaces'].find({})
34
+ MONGODB mm-versioning['versioneds'].remove({})
35
+ MONGODB mm-versioning['system.indexes'].remove({})
36
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
37
+ MongoDB logging. Please note that logging negatively impacts performance and should be disabled for high-performance production apps.
38
+ MONGODB admin['$cmd'].find({:ismaster=>1})
39
+ MONGODB admin['$cmd'].find({:ismaster=>1})
40
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000001')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000001'), "title"=>"Alpha", "items"=>[], "created_at"=>2011-08-08 16:08:38 UTC, "updated_at"=>2011-08-08 16:08:38 UTC})
41
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000003')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000003'), "data"=>{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000001'), "title"=>"Alpha", "items"=>[], "created_at"=>2011-08-08 16:08:38 UTC, "updated_at"=>2011-08-08 16:08:38 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2011-08-08 16:08:38 UTC})
42
+ MONGODB mm-versioning['$cmd'].find({"count"=>"mongo_mapper.plugins.versioning.versions", "query"=>{:"data._id"=>BSON::ObjectId('4e400a06dcf5f90de7000001'), :original_class_name=>"Versioned"}, "fields"=>nil})
43
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000001')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000001'), "title"=>"Beta", "items"=>[], "created_at"=>2011-08-08 16:08:38 UTC, "updated_at"=>2011-08-08 16:08:38 UTC})
44
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000005')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000005'), "data"=>{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000001'), "title"=>"Beta", "items"=>[], "created_at"=>2011-08-08 16:08:38 UTC, "updated_at"=>2011-08-08 16:08:38 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2011-08-08 16:08:38 UTC})
45
+ MONGODB mm-versioning['$cmd'].find({"count"=>"mongo_mapper.plugins.versioning.versions", "query"=>{:"data._id"=>BSON::ObjectId('4e400a06dcf5f90de7000001'), :original_class_name=>"Versioned"}, "fields"=>nil})
46
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].find({:"data._id"=>BSON::ObjectId('4e400a06dcf5f90de7000001'), :original_class_name=>"Versioned"}).sort([["versioned_at", 1]])
47
+ MONGODB mm-versioning['system.namespaces'].find({})
48
+ MONGODB mm-versioning['versioneds'].remove({})
49
+ MONGODB mm-versioning['system.indexes'].remove({})
50
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
51
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000009')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000009'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a06dcf5f90de700000b')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-30 23:00:00 UTC})
52
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de700000c')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de700000c'), "data"=>{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000009'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a06dcf5f90de700000b')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-30 23:00:00 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2010-01-30 23:00:00 UTC})
53
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000009')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000009'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a06dcf5f90de700000b')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de700000e')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-31 23:00:00 UTC})
54
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de700000f')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de700000f'), "data"=>{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000009'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a06dcf5f90de700000b')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de700000e')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-31 23:00:00 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2010-01-31 23:00:00 UTC})
55
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].find({:"data._id"=>BSON::ObjectId('4e400a06dcf5f90de7000009'), :original_class_name=>"Versioned"}).sort([["versioned_at", 1]])
56
+ MONGODB mm-versioning['system.namespaces'].find({})
57
+ MONGODB mm-versioning['versioneds'].remove({})
58
+ MONGODB mm-versioning['system.indexes'].remove({})
59
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
60
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000016')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000016'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000018')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-30 23:00:00 UTC})
61
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000019')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000019'), "data"=>{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000016'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000018')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-30 23:00:00 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2010-01-30 23:00:00 UTC})
62
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de7000016')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000016'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000018')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de700001b')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-31 23:00:00 UTC})
63
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a06dcf5f90de700001c')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de700001c'), "data"=>{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000016'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a06dcf5f90de7000018')}, {"_id"=>BSON::ObjectId('4e400a06dcf5f90de700001b')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-31 23:00:00 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2010-01-31 23:00:00 UTC})
64
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].find({:"data._id"=>BSON::ObjectId('4e400a06dcf5f90de7000016'), :original_class_name=>"Versioned", :versioned_at=>{"$lte"=>2010-01-30 23:00:00 UTC}}).sort([["versioned_at", 1]])
65
+ MONGODB mm-versioning['system.namespaces'].find({})
66
+ MONGODB mm-versioning['versioneds'].remove({})
67
+ MONGODB mm-versioning['system.indexes'].remove({})
68
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
69
+ MongoDB logging. Please note that logging negatively impacts performance and should be disabled for high-performance production apps.
70
+ MONGODB admin['$cmd'].find({:ismaster=>1})
71
+ MONGODB admin['$cmd'].find({:ismaster=>1})
72
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000001')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000001'), "title"=>"Alpha", "items"=>[], "created_at"=>2011-08-08 16:09:15 UTC, "updated_at"=>2011-08-08 16:09:15 UTC})
73
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000003')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000003'), "data"=>{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000001'), "title"=>"Alpha", "items"=>[], "created_at"=>2011-08-08 16:09:15 UTC, "updated_at"=>2011-08-08 16:09:15 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2011-08-08 16:09:15 UTC})
74
+ MONGODB mm-versioning['$cmd'].find({"count"=>"mongo_mapper.plugins.versioning.versions", "query"=>{:"data._id"=>BSON::ObjectId('4e400a2bdcf5f90e00000001'), :original_class_name=>"Versioned"}, "fields"=>nil})
75
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000001')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000001'), "title"=>"Beta", "items"=>[], "created_at"=>2011-08-08 16:09:15 UTC, "updated_at"=>2011-08-08 16:09:15 UTC})
76
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000005')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000005'), "data"=>{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000001'), "title"=>"Beta", "items"=>[], "created_at"=>2011-08-08 16:09:15 UTC, "updated_at"=>2011-08-08 16:09:15 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2011-08-08 16:09:15 UTC})
77
+ MONGODB mm-versioning['$cmd'].find({"count"=>"mongo_mapper.plugins.versioning.versions", "query"=>{:"data._id"=>BSON::ObjectId('4e400a2bdcf5f90e00000001'), :original_class_name=>"Versioned"}, "fields"=>nil})
78
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].find({:"data._id"=>BSON::ObjectId('4e400a2bdcf5f90e00000001'), :original_class_name=>"Versioned"}).sort([["versioned_at", 1]])
79
+ MONGODB mm-versioning['system.namespaces'].find({})
80
+ MONGODB mm-versioning['versioneds'].remove({})
81
+ MONGODB mm-versioning['system.indexes'].remove({})
82
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
83
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000009')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000009'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000000b')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-30 23:00:00 UTC})
84
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e0000000c')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000000c'), "data"=>{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000009'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000000b')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-30 23:00:00 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2010-01-30 23:00:00 UTC})
85
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000009')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000009'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000000b')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000000e')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-31 23:00:00 UTC})
86
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e0000000f')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000000f'), "data"=>{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000009'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000000b')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000000e')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-31 23:00:00 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2010-01-31 23:00:00 UTC})
87
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].find({:"data._id"=>BSON::ObjectId('4e400a2bdcf5f90e00000009'), :original_class_name=>"Versioned"}).sort([["versioned_at", 1]])
88
+ MONGODB mm-versioning['system.namespaces'].find({})
89
+ MONGODB mm-versioning['versioneds'].remove({})
90
+ MONGODB mm-versioning['system.indexes'].remove({})
91
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
92
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000016')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000016'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000018')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-30 23:00:00 UTC})
93
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000019')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000019'), "data"=>{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000016'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000018')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-30 23:00:00 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2010-01-30 23:00:00 UTC})
94
+ MONGODB mm-versioning['versioneds'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e00000016')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000016'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000018')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000001b')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-31 23:00:00 UTC})
95
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].update({:_id=>BSON::ObjectId('4e400a2bdcf5f90e0000001c')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000001c'), "data"=>{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000016'), "title"=>"Beta", "items"=>[{"_id"=>BSON::ObjectId('4e400a2bdcf5f90e00000018')}, {"_id"=>BSON::ObjectId('4e400a2bdcf5f90e0000001b')}], "created_at"=>2010-01-30 23:00:00 UTC, "updated_at"=>2010-01-31 23:00:00 UTC}, "original_class_name"=>"Versioned", "versioned_at"=>2010-01-31 23:00:00 UTC})
96
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].find({:"data._id"=>BSON::ObjectId('4e400a2bdcf5f90e00000016'), :original_class_name=>"Versioned", :versioned_at=>{"$lte"=>2010-01-30 23:00:00 UTC}}).sort([["versioned_at", 1]])
97
+ MONGODB mm-versioning['system.namespaces'].find({})
98
+ MONGODB mm-versioning['versioneds'].remove({})
99
+ MONGODB mm-versioning['system.indexes'].remove({})
100
+ MONGODB mm-versioning['mongo_mapper.plugins.versioning.versions'].remove({})
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "mongo_mapper/plugins/versioning/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mm-versioning"
7
+ s.version = MongoMapper::Plugins::Versioning::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Joseph HALTER", "Jonathan TRON"]
10
+ s.email = ["team@openhood.com"]
11
+ s.homepage = "http://github.com/openhood/mm-versioning"
12
+ s.summary = "Simple versioning for MongoMapper with proper specs"
13
+ s.description = "Simple versioning for MongoMapper with proper specs"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+ end
@@ -0,0 +1,16 @@
1
+ ENV["RACK_ENV"] = "test"
2
+ require "bundler/setup"
3
+ Bundler.require :default, :test
4
+
5
+ require "mongo_mapper/plugins/versioning"
6
+
7
+ dir = File.expand_path("../../log", __FILE__)
8
+ Dir.mkdir dir unless File.directory? dir
9
+ file = File.new("#{dir}/test.log", "a")
10
+ file.sync = true
11
+ config = {"test" => {"uri" => "mongodb://localhost/mm-versioning"}}
12
+ MongoMapper.setup config, "test", {:logger => Logger.new(file)}
13
+
14
+ RSpec.configure do |config|
15
+ config.after{ MongoMapper.database.collections.each(&:remove) }
16
+ end
@@ -0,0 +1,56 @@
1
+ require "spec_helper"
2
+
3
+ class VersionedItem
4
+ include MongoMapper::EmbeddedDocument
5
+ end
6
+ class Versioned
7
+ include MongoMapper::Document
8
+ include MongoMapper::Plugins::Versioning
9
+ key :title
10
+ key :items, Array, :typecast => "VersionedItem", :default => []
11
+ timestamps!
12
+ attr_accessible :title
13
+ versioning
14
+ end
15
+ describe Versioned do
16
+ describe "Basic Usage" do
17
+ it do
18
+ v = Versioned.new :title => "Alpha"
19
+ v.save!
20
+ v.versions.should have(1).item
21
+ v.update_attribute :title, "Beta"
22
+ v.versions.should have(2).items
23
+ v.versions.first.original.title.should == "Alpha"
24
+ end
25
+ end
26
+ describe "Advanced Usage" do
27
+ let(:today){ Date.new 2010, 1, 31 }
28
+ let(:item1){ VersionedItem.new }
29
+ let(:item2){ VersionedItem.new }
30
+ let(:beta) do
31
+ v = Versioned.new :title => "Beta"
32
+ v.items << item1
33
+ v.save!
34
+ Timecop.freeze today+1
35
+ v.items << item2
36
+ v.save!
37
+ v
38
+ end
39
+ before{ Timecop.freeze today }
40
+ after{ Timecop.return }
41
+ it "is versioned" do
42
+ versions = beta.versions.all
43
+ versions.should have(2).items
44
+ versions[0].versioned_at.should eql today.to_time.utc
45
+ versions[1].versioned_at.should eql (today+1).to_time.utc
46
+ versions[0].original.should be_kind_of Versioned
47
+ versions[0].original.items.should =~ [item1]
48
+ versions[1].original.items.should =~ [item1, item2]
49
+ end
50
+ it "allows for subquery on versions" do
51
+ specific_versions = beta.versions.where(:versioned_at.lte => today.to_time.utc).all
52
+ specific_versions.should have(1).item
53
+ specific_versions.first.original.items.should =~ [item1]
54
+ end
55
+ end
56
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mm-versioning
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Joseph HALTER
9
+ - Jonathan TRON
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-08-08 00:00:00.000000000 +02:00
14
+ default_executable:
15
+ dependencies: []
16
+ description: Simple versioning for MongoMapper with proper specs
17
+ email:
18
+ - team@openhood.com
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - .DS_Store
24
+ - Gemfile
25
+ - Gemfile.lock
26
+ - README.md
27
+ - Rakefile
28
+ - lib/mongo_mapper/plugins/versioning.rb
29
+ - lib/mongo_mapper/plugins/versioning/version.rb
30
+ - log/test.log
31
+ - mm-versioning.gemspec
32
+ - spec/spec_helper.rb
33
+ - spec/versioning_spec.rb
34
+ has_rdoc: true
35
+ homepage: http://github.com/openhood/mm-versioning
36
+ licenses: []
37
+ post_install_message:
38
+ rdoc_options: []
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 1.6.2
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: Simple versioning for MongoMapper with proper specs
59
+ test_files:
60
+ - spec/spec_helper.rb
61
+ - spec/versioning_spec.rb