destroyed_at 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d63b138a42814623971150b35a82be8241fa698c
4
- data.tar.gz: 7fc26af45fd4890ba6e705e0cada5c739c962cb9
3
+ metadata.gz: 0891b99ff62c41dcc3c065cb1ac598781707ea66
4
+ data.tar.gz: 15b26364c34fa8e7ba0868e995a787dcfa3b9328
5
5
  SHA512:
6
- metadata.gz: 1cb8db486711ff5a47de49a2b5d47ad0cc45c2e437c341279590c6619acfefba7cdd6836e1a79193a43da033a138d54fe46fd0b0b9ecb84459a9a9da23630ea1
7
- data.tar.gz: 885386854dcc5e2ecdb7e51d85f254a630bc68e8c1e4594d2f6f40179721f6a3609f59419401e062dab39682b22036349c9104539b9017eedd0f756ce1f0e862
6
+ metadata.gz: 5bd593a8e0d239de2196877179e935a02f0bf4ef3b1907396b405430011455a3bf4ba9771dbb434ac6498e5ff05aea79ab25d9375f84752831c90cb10e385120
7
+ data.tar.gz: 27072734f2bcfcf621ef0fe54748b2d035477f5f7cf228e7fc4533d47b385eca584308bd47601c816ebe39b3d94b88ed1ce52ab6882477fd04b60d5ee34c8c8d
@@ -1,10 +1,18 @@
1
+ ## 1.0.0
2
+
3
+ * Requires equal to or greater than Ruby `2.0` -
4
+ [ryanwood](https://github.com/ryanwood)
5
+ * Updates `reflections` to `_reflections` -
6
+ [mukimov](https://github.com/mukimov)
7
+ * Fixes an exception which was was raised when attempting to destroy a
8
+ target record whose parent did not mix in DestroyedAt.
9
+
1
10
  ## 0.4.0
2
11
 
3
12
  * Updates for Rails 4.1
4
13
  * Removes `.with_default_scope` which has been deprecated.
5
14
  * Enables retrieval of destroyed objects by time via `.destroyed`
6
- method, which now takes an optional time attribute. - Lin Reid & Dan
7
- McClain
15
+ method, which now takes an optional time attribute. - [linstula](https://github.com/linstula) & [danmcclain](https://github.com/danmcclain)
8
16
  * Removes `m` as a development dependency, since it is not compatible
9
17
  with `minitest 5`.
10
18
 
@@ -12,13 +20,13 @@ McClain
12
20
  **Stable for Rails 4.0**
13
21
 
14
22
  * [Bug] Fixed route not raising when resource constant does not exist -
15
- Brian Cardarella
23
+ [bcardarella](https://github.com/bcardarella)
16
24
 
17
25
  ## 0.3.0
18
26
 
19
- * Fix issue with has_many destroy against regular models - Brian
20
- Cardarella
27
+ * Fix issue with has_many destroy against regular models - [bcardarella](https://github.com/bcardarella)
21
28
  * Relation.destoyed removes the destoyed scope and adds a scope
22
- for records that have been destoyed - Dan McClain
23
- * Added /restore route for restorable resources - Brian Cardarella &
24
- Romina Vargas
29
+ for records that have been destoyed -
30
+ [danmcclain](https://github.com/danmcclain)
31
+ * Added /restore route for restorable resources - [bcardarella](https://github.com/bcardarella) &
32
+ [rsocci](https://github.com/rsocci)
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.required_ruby_version = '>= 2.1'
20
+ spec.required_ruby_version = '~> 2.0'
21
21
 
22
22
  spec.add_runtime_dependency "activerecord", '~> 4.1'
23
23
  spec.add_runtime_dependency 'actionpack', '~> 4.1'
@@ -14,6 +14,14 @@ module DestroyedAt
14
14
  end
15
15
  end
16
16
 
17
+ def self.destroy_target_of_association(owner, target)
18
+ if target.respond_to?(:destroyed_at) && owner.respond_to?(:destroyed_at)
19
+ target.destroy(owner.destroyed_at)
20
+ elsif target.respond_to?(:destroyed_at)
21
+ target.destroy
22
+ end
23
+ end
24
+
17
25
  module ClassMethods
18
26
  def destroyed(time = nil)
19
27
  query = where.not(destroyed_at: nil)
@@ -67,7 +75,7 @@ module DestroyedAt
67
75
  end
68
76
 
69
77
  def _restore_associations
70
- reflections.select { |key, value| value.options[:dependent] == :destroy }.keys.each do |key|
78
+ _reflections.select { |key, value| value.options[:dependent] == :destroy }.keys.each do |key|
71
79
  assoc = association(key)
72
80
  reload_association = false
73
81
  if assoc.options[:through] && assoc.options[:dependent] == :destroy
@@ -1,12 +1,10 @@
1
1
  module DestroyedAt
2
2
  module BelongsToAssociation
3
3
  def handle_dependency
4
- if load_target
5
- if options[:dependent] == :destroy && target.respond_to?(:destroyed_at)
6
- target.destroy(owner.destroyed_at)
7
- else
8
- super
9
- end
4
+ if load_target && method == :destroy
5
+ DestroyedAt.destroy_target_of_association(target, owner)
6
+ else
7
+ super
10
8
  end
11
9
  end
12
10
  end
@@ -1,12 +1,10 @@
1
1
  module DestroyedAt
2
2
  module HasOneAssociation
3
3
  def delete(method = options[:dependent])
4
- if load_target
5
- if method == :destroy && target.respond_to?(:destroyed_at)
6
- target.destroy(owner.destroyed_at)
7
- else
8
- super
9
- end
4
+ if load_target && method == :destroy
5
+ DestroyedAt.destroy_target_of_association(target, owner)
6
+ else
7
+ super
10
8
  end
11
9
  end
12
10
  end
@@ -14,7 +14,7 @@ ActionDispatch::Routing::Mapper.send(:prepend, DestroyedAt::Routes)
14
14
  module DestroyedAt::Resource
15
15
  def default_actions
16
16
  actions = super
17
- class_name = self.name.camelcase.singularize
17
+ class_name = self.singular.camelcase
18
18
 
19
19
  if Module.const_defined?(class_name) && class_name.constantize.included_modules.include?(DestroyedAt)
20
20
  actions << :restore
@@ -13,7 +13,7 @@ module DestroyedAt::Mapper
13
13
  module Resource
14
14
  def default_actions
15
15
  actions = super
16
- if self.name.camelcase.singularize.constantize.included_modules.include?(DestroyedAt)
16
+ if self.singular.camelcase.constantize.included_modules.include?(DestroyedAt)
17
17
  actions << :restore
18
18
  end
19
19
 
@@ -1,3 +1,3 @@
1
1
  module DestroyedAt
2
- VERSION = "0.4.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -72,6 +72,15 @@ describe 'destroying an activerecord instance' do
72
72
  post.destroy
73
73
  Categorization.unscoped.count.must_equal 0
74
74
  end
75
+
76
+ it 'destroys child when parent does not mixin DestroyedAt' do
77
+ avatar = Avatar.create
78
+ author = Author.create(avatar: avatar)
79
+ author.destroy!
80
+
81
+ Author.count.must_equal 0
82
+ Avatar.count.must_equal 1
83
+ end
75
84
  end
76
85
 
77
86
  describe 'restoring an activerecord instance' do
@@ -71,6 +71,19 @@ class MapperTest < ActiveSupport::TestCase
71
71
  end
72
72
  end
73
73
 
74
+ test 'does not raise if `:as` option is used in routes' do
75
+ draw do
76
+ resources :cars, as: :automobiles
77
+ end
78
+
79
+ begin
80
+ @set.recognize_path('/cars', method: :get)
81
+ assert true, 'path recognized'
82
+ rescue ActionController::RoutingError
83
+ assert false, 'this should not be reached'
84
+ end
85
+ end
86
+
74
87
  private
75
88
 
76
89
  def draw(&block)
@@ -28,6 +28,7 @@ ActiveRecord::Base.establish_connection(
28
28
  DatabaseCleaner.strategy = :truncation
29
29
 
30
30
  ActiveRecord::Base.connection.execute(%{CREATE TABLE authors (id INTEGER PRIMARY KEY);})
31
+ ActiveRecord::Base.connection.execute(%{CREATE TABLE avatars (id INTEGER PRIMARY KEY, author_id INTEGER, destroyed_at DATETIME);})
31
32
  ActiveRecord::Base.connection.execute(%{CREATE TABLE categories (id INTEGER PRIMARY KEY);})
32
33
  ActiveRecord::Base.connection.execute(%{CREATE TABLE categorizations (id INTEGER PRIMARY KEY, category_id INTEGER, post_id INTEGER);})
33
34
  ActiveRecord::Base.connection.execute(%{CREATE TABLE comments (id INTEGER PRIMARY KEY, commenter_id INTEGER, post_id INTEGER, destroyed_at DATETIME);})
@@ -37,6 +38,12 @@ ActiveRecord::Base.connection.execute(%{CREATE TABLE posts (id INTEGER PRIMARY K
37
38
 
38
39
  class Author < ActiveRecord::Base
39
40
  has_many :posts
41
+ has_one :avatar, dependent: :destroy
42
+ end
43
+
44
+ class Avatar < ActiveRecord::Base
45
+ include DestroyedAt
46
+ belongs_to :author
40
47
  end
41
48
 
42
49
  class Category < ActiveRecord::Base
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: destroyed_at
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Dupuis Jr.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-11 00:00:00.000000000 Z
11
+ date: 2014-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -172,9 +172,9 @@ require_paths:
172
172
  - lib
173
173
  required_ruby_version: !ruby/object:Gem::Requirement
174
174
  requirements:
175
- - - ">="
175
+ - - "~>"
176
176
  - !ruby/object:Gem::Version
177
- version: '2.1'
177
+ version: '2.0'
178
178
  required_rubygems_version: !ruby/object:Gem::Requirement
179
179
  requirements:
180
180
  - - ">="
@@ -182,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
182
  version: '0'
183
183
  requirements: []
184
184
  rubyforge_project:
185
- rubygems_version: 2.2.0
185
+ rubygems_version: 2.2.2
186
186
  signing_key:
187
187
  specification_version: 4
188
188
  summary: Safe destroy for ActiveRecord.