act_as_disabled 0.0.3
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 +7 -0
- data/LICENSE +0 -0
- data/README.md +0 -0
- data/lib/act_as_disabled.rb +115 -0
- data/lib/act_as_disabled/version.rb +3 -0
- metadata +177 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 61e6ff46f6176b5cdbac24eff4391a3150df38be393e87e6b85eb9c8705d62c4
|
4
|
+
data.tar.gz: 36da483218a7fef6fdb534d449bd380b4bb162f103cc9829453cddb1f25ec0dc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a613dec0166b29504959c57abff5ca5302c4d1164bfe830038c0ea7c462b87b3664200e21eea84612478335d2b8998bc0c0334fc6e101d0c07136f9ebcf4919
|
7
|
+
data.tar.gz: b8e4fcb4e94ba759128afdca609f975958f3a9442ddcea523b87cb3df9fb73d89cf9dc395305deab409a422690b104e53bed589133650941ac0557f9229ba9dc
|
data/LICENSE
ADDED
File without changes
|
data/README.md
ADDED
File without changes
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module ActAsDisabled
|
2
|
+
|
3
|
+
#sort abbreviation of ActAsDisabled => aad
|
4
|
+
def self.included(base)
|
5
|
+
base.extend Query
|
6
|
+
end
|
7
|
+
|
8
|
+
module Query
|
9
|
+
def self.extended(base)
|
10
|
+
base.define_callbacks :disable
|
11
|
+
end
|
12
|
+
def aad_default_scope
|
13
|
+
scope = all
|
14
|
+
if string_type_with_deleted_value?
|
15
|
+
scope.where(aad_column => nil).or(scope.where.not(aad_column => aad_config[:deleted_value]))
|
16
|
+
elsif boolean_type_not_nullable?
|
17
|
+
scope.where(aad_column => false)
|
18
|
+
else
|
19
|
+
scope.where(aad_column => nil)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def without_aad_default_scope
|
24
|
+
scope = all
|
25
|
+
scope = scope.unscope(where: aad_column)
|
26
|
+
# Fix problems with unscope group chain
|
27
|
+
scope = scope.unscoped if scope.to_sql.include? aad_default_scope.to_sql
|
28
|
+
scope
|
29
|
+
end
|
30
|
+
|
31
|
+
# remove remove every thing from the query
|
32
|
+
# select * from models
|
33
|
+
|
34
|
+
def with_disabled
|
35
|
+
without_aad_default_scope
|
36
|
+
end
|
37
|
+
|
38
|
+
def only_disabled
|
39
|
+
if string_type_with_deleted_value?
|
40
|
+
without_aad_default_scope
|
41
|
+
.where(aad_column => aad_config[:deleted_value])
|
42
|
+
elsif boolean_type_not_nullable?
|
43
|
+
without_aad_default_scope.where(aad_column => true)
|
44
|
+
else
|
45
|
+
without_aad_default_scope.where.not(aad_column => nil)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def string_type_with_deleted_value?
|
50
|
+
aad_column_type == 'string'.to_sym && !aad_config[:deleted_value].nil?
|
51
|
+
end
|
52
|
+
|
53
|
+
def boolean_type_not_nullable?
|
54
|
+
aad_column_type == 'boolean'.to_sym && !aad_config[:allow_nulls]
|
55
|
+
end
|
56
|
+
|
57
|
+
def aad_column
|
58
|
+
aad_config[:column].to_sym
|
59
|
+
end
|
60
|
+
def aad_column_type
|
61
|
+
aad_config[:column_type].to_sym
|
62
|
+
end
|
63
|
+
|
64
|
+
def aad_column_reference
|
65
|
+
"#{table_name}.#{aad_column}"
|
66
|
+
end
|
67
|
+
|
68
|
+
def delete_now_value
|
69
|
+
case aad_config[:column_type]
|
70
|
+
when "time" then Time.now
|
71
|
+
when "boolean" then true
|
72
|
+
when "string" then aad_config[:deleted_value]
|
73
|
+
else
|
74
|
+
raise ArgumentError, "'time', 'boolean' or 'string' expected" \
|
75
|
+
" for :column_type option, got #{aad_config[:column_type]}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
ActiveSupport.on_load(:active_record) do
|
83
|
+
class ActiveRecord::Base
|
84
|
+
def self.act_as_disabled(options = {})
|
85
|
+
define_model_callbacks :disable
|
86
|
+
|
87
|
+
class_attribute :aad_config
|
88
|
+
self.aad_config = {
|
89
|
+
column: "disabled",
|
90
|
+
column_type: "boolean",
|
91
|
+
without_default_scope: false
|
92
|
+
}
|
93
|
+
if options[:column_type] == "string"
|
94
|
+
aad_config.merge!(deleted_value: "deleted")
|
95
|
+
end
|
96
|
+
aad_config.merge!(allow_nulls: false) if options[:column_type] == "boolean"
|
97
|
+
aad_config.merge!(options) #merge user
|
98
|
+
|
99
|
+
unless %w[boolean string].include? aad_config[:column_type]
|
100
|
+
raise ArgumentError, "'time', 'boolean' or 'string' expected" \
|
101
|
+
" for :column_type option, got #{aad_config[:column_type]}"
|
102
|
+
end
|
103
|
+
|
104
|
+
include ActAsDisabled
|
105
|
+
|
106
|
+
unless aad_config[:without_default_scope]
|
107
|
+
default_scope { aad_default_scope }
|
108
|
+
end
|
109
|
+
|
110
|
+
# before_disable { self.class.notify_observers(:before_disable, self) if self.class.respond_to?(:notify_observers) }
|
111
|
+
#
|
112
|
+
# after_disable { self.class.notify_observers(:after_disable, self) if self.class.respond_to?(:notify_observers) }
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: act_as_disabled
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Neeraj Kumar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.0.7
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '7.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 5.0.7
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '7.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: activesupport
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 5.0.7
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '7.0'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 5.0.7
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '7.0'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: bundler
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.5'
|
60
|
+
- - "<"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '3.0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.5'
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '3.0'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: pry
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
type: :development
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: rake
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
type: :development
|
95
|
+
prerelease: false
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: rdoc
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
type: :development
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: rubocop
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - "~>"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 0.85.1
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - "~>"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: 0.85.1
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: simplecov
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: 0.18.1
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.18.1
|
143
|
+
description: Check the home page for more in-depth information.
|
144
|
+
email:
|
145
|
+
- neeraj.kumar@jarvis.consulting
|
146
|
+
executables: []
|
147
|
+
extensions: []
|
148
|
+
extra_rdoc_files: []
|
149
|
+
files:
|
150
|
+
- LICENSE
|
151
|
+
- README.md
|
152
|
+
- lib/act_as_disabled.rb
|
153
|
+
- lib/act_as_disabled/version.rb
|
154
|
+
homepage: https://github.com/
|
155
|
+
licenses:
|
156
|
+
- MIT
|
157
|
+
metadata: {}
|
158
|
+
post_install_message:
|
159
|
+
rdoc_options: []
|
160
|
+
require_paths:
|
161
|
+
- lib
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubygems_version: 3.0.6
|
174
|
+
signing_key:
|
175
|
+
specification_version: 4
|
176
|
+
summary: Active Record plugin which allows you to disable and enable the record
|
177
|
+
test_files: []
|