mongoid_paranoia 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,55 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Criteria::Scopable do
4
+
5
+ context "when the document is paranoid" do
6
+
7
+ context "when calling a class method" do
8
+
9
+ let(:criteria) do
10
+ Fish.fresh
11
+ end
12
+
13
+ it "includes the deleted_at criteria in the selector" do
14
+ expect(criteria.selector).to eq({
15
+ "deleted_at" => nil, "fresh" => true
16
+ })
17
+ end
18
+ end
19
+
20
+ context "when chaining a class method to unscoped" do
21
+
22
+ let(:criteria) do
23
+ Fish.unscoped.fresh
24
+ end
25
+
26
+ it "does not include the deleted_at in the selector" do
27
+ expect(criteria.selector).to eq({ "fresh" => true })
28
+ end
29
+ end
30
+
31
+ context "when chaining a class method to deleted" do
32
+
33
+ let(:criteria) do
34
+ Fish.deleted.fresh
35
+ end
36
+
37
+ it "includes the deleted_at $ne criteria in the selector" do
38
+ expect(criteria.selector).to eq({
39
+ "deleted_at" => { "$ne" => nil }, "fresh" => true
40
+ })
41
+ end
42
+ end
43
+
44
+ context "when chaining a where to unscoped" do
45
+
46
+ let(:criteria) do
47
+ Fish.unscoped.where(fresh: true)
48
+ end
49
+
50
+ it "includes no default scoping information in the selector" do
51
+ expect(criteria.selector).to eq({ "fresh" => true })
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ describe "Paranoia uniqueness scoped validator" do
4
+ describe "#valid?" do
5
+ context "when the document is a root document" do
6
+ context "when the document is paranoid" do
7
+ before do
8
+ ParanoidPost.validates(:title, uniqueness: { conditions: -> { ParanoidPost.where(deleted_at: nil) } })
9
+ end
10
+
11
+ after do
12
+ ParanoidPost.reset_callbacks(:validate)
13
+ end
14
+
15
+ let!(:post) do
16
+ ParanoidPost.create(title: "testing")
17
+ end
18
+
19
+ context "when the field is unique" do
20
+
21
+ let(:new_post) do
22
+ ParanoidPost.new(title: "test")
23
+ end
24
+
25
+ it "returns true" do
26
+ expect(new_post).to be_valid
27
+ end
28
+ end
29
+
30
+ context "when the field is unique for non soft deleted docs" do
31
+
32
+ before do
33
+ post.delete!
34
+ end
35
+
36
+ let(:new_post) do
37
+ ParanoidPost.new(title: "testing")
38
+ end
39
+
40
+ it "returns true" do
41
+ expect(new_post).to be_valid
42
+ end
43
+ end
44
+
45
+ context "when the field is not unique for soft deleted docs" do
46
+
47
+ before do
48
+ post = ParanoidPost.create(title: "test")
49
+ post.delete
50
+ end
51
+
52
+ let(:new_post) do
53
+ ParanoidPost.new(title: "test")
54
+ end
55
+
56
+ it "returns true" do
57
+ expect(new_post).to be_valid
58
+ end
59
+ end
60
+
61
+ context "when the field is not unique" do
62
+
63
+ let(:new_post) do
64
+ ParanoidPost.new(title: "testing")
65
+ end
66
+
67
+ it "returns false" do
68
+ expect(new_post).not_to be_valid
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,80 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
+
4
+ MODELS = File.join(File.dirname(__FILE__), "app/models")
5
+ $LOAD_PATH.unshift(MODELS)
6
+
7
+ require "mongoid"
8
+ require "mongoid/paranoia"
9
+ require "rspec"
10
+
11
+ # These environment variables can be set if wanting to test against a database
12
+ # that is not on the local machine.
13
+ ENV["MONGOID_SPEC_HOST"] ||= "localhost"
14
+ ENV["MONGOID_SPEC_PORT"] ||= "27017"
15
+
16
+ # These are used when creating any connection in the test suite.
17
+ HOST = ENV["MONGOID_SPEC_HOST"]
18
+ PORT = ENV["MONGOID_SPEC_PORT"].to_i
19
+
20
+ # Moped.logger.level = Logger::DEBUG
21
+ # Mongoid.logger.level = Logger::DEBUG
22
+
23
+ # When testing locally we use the database named mongoid_test. However when
24
+ # tests are running in parallel on Travis we need to use different database
25
+ # names for each process running since we do not have transactions and want a
26
+ # clean slate before each spec run.
27
+ def database_id
28
+ "mongoid_test"
29
+ end
30
+
31
+ # Can we connect to MongoHQ from this box?
32
+ def mongohq_connectable?
33
+ ENV["MONGOHQ_REPL_PASS"].present?
34
+ end
35
+
36
+ # Set the database that the spec suite connects to.
37
+ Mongoid.configure do |config|
38
+ config.connect_to(database_id)
39
+ end
40
+
41
+ # Autoload every model for the test suite that sits in spec/app/models.
42
+ Dir[ File.join(MODELS, "*.rb") ].sort.each do |file|
43
+ name = File.basename(file, ".rb")
44
+ autoload name.camelize.to_sym, name
45
+ end
46
+
47
+ module Rails
48
+ class Application
49
+ end
50
+ end
51
+
52
+ module MyApp
53
+ class Application < Rails::Application
54
+ end
55
+ end
56
+
57
+ RSpec.configure do |config|
58
+
59
+ # Drop all collections
60
+ config.before(:each) do
61
+ Mongoid.purge!
62
+ end
63
+
64
+ # On travis we are creating many different databases on each test run. We
65
+ # drop the database after the suite.
66
+ config.after(:suite) do
67
+ if ENV["CI"]
68
+ Mongoid::Threaded.sessions[:default].drop
69
+ end
70
+ end
71
+
72
+ # Filter out MongoHQ specs if we can't connect to it.
73
+ config.filter_run_excluding(config: ->(value){
74
+ return true if value == :mongohq && !mongohq_connectable?
75
+ })
76
+ end
77
+
78
+ ActiveSupport::Inflector.inflections do |inflect|
79
+ inflect.singular("address_components", "address_component")
80
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid_paranoia
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Durran Jordan
8
+ - Josef Šimánek
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-07-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mongoid
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ! '>'
19
+ - !ruby/object:Gem::Version
20
+ version: '3'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ! '>'
26
+ - !ruby/object:Gem::Version
27
+ version: '3'
28
+ description: There may be times when you don't want documents to actually get deleted
29
+ from the database, but "flagged" as deleted. Mongoid provides a Paranoia module
30
+ to give you just that.
31
+ email:
32
+ - durran@gmail.com
33
+ - retro@ballgag.cz
34
+ executables: []
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - LICENSE
39
+ - README.md
40
+ - lib/mongoid-paranoia.rb
41
+ - lib/mongoid/paranoia.rb
42
+ - lib/mongoid/paranoia/monkey_patches.rb
43
+ - lib/mongoid/paranoia/version.rb
44
+ - lib/mongoid_paranoia.rb
45
+ - perf/scope.rb
46
+ - spec/app/models/address.rb
47
+ - spec/app/models/appointment.rb
48
+ - spec/app/models/author.rb
49
+ - spec/app/models/fish.rb
50
+ - spec/app/models/paranoid_phone.rb
51
+ - spec/app/models/paranoid_post.rb
52
+ - spec/app/models/person.rb
53
+ - spec/app/models/phone.rb
54
+ - spec/app/models/tag.rb
55
+ - spec/app/models/title.rb
56
+ - spec/mongoid/document_spec.rb
57
+ - spec/mongoid/nested_attributes_spec.rb
58
+ - spec/mongoid/paranoia_spec.rb
59
+ - spec/mongoid/scoping_spec.rb
60
+ - spec/mongoid/validatable/uniqueness_spec.rb
61
+ - spec/spec_helper.rb
62
+ homepage: https://github.com/simi/mongoid-paranoia
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.2.1
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: Paranoid documents
86
+ test_files:
87
+ - perf/scope.rb
88
+ - spec/app/models/address.rb
89
+ - spec/app/models/appointment.rb
90
+ - spec/app/models/author.rb
91
+ - spec/app/models/fish.rb
92
+ - spec/app/models/paranoid_phone.rb
93
+ - spec/app/models/paranoid_post.rb
94
+ - spec/app/models/person.rb
95
+ - spec/app/models/phone.rb
96
+ - spec/app/models/tag.rb
97
+ - spec/app/models/title.rb
98
+ - spec/mongoid/document_spec.rb
99
+ - spec/mongoid/nested_attributes_spec.rb
100
+ - spec/mongoid/paranoia_spec.rb
101
+ - spec/mongoid/scoping_spec.rb
102
+ - spec/mongoid/validatable/uniqueness_spec.rb
103
+ - spec/spec_helper.rb
104
+ has_rdoc: