mm-draft 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,20 +1,20 @@
1
- source :rubygems
2
-
3
- gem 'rake'
4
- gem 'bson_ext', '>= 1.6.4'
5
- gem 'multi_json', '>= 1.3.6'
6
-
7
- group :test do
8
- gem 'jnunemaker-matchy', '>= 0.4', :require => 'matchy'
9
- gem 'shoulda', '>= 3.1.1'
10
- gem 'mocha', '>= 0.12.3'
11
- gem 'database_cleaner', '>= 0.8.0'
12
- end
13
-
14
- group :development do
15
- gem "wirble"
16
- gem "hirb"
17
- gem "awesome_print"
18
- end
19
-
20
- gemspec
1
+ source :rubygems
2
+
3
+ gem 'rake'
4
+ gem 'bson_ext', '>= 1.6.4'
5
+ gem 'multi_json', '>= 1.3.6'
6
+
7
+ group :test do
8
+ gem 'jnunemaker-matchy', '>= 0.4', :require => 'matchy'
9
+ gem 'shoulda', '>= 3.1.1'
10
+ gem 'mocha', '>= 0.12.3'
11
+ gem 'database_cleaner', '>= 0.8.0'
12
+ end
13
+
14
+ group :development do
15
+ gem "wirble"
16
+ gem "hirb"
17
+ gem "awesome_print"
18
+ end
19
+
20
+ gemspec
data/Rakefile CHANGED
@@ -1,36 +1,26 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- require File.join(File.dirname(__FILE__), 'lib', 'mongo_mapper', 'plugins', 'draft', 'version')
5
-
6
- require 'rake/testtask'
7
- namespace :test do
8
- Rake::TestTask.new(:units) do |test|
9
- test.libs << 'test'
10
- test.ruby_opts << '-rubygems'
11
- test.pattern = 'test/unit/**/test_*.rb'
12
- test.verbose = true
13
- end
14
-
15
- #TODO Add performance
16
- Rake::TestTask.new(:performance) do |test|
17
- test.libs << 'test'
18
- test.ruby_opts << '-rubygems'
19
- test.pattern = 'test/performance/test/**/*.rb'
20
- test.verbose = true
21
- end
22
- end
23
-
24
- task :default => 'test:units'
25
-
26
- desc 'Builds the gem'
27
- task :build do
28
- sh 'gem build mm-draft.gemspec'
29
- Dir.mkdir('pkg') unless File.directory?('pkg')
30
- sh "mv mm-draft-#{MongoMapper::Draft::VERSION}.gem pkg/mm-draft-#{MongoMapper::Draft::VERSION}.gem"
31
- end
32
-
33
- desc 'Builds and Installs the gem'
34
- task :install => :build do
35
- sh "gem install pkg/mm-draft-#{MongoMapper::Draft::VERSION}.gem"
36
- end
1
+ require "bundler/gem_tasks"
2
+ require 'rubygems'
3
+ require 'rake'
4
+
5
+ require File.join(File.dirname(__FILE__), 'lib', 'mongo_mapper', 'plugins', 'draft', 'version')
6
+
7
+ require 'rake/testtask'
8
+ namespace :test do
9
+ Rake::TestTask.new(:units) do |test|
10
+ test.libs << 'test'
11
+ test.ruby_opts << '-rubygems'
12
+ test.pattern = 'test/unit/**/test_*.rb'
13
+ test.verbose = true
14
+ end
15
+
16
+ #TODO Add performance
17
+ Rake::TestTask.new(:performance) do |test|
18
+ test.libs << 'test'
19
+ test.ruby_opts << '-rubygems'
20
+ test.pattern = 'test/performance/test/**/*.rb'
21
+ test.verbose = true
22
+ end
23
+ end
24
+
25
+ task :default => 'test:units'
26
+
data/lib/locale/en.yml CHANGED
@@ -1,6 +1,6 @@
1
- en:
2
- mongo_mapper:
3
- errors:
4
- messages:
5
- draft:
6
- todo: "TODO"
1
+ en:
2
+ mongo_mapper:
3
+ errors:
4
+ messages:
5
+ draft:
6
+ todo: "TODO"
@@ -1,2 +1,2 @@
1
- require 'mongo_mapper'
2
- require File.join(File.dirname(__FILE__), 'mongo_mapper/plugins/draft/draft')
1
+ require 'mongo_mapper'
2
+ require File.join(File.dirname(__FILE__), 'mongo_mapper/plugins/draft/draft')
@@ -1,12 +1,12 @@
1
- module MongoMapper
2
- module Plugins
3
- module Draft
4
- module Callbacks
5
- extend ActiveSupport::Concern
6
- included do
7
- before_destroy :unpublish
8
- end # included_do
9
- end
10
- end # Versioned
11
- end # Module plugins
12
- end # module MongoMapper
1
+ module MongoMapper
2
+ module Plugins
3
+ module Draft
4
+ module Callbacks
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ before_destroy :unpublish
8
+ end # included_do
9
+ end
10
+ end # Versioned
11
+ end # Module plugins
12
+ end # module MongoMapper
@@ -1,129 +1,129 @@
1
- require File.join(File.dirname(__FILE__), 'callbacks')
2
- require File.join(File.dirname(__FILE__), 'keys')
3
- # I18n.load_path << File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'locale', 'en.yml'), __FILE__)
4
-
5
- module MongoMapper
6
- module Plugins
7
- module Draft
8
-
9
- extend ActiveSupport::Concern
10
-
11
- include MongoMapper::Plugins::Draft::Callbacks
12
- include MongoMapper::Plugins::Draft::Keys
13
-
14
- def draft?
15
- self.draft
16
- end
17
-
18
- def published?
19
- if draft?
20
- return false if self.draft_record_published_id == nil # save a query and return false
21
- return true if (self.class.find(self.draft_record_published_id) != nil)
22
- else
23
- return true
24
- end
25
- false
26
- end
27
-
28
- def publish
29
- if (draft? == false) # don't publish non-drafts...
30
- return false
31
- end
32
-
33
- if (self.changed?) # save any changes, in case publish is called directly instead of save
34
- return false if (self.save == false)
35
- end
36
-
37
-
38
- # if already published, keep some old data to update instead of insert
39
- if (self.published?)
40
- old_published_record = self.published_record
41
- # support for mm-tree
42
- # remove parents from previous published record
43
- if (self.respond_to?("parent_id_field") && self.respond_to?("path_field") && self.respond_to?("depth_field"))
44
- old_published_record.parent = nil
45
- old_published_record.save
46
- end
47
- live_record = self.clone
48
- live_record._id = self.published_record_id
49
- live_record.created_at = old_published_record.created_at if self.respond_to?("created_at")
50
- else
51
- live_record = self.clone
52
- live_record.created_at = Time.now.utc if self.respond_to?("created_at")
53
- end
54
-
55
- self.draft_record_published_id = live_record._id
56
- self.class.skip_callback(:save, :before, :update_timestamps ) if self.respond_to?("updated_at")
57
- self.save!
58
- self.class.set_callback(:save, :before, :update_timestamps ) if self.respond_to?("updated_at")
59
-
60
- if (self.respond_to?("parent_id_field") && self.respond_to?("path_field") && self.respond_to?("depth_field"))
61
- # if so, remove the current parent (should have already been don)
62
- # set parent to nil for live_record before setting "real" parent.
63
- # live_record.parent = nil
64
-
65
- if (self.parent != nil)
66
- # no need to copy order value, as it's copied in the clone process
67
- # check draft.parent.published_record != nil, and set as parent
68
- if (self.parent != nil)
69
- if (self.parent.published_record != nil)
70
- live_record.parent = self.parent.published_record
71
- end
72
- end
73
- end
74
- end
75
-
76
- live_record.draft = false;
77
- live_record.updated_at = Time.now.utc if self.respond_to?("updated_at")
78
- live_record.save!
79
- return true
80
- end
81
-
82
- def published_record
83
- if draft?
84
- return nil if self.draft_record_published_id == nil # save a query and return nil of draft_record_published_id == nil
85
- self.class.find(self.draft_record_published_id)
86
- else
87
- self
88
- end
89
- end
90
-
91
- def published_record_id
92
- if draft?
93
- self.draft_record_published_id
94
- else
95
- self._id
96
- end
97
- end
98
-
99
- def draft_record
100
- if draft?
101
- self
102
- else
103
- self.class.all(:conditions => { :draft => true, :draft_record_published_id => self._id }).first
104
- end
105
- end
106
-
107
- def unpublish
108
- published_rec = self.published_record
109
- draft_rec = self.draft_record
110
-
111
- self.class.skip_callback(:destroy, :before, :unpublish)
112
- published_rec.destroy if published_rec != nil # destroy published record
113
- self.class.set_callback(:destroy, :before, :unpublish)
114
-
115
- draft_rec.draft_record_published_id = nil if draft_rec != nil # update draft record
116
- draft_rec.save! if draft_rec != nil
117
- # if draft?
118
- # published = self.class.find(self.draft_record_published_id)
119
- # published.destroy if (published != nil)
120
- # self.draft_record_published_id = nil
121
- # self.save! # remove draft_record_published_id
122
- # else
123
- # self.draft_record.unpublish
124
- # end
125
- end
126
-
127
- end # Module Draft
128
- end # Module plugins
129
- end # module MongoMapper
1
+ require File.join(File.dirname(__FILE__), 'callbacks')
2
+ require File.join(File.dirname(__FILE__), 'keys')
3
+ # I18n.load_path << File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'locale', 'en.yml'), __FILE__)
4
+
5
+ module MongoMapper
6
+ module Plugins
7
+ module Draft
8
+
9
+ extend ActiveSupport::Concern
10
+
11
+ include MongoMapper::Plugins::Draft::Callbacks
12
+ include MongoMapper::Plugins::Draft::Keys
13
+
14
+ def draft?
15
+ self.draft
16
+ end
17
+
18
+ def published?
19
+ if draft?
20
+ return false if self.draft_record_published_id == nil # save a query and return false
21
+ return true if (self.class.find(self.draft_record_published_id) != nil)
22
+ else
23
+ return true
24
+ end
25
+ false
26
+ end
27
+
28
+ def publish
29
+ if (draft? == false) # don't publish non-drafts...
30
+ return false
31
+ end
32
+
33
+ if (self.changed?) # save any changes, in case publish is called directly instead of save
34
+ return false if (self.save == false)
35
+ end
36
+
37
+
38
+ # if already published, keep some old data to update instead of insert
39
+ if (self.published?)
40
+ old_published_record = self.published_record
41
+ # support for mm-tree
42
+ # remove parents from previous published record
43
+ if (self.respond_to?("parent_id_field") && self.respond_to?("path_field") && self.respond_to?("depth_field"))
44
+ old_published_record.parent = nil
45
+ old_published_record.save
46
+ end
47
+ live_record = self.clone
48
+ live_record._id = self.published_record_id
49
+ live_record.created_at = old_published_record.created_at if self.respond_to?("created_at")
50
+ else
51
+ live_record = self.clone
52
+ live_record.created_at = Time.now.utc if self.respond_to?("created_at")
53
+ end
54
+
55
+ self.draft_record_published_id = live_record._id
56
+ self.class.skip_callback(:save, :before, :update_timestamps ) if self.respond_to?("updated_at")
57
+ self.save!
58
+ self.class.set_callback(:save, :before, :update_timestamps ) if self.respond_to?("updated_at")
59
+
60
+ if (self.respond_to?("parent_id_field") && self.respond_to?("path_field") && self.respond_to?("depth_field"))
61
+ # if so, remove the current parent (should have already been don)
62
+ # set parent to nil for live_record before setting "real" parent.
63
+ # live_record.parent = nil
64
+
65
+ if (self.parent != nil)
66
+ # no need to copy order value, as it's copied in the clone process
67
+ # check draft.parent.published_record != nil, and set as parent
68
+ if (self.parent != nil)
69
+ if (self.parent.published_record != nil)
70
+ live_record.parent = self.parent.published_record
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ live_record.draft = false;
77
+ live_record.updated_at = Time.now.utc if self.respond_to?("updated_at")
78
+ live_record.save!
79
+ return true
80
+ end
81
+
82
+ def published_record
83
+ if draft?
84
+ return nil if self.draft_record_published_id == nil # save a query and return nil of draft_record_published_id == nil
85
+ self.class.find(self.draft_record_published_id)
86
+ else
87
+ self
88
+ end
89
+ end
90
+
91
+ def published_record_id
92
+ if draft?
93
+ self.draft_record_published_id
94
+ else
95
+ self._id
96
+ end
97
+ end
98
+
99
+ def draft_record
100
+ if draft?
101
+ self
102
+ else
103
+ self.class.all(:conditions => { :draft => true, :draft_record_published_id => self._id }).first
104
+ end
105
+ end
106
+
107
+ def unpublish
108
+ published_rec = self.published_record
109
+ draft_rec = self.draft_record
110
+
111
+ self.class.skip_callback(:destroy, :before, :unpublish)
112
+ published_rec.destroy if published_rec != nil # destroy published record
113
+ self.class.set_callback(:destroy, :before, :unpublish)
114
+
115
+ draft_rec.draft_record_published_id = nil if draft_rec != nil # update draft record
116
+ draft_rec.save! if draft_rec != nil
117
+ # if draft?
118
+ # published = self.class.find(self.draft_record_published_id)
119
+ # published.destroy if (published != nil)
120
+ # self.draft_record_published_id = nil
121
+ # self.save! # remove draft_record_published_id
122
+ # else
123
+ # self.draft_record.unpublish
124
+ # end
125
+ end
126
+
127
+ end # Module Draft
128
+ end # Module plugins
129
+ end # module MongoMapper
@@ -1,13 +1,13 @@
1
- module MongoMapper
2
- module Plugins
3
- module Draft
4
- module Keys
5
- extend ActiveSupport::Concern
6
- included do
7
- key :draft, Boolean, :default => true
8
- key :draft_record_published_id, ObjectId # points to the live page version if draft == true. else NIL
9
- end # included_do
10
- end # Keys
11
- end # Versioned
12
- end # Module plugins
13
- end # module MongoMapper
1
+ module MongoMapper
2
+ module Plugins
3
+ module Draft
4
+ module Keys
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ key :draft, Boolean, :default => true
8
+ key :draft_record_published_id, ObjectId # points to the live page version if draft == true. else NIL
9
+ end # included_do
10
+ end # Keys
11
+ end # Versioned
12
+ end # Module plugins
13
+ end # module MongoMapper
@@ -1,5 +1,5 @@
1
- module MongoMapper
2
- module Draft
3
- VERSION = '0.1.5'
4
- end
5
- end
1
+ module MongoMapper
2
+ module Draft
3
+ VERSION = '0.1.7'
4
+ end
5
+ end
@@ -1,10 +1,10 @@
1
- class Monkey
2
- include MongoMapper::Document
3
- plugin MongoMapper::Plugins::Draft
4
-
5
- attr_accessible :name
6
-
7
- key :name, String
8
-
9
- timestamps!
10
- end
1
+ class Monkey
2
+ include MongoMapper::Document
3
+ plugin MongoMapper::Plugins::Draft
4
+
5
+ attr_accessible :name
6
+
7
+ key :name, String
8
+
9
+ timestamps!
10
+ end
@@ -1,9 +1,9 @@
1
- class Monkey
2
- include MongoMapper::Document
3
- plugin MongoMapper::Plugins::Draft
4
-
5
- attr_accessible :name, :age
6
-
7
- key :name, String
8
- key :age, Integer
9
- end
1
+ class Monkey
2
+ include MongoMapper::Document
3
+ plugin MongoMapper::Plugins::Draft
4
+
5
+ attr_accessible :name, :age
6
+
7
+ key :name, String
8
+ key :age, Integer
9
+ end
@@ -1,7 +1,7 @@
1
- class MonkeyNoVersion
2
- include MongoMapper::Document
3
- attr_accessible :name, :age
4
-
5
- key :name, String
6
- key :age, Integer
7
- end
1
+ class MonkeyNoVersion
2
+ include MongoMapper::Document
3
+ attr_accessible :name, :age
4
+
5
+ key :name, String
6
+ key :age, Integer
7
+ end
@@ -1,15 +1,15 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
-
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
5
- $LOAD_PATH.unshift(File.dirname(__FILE__))
6
- require 'draft'
7
-
8
- Bundler.require(:default, :test)
9
-
10
- MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
11
- MongoMapper.database = "mm-draft-performance"
12
-
13
- Dir["#{File.dirname(__FILE__)}/models/*.rb"].each {|file| require file}
14
-
15
- DatabaseCleaner.strategy = :truncation
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'draft'
7
+
8
+ Bundler.require(:default, :test)
9
+
10
+ MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
11
+ MongoMapper.database = "mm-draft-performance"
12
+
13
+ Dir["#{File.dirname(__FILE__)}/models/*.rb"].each {|file| require file}
14
+
15
+ DatabaseCleaner.strategy = :truncation
@@ -1,28 +1,28 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'performance_helper'))
2
-
3
- require 'benchmark'
4
-
5
- DatabaseCleaner.start
6
-
7
- Benchmark.bm(22) do |x|
8
- ids_draft = []
9
- ids_no_draft = []
10
-
11
- # Write performance
12
- x.report("write without draft ") do
13
- 500.times { |i| ids_no_draft << MonkeyNodraft.create(:name => "Baboo", :age => 12, ).id }
14
- end
15
- x.report("write with draft ") do
16
- 500.times { |i| ids_draft << Monkey.create(:name => "Baboo", :age => 12, ).id }
17
- end
18
-
19
- # Read performance
20
- x.report("read with draft ") do
21
- ids_draft.each { |id| Monkey.first(:id => id) }
22
- end
23
- x.report("read without draft ") do
24
- ids_no_draft.each { |id| MonkeyNodraft.first(:id => id) }
25
- end
26
- end
27
-
28
- DatabaseCleaner.clean
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'performance_helper'))
2
+
3
+ require 'benchmark'
4
+
5
+ DatabaseCleaner.start
6
+
7
+ Benchmark.bm(22) do |x|
8
+ ids_draft = []
9
+ ids_no_draft = []
10
+
11
+ # Write performance
12
+ x.report("write without draft ") do
13
+ 500.times { |i| ids_no_draft << MonkeyNodraft.create(:name => "Baboo", :age => 12, ).id }
14
+ end
15
+ x.report("write with draft ") do
16
+ 500.times { |i| ids_draft << Monkey.create(:name => "Baboo", :age => 12, ).id }
17
+ end
18
+
19
+ # Read performance
20
+ x.report("read with draft ") do
21
+ ids_draft.each { |id| Monkey.first(:id => id) }
22
+ end
23
+ x.report("read without draft ") do
24
+ ids_no_draft.each { |id| MonkeyNodraft.first(:id => id) }
25
+ end
26
+ end
27
+
28
+ DatabaseCleaner.clean
data/test/test_helper.rb CHANGED
@@ -1,39 +1,39 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
-
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- $LOAD_PATH.unshift(File.dirname(__FILE__))
6
- require 'draft'
7
-
8
- Bundler.require(:default, :test)
9
-
10
- MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
11
- MongoMapper.database = "mm-draft-test"
12
-
13
- Dir["#{File.dirname(__FILE__)}/models/*.rb"].each {|file| require file}
14
-
15
- DatabaseCleaner.strategy = :truncation
16
-
17
- class Test::Unit::TestCase
18
- # Drop all collections after each test case.
19
- def setup
20
- DatabaseCleaner.start
21
- end
22
-
23
- def teardown
24
- DatabaseCleaner.clean
25
- end
26
-
27
- # Make sure that each test case has a teardown
28
- # method to clear the db after each test.
29
- def inherited(base)
30
- base.define_method setup do
31
- super
32
- end
33
-
34
- base.define_method teardown do
35
- super
36
- end
37
- end
38
-
39
- end
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'mm-draft'
7
+
8
+ Bundler.require(:default, :test)
9
+
10
+ MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
11
+ MongoMapper.database = "mm-draft-test"
12
+
13
+ Dir["#{File.dirname(__FILE__)}/models/*.rb"].each {|file| require file}
14
+
15
+ DatabaseCleaner.strategy = :truncation
16
+
17
+ class Test::Unit::TestCase
18
+ # Drop all collections after each test case.
19
+ def setup
20
+ DatabaseCleaner.start
21
+ end
22
+
23
+ def teardown
24
+ DatabaseCleaner.clean
25
+ end
26
+
27
+ # Make sure that each test case has a teardown
28
+ # method to clear the db after each test.
29
+ def inherited(base)
30
+ base.define_method setup do
31
+ super
32
+ end
33
+
34
+ base.define_method teardown do
35
+ super
36
+ end
37
+ end
38
+
39
+ end
@@ -1,194 +1,194 @@
1
- require 'test_helper'
2
-
3
- class DraftTest < Test::Unit::TestCase
4
- context "draft monkey records" do
5
- setup do
6
- @monkey_1 = Monkey.create(:name => "Chip")
7
- @monkey_2 = Monkey.create(:name => "Unaton")
8
- @monkey_1.publish
9
- end
10
-
11
- should "have same name as draft" do
12
- @monkey_1.name.should == "Chip"
13
- @monkey_1.published_record.name.should == "Chip"
14
- @monkey_1.published_record.name.should == @monkey_1.name
15
- end
16
-
17
- should "be published" do
18
- @monkey_1.published_record.should_not == nil
19
- end
20
-
21
- should "not have same created time as draft" do
22
- @monkey_1.unpublish
23
- @monkey_1.publish
24
- @monkey_1.created_at.should_not == @monkey_1.published_record.created_at
25
- end
26
-
27
- should "not be published" do
28
- @monkey_2.published?.should_not == true
29
- @monkey_2.published_record.should == nil
30
- end
31
-
32
- should "not be draft" do
33
- @monkey_1.published_record.draft?.should_not == true
34
- end
35
-
36
- should "be draft" do
37
- @monkey_2.draft?.should == true
38
- end
39
-
40
- should "rename draft only" do
41
- @monkey_1.name = "Sagofon"
42
- @monkey_1.published_record.should_not == nil
43
- @monkey_1.name.should_not == @monkey_1.published_record.name
44
- end
45
-
46
- should "rename both draft and published record" do
47
- @monkey_1.name = "Sagofon"
48
- @monkey_1.publish
49
- @monkey_1.published_record.should_not == nil
50
- @monkey_1.name.should == @monkey_1.published_record.name
51
- end
52
-
53
- should "have updated updated_at both published record" do
54
- @monkey_1.name ="Kake"
55
- @monkey_1.save
56
- @monkey_1.publish
57
- @monkey_1.published_record.updated_at.should_not == @monkey_1.updated_at
58
- end
59
-
60
- should "unpublish draft record" do
61
- @monkey_1.unpublish
62
- assert !@monkey_1.published?
63
- @monkey_1.published_record_id.should == nil
64
- @monkey_1.published_record.should == nil
65
- end
66
-
67
- should "unpublish published record directly" do
68
- # It is recommended to unpublish a draft record instead of unpublising a published record
69
- @monkey_1.publish # publish record again...
70
- @monkey_1.published_record.unpublish
71
- # reload monkey_1
72
- @monkey_1.reload
73
- @monkey_1.published?.should_not == true
74
- @monkey_1.published_record_id.should == nil
75
- @monkey_1.published_record.should == nil
76
- end
77
-
78
- should "destroy published record only" do
79
- @monkey_2.publish
80
- tmp_id = @monkey_2.published_record_id
81
- @monkey_2.published_record.destroy
82
- @monkey_2.reload
83
- @monkey_2.published_record_id.should == nil
84
- @monkey_2.published_record.should == nil
85
- @monkey_2.name.should == "Unaton" # make sure we didn't loose the draft
86
- @monkey_2.published?.should_not == true
87
- @monkey_2.draft?.should == true
88
- Monkey.find(tmp_id).should == nil
89
- end
90
-
91
- should "destroy draft and published record" do
92
- @monkey_2.publish # publish record again...
93
- tmp_draft_id = @monkey_2._id
94
- tmp_published_id = @monkey_2.published_record_id
95
- @monkey_2.destroy
96
- # keep ID's in order to check that they are destroyed!
97
- Monkey.find(tmp_draft_id).should == nil
98
- Monkey.find(tmp_published_id).should == nil
99
- end
100
-
101
- end # context "draft monkey records" do
102
-
103
- # context "tree-record" do
104
- # setup do
105
- # @root_1 = Dog.create(:name => "Atmel")
106
- # @child_1 = Dog.create(:name => "ATmega644P", :parent => @root_1)
107
- # @child_2 = Dog.create(:name => "ATmega2561", :parent => @root_1)
108
- # @child_2_1 = Dog.create(:name => "ATtiny24", :parent => @child_2)
109
-
110
- # @root_2 = Dog.create(:name => "ST Ericsson")
111
- # @child_3 = Dog.create(:name => "ISP1181B", :parent => @root_2)
112
-
113
- # @root_1.publish
114
- # @child_1.publish
115
- # @child_2.publish
116
- # @child_2_1.publish
117
- # @root_2.publish
118
- # end
119
-
120
- # should "test draft record parents" do
121
- # assert_equal(@root_2, @child_3.parent)
122
- # assert_equal(@child_2, @child_2_1.parent)
123
- # end
124
-
125
- # should "test parents for published records" do
126
- # assert_equal(@root_1.published_record, @child_1.published_record.parent)
127
- # assert_equal(@root_1.published_record, @child_2.published_record.parent)
128
- # assert_equal(@child_2.published_record, @child_2_1.published_record.parent)
129
- # end
130
-
131
- # should "move draft record to new parent, but keep published at old parent" do
132
- # @child_2.parent = @root_2
133
-
134
- # assert !@root_2.is_or_is_ancestor_of?(@child_2_1)
135
- # assert !@child_2_1.is_or_is_descendant_of?(@root_2)
136
- # assert !@root_2.descendants.include?(@child_2_1)
137
-
138
- # @child_2.save
139
- # @child_2_1.reload
140
-
141
- # assert @root_2.is_or_is_ancestor_of?(@child_2_1)
142
- # assert @child_2_1.is_or_is_descendant_of?(@root_2)
143
- # assert @root_2.descendants.include?(@child_2_1)
144
-
145
- # # test published against root_1
146
- # assert @root_1.published_record.is_or_is_ancestor_of?(@child_2_1.published_record)
147
- # assert @child_2_1.published_record.is_or_is_descendant_of?(@root_1.published_record)
148
- # assert @root_1.published_record.descendants.include?(@child_2_1.published_record)
149
- # end
150
-
151
- # should "move both draft and published record to new parent" do
152
- # @child_2.parent = @root_2
153
-
154
- # assert !@root_2.is_or_is_ancestor_of?(@child_2_1)
155
- # assert !@child_2_1.is_or_is_descendant_of?(@root_2)
156
- # assert !@root_2.descendants.include?(@child_2_1)
157
-
158
- # # can only test published after saving and publishing
159
- # @child_2.save
160
- # @child_2.publish # will also save
161
- # @child_2.reload
162
- # @child_2_1.reload
163
-
164
- # assert @root_2.is_or_is_ancestor_of?(@child_2_1)
165
- # assert @child_2_1.is_or_is_descendant_of?(@root_2)
166
- # assert @root_2.descendants.include?(@child_2_1)
167
-
168
- # assert @root_2.published_record.is_or_is_ancestor_of?(@child_2_1.published_record)
169
- # assert @child_2_1.published_record.is_or_is_descendant_of?(@root_2.published_record)
170
- # assert @root_2.published_record.descendants.include?(@child_2_1.published_record)
171
- # end
172
-
173
- # should "set a record as a root and check for ancestor" do
174
- # @child_2.parent = nil
175
-
176
- # assert !@root_2.is_or_is_ancestor_of?(@child_2_1)
177
- # assert !@child_2_1.is_or_is_descendant_of?(@root_2)
178
- # assert !@root_2.descendants.include?(@child_2_1)
179
-
180
- # # can only test published after saving and publishing
181
- # @child_2.save
182
- # @child_2.publish # will also save
183
- # @child_2.reload
184
- # @child_2_1.reload
185
-
186
- # assert @child_2.root?
187
- # assert @child_2.published_record.root?
188
- # assert @child_2_1.is_or_is_descendant_of?(@child_2)
189
-
190
- # assert !@root_1.published_record.is_or_is_ancestor_of?(@child_2_1.published_record)
191
- # assert !@child_2_1.published_record.is_or_is_descendant_of?(@root_1.published_record)
192
- # assert !@root_1.published_record.descendants.include?(@child_2_1.published_record)
193
- # end
194
- end
1
+ require 'test_helper'
2
+
3
+ class DraftTest < Test::Unit::TestCase
4
+ context "draft monkey records" do
5
+ setup do
6
+ @monkey_1 = Monkey.create(:name => "Chip")
7
+ @monkey_2 = Monkey.create(:name => "Unaton")
8
+ @monkey_1.publish
9
+ end
10
+
11
+ should "have same name as draft" do
12
+ @monkey_1.name.should == "Chip"
13
+ @monkey_1.published_record.name.should == "Chip"
14
+ @monkey_1.published_record.name.should == @monkey_1.name
15
+ end
16
+
17
+ should "be published" do
18
+ @monkey_1.published_record.should_not == nil
19
+ end
20
+
21
+ should "not have same created time as draft" do
22
+ @monkey_1.unpublish
23
+ @monkey_1.publish
24
+ @monkey_1.created_at.should_not == @monkey_1.published_record.created_at
25
+ end
26
+
27
+ should "not be published" do
28
+ @monkey_2.published?.should_not == true
29
+ @monkey_2.published_record.should == nil
30
+ end
31
+
32
+ should "not be draft" do
33
+ @monkey_1.published_record.draft?.should_not == true
34
+ end
35
+
36
+ should "be draft" do
37
+ @monkey_2.draft?.should == true
38
+ end
39
+
40
+ should "rename draft only" do
41
+ @monkey_1.name = "Sagofon"
42
+ @monkey_1.published_record.should_not == nil
43
+ @monkey_1.name.should_not == @monkey_1.published_record.name
44
+ end
45
+
46
+ should "rename both draft and published record" do
47
+ @monkey_1.name = "Sagofon"
48
+ @monkey_1.publish
49
+ @monkey_1.published_record.should_not == nil
50
+ @monkey_1.name.should == @monkey_1.published_record.name
51
+ end
52
+
53
+ should "have updated updated_at both published record" do
54
+ @monkey_1.name ="Kake"
55
+ @monkey_1.save
56
+ @monkey_1.publish
57
+ @monkey_1.published_record.updated_at.should_not == @monkey_1.updated_at
58
+ end
59
+
60
+ should "unpublish draft record" do
61
+ @monkey_1.unpublish
62
+ assert !@monkey_1.published?
63
+ @monkey_1.published_record_id.should == nil
64
+ @monkey_1.published_record.should == nil
65
+ end
66
+
67
+ should "unpublish published record directly" do
68
+ # It is recommended to unpublish a draft record instead of unpublising a published record
69
+ @monkey_1.publish # publish record again...
70
+ @monkey_1.published_record.unpublish
71
+ # reload monkey_1
72
+ @monkey_1.reload
73
+ @monkey_1.published?.should_not == true
74
+ @monkey_1.published_record_id.should == nil
75
+ @monkey_1.published_record.should == nil
76
+ end
77
+
78
+ should "destroy published record only" do
79
+ @monkey_2.publish
80
+ tmp_id = @monkey_2.published_record_id
81
+ @monkey_2.published_record.destroy
82
+ @monkey_2.reload
83
+ @monkey_2.published_record_id.should == nil
84
+ @monkey_2.published_record.should == nil
85
+ @monkey_2.name.should == "Unaton" # make sure we didn't loose the draft
86
+ @monkey_2.published?.should_not == true
87
+ @monkey_2.draft?.should == true
88
+ Monkey.find(tmp_id).should == nil
89
+ end
90
+
91
+ should "destroy draft and published record" do
92
+ @monkey_2.publish # publish record again...
93
+ tmp_draft_id = @monkey_2._id
94
+ tmp_published_id = @monkey_2.published_record_id
95
+ @monkey_2.destroy
96
+ # keep ID's in order to check that they are destroyed!
97
+ Monkey.find(tmp_draft_id).should == nil
98
+ Monkey.find(tmp_published_id).should == nil
99
+ end
100
+
101
+ end # context "draft monkey records" do
102
+
103
+ # context "tree-record" do
104
+ # setup do
105
+ # @root_1 = Dog.create(:name => "Atmel")
106
+ # @child_1 = Dog.create(:name => "ATmega644P", :parent => @root_1)
107
+ # @child_2 = Dog.create(:name => "ATmega2561", :parent => @root_1)
108
+ # @child_2_1 = Dog.create(:name => "ATtiny24", :parent => @child_2)
109
+
110
+ # @root_2 = Dog.create(:name => "ST Ericsson")
111
+ # @child_3 = Dog.create(:name => "ISP1181B", :parent => @root_2)
112
+
113
+ # @root_1.publish
114
+ # @child_1.publish
115
+ # @child_2.publish
116
+ # @child_2_1.publish
117
+ # @root_2.publish
118
+ # end
119
+
120
+ # should "test draft record parents" do
121
+ # assert_equal(@root_2, @child_3.parent)
122
+ # assert_equal(@child_2, @child_2_1.parent)
123
+ # end
124
+
125
+ # should "test parents for published records" do
126
+ # assert_equal(@root_1.published_record, @child_1.published_record.parent)
127
+ # assert_equal(@root_1.published_record, @child_2.published_record.parent)
128
+ # assert_equal(@child_2.published_record, @child_2_1.published_record.parent)
129
+ # end
130
+
131
+ # should "move draft record to new parent, but keep published at old parent" do
132
+ # @child_2.parent = @root_2
133
+
134
+ # assert !@root_2.is_or_is_ancestor_of?(@child_2_1)
135
+ # assert !@child_2_1.is_or_is_descendant_of?(@root_2)
136
+ # assert !@root_2.descendants.include?(@child_2_1)
137
+
138
+ # @child_2.save
139
+ # @child_2_1.reload
140
+
141
+ # assert @root_2.is_or_is_ancestor_of?(@child_2_1)
142
+ # assert @child_2_1.is_or_is_descendant_of?(@root_2)
143
+ # assert @root_2.descendants.include?(@child_2_1)
144
+
145
+ # # test published against root_1
146
+ # assert @root_1.published_record.is_or_is_ancestor_of?(@child_2_1.published_record)
147
+ # assert @child_2_1.published_record.is_or_is_descendant_of?(@root_1.published_record)
148
+ # assert @root_1.published_record.descendants.include?(@child_2_1.published_record)
149
+ # end
150
+
151
+ # should "move both draft and published record to new parent" do
152
+ # @child_2.parent = @root_2
153
+
154
+ # assert !@root_2.is_or_is_ancestor_of?(@child_2_1)
155
+ # assert !@child_2_1.is_or_is_descendant_of?(@root_2)
156
+ # assert !@root_2.descendants.include?(@child_2_1)
157
+
158
+ # # can only test published after saving and publishing
159
+ # @child_2.save
160
+ # @child_2.publish # will also save
161
+ # @child_2.reload
162
+ # @child_2_1.reload
163
+
164
+ # assert @root_2.is_or_is_ancestor_of?(@child_2_1)
165
+ # assert @child_2_1.is_or_is_descendant_of?(@root_2)
166
+ # assert @root_2.descendants.include?(@child_2_1)
167
+
168
+ # assert @root_2.published_record.is_or_is_ancestor_of?(@child_2_1.published_record)
169
+ # assert @child_2_1.published_record.is_or_is_descendant_of?(@root_2.published_record)
170
+ # assert @root_2.published_record.descendants.include?(@child_2_1.published_record)
171
+ # end
172
+
173
+ # should "set a record as a root and check for ancestor" do
174
+ # @child_2.parent = nil
175
+
176
+ # assert !@root_2.is_or_is_ancestor_of?(@child_2_1)
177
+ # assert !@child_2_1.is_or_is_descendant_of?(@root_2)
178
+ # assert !@root_2.descendants.include?(@child_2_1)
179
+
180
+ # # can only test published after saving and publishing
181
+ # @child_2.save
182
+ # @child_2.publish # will also save
183
+ # @child_2.reload
184
+ # @child_2_1.reload
185
+
186
+ # assert @child_2.root?
187
+ # assert @child_2.published_record.root?
188
+ # assert @child_2_1.is_or_is_descendant_of?(@child_2)
189
+
190
+ # assert !@root_1.published_record.is_or_is_ancestor_of?(@child_2_1.published_record)
191
+ # assert !@child_2_1.published_record.is_or_is_descendant_of?(@root_1.published_record)
192
+ # assert !@root_1.published_record.descendants.include?(@child_2_1.published_record)
193
+ # end
194
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mm-draft
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-17 00:00:00.000000000 Z
12
+ date: 2012-12-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: i18n
@@ -50,8 +50,8 @@ executables: []
50
50
  extensions: []
51
51
  extra_rdoc_files: []
52
52
  files:
53
- - lib/draft.rb
54
53
  - lib/locale/en.yml
54
+ - lib/mm-draft.rb
55
55
  - lib/mongo_mapper/plugins/draft/callbacks.rb
56
56
  - lib/mongo_mapper/plugins/draft/draft.rb
57
57
  - lib/mongo_mapper/plugins/draft/keys.rb