rails_soft_deletable 0.2.0 → 0.2.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.
- checksums.yaml +8 -8
- data/lib/rails_soft_deletable/callbacks.rb +7 -7
- data/lib/rails_soft_deletable/query.rb +3 -1
- data/lib/rails_soft_deletable/rails/active_record.rb +1 -1
- data/lib/rails_soft_deletable/version.rb +1 -1
- data/spec/dummy/app/models/decimal_model.rb +2 -0
- data/spec/dummy/app/models/integer_model.rb +3 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +0 -0
- data/spec/dummy/log/test.log +1131 -759
- data/spec/rails_helper.rb +37 -0
- data/spec/rails_soft_deletable_spec.rb +38 -2
- data/spec/spec_helper.rb +57 -16
- metadata +61 -37
@@ -0,0 +1,37 @@
|
|
1
|
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
2
|
+
require "pathname"
|
3
|
+
ROOT_PATH = Pathname.new(__FILE__).join("../..").expand_path
|
4
|
+
$LOAD_PATH.unshift(ROOT_PATH.join("lib").to_s)
|
5
|
+
|
6
|
+
# Configure Rails Environment
|
7
|
+
ENV["RAILS_ENV"] = "test"
|
8
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
9
|
+
require "rspec/rails"
|
10
|
+
require "test_after_commit"
|
11
|
+
|
12
|
+
Rails.backtrace_cleaner.remove_silencers!
|
13
|
+
|
14
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
15
|
+
# in spec/support/ and its subdirectories.
|
16
|
+
Dir[ROOT_PATH.join("spec/support/**/*.rb")].each { |f| require f }
|
17
|
+
|
18
|
+
RSpec.configure do |config|
|
19
|
+
# Run specs in random order to surface order dependencies. If you find an
|
20
|
+
# order dependency and want to debug it, you can fix the order by providing
|
21
|
+
# the seed, which is printed after each run.
|
22
|
+
# --seed 1234
|
23
|
+
config.order = "random"
|
24
|
+
|
25
|
+
# Disable the should syntax compeletely; we use the expect syntax only.
|
26
|
+
config.expect_with :rspec do |c|
|
27
|
+
c.syntax = :expect
|
28
|
+
end
|
29
|
+
|
30
|
+
config.before(:suite) do
|
31
|
+
silence_stream(STDOUT) do
|
32
|
+
load("#{Rails.root}/db/schema.rb")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
config.use_transactional_fixtures = true
|
37
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require "
|
1
|
+
require "rails_helper"
|
2
2
|
|
3
3
|
describe RailsSoftDeletable do
|
4
4
|
let (:model) { IntegerModel.create! }
|
5
|
-
let (:decimal_model) { DecimalModel.create! }
|
5
|
+
let (:decimal_model) { DecimalModel.create!(integer_model_id: model.id) }
|
6
6
|
let (:integer_model) { IntegerModel.create! }
|
7
7
|
let (:forest) { Forest.create! }
|
8
8
|
let (:park) { Park.create! }
|
@@ -13,6 +13,42 @@ describe RailsSoftDeletable do
|
|
13
13
|
|
14
14
|
expect(IntegerModel.with_deleted).to include(model, integer_model)
|
15
15
|
end
|
16
|
+
|
17
|
+
context "when using with_deleted with associations" do
|
18
|
+
let! (:decimal_model2) { DecimalModel.create!(integer_model_id: integer_model.id) }
|
19
|
+
|
20
|
+
it "returns both non deleted and soft deleted object that realated to association" do
|
21
|
+
decimal_model.destroy
|
22
|
+
|
23
|
+
expect(model.decimal_models.with_deleted.to_a).to eq([decimal_model])
|
24
|
+
end
|
25
|
+
|
26
|
+
it "only affects the associations or model it touch" do
|
27
|
+
decimal_model.destroy
|
28
|
+
|
29
|
+
expect(IntegerModel.with_deleted.joins(:decimal_models).pluck(:id)).to eq([integer_model.id])
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when access with_deleted associations with joins" do
|
33
|
+
it "returns both non deleted and soft deleted object that realated to association" do
|
34
|
+
# `unscoped` not being respected for Rails >= 4.0 when joining table, this issue remains unsolved.
|
35
|
+
# For example:
|
36
|
+
# In IntegerModel:
|
37
|
+
# has_many :decimal_models_with_deleted, -> { unscope where: :deleted_at }, class_name: "DecimalModel"
|
38
|
+
#
|
39
|
+
# IntegerModel.with_deleted.joins(:decimal_models_with_deleted).to_sql
|
40
|
+
# => "SELECT \"integer_models\".* FROM \"integer_models\" INNER JOIN \"decimal_models\" ON \"decimal_models\".\"integer_model_id\" = \"integer_models\".\"id\" AND \"decimal_models\".\"deleted_at\" = 0"
|
41
|
+
#
|
42
|
+
# Related issue: https://github.com/rails/rails/issues/13775
|
43
|
+
# Related PR: https://github.com/rails/rails/pull/18109
|
44
|
+
#
|
45
|
+
# The only solution is to using raw sql join to remove the default scope
|
46
|
+
expect(IntegerModel.with_deleted.
|
47
|
+
joins("join decimal_models on decimal_models.integer_model_id = integer_models.id").pluck(:id)).
|
48
|
+
to eq([integer_model.id])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
16
52
|
end
|
17
53
|
|
18
54
|
context ".only_deleted" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,26 +1,67 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
#
|
6
|
-
|
7
|
-
|
1
|
+
RSpec.configure do |config|
|
2
|
+
# The settings below are suggested to provide a good initial experience
|
3
|
+
# with RSpec, but feel free to customize to your heart's content.
|
4
|
+
# These two settings work together to allow you to limit a spec run
|
5
|
+
# to individual examples or groups you care about by tagging them with
|
6
|
+
# `:focus` metadata. When nothing is tagged with `:focus`, all examples
|
7
|
+
# get run.
|
8
|
+
config.filter_run :focus
|
9
|
+
config.run_all_when_everything_filtered = true
|
8
10
|
|
9
|
-
|
11
|
+
# Many RSpec users commonly either run the entire suite or an individual
|
12
|
+
# file, and it's useful to allow more verbose output when running an
|
13
|
+
# individual spec file.
|
14
|
+
if config.files_to_run.one?
|
15
|
+
# Use the documentation formatter for detailed output,
|
16
|
+
# unless a formatter has already been configured
|
17
|
+
# (e.g. via a command-line flag).
|
18
|
+
config.default_formatter = "doc"
|
19
|
+
end
|
10
20
|
|
11
|
-
#
|
12
|
-
#
|
13
|
-
|
21
|
+
# Print the 10 slowest examples and example groups at the
|
22
|
+
# end of the spec run, to help surface which specs are running
|
23
|
+
# particularly slow.
|
24
|
+
config.profile_examples = 10
|
14
25
|
|
15
|
-
RSpec.configure do |config|
|
16
26
|
# Run specs in random order to surface order dependencies. If you find an
|
17
27
|
# order dependency and want to debug it, you can fix the order by providing
|
18
28
|
# the seed, which is printed after each run.
|
19
29
|
# --seed 1234
|
20
|
-
config.order =
|
30
|
+
config.order = :random
|
31
|
+
|
32
|
+
# Seed global randomization in this process using the `--seed` CLI option.
|
33
|
+
# Setting this allows you to use `--seed` to deterministically reproduce
|
34
|
+
# test failures related to randomization by passing the same `--seed` value
|
35
|
+
# as the one that triggered the failure.
|
36
|
+
Kernel.srand config.seed
|
21
37
|
|
22
|
-
#
|
23
|
-
|
24
|
-
|
38
|
+
# rspec-expectations config goes here. You can use an alternate
|
39
|
+
# assertion/expectation library such as wrong or the stdlib/minitest
|
40
|
+
# assertions if you prefer.
|
41
|
+
config.expect_with :rspec do |expectations|
|
42
|
+
# Enable only the newer, non-monkey-patching expect syntax.
|
43
|
+
# For more details, see:
|
44
|
+
# - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
|
45
|
+
expectations.syntax = :expect
|
25
46
|
end
|
47
|
+
|
48
|
+
# rspec-mocks config goes here. You can use an alternate test double
|
49
|
+
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
50
|
+
config.mock_with :rspec do |mocks|
|
51
|
+
# Enable only the newer, non-monkey-patching expect syntax.
|
52
|
+
# For more details, see:
|
53
|
+
# - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
54
|
+
mocks.syntax = :expect
|
55
|
+
|
56
|
+
# XXX: Disable verifying of partial doubles since there's currently an issue
|
57
|
+
# with helper methods defined in the controller and exposed with `helper_method`.
|
58
|
+
# https://github.com/rspec/rspec-rails/issues/1076
|
59
|
+
#
|
60
|
+
# Prevents you from mocking or stubbing a method that does not exist on
|
61
|
+
# a real object. This is generally recommended.
|
62
|
+
# mocks.verify_partial_doubles = true
|
63
|
+
end
|
64
|
+
|
65
|
+
# Treat deprecations as errors
|
66
|
+
config.raise_errors_for_deprecations!
|
26
67
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_soft_deletable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Quan Nguyen
|
@@ -9,49 +9,43 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-07-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
15
|
+
name: rails
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - ! '>='
|
18
19
|
- !ruby/object:Gem::Version
|
19
20
|
version: '3.2'
|
20
21
|
- - <
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: '4.
|
23
|
+
version: '4.2'
|
24
|
+
type: :runtime
|
23
25
|
prerelease: false
|
24
|
-
|
25
|
-
requirement: !ruby/object:Gem::Requirement
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
27
|
requirements:
|
27
28
|
- - ! '>='
|
28
29
|
- !ruby/object:Gem::Version
|
29
30
|
version: '3.2'
|
30
31
|
- - <
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: '4.
|
33
|
-
type: :runtime
|
33
|
+
version: '4.2'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ~>
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '1.3'
|
40
|
-
prerelease: false
|
41
35
|
name: bundler
|
42
36
|
requirement: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
38
|
- - ~>
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version: '1.
|
40
|
+
version: '1.10'
|
47
41
|
type: :development
|
48
|
-
|
42
|
+
prerelease: false
|
49
43
|
version_requirements: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
54
|
-
|
47
|
+
version: '1.10'
|
48
|
+
- !ruby/object:Gem::Dependency
|
55
49
|
name: rake
|
56
50
|
requirement: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
@@ -59,41 +53,47 @@ dependencies:
|
|
59
53
|
- !ruby/object:Gem::Version
|
60
54
|
version: '0'
|
61
55
|
type: :development
|
62
|
-
|
56
|
+
prerelease: false
|
63
57
|
version_requirements: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
|
-
- -
|
59
|
+
- - ! '>='
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
68
|
-
|
69
|
-
name: rspec
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec-rails
|
70
64
|
requirement: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
66
|
- - ~>
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version: 3.
|
68
|
+
version: '3.3'
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 3.3.0
|
75
72
|
type: :development
|
76
|
-
|
73
|
+
prerelease: false
|
77
74
|
version_requirements: !ruby/object:Gem::Requirement
|
78
75
|
requirements:
|
79
76
|
- - ~>
|
80
77
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
82
|
-
|
83
|
-
|
78
|
+
version: '3.3'
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 3.3.0
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: byebug
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - ~>
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
88
|
+
version: 4.0.5
|
89
89
|
type: :development
|
90
|
-
|
90
|
+
prerelease: false
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- -
|
93
|
+
- - ~>
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
96
|
-
|
95
|
+
version: 4.0.5
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
97
|
name: timecop
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
@@ -101,13 +101,13 @@ dependencies:
|
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
103
|
type: :development
|
104
|
-
|
104
|
+
prerelease: false
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
|
-
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
111
|
name: sqlite3
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
@@ -115,6 +115,26 @@ dependencies:
|
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '0'
|
117
117
|
type: :development
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: test_after_commit
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ~>
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 0.4.1
|
131
|
+
type: :development
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ~>
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 0.4.1
|
118
138
|
description: Soft deletable for ActiveRecord on Rails 3+.
|
119
139
|
email:
|
120
140
|
- quan@listia.com
|
@@ -162,12 +182,14 @@ files:
|
|
162
182
|
- spec/dummy/db/schema.rb
|
163
183
|
- spec/dummy/db/test.sqlite3
|
164
184
|
- spec/dummy/lib/soft_deletable_model_callbacks.rb
|
185
|
+
- spec/dummy/log/development.log
|
165
186
|
- spec/dummy/log/test.log
|
166
187
|
- spec/dummy/public/404.html
|
167
188
|
- spec/dummy/public/422.html
|
168
189
|
- spec/dummy/public/500.html
|
169
190
|
- spec/dummy/public/favicon.ico
|
170
191
|
- spec/dummy/script/rails
|
192
|
+
- spec/rails_helper.rb
|
171
193
|
- spec/rails_soft_deletable_spec.rb
|
172
194
|
- spec/spec_helper.rb
|
173
195
|
- spec/support/environment.rb
|
@@ -192,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
214
|
version: '0'
|
193
215
|
requirements: []
|
194
216
|
rubyforge_project:
|
195
|
-
rubygems_version: 2.
|
217
|
+
rubygems_version: 2.4.5
|
196
218
|
signing_key:
|
197
219
|
specification_version: 4
|
198
220
|
summary: Soft deletable for ActiveRecord on Rails 3+
|
@@ -226,12 +248,14 @@ test_files:
|
|
226
248
|
- spec/dummy/db/schema.rb
|
227
249
|
- spec/dummy/db/test.sqlite3
|
228
250
|
- spec/dummy/lib/soft_deletable_model_callbacks.rb
|
251
|
+
- spec/dummy/log/development.log
|
229
252
|
- spec/dummy/log/test.log
|
230
253
|
- spec/dummy/public/404.html
|
231
254
|
- spec/dummy/public/422.html
|
232
255
|
- spec/dummy/public/500.html
|
233
256
|
- spec/dummy/public/favicon.ico
|
234
257
|
- spec/dummy/script/rails
|
258
|
+
- spec/rails_helper.rb
|
235
259
|
- spec/rails_soft_deletable_spec.rb
|
236
260
|
- spec/spec_helper.rb
|
237
261
|
- spec/support/environment.rb
|