devise_extensions 0.2.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.
- data/.gitignore +11 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/devise_extensions.gemspec +22 -0
- data/lib/devise_extensions/models/approvable.rb +90 -0
- data/lib/devise_extensions/models/disableable.rb +49 -0
- data/lib/devise_extensions/models/draftable.rb +48 -0
- data/lib/devise_extensions/version.rb +3 -0
- data/lib/devise_extensions.rb +8 -0
- metadata +55 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "devise_extensions/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "devise_extensions"
|
7
|
+
s.version = DeviseExtensions::VERSION
|
8
|
+
s.authors = ["DanX"]
|
9
|
+
s.email = ["danx.exe@gmail.com"]
|
10
|
+
s.homepage = "http://www.mobvox.com.br"
|
11
|
+
s.summary = "Awesome Devise Extensions"
|
12
|
+
s.description = "Super Awesome Devise Extensions: Approvable, Disableable and Draftable"
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
# specify any dependencies here; for example:
|
20
|
+
# s.add_development_dependency "rspec"
|
21
|
+
# s.add_runtime_dependency "rest-client"
|
22
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Devise
|
2
|
+
module Models
|
3
|
+
# Approvable
|
4
|
+
#
|
5
|
+
# TODO: documentation
|
6
|
+
#
|
7
|
+
module Approvable
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
field :approval_status, :type => String
|
12
|
+
field :approval_at, :type => Time
|
13
|
+
|
14
|
+
belongs_to :approval_by, :class_name => approver_class
|
15
|
+
|
16
|
+
scope :is_pending_approval, where(:approval_status => nil)
|
17
|
+
scope :is_not_pending_approval, where(:approval_status.ne => nil)
|
18
|
+
scope :is_approved, where(:approval_status => 'approved')
|
19
|
+
scope :is_not_approved, where(:approval_status.ne => 'approved')
|
20
|
+
scope :is_rejected, where(:approval_status => 'rejected')
|
21
|
+
scope :is_not_rejected, where(:approval_status.ne => 'rejected')
|
22
|
+
|
23
|
+
scope :rejected_state, proc { |state| state ? is_rejected : is_not_rejected }
|
24
|
+
scope :pending_approval_state, proc { |state| state ? is_pending_approval : is_not_pending_approval }
|
25
|
+
scope :approved_state, proc { |state| state ? is_approved : is_not_approved }
|
26
|
+
|
27
|
+
define_model_callbacks :approval
|
28
|
+
end
|
29
|
+
|
30
|
+
def approve!(options = {})
|
31
|
+
status = nil
|
32
|
+
|
33
|
+
approval_proc = proc {
|
34
|
+
self.approval_status = 'approved'
|
35
|
+
self.approval_at = Time.now.utc
|
36
|
+
self.approval_by = options[:by]
|
37
|
+
|
38
|
+
generate_reset_password_token
|
39
|
+
|
40
|
+
status = self.save
|
41
|
+
}
|
42
|
+
|
43
|
+
if options[:skip_callbacks]
|
44
|
+
approval_proc.call
|
45
|
+
else
|
46
|
+
run_callbacks :approval, &approval_proc
|
47
|
+
end
|
48
|
+
|
49
|
+
status
|
50
|
+
end
|
51
|
+
|
52
|
+
def reject!(options = {})
|
53
|
+
self.approval_status = 'rejected'
|
54
|
+
self.approval_at = Time.now.utc
|
55
|
+
self.approval_by = options[:by]
|
56
|
+
|
57
|
+
self.save
|
58
|
+
end
|
59
|
+
|
60
|
+
def revoke!
|
61
|
+
self.approval_status = nil
|
62
|
+
self.approval_at = nil
|
63
|
+
self.approval_by = nil
|
64
|
+
|
65
|
+
self.save
|
66
|
+
end
|
67
|
+
|
68
|
+
def pending_approval?
|
69
|
+
approval_status.nil?
|
70
|
+
end
|
71
|
+
|
72
|
+
def approved?
|
73
|
+
approval_status == 'approved'
|
74
|
+
end
|
75
|
+
|
76
|
+
def rejected?
|
77
|
+
approval_status == 'rejected'
|
78
|
+
end
|
79
|
+
|
80
|
+
def active_for_authentication?
|
81
|
+
super && approved?
|
82
|
+
end
|
83
|
+
|
84
|
+
module ClassMethods
|
85
|
+
Devise::Models.config(self, :approver_class)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Devise
|
2
|
+
module Models
|
3
|
+
# Disableable
|
4
|
+
#
|
5
|
+
# TODO: documentation
|
6
|
+
#
|
7
|
+
module Disableable
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
field :disabled_at, :type => Time
|
12
|
+
|
13
|
+
scope :is_disabled, proc { where(:disabled_at.ne => nil) }
|
14
|
+
scope :is_enabled, proc { where(:disabled_at => nil) }
|
15
|
+
scope :disabled_state, proc { |state| state ? is_disabled : is_enabled }
|
16
|
+
scope :enabled_state, proc { |state| state ? is_enabled : is_disabled }
|
17
|
+
|
18
|
+
define_model_callbacks :disable, :enable
|
19
|
+
end
|
20
|
+
|
21
|
+
def disabled?
|
22
|
+
disabled_at
|
23
|
+
end
|
24
|
+
|
25
|
+
def enabled?
|
26
|
+
disabled_at.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
def disable!
|
30
|
+
run_callbacks :disable do
|
31
|
+
self.disabled_at = Time.now
|
32
|
+
save
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def enable!
|
37
|
+
run_callbacks :enable do
|
38
|
+
self.disabled_at = nil
|
39
|
+
save
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def active_for_authentication?
|
44
|
+
super && enabled?
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Devise
|
2
|
+
module Models
|
3
|
+
# Draftable
|
4
|
+
#
|
5
|
+
# TODO: documentation
|
6
|
+
#
|
7
|
+
module Draftable
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
field :is_draft, :type => Boolean
|
12
|
+
|
13
|
+
scope :is_draft, where(:is_draft => true)
|
14
|
+
scope :is_not_draft, where(:is_draft.ne => true)
|
15
|
+
scope :draft_state, proc { |state| state ? is_draft : is_not_draft }
|
16
|
+
|
17
|
+
define_model_callbacks :start_draft, :finish_draft
|
18
|
+
end
|
19
|
+
|
20
|
+
def draft?
|
21
|
+
is_draft
|
22
|
+
end
|
23
|
+
|
24
|
+
def not_draft?
|
25
|
+
!is_draft
|
26
|
+
end
|
27
|
+
|
28
|
+
def start_draft!
|
29
|
+
run_callbacks :start_draft do
|
30
|
+
self.is_draft = true
|
31
|
+
save
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def finish_draft!
|
36
|
+
run_callbacks :finish_draft do
|
37
|
+
self.is_draft = false
|
38
|
+
save
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def active_for_authentication?
|
43
|
+
super && not_draft?
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'devise'
|
2
|
+
|
3
|
+
module DeviseExtensions
|
4
|
+
end
|
5
|
+
|
6
|
+
Devise.add_module :approvable, :model => 'devise_extensions/models/approvable'
|
7
|
+
Devise.add_module :draftable, :model => 'devise_extensions/models/draftable'
|
8
|
+
Devise.add_module :disableable, :model => 'devise_extensions/models/disableable'
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: devise_extensions
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- DanX
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-17 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: ! 'Super Awesome Devise Extensions: Approvable, Disableable and Draftable'
|
15
|
+
email:
|
16
|
+
- danx.exe@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- Rakefile
|
24
|
+
- devise_extensions.gemspec
|
25
|
+
- lib/devise_extensions.rb
|
26
|
+
- lib/devise_extensions/models/approvable.rb
|
27
|
+
- lib/devise_extensions/models/disableable.rb
|
28
|
+
- lib/devise_extensions/models/draftable.rb
|
29
|
+
- lib/devise_extensions/version.rb
|
30
|
+
homepage: http://www.mobvox.com.br
|
31
|
+
licenses: []
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirements: []
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 1.8.10
|
51
|
+
signing_key:
|
52
|
+
specification_version: 3
|
53
|
+
summary: Awesome Devise Extensions
|
54
|
+
test_files: []
|
55
|
+
has_rdoc:
|