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 ADDED
@@ -0,0 +1,11 @@
1
+ .bundle
2
+ db/*.sqlite3
3
+ log/*.log
4
+ tmp/
5
+ .sass-cache/
6
+ .DS_Store
7
+ ._*
8
+ Gemfile.lock
9
+ .AppleDouble
10
+ test/config/*.yml
11
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in admin_widgets.gemspec
4
+ gemspec
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,3 @@
1
+ module DeviseExtensions
2
+ VERSION = '0.2.0'
3
+ 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: