activable 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|