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.
@@ -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 "spec_helper"
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
- require "pathname"
2
- ROOT_PATH = Pathname.new(__FILE__).join("../..").expand_path
3
- $LOAD_PATH.unshift(ROOT_PATH.join("lib").to_s)
4
-
5
- # Configure Rails Environment
6
- ENV["RAILS_ENV"] = "test"
7
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
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
- Rails.backtrace_cleaner.remove_silencers!
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
- # Requires supporting ruby files with custom matchers and macros, etc,
12
- # in spec/support/ and its subdirectories.
13
- Dir[ROOT_PATH.join("spec/support/**/*.rb")].each { |f| require f }
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 = "random"
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
- # Disable the should syntax compeletely; we use the expect syntax only.
23
- config.expect_with :rspec do |c|
24
- c.syntax = :expect
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.0
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-02-09 00:00:00.000000000 Z
12
+ date: 2015-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- version_requirements: !ruby/object:Gem::Requirement
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.1'
23
+ version: '4.2'
24
+ type: :runtime
23
25
  prerelease: false
24
- name: rails
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.1'
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.3'
40
+ version: '1.10'
47
41
  type: :development
48
- - !ruby/object:Gem::Dependency
42
+ prerelease: false
49
43
  version_requirements: !ruby/object:Gem::Requirement
50
44
  requirements:
51
- - - ! '>='
45
+ - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: '0'
54
- prerelease: false
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
- - !ruby/object:Gem::Dependency
56
+ prerelease: false
63
57
  version_requirements: !ruby/object:Gem::Requirement
64
58
  requirements:
65
- - - ~>
59
+ - - ! '>='
66
60
  - !ruby/object:Gem::Version
67
- version: 3.1.0
68
- prerelease: false
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.1.0
68
+ version: '3.3'
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: 3.3.0
75
72
  type: :development
76
- - !ruby/object:Gem::Dependency
73
+ prerelease: false
77
74
  version_requirements: !ruby/object:Gem::Requirement
78
75
  requirements:
79
76
  - - ~>
80
77
  - !ruby/object:Gem::Version
81
- version: '1.6'
82
- prerelease: false
83
- name: debugger
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: '1.6'
88
+ version: 4.0.5
89
89
  type: :development
90
- - !ruby/object:Gem::Dependency
90
+ prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ! '>='
93
+ - - ~>
94
94
  - !ruby/object:Gem::Version
95
- version: '0'
96
- prerelease: false
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
- - !ruby/object:Gem::Dependency
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
- prerelease: false
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.2.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