lite-regulation 1.0.0
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/.fasterer.yml +19 -0
- data/.gitignore +11 -0
- data/.rspec +4 -0
- data/.rubocop.yml +24 -0
- data/.travis.yml +24 -0
- data/CHANGELOG.md +11 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +137 -0
- data/LICENSE.txt +21 -0
- data/README.md +60 -0
- data/Rakefile +8 -0
- data/_config.yml +1 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/config/locales/en.yml +21 -0
- data/docs/ACTIVATION.md +41 -0
- data/docs/CONTAINMENT.md +41 -0
- data/docs/EXPIRATION.md +45 -0
- data/docs/QUARANTINE.md +41 -0
- data/docs/SUSPENSION.md +41 -0
- data/docs/VISIBILITY.md +41 -0
- data/lib/lite/regulation.rb +11 -0
- data/lib/lite/regulation/activation.rb +46 -0
- data/lib/lite/regulation/base.rb +13 -0
- data/lib/lite/regulation/containment.rb +46 -0
- data/lib/lite/regulation/expiration.rb +69 -0
- data/lib/lite/regulation/quarantine.rb +46 -0
- data/lib/lite/regulation/railtie.rb +20 -0
- data/lib/lite/regulation/suspension.rb +46 -0
- data/lib/lite/regulation/version.rb +9 -0
- data/lib/lite/regulation/visibility.rb +46 -0
- data/lite-regulation.gemspec +53 -0
- metadata +244 -0
data/bin/setup
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
en:
|
2
|
+
lite:
|
3
|
+
regulation:
|
4
|
+
activation:
|
5
|
+
active: 'Active'
|
6
|
+
inactive: 'Inactive'
|
7
|
+
containment:
|
8
|
+
contained: 'Contained'
|
9
|
+
uncontained: 'Uncontained'
|
10
|
+
expiration:
|
11
|
+
expired: 'Expired'
|
12
|
+
unexpired: 'Unexpired'
|
13
|
+
quarantine:
|
14
|
+
quarantined: 'Quarantined'
|
15
|
+
unquarantined: 'Unquarantined'
|
16
|
+
suspension:
|
17
|
+
suspended: 'Suspended'
|
18
|
+
unsuspended: 'Unsuspended'
|
19
|
+
visibility:
|
20
|
+
invisible: 'Invisible'
|
21
|
+
visible: 'Visible'
|
data/docs/ACTIVATION.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Activation
|
2
|
+
|
3
|
+
#### Usage
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# 1. Add column to table
|
7
|
+
class AddRegulationTimestampColumn < ActiveRecord::Migration
|
8
|
+
def change
|
9
|
+
t.datetime :inactivated_at
|
10
|
+
|
11
|
+
# - or -
|
12
|
+
|
13
|
+
add_column :your_model, :inactivated_at, :datetime
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# 2. Include module
|
18
|
+
class User < ActiveRecord::Base
|
19
|
+
include Lite::Regulation::Activation
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
#### Methods
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
user = User.first
|
27
|
+
user.inactive!
|
28
|
+
user.inactive? #=> true
|
29
|
+
|
30
|
+
user.active!
|
31
|
+
user.active? #=> true
|
32
|
+
|
33
|
+
user.to_activation #=> Returns the visibility state locale string (ex: Active)
|
34
|
+
```
|
35
|
+
|
36
|
+
#### Scopes
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
User.inactive # Returns all inactive records
|
40
|
+
User.active # Returns all active records
|
41
|
+
```
|
data/docs/CONTAINMENT.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Containment
|
2
|
+
|
3
|
+
#### Usage
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# 1. Add column to table
|
7
|
+
class AddRegulationTimestampColumn < ActiveRecord::Migration
|
8
|
+
def change
|
9
|
+
t.datetime :contained_at
|
10
|
+
|
11
|
+
# - or -
|
12
|
+
|
13
|
+
add_column :your_model, :contained_at, :datetime
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# 2. Include module
|
18
|
+
class User < ActiveRecord::Base
|
19
|
+
include Lite::Regulation::Containment
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
#### Methods
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
user = User.first
|
27
|
+
user.uncontain!
|
28
|
+
user.uncontained? #=> true
|
29
|
+
|
30
|
+
user.contain!
|
31
|
+
user.contained? #=> true
|
32
|
+
|
33
|
+
user.to_containment #=> Returns the visibility state locale string (ex: Contained)
|
34
|
+
```
|
35
|
+
|
36
|
+
#### Scopes
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
User.contained # Returns all contained records
|
40
|
+
User.uncontained # Returns all uncontained records
|
41
|
+
```
|
data/docs/EXPIRATION.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Expiration
|
2
|
+
|
3
|
+
#### Usage
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# 1. Add column to table
|
7
|
+
class AddRegulationTimestampColumn < ActiveRecord::Migration
|
8
|
+
def change
|
9
|
+
t.datetime :expires_at
|
10
|
+
|
11
|
+
# - or -
|
12
|
+
|
13
|
+
add_column :your_model, :expires_at, :datetime
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# 2. Include module
|
18
|
+
class User < ActiveRecord::Base
|
19
|
+
include Lite::Regulation::Expiration
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
#### Methods
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
user = User.first
|
27
|
+
user.unexpire!
|
28
|
+
user.unexpired? #=> true
|
29
|
+
|
30
|
+
user.expire!
|
31
|
+
user.expired? #=> true
|
32
|
+
|
33
|
+
user.extend!
|
34
|
+
user.extend!(20.days)
|
35
|
+
user.expired? #=> false
|
36
|
+
|
37
|
+
user.to_expiration #=> Returns the visibility state locale string (ex: Expired)
|
38
|
+
```
|
39
|
+
|
40
|
+
#### Scopes
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
User.expired # Returns all expired records
|
44
|
+
User.unexpired # Returns all unexpired records
|
45
|
+
```
|
data/docs/QUARANTINE.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Quarantine
|
2
|
+
|
3
|
+
#### Usage
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# 1. Add column to table
|
7
|
+
class AddRegulationTimestampColumn < ActiveRecord::Migration
|
8
|
+
def change
|
9
|
+
t.datetime :quarantined_at
|
10
|
+
|
11
|
+
# - or -
|
12
|
+
|
13
|
+
add_column :your_model, :quarantined_at, :datetime
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# 2. Include module
|
18
|
+
class User < ActiveRecord::Base
|
19
|
+
include Lite::Regulation::Quarantine
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
#### Methods
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
user = User.first
|
27
|
+
user.unquarantine!
|
28
|
+
user.unquarantined? #=> true
|
29
|
+
|
30
|
+
user.quarantine!
|
31
|
+
user.quarantined? #=> true
|
32
|
+
|
33
|
+
user.to_quarantine #=> Returns the visibility state locale string (ex: Quarantined)
|
34
|
+
```
|
35
|
+
|
36
|
+
#### Scopes
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
User.unquarantined # Returns all unquarantined records
|
40
|
+
User.quarantined # Returns all quarantined records
|
41
|
+
```
|
data/docs/SUSPENSION.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Suspension
|
2
|
+
|
3
|
+
#### Usage
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# 1. Add column to table
|
7
|
+
class AddRegulationTimestampColumn < ActiveRecord::Migration
|
8
|
+
def change
|
9
|
+
t.datetime :suspended_at
|
10
|
+
|
11
|
+
# - or -
|
12
|
+
|
13
|
+
add_column :your_model, :suspended_at, :datetime
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# 2. Include module
|
18
|
+
class User < ActiveRecord::Base
|
19
|
+
include Lite::Regulation::Suspension
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
#### Methods
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
user = User.first
|
27
|
+
user.unsuspend!
|
28
|
+
user.unsuspended? #=> true
|
29
|
+
|
30
|
+
user.suspend!
|
31
|
+
user.suspended? #=> true
|
32
|
+
|
33
|
+
user.to_suspension #=> Returns the visibility state locale string (ex: Suspended)
|
34
|
+
```
|
35
|
+
|
36
|
+
#### Scopes
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
User.unsuspended # Returns all unsuspended records
|
40
|
+
User.suspended # Returns all suspended records
|
41
|
+
```
|
data/docs/VISIBILITY.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Visibility
|
2
|
+
|
3
|
+
#### Usage
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# 1. Add column to table
|
7
|
+
class AddRegulationTimestampColumn < ActiveRecord::Migration
|
8
|
+
def change
|
9
|
+
t.datetime :invisible_at
|
10
|
+
|
11
|
+
# - or -
|
12
|
+
|
13
|
+
add_column :your_model, :invisible_at, :datetime
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# 2. Include module
|
18
|
+
class User < ActiveRecord::Base
|
19
|
+
include Lite::Regulation::Visibility
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
#### Methods
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
user = User.first
|
27
|
+
user.invisible!
|
28
|
+
user.invisible? #=> true
|
29
|
+
|
30
|
+
user.visible!
|
31
|
+
user.visible? #=> true
|
32
|
+
|
33
|
+
user.to_visibility #=> Returns the visibility state locale string (ex: Visible)
|
34
|
+
```
|
35
|
+
|
36
|
+
#### Scopes
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
User.invisible # Returns all invisible records
|
40
|
+
User.visible # Returns all visible records
|
41
|
+
```
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
require 'active_support'
|
5
|
+
|
6
|
+
require 'lite/regulation/version'
|
7
|
+
require 'lite/regulation/railtie' if defined?(Rails)
|
8
|
+
|
9
|
+
%w[base activation containment expiration quarantine suspension visibility].each do |name|
|
10
|
+
require "lite/regulation/#{name}"
|
11
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
module Regulation
|
5
|
+
module Activation
|
6
|
+
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
scope :active, -> { where(inactivated_at: nil) }
|
11
|
+
scope :inactive, -> { where.not(inactivated_at: nil) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def active!
|
15
|
+
return true if active?
|
16
|
+
|
17
|
+
update(inactivated_at: nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
def active?
|
21
|
+
inactivated_at.nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
def inactive!
|
25
|
+
return true if inactive?
|
26
|
+
|
27
|
+
update(inactivated_at: Time.current)
|
28
|
+
end
|
29
|
+
|
30
|
+
def inactive?
|
31
|
+
!active?
|
32
|
+
end
|
33
|
+
|
34
|
+
def inactivated_at_or_time
|
35
|
+
return inactivated_at if inactive?
|
36
|
+
|
37
|
+
Lite::Regulation::Base.timestamp
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_activation
|
41
|
+
I18n.t("lite.regulation.activation.#{:in if inactive?}active")
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
module Regulation
|
5
|
+
module Containment
|
6
|
+
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
scope :contained, -> { where.not(contained_at: nil) }
|
11
|
+
scope :uncontained, -> { where(contained_at: nil) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def contain!
|
15
|
+
return true if contained?
|
16
|
+
|
17
|
+
update(contained_at: Time.current)
|
18
|
+
end
|
19
|
+
|
20
|
+
def contained?
|
21
|
+
!uncontained?
|
22
|
+
end
|
23
|
+
|
24
|
+
def contained_at_or_time
|
25
|
+
return contained_at if contained?
|
26
|
+
|
27
|
+
Lite::Regulation::Base.timestamp
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_containment
|
31
|
+
I18n.t("lite.regulation.containment.#{uncontained? ? :uncontained : :contained}")
|
32
|
+
end
|
33
|
+
|
34
|
+
def uncontain!
|
35
|
+
return true if uncontained?
|
36
|
+
|
37
|
+
update(contained_at: nil)
|
38
|
+
end
|
39
|
+
|
40
|
+
def uncontained?
|
41
|
+
contained_at.nil?
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
module Regulation
|
5
|
+
module Expiration
|
6
|
+
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
# rubocop:disable Style/Lambda
|
10
|
+
included do
|
11
|
+
scope :expired, -> do
|
12
|
+
where('expires_at IS NULL OR expires_at < ?', Lite::Regulation::Base.timestamp)
|
13
|
+
end
|
14
|
+
scope :unexpired, -> do
|
15
|
+
where('expires_at IS NOT NULL AND expires_at >= ?', Lite::Regulation::Base.timestamp)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
# rubocop:enable Style/Lambda
|
19
|
+
|
20
|
+
def expire!
|
21
|
+
return true if expires_at.nil?
|
22
|
+
|
23
|
+
update(expires_at: nil)
|
24
|
+
end
|
25
|
+
|
26
|
+
def expired?
|
27
|
+
return true if expires_at.nil?
|
28
|
+
|
29
|
+
Lite::Regulation::Base.timestamp >= expires_at
|
30
|
+
end
|
31
|
+
|
32
|
+
def extend!(amount = nil)
|
33
|
+
update(expires_at: extension_date(amount))
|
34
|
+
end
|
35
|
+
|
36
|
+
def unexpire!
|
37
|
+
return true unless expires_at.nil?
|
38
|
+
|
39
|
+
update(expires_at: extension_date)
|
40
|
+
end
|
41
|
+
|
42
|
+
def unexpired?
|
43
|
+
return false if expires_at.nil?
|
44
|
+
|
45
|
+
Lite::Regulation::Base.timestamp < expires_at
|
46
|
+
end
|
47
|
+
|
48
|
+
def expires_at_or_time(amount = nil)
|
49
|
+
return expires_at if unexpired?
|
50
|
+
|
51
|
+
extension_date(amount)
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_expiration
|
55
|
+
I18n.t("lite.regulation.expiration.#{:un if unexpired?}expired")
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def extension_date(amount = nil)
|
61
|
+
amount = 30 if amount.nil?
|
62
|
+
return amount unless amount.is_a?(Integer)
|
63
|
+
|
64
|
+
Lite::Regulation::Base.timestamp + amount
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|