mm-draft 0.1.5 → 0.1.7

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.
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