deleted_at 0.6.0.pre.2 → 0.6.0.pre.3

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
  SHA256:
3
- metadata.gz: b9cf5aea9d0f1df96b7fd9d30396733d8d523a8cf6076abb7c8b79b8c4c9c2e8
4
- data.tar.gz: 014e280a3bf095389b40d3b4f87f19335f4a1a4d538e08e60a95ced387ded595
3
+ metadata.gz: 661d2ca255bbab054db044f56237cc8fa6119dd86777f133d55952ad7e9951cf
4
+ data.tar.gz: e58379a9130a4e9b1bbd30672b659469171a254eddffd4f4b2734329c759cd0d
5
5
  SHA512:
6
- metadata.gz: 2fcbea0f8620db2ee9ad31e6e278647acfeb1511f0f03e88a00e9669dcdd6de2e669f79e8838a2070477c5a6597957baf02f6ebfefabedeca46c3274da66c972
7
- data.tar.gz: 6a998e6ba5e99f43d9c81923ada798670da76aaed3040fa83b24cf14f7a1088e2f3880bc34b985f431bfaf2be77f1ceb6b023a6da97f01cde106fc1bcb2e3934
6
+ metadata.gz: 2a488a453bef0c8fbc14694f88458a5ddb8fb24c7384ee528a16a31c2e72d6d7dd3e61596444391e26bfba802245cb75be83a9dc8d08cb28922ab3f35376d53f
7
+ data.tar.gz: 3949f4a143aedd3f0158888b8b07d53d011777750c7d2c672c65102a7880926b17c59fca055a1bd4e53f3ef8fdd8dc366d3ba391727fb2daa9c8425243f51ad3
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 Dale Stevens
3
+ Copyright (c) 2019 Dale Stevens
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/lib/deleted_at.rb CHANGED
@@ -3,7 +3,7 @@ require 'deleted_at/railtie' if defined?(Rails::Railtie)
3
3
 
4
4
  module DeletedAt
5
5
 
6
- MissingColumn = Class.new(StandardError)
6
+ MissingColumnError = Class.new(StandardError)
7
7
 
8
8
  DEFAULT_OPTIONS = {
9
9
  column: :deleted_at,
@@ -1,50 +1,73 @@
1
- require 'active_record'
2
- require 'deleted_at/relation'
3
-
4
1
  module DeletedAt
5
2
  module ActiveRecord
6
3
 
7
4
  def self.prepended(subclass)
8
- subclass.init_deleted_at_relations
9
5
  subclass.extend(ClassMethods)
6
+
7
+ subclass.class_eval do
8
+ init_deleted_at_relations
9
+ default_frame { where(deleted_at[:column] => nil) }
10
+ frame :all, -> {}
11
+ frame :deleted, -> { where.not(deleted_at[:column] => nil) }
12
+ end
10
13
  end
11
14
 
12
15
  def initialize(*args)
13
- super
14
- @destroyed = !deleted_at.nil?
16
+ super.tap do
17
+ @destroyed = deleted_at_nil?
18
+ end
15
19
  end
16
20
 
17
21
  def destroy
18
- soft_delete
19
- super
22
+ run_callbacks(:destroy) do
23
+ soft_delete
24
+ end
20
25
  end
21
26
 
22
27
  def delete
23
28
  soft_delete
24
- super
29
+ end
30
+
31
+ def destroy!
32
+ run_callbacks(:destroy) do
33
+ soft_delete
34
+ end
35
+ end
36
+
37
+ def delete!
38
+ soft_delete
25
39
  end
26
40
 
27
41
  private
28
42
 
29
43
  def soft_delete
44
+ return if destroyed?
30
45
  update_columns(self.class.deleted_at_attributes)
31
46
  @destroyed = true
47
+ freeze
48
+ self
49
+ end
50
+
51
+ def deleted_at_nil?
52
+ !read_attribute(self.class.deleted_at[:column]).nil?
32
53
  end
33
54
 
34
55
  module ClassMethods
35
56
 
36
57
  def inherited(subclass)
37
58
  super
38
- subclass.init_deleted_at_relations
59
+ # subclass.init_deleted_at_relations if deleted_at[:inherit]
60
+ end
61
+
62
+ def deleted_at_attributes
63
+ attributes = {
64
+ deleted_at[:column] => deleted_at[:proc].call
65
+ }
39
66
  end
40
67
 
41
- def const_missing(const)
42
- case const
43
- when :All, :Deleted
44
- all.tap do |_query|
45
- _query.deleted_at_scope = const
46
- end
47
- else super
68
+ def init_deleted_at_relations
69
+ instance_variable_get(:@relation_delegate_cache).each do |base, klass|
70
+ klass.send(:prepend, DeletedAt::Relation)
48
71
  end
49
72
  end
50
73
 
@@ -1,5 +1,4 @@
1
1
  require 'deleted_at/active_record'
2
-
3
2
  module DeletedAt
4
3
 
5
4
  module Core
@@ -15,39 +14,33 @@ module DeletedAt
15
14
 
16
15
  def self.raise_missing(klass)
17
16
  message = "Missing `#{klass.deleted_at[:column]}` in `#{klass.name}` when trying to employ `deleted_at`"
18
- raise(DeletedAt::MissingColumn, message)
17
+ raise(DeletedAt::MissingColumnError, message)
19
18
  end
20
19
 
21
20
  def self.has_deleted_at_column?(klass)
22
21
  klass.columns.map(&:name).include?(klass.deleted_at.dig(:column).to_s)
23
22
  end
24
23
 
24
+ def self.deleted_at_ready?(klass)
25
+ !::DeletedAt.disabled? &&
26
+ klass != ::ActiveRecord::Base &&
27
+ !klass.abstract_class? &&
28
+ klass.connected? &&
29
+ klass.table_exists? &&
30
+ !(klass < DeletedAt::ActiveRecord)
31
+ end
32
+
25
33
  module ClassMethods
26
34
 
27
35
  def with_deleted_at(options={}, &block)
28
36
  self.deleted_at = DeletedAt::DEFAULT_OPTIONS.merge(options)
29
37
  self.deleted_at[:proc] = block if block_given?
30
38
 
31
- return if ::DeletedAt.disabled?
32
-
39
+ return unless Core.deleted_at_ready?(self)
33
40
  DeletedAt::Core.raise_missing(self) unless Core.has_deleted_at_column?(self)
34
41
 
35
42
  self.prepend(DeletedAt::ActiveRecord)
36
-
37
43
  end
38
-
39
- def deleted_at_attributes
40
- attributes = {
41
- deleted_at[:column] => deleted_at[:proc].call
42
- }
43
- end
44
-
45
- def init_deleted_at_relations
46
- instance_variable_get(:@relation_delegate_cache).each do |base, klass|
47
- klass.send(:prepend, DeletedAt::Relation)
48
- end
49
- end
50
-
51
44
  end # End ClassMethods
52
45
 
53
46
  end
@@ -1,4 +1,6 @@
1
1
  require 'rails/railtie'
2
+ require 'active_record/framing'
3
+ require 'deleted_at/relation'
2
4
  require 'deleted_at/core'
3
5
  require 'deleted_at/table_definition'
4
6
 
@@ -8,6 +10,7 @@ module DeletedAt
8
10
  ActiveSupport.on_load(:active_record) do
9
11
  ::ActiveRecord::Base.prepend(DeletedAt::Core)
10
12
  ::ActiveRecord::ConnectionAdapters::TableDefinition.prepend(DeletedAt::TableDefinition)
13
+ # ::ActiveRecord::Associations::Association.prepend(DeletedAt::Association)
11
14
  end
12
15
  end
13
16
  end
@@ -1,50 +1,5 @@
1
1
  module DeletedAt
2
2
  module Relation
3
-
4
- def self.prepended(subclass)
5
- subclass.class_eval do
6
- attr_writer :deleted_at_scope
7
- end
8
- end
9
-
10
- def deleted_at_scope
11
- @deleted_at_scope ||= :Present
12
- end
13
-
14
- def deleted_at_select
15
- scoped_arel = case deleted_at_scope
16
- when :Deleted
17
- vanilla.dup.where(table[klass.deleted_at[:column]].not_eq(nil))
18
- when :Present
19
- vanilla.dup.where(table[klass.deleted_at[:column]].eq(nil))
20
- end
21
- end
22
-
23
- def vanilla
24
- # @vanilla ||= klass.const_get(:All).unscope(:where).freeze
25
- @vanilla ||= klass.unscoped.tap do |rel|
26
- rel.deleted_at_scope = :All
27
- end.freeze
28
- end
29
-
30
- # Rails 4.x
31
- def from_value
32
- if (subselect = deleted_at_select)
33
- [subselect, ::ActiveRecord::Base.connection.quote_table_name(table_name)]
34
- else
35
- super
36
- end
37
- end
38
-
39
- # Rails 5.x
40
- def from_clause
41
- if (subselect = deleted_at_select)
42
- ::ActiveRecord::Relation::FromClause.new(subselect, ::ActiveRecord::Base.connection.quote_table_name(table_name))
43
- else
44
- super
45
- end
46
- end
47
-
48
3
  def delete_all(*args)
49
4
  if args.pop
50
5
  ActiveSupport::Deprecation.warn(<<~STR)
@@ -0,0 +1,23 @@
1
+ module DeletedAt
2
+ class Table < Arel::Table
3
+
4
+ attr_accessor :shadow
5
+
6
+ def initialize(table_name, engine, shadow:)
7
+ super(table_name).tap do |table|
8
+ @engine = engine
9
+ @shadow = shadow
10
+ end
11
+ end
12
+
13
+ def name
14
+ case Thread.current[:selecting_deleted_at]
15
+ when nil, false
16
+ super
17
+ else
18
+ super + shadow.to_s
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module DeletedAt
2
- VERSION = "0.6.0-2"
2
+ VERSION = "0.6.0-3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deleted_at
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0.pre.2
4
+ version: 0.6.0.pre.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dale Stevens
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-04 00:00:00.000000000 Z
11
+ date: 2019-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '6'
33
+ - !ruby/object:Gem::Dependency
34
+ name: active_record-framing
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.1.0.pre.4
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.1.0.pre.4
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: pg
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -62,16 +76,16 @@ dependencies:
62
76
  name: bundler
63
77
  requirement: !ruby/object:Gem::Requirement
64
78
  requirements:
65
- - - "~>"
79
+ - - ">="
66
80
  - !ruby/object:Gem::Version
67
- version: '1.3'
81
+ version: '0'
68
82
  type: :development
69
83
  prerelease: false
70
84
  version_requirements: !ruby/object:Gem::Requirement
71
85
  requirements:
72
- - - "~>"
86
+ - - ">="
73
87
  - !ruby/object:Gem::Version
74
- version: '1.3'
88
+ version: '0'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: rake
77
91
  requirement: !ruby/object:Gem::Requirement
@@ -116,6 +130,7 @@ files:
116
130
  - lib/deleted_at/legacy.rb
117
131
  - lib/deleted_at/railtie.rb
118
132
  - lib/deleted_at/relation.rb
133
+ - lib/deleted_at/table.rb
119
134
  - lib/deleted_at/table_definition.rb
120
135
  - lib/deleted_at/version.rb
121
136
  homepage: https://github.com/TwilightCoders/deleted_at
@@ -140,8 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
155
  - !ruby/object:Gem::Version
141
156
  version: 1.3.1
142
157
  requirements: []
143
- rubyforge_project:
144
- rubygems_version: 2.7.6
158
+ rubygems_version: 3.0.3
145
159
  signing_key:
146
160
  specification_version: 4
147
161
  summary: Soft delete your data, but keep it clean.