paranoia 2.0.3 → 2.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 691a38d6362b87d499cca9ca12d0988c45acbdcd
4
- data.tar.gz: 8bbbab8f2754a65876552d494c93373186f89a04
3
+ metadata.gz: 699077f31f4cc413787d2132a6a36fc18051392d
4
+ data.tar.gz: 3ad7c463ced3e000c097c76c3b77d3378f4100e7
5
5
  SHA512:
6
- metadata.gz: 5bb99eaac69f702473907da7b3988ed9487b4bd8904817dcf6e670498692343414c7db9f4fb987157953fb8cefcccd91a9ddae1d13186ddcb0d4f366b2448818
7
- data.tar.gz: d363de9761f82f26fcc927892b6cbe4f9ee60f9a41ad1ae878f7586d73f65a6c69263ffa1028e22b660aa9063823b33d867b4a090e4308267cb00bb80864e073
6
+ metadata.gz: d9b72b34e364d624fc9b0152f6be5d57903f87b0aed34ac6a010cb7bc0b117df0954db926595f67873cb43e3e6b5542ac4a07a6626e0d59de4af9d4c2874e132
7
+ data.tar.gz: 423bdba7a858510b877973e0746d0fbe896f96d43b6eae06793da88e9566755e53b9740bcaa1a82b883a12ac1876927f47a60cb58626200f02ec2678a89af6af
@@ -0,0 +1,11 @@
1
+ # paranoia Changelog
2
+
3
+ ## 2.0.4 (2014-12-02)
4
+
5
+ ### Features
6
+ * Add paranoia_scope as named version of default_scope [#184](https://github.com/radar/paranoia/pull/184) [Jozsef Nyitrai](https://github.com/nyjt)
7
+
8
+
9
+ ### Bug Fixes
10
+ * Fix initialization problems when missing table or no database connection [#186](https://github.com/radar/paranoia/issues/186)
11
+ * Fix broken restore of has_one associations [#185](https://github.com/radar/paranoia/issues/185) [#171](https://github.com/radar/paranoia/pull/171) [Martin Sereinig](https://github.com/srecnig)
@@ -144,7 +144,7 @@ module Paranoia
144
144
  if association_data.nil? && association.macro.to_s == "has_one"
145
145
  association_class_name = association.options[:class_name].present? ? association.options[:class_name] : association.name.to_s.camelize
146
146
  association_foreign_key = association.options[:foreign_key].present? ? association.options[:foreign_key] : "#{self.class.name.to_s.underscore}_id"
147
- Object.const_get(association_class_name).only_deleted.where(association_foreign_key, self.id).first.try(:restore, recursive: true)
147
+ Object.const_get(association_class_name).only_deleted.where(association_foreign_key => self.id).first.try(:restore, recursive: true)
148
148
  end
149
149
  end
150
150
 
@@ -154,7 +154,6 @@ end
154
154
 
155
155
  class ActiveRecord::Base
156
156
  def self.acts_as_paranoid(options={})
157
- raise "primary key required for "+self.name unless self.primary_key
158
157
  alias :destroy! :destroy
159
158
  alias :delete! :delete
160
159
  def really_destroy!
@@ -183,7 +182,10 @@ class ActiveRecord::Base
183
182
 
184
183
  self.paranoia_column = (options[:column] || :deleted_at).to_s
185
184
  self.paranoia_sentinel_value = options.fetch(:sentinel_value) { Paranoia.default_sentinel_value }
186
- default_scope { where(table_name => { paranoia_column => paranoia_sentinel_value }) }
185
+ def self.paranoia_scope
186
+ where(table_name => { paranoia_column => paranoia_sentinel_value })
187
+ end
188
+ default_scope { paranoia_scope }
187
189
 
188
190
  before_restore {
189
191
  self.class.notify_observers(:before_restore, self) if self.class.respond_to?(:notify_observers)
@@ -1,3 +1,3 @@
1
1
  module Paranoia
2
- VERSION = "2.0.3"
2
+ VERSION = "2.0.4"
3
3
  end
@@ -11,6 +11,10 @@ require File.expand_path(File.dirname(__FILE__) + "/../lib/paranoia")
11
11
 
12
12
  def connect!
13
13
  ActiveRecord::Base.establish_connection :adapter => 'sqlite3', database: ':memory:'
14
+ end
15
+
16
+ def setup!
17
+ connect!
14
18
  ActiveRecord::Base.connection.execute 'CREATE TABLE parent_models (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME)'
15
19
  ActiveRecord::Base.connection.execute 'CREATE TABLE paranoid_models (id INTEGER NOT NULL PRIMARY KEY, parent_model_id INTEGER, deleted_at DATETIME)'
16
20
  ActiveRecord::Base.connection.execute 'CREATE TABLE paranoid_model_with_belongs (id INTEGER NOT NULL PRIMARY KEY, parent_model_id INTEGER, deleted_at DATETIME, paranoid_model_with_has_one_id INTEGER)'
@@ -28,7 +32,6 @@ def connect!
28
32
  ActiveRecord::Base.connection.execute 'CREATE TABLE custom_column_models (id INTEGER NOT NULL PRIMARY KEY, destroyed_at DATETIME)'
29
33
  ActiveRecord::Base.connection.execute 'CREATE TABLE custom_sentinel_models (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME NOT NULL)'
30
34
  ActiveRecord::Base.connection.execute 'CREATE TABLE non_paranoid_models (id INTEGER NOT NULL PRIMARY KEY, parent_model_id INTEGER)'
31
- ActiveRecord::Base.connection.execute 'CREATE TABLE idless_models (deleted_at DATETIME)'
32
35
  end
33
36
 
34
37
  class WithDifferentConnection < ActiveRecord::Base
@@ -37,7 +40,7 @@ class WithDifferentConnection < ActiveRecord::Base
37
40
  acts_as_paranoid
38
41
  end
39
42
 
40
- connect!
43
+ setup!
41
44
 
42
45
  class ParanoiaTest < test_framework
43
46
  def setup
@@ -535,7 +538,28 @@ class ParanoiaTest < test_framework
535
538
 
536
539
  assert hasOne.reload.deleted_at.nil?
537
540
  end
538
-
541
+
542
+ # covers #185
543
+ def test_restoring_recursive_has_one_restores_correct_object
544
+ hasOnes = 2.times.map { ParanoidModelWithHasOne.create }
545
+ belongsTos = 2.times.map { ParanoidModelWithBelong.create }
546
+
547
+ hasOnes[0].update paranoid_model_with_belong: belongsTos[0]
548
+ hasOnes[1].update paranoid_model_with_belong: belongsTos[1]
549
+
550
+ hasOnes.each(&:destroy)
551
+
552
+ ParanoidModelWithHasOne.restore(hasOnes[1], :recursive => true)
553
+ hasOnes.each(&:reload)
554
+ belongsTos.each(&:reload)
555
+
556
+ # without #185, belongsTos[0] will be restored instead of belongsTos[1]
557
+ refute_nil hasOnes[0].deleted_at
558
+ refute_nil belongsTos[0].deleted_at
559
+ assert_nil hasOnes[1].deleted_at
560
+ assert_nil belongsTos[1].deleted_at
561
+ end
562
+
539
563
  # covers #131
540
564
  def test_has_one_really_destroy_with_nil
541
565
  model = ParanoidModelWithHasOne.create
@@ -603,7 +627,8 @@ class ParanoiaTest < test_framework
603
627
  a.destroy!
604
628
  a.restore!
605
629
  # This test passes if no exception is raised
606
- connect! # Reconnect the main connection
630
+ ensure
631
+ setup! # Reconnect the main connection
607
632
  end
608
633
 
609
634
  def test_restore_clear_association_cache_if_associations_present
@@ -621,10 +646,12 @@ class ParanoiaTest < test_framework
621
646
  assert_equal 3, parent.very_related_models.size
622
647
  end
623
648
 
624
- def test_model_without_primary_key
625
- assert_raises(RuntimeError) do
626
- IdlessModel.class_eval{ acts_as_paranoid }
627
- end
649
+ def test_model_without_db_connection
650
+ ActiveRecord::Base.remove_connection
651
+
652
+ NoConnectionModel.class_eval{ acts_as_paranoid }
653
+ ensure
654
+ setup!
628
655
  end
629
656
 
630
657
  private
@@ -766,5 +793,5 @@ class AsplodeModel < ActiveRecord::Base
766
793
  end
767
794
  end
768
795
 
769
- class IdlessModel < ActiveRecord::Base
796
+ class NoConnectionModel < ActiveRecord::Base
770
797
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paranoia
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - radarlistener@gmail.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-21 00:00:00.000000000 Z
11
+ date: 2014-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -65,6 +65,7 @@ extra_rdoc_files: []
65
65
  files:
66
66
  - ".gitignore"
67
67
  - ".travis.yml"
68
+ - CHANGELOG.md
68
69
  - Gemfile
69
70
  - LICENSE
70
71
  - README.md