mongo_mapper-paranoia 0.0.1
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/.gitignore +5 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/Rakefile +14 -0
- data/lib/mongo_mapper-paranoia.rb +1 -0
- data/lib/mongo_mapper/paranoia.rb +41 -0
- data/lib/mongo_mapper/paranoia/acts_as_paranoid.rb +22 -0
- data/lib/mongo_mapper/paranoia/version.rb +5 -0
- data/mongo_mapper-paranoia.gemspec +26 -0
- data/spec/mongo_mapper/paranoia/acts_as_paranoid_spec.rb +14 -0
- data/spec/mongo_mapper/paranoia_spec.rb +72 -0
- data/spec/spec_helper.rb +9 -0
- metadata +122 -0
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
-cfs
|
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require 'rspec/core'
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
|
7
|
+
task :release => :spec
|
8
|
+
|
9
|
+
desc "Run Specs"
|
10
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
11
|
+
spec.pattern = "spec/**/*_spec.rb"
|
12
|
+
spec.verbose = true
|
13
|
+
spec.rspec_opts = ['--color']
|
14
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'mongo_mapper/paranoia'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'active_support/core_ext/object'
|
2
|
+
require 'mongo_mapper'
|
3
|
+
require 'mongo_mapper/plugins'
|
4
|
+
|
5
|
+
require 'mongo_mapper/paranoia/version'
|
6
|
+
require 'mongo_mapper/paranoia/acts_as_paranoid'
|
7
|
+
|
8
|
+
module MongoMapper
|
9
|
+
module Plugins
|
10
|
+
module Paranoia
|
11
|
+
extend ActiveSupport::Concern
|
12
|
+
|
13
|
+
included do
|
14
|
+
key :deleted_at, Time, :index => true
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods; end
|
18
|
+
|
19
|
+
module InstanceMethods
|
20
|
+
# Destroys the instance
|
21
|
+
# @see ActiveModel::Callbacks
|
22
|
+
def destroy
|
23
|
+
run_callbacks(:destroy) do
|
24
|
+
update_attribute(:deleted_at, Time.now)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
alias :delete :destroy
|
28
|
+
|
29
|
+
# @return [true, false] Whether or not the deleted_at attribute is set
|
30
|
+
def destroyed?
|
31
|
+
self.deleted_at.present?
|
32
|
+
end
|
33
|
+
alias :deleted? :destroyed?
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
MongoMapper::Document.plugin(MongoMapper::Plugins::Paranoia::ActsAsParanoid)
|
41
|
+
MongoMapper::EmbeddedDocument.plugin(MongoMapper::Plugins::Paranoia::ActsAsParanoid)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'mongo_mapper/paranoia'
|
2
|
+
|
3
|
+
module MongoMapper
|
4
|
+
module Plugins
|
5
|
+
module Paranoia
|
6
|
+
module ActsAsParanoid
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
# Includes the MongoMapper::Plugins::Paranoia MongoMapper Plugin
|
11
|
+
# @see MongoMapper::Plugins::Paranoia
|
12
|
+
def acts_as_paranoid
|
13
|
+
self.send(:include, ::MongoMapper::Plugins::Paranoia)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module InstanceMethods; end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "mongo_mapper/paranoia/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "mongo_mapper-paranoia"
|
7
|
+
s.version = MongoMapper::Paranoia::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Scott Gonyea"]
|
10
|
+
s.email = ["me@sgonyea.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Mongo Mapper ActsAsParanoid Plugin}
|
13
|
+
s.description = %q{Mongo Mapper ActsAsParanoid Plugin, modeled after Ryan Bigg's plugin}
|
14
|
+
|
15
|
+
s.add_dependency 'mongo_mapper'
|
16
|
+
s.add_dependency 'activesupport'
|
17
|
+
s.add_dependency 'i18n'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rspec', '~>2.6.0'
|
20
|
+
s.add_development_dependency 'bson_ext', '~>1.3.1'
|
21
|
+
|
22
|
+
s.files = `git ls-files`.split("\n")
|
23
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
25
|
+
s.require_paths = ["lib"]
|
26
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path("../../spec_helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe MongoMapper::Plugins::Paranoia::ActsAsParanoid do
|
4
|
+
class ParanoidBySugar
|
5
|
+
include MongoMapper::Document
|
6
|
+
acts_as_paranoid
|
7
|
+
end
|
8
|
+
|
9
|
+
context 'MongoMapper::Plugins::Paranoia Mixin' do
|
10
|
+
it 'should be present in the ancestors' do
|
11
|
+
ParanoidBySugar.ancestors.should include(MongoMapper::Plugins::Paranoia::InstanceMethods)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.expand_path("../spec_helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe MongoMapper::Plugins::Paranoia do
|
4
|
+
class ParanoidByInclude
|
5
|
+
include MongoMapper::Document
|
6
|
+
include MongoMapper::Plugins::Paranoia
|
7
|
+
end
|
8
|
+
|
9
|
+
context 'The plugin should mix in methods and keys' do
|
10
|
+
before(:each) do
|
11
|
+
@paranoid = ParanoidByInclude.new
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#deleted_at' do
|
15
|
+
it 'should be included via the plugin interface' do
|
16
|
+
@paranoid.should respond_to(:deleted_at)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#destroy, #delete' do
|
21
|
+
it 'should be included via the plugin interface' do
|
22
|
+
@paranoid.should respond_to(:destroy)
|
23
|
+
@paranoid.should respond_to(:delete)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#destroyed?, #deleted?' do
|
28
|
+
it 'should be included via the plugin interface' do
|
29
|
+
@paranoid.should respond_to(:destroyed?)
|
30
|
+
@paranoid.should respond_to(:deleted?)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'When destroying instances' do
|
36
|
+
before(:each) do
|
37
|
+
@paranoid = ParanoidByInclude.create!
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'Instance Methods' do
|
41
|
+
describe '#destroy' do
|
42
|
+
it 'should set the deleted_at timestamp' do
|
43
|
+
@paranoid.deleted_at.should be_nil
|
44
|
+
@paranoid.destroy
|
45
|
+
|
46
|
+
@paranoid.deleted_at.should be_present
|
47
|
+
@paranoid.deleted_at.should be_a(Time)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#destroyed?' do
|
52
|
+
it 'should be true if the object has been destroyed' do
|
53
|
+
@paranoid.destroyed?.should be_false
|
54
|
+
@paranoid.destroy
|
55
|
+
|
56
|
+
@paranoid.destroyed?.should be_true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'Persistence' do
|
62
|
+
it 'should still be destroyed, when queried from the server' do
|
63
|
+
pid = @paranoid.id
|
64
|
+
@paranoid.destroy
|
65
|
+
|
66
|
+
persistanoid = ParanoidByInclude.find(pid)
|
67
|
+
persistanoid.destroyed?.should be_true
|
68
|
+
persistanoid.deleted_at.should be_present
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
Bundler.require :development
|
4
|
+
Bundler.require :default
|
5
|
+
|
6
|
+
MongoMapper.connection = ::Mongo::ReplSetConnection.new(["localhost", 27017])
|
7
|
+
MongoMapper.database = 'mongo_mapper-paranoia-test'
|
8
|
+
|
9
|
+
Dir[ Bundler.root.join("spec/support/**/*.rb") ].each{|f| require f}
|
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongo_mapper-paranoia
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Scott Gonyea
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-06-10 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: mongo_mapper
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: activesupport
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: i18n
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ~>
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 2.6.0
|
57
|
+
type: :development
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: bson_ext
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.3.1
|
68
|
+
type: :development
|
69
|
+
version_requirements: *id005
|
70
|
+
description: Mongo Mapper ActsAsParanoid Plugin, modeled after Ryan Bigg's plugin
|
71
|
+
email:
|
72
|
+
- me@sgonyea.com
|
73
|
+
executables: []
|
74
|
+
|
75
|
+
extensions: []
|
76
|
+
|
77
|
+
extra_rdoc_files: []
|
78
|
+
|
79
|
+
files:
|
80
|
+
- .gitignore
|
81
|
+
- .rspec
|
82
|
+
- Gemfile
|
83
|
+
- Rakefile
|
84
|
+
- lib/mongo_mapper-paranoia.rb
|
85
|
+
- lib/mongo_mapper/paranoia.rb
|
86
|
+
- lib/mongo_mapper/paranoia/acts_as_paranoid.rb
|
87
|
+
- lib/mongo_mapper/paranoia/version.rb
|
88
|
+
- mongo_mapper-paranoia.gemspec
|
89
|
+
- spec/mongo_mapper/paranoia/acts_as_paranoid_spec.rb
|
90
|
+
- spec/mongo_mapper/paranoia_spec.rb
|
91
|
+
- spec/spec_helper.rb
|
92
|
+
homepage: ""
|
93
|
+
licenses: []
|
94
|
+
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
|
98
|
+
require_paths:
|
99
|
+
- lib
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: "0"
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: "0"
|
112
|
+
requirements: []
|
113
|
+
|
114
|
+
rubyforge_project:
|
115
|
+
rubygems_version: 1.8.5
|
116
|
+
signing_key:
|
117
|
+
specification_version: 3
|
118
|
+
summary: Mongo Mapper ActsAsParanoid Plugin
|
119
|
+
test_files:
|
120
|
+
- spec/mongo_mapper/paranoia/acts_as_paranoid_spec.rb
|
121
|
+
- spec/mongo_mapper/paranoia_spec.rb
|
122
|
+
- spec/spec_helper.rb
|