activable 0.1.0 → 0.1.1
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 +8 -8
- data/CHANGELOG.md +7 -0
- data/README.md +14 -8
- data/lib/activable.rb +5 -1
- data/lib/activable/version.rb +1 -1
- data/spec/has_no_responsible_spec.rb +6 -4
- data/spec/has_responsible_spec.rb +4 -0
- data/spec/test_app/.gitignore +1 -1
- metadata +3 -8
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzE4NzA2YzllOTRkODk0MzIwOTMwMmQ5ZDFlM2M5NGVmNDczMDUzNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
M2EyMTQ0M2E4NjRiYzdkOGJjYmU1NGVhZWU3MDVjNTgzOTBhZWNjYg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MzQyZGU4MjVhNzU1NDYwOTMyNTkxODNmNjdmNjdjY2RjZGZiYjQ0MzA0MTMy
|
10
|
+
YWE4NjZhODAyODc2MGVmMzlhZDgzNzI5OGE3NzI0NTEwYjMzNWRlNzViZWI1
|
11
|
+
ZTUwY2QyZTkxNWY3YmU2NzJmNmQ1NmM4YjExNDU0ZjVlZGVjY2E=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZmYxMTU5Yzk4YzE2NzMwNTI2NmU0Y2U4M2QwMjUxYWQwNzcwY2Y0Y2JmMzQ2
|
14
|
+
MzA1ODdkNDU5OTc2NTY5NWE0NzAxYTZkYjQxNWJhNTg4MDZkY2U2MzA2OTg4
|
15
|
+
MGEwZGVkODM4NjNiM2YxNGQwZTIyYzNiNTE3NmFjZjBiMjNmNjk=
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -36,8 +36,7 @@ class Product < ActiveRecord::Base
|
|
36
36
|
end
|
37
37
|
```
|
38
38
|
|
39
|
-
Optionally, you can customize
|
40
|
-
the on in the initializer file:
|
39
|
+
Optionally, you can customize Activable configuration for each model:
|
41
40
|
|
42
41
|
```ruby
|
43
42
|
class Product < ActiveRecord::Base
|
@@ -53,14 +52,14 @@ end
|
|
53
52
|
|
54
53
|
### Working with it
|
55
54
|
|
56
|
-
By default, new objects of
|
55
|
+
By default, new objects of an "activable" model are active:
|
57
56
|
|
58
57
|
```ruby
|
59
58
|
p = Product.new
|
60
59
|
p.active? # => true
|
61
60
|
```
|
62
61
|
|
63
|
-
If your
|
62
|
+
If your record has a responsible, you **must** provide it before saving your object:
|
64
63
|
|
65
64
|
```ruby
|
66
65
|
p = Product.new
|
@@ -71,22 +70,29 @@ p = Product.new
|
|
71
70
|
p.activate responsible: current_user
|
72
71
|
```
|
73
72
|
|
74
|
-
The same rule applies when deactivating
|
73
|
+
The same rule applies when deactivating:
|
75
74
|
|
76
75
|
```ruby
|
77
76
|
product.deactivate responsible: current_user
|
78
77
|
```
|
79
78
|
|
80
79
|
You can check whether it is active or not whenever you want by calling the method
|
81
|
-
`active?`. Another useful informations are
|
80
|
+
`active?`. Another useful informations are persisted and you can see them:
|
82
81
|
|
83
82
|
```ruby
|
84
83
|
product.activated_at
|
85
84
|
product.deactivated_at
|
86
85
|
|
87
86
|
# And if it has a responsible:
|
88
|
-
product.activated_by
|
89
|
-
product.deactivated_by
|
87
|
+
product.activated_by
|
88
|
+
product.deactivated_by
|
89
|
+
```
|
90
|
+
|
91
|
+
Also, this gem creates two useful scopes:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
Product.active
|
95
|
+
Product.inactive
|
90
96
|
```
|
91
97
|
|
92
98
|
## Testing the gem
|
data/lib/activable.rb
CHANGED
@@ -23,7 +23,7 @@ module Activable
|
|
23
23
|
|
24
24
|
def active?
|
25
25
|
return true unless self.activated_at && self.deactivated_at
|
26
|
-
self.activated_at
|
26
|
+
self.activated_at >= self.deactivated_at
|
27
27
|
end
|
28
28
|
|
29
29
|
def activate(options={})
|
@@ -51,6 +51,10 @@ module Activable
|
|
51
51
|
included do
|
52
52
|
after_initialize :init_active
|
53
53
|
validates_presence_of :activated_at
|
54
|
+
scope :active, where('deactivated_at is null or activated_at is null or' +
|
55
|
+
' activated_at >= deactivated_at')
|
56
|
+
scope :inactive, where('deactivated_at is not null and activated_at is not' +
|
57
|
+
' null and activated_at < deactivated_at')
|
54
58
|
if self.activable_config[:has_responsible]
|
55
59
|
belongs_to :activated_by, :class_name => self.activable_config[:responsible]
|
56
60
|
belongs_to :deactivated_by, :class_name => self.activable_config[:responsible]
|
data/lib/activable/version.rb
CHANGED
@@ -18,24 +18,26 @@ describe Category do
|
|
18
18
|
it 'can be activated with no responsible' do
|
19
19
|
c = FactoryGirl.build(:category)
|
20
20
|
|
21
|
-
c.activate
|
22
|
-
c.save.should be_true, "Activated category with no responsible should be saved. " +
|
21
|
+
c.activate!.should be_true, "Activated category with no responsible should be saved. " +
|
23
22
|
c.errors.full_messages.to_s
|
24
23
|
c.active?.should be_true
|
25
24
|
c.activated_by_id.should be_nil
|
26
25
|
c.activated_at.should_not be_nil
|
27
26
|
c.deactivated_by_id.should be_nil
|
28
27
|
c.deactivated_at.should be_nil
|
28
|
+
Category.active.include?(c).should be_true
|
29
|
+
Category.inactive.include?(c).should_not be_true
|
29
30
|
end
|
30
31
|
|
31
32
|
it 'can be deactivated with no responsible' do
|
32
33
|
c = FactoryGirl.build(:category)
|
33
34
|
|
34
|
-
c.deactivate
|
35
|
-
c.save.should be_true, "Deactivated category with no responsible should be saved. " +
|
35
|
+
c.deactivate!.should be_true, "Deactivated category with no responsible should be saved. " +
|
36
36
|
c.errors.full_messages.to_s
|
37
37
|
c.active?.should_not be_true
|
38
38
|
c.deactivated_by_id.should be_nil
|
39
39
|
c.deactivated_at.should_not be_nil
|
40
|
+
Category.active.include?(c).should_not be_true
|
41
|
+
Category.inactive.include?(c).should be_true
|
40
42
|
end
|
41
43
|
end
|
@@ -36,6 +36,8 @@ describe User do
|
|
36
36
|
u.activated_at.should_not be_nil
|
37
37
|
u.deactivated_by.should be_nil
|
38
38
|
u.deactivated_at.should be_nil
|
39
|
+
User.active.include?(u).should be_true
|
40
|
+
User.inactive.include?(u).should_not be_true
|
39
41
|
end
|
40
42
|
|
41
43
|
it 'can be deactivated' do
|
@@ -50,5 +52,7 @@ describe User do
|
|
50
52
|
u.active?.should_not be_true
|
51
53
|
u.deactivated_by.should be_equal another_user
|
52
54
|
u.deactivated_at.should_not be_nil
|
55
|
+
User.active.include?(u).should_not be_true
|
56
|
+
User.inactive.include?(u).should be_true
|
53
57
|
end
|
54
58
|
end
|
data/spec/test_app/.gitignore
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
db/*.sqlite3
|
2
|
-
log
|
2
|
+
/log/*
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego Selzlein
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -32,6 +32,7 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
34
|
- .gitignore
|
35
|
+
- CHANGELOG.md
|
35
36
|
- Gemfile
|
36
37
|
- LICENSE.txt
|
37
38
|
- README.md
|
@@ -86,9 +87,6 @@ files:
|
|
86
87
|
- spec/test_app/db/seeds.rb
|
87
88
|
- spec/test_app/lib/assets/.gitkeep
|
88
89
|
- spec/test_app/lib/tasks/.gitkeep
|
89
|
-
- spec/test_app/log/.gitkeep
|
90
|
-
- spec/test_app/log/development.log
|
91
|
-
- spec/test_app/log/test.log
|
92
90
|
- spec/test_app/public/404.html
|
93
91
|
- spec/test_app/public/422.html
|
94
92
|
- spec/test_app/public/500.html
|
@@ -163,9 +161,6 @@ test_files:
|
|
163
161
|
- spec/test_app/db/seeds.rb
|
164
162
|
- spec/test_app/lib/assets/.gitkeep
|
165
163
|
- spec/test_app/lib/tasks/.gitkeep
|
166
|
-
- spec/test_app/log/.gitkeep
|
167
|
-
- spec/test_app/log/development.log
|
168
|
-
- spec/test_app/log/test.log
|
169
164
|
- spec/test_app/public/404.html
|
170
165
|
- spec/test_app/public/422.html
|
171
166
|
- spec/test_app/public/500.html
|