devise-basecamper 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in devise-basecamper.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 JD Hendrickson
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # Devise::Basecamper
2
+
3
+ Devise-Basecamper was built to allow users of [Devise](https://github.com/plataformatec/devise) to implement "Basecamp" style subdomain scoped authentication with
4
+ support for multiple users. There are a lot of [great tutorials](https://github.com/RailsApps/rails3-subdomains) out
5
+ there on doing subdomain authentication with devise, but none of them seemed to fit my particular use cases. So I took
6
+ a stab at extending the functionality of [Devise](https://github.com/plataformatec/devise), which has been a great
7
+ Gem, and community, to work with.
8
+
9
+ ### Use Case
10
+ User authentication that is scoped to an account, which is identified by the subdomain of the URL. This allows for better
11
+ multi-tenancy, as well as for re-use of usernames under different accounts.
12
+
13
+ ## Installation
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ gem 'devise-basecamper'
18
+
19
+ And then execute:
20
+
21
+ $ bundle
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install devise-basecamper
26
+
27
+ ## Usage
28
+
29
+ To make Devise-Basecamper work properly, there are several steps that need to be taken to adjust the "out-of-the-box"
30
+ behavior of Devise. None of the changes require doing any "hacking" of Devise, as they are all steps/actions and
31
+ configuration options that are already a part of Devise itself.
32
+
33
+ ### Devise Configuration
34
+ Open the Devise initializer file, which can be found in `config/initializers/devise.rb`. Add `:subdomain` to the
35
+ `config.request_keys` array like below.
36
+
37
+ config.request_keys = [:subdomain]
38
+
39
+ This will make sure to pass the subdomain value from the request to the appropriate Devise methods.
40
+
41
+ ### Configuring models
42
+
43
+ Which ever model you would like to have subdomain based authentication scoping on, just add `:basecamper` to your
44
+ included devise modules.
45
+
46
+ ```
47
+ class User
48
+ include Mongoid::Document
49
+ include Mongoid::Timestamps
50
+
51
+ devise :database_authenticatable,
52
+ :recoverable,
53
+ :trackable,
54
+ :validatable,
55
+ :basecamper
56
+
57
+ ...
58
+ end
59
+ ```
60
+
61
+ By default, Devise-Basecamper assumes that your devise model "belongs to" an Account and has a field called `account_id`
62
+ as the foreign key to that table. Devise-Basecamper also assumes that the subdomain field exists in your Account model
63
+ and is called `subdomain`. Now that's a lot of assumptions, but never fear...they can be changed.
64
+
65
+ If you need to change any of these assumptions, you can do so by calling the `devise_basecamper` method in your devise
66
+ model.
67
+
68
+ ```
69
+ class User
70
+ include Mongoid::Document
71
+ include Mongoid::Timestamps
72
+
73
+ devise :database_authenticatable,
74
+ :recoverable,
75
+ :trackable,
76
+ :validatable,
77
+ :basecamper
78
+
79
+ devise_basecamper :subdomain_class => :my_parent_class,
80
+ :subdomain_field => :my_field_name,
81
+ :scope_field => :field_to_scope_against
82
+
83
+ ...
84
+ end
85
+ ```
86
+
87
+ The `devise_basecamper` method has 3 options that can be set: subdomain_class, subdomain_field and scope_field.
88
+
89
+ **subdomain_class**
90
+
91
+ This option allows you to specify which model your subdomains are defined in. By default, devise_basecamper assumes this
92
+ to be an `Account` object.
93
+
94
+ **subdomain_field**
95
+
96
+ This option allows you to specify the name of the field within the `subdomain_class` that the subdomain string is stored
97
+ in. By default, devise_basecamper assumes this to be `subdomain`.
98
+
99
+ **scope_field**
100
+
101
+ This option allows you to specify the name of the field within the devise model (e.g. - User) stores the ID of the account
102
+ you want to create a scope against. By default, devise_basecamper assumes that this is a field called `account_id`.
103
+
104
+ If your application follows the assumptions, you DO NOT need to define any of these options.
105
+
106
+ ### Configuring multiple models
107
+
108
+ You can configure multiple models accordingly just as you can in Devise. If you have a Devise model that does not need
109
+ the additional features offered by Devise-Basecamper, simple do not include the module. Devise will work just as expected.
110
+
111
+ ### ORM Compatability
112
+
113
+ Devise-Basecamper has very minimal interaction with your data layer, however it uses the same `orm_adapter` gem as Devise
114
+ and should work just fine with all of the ORM's supported by Devise.
115
+
116
+ MORE TO COME
117
+
118
+ ## License
119
+
120
+ MIT License. Copyright © 2012 Digital Opera, LLC. [www.digitalopera.com](http://www.digitalopera.com/ "Digital Opera, LLC")
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/devise-basecamper/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["JD Hendrickson"]
6
+ gem.email = ["jd@digitalopera.com"]
7
+ gem.description = %q{Implement basecamp style subdomain authentication with support for multiple users under a single subdomain scoped account.}
8
+ gem.summary = %q{Implement basecamp style subdomain authentication}
9
+ gem.homepage = "https://github.com/digitalopera/devise-basecamper"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "devise-basecamper"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Devise::Basecamper::VERSION
17
+
18
+ gem.add_dependency('orm_adapter', '~> 0.0.7')
19
+ gem.add_dependency('devise', '~> 2.0.4')
20
+ end
@@ -0,0 +1,10 @@
1
+ require 'devise'
2
+ require 'devise-basecamper/version'
3
+ require 'devise-basecamper/devise/models/authenticatable'
4
+
5
+ Devise.add_module(:basecamper,
6
+ :strategy => false,
7
+ :route => :session,
8
+ :controller => :sessions,
9
+ :model => 'devise-basecamper/model'
10
+ )
@@ -0,0 +1,12 @@
1
+ module Devise
2
+ module Models
3
+ module Authenticatable
4
+ module ClassMethods
5
+ def find_for_authentication(conditions={})
6
+ conditions.delete(:subdomain)
7
+ find_first_by_auth_conditions(conditions)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ module Devise
2
+ module Models
3
+ module Basecamper
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+ def devise_basecamper(opts={})
8
+ defaults = {
9
+ :subdomain_class => :account,
10
+ :subdomain_field => :subdomain,
11
+ :scope_field => :account_id
12
+ }
13
+ @devise_basecamper_settings = defaults.merge(opts)
14
+ end
15
+
16
+ def basecamper
17
+ self.devise_basecamper if @devise_basecamper_settings.nil?
18
+ return @devise_basecamper_settings
19
+ end
20
+
21
+ def find_for_authentication(conditions={})
22
+ if conditions[:subdomain].present?
23
+ resource = self.basecamper[:subdomain_class].to_s.camelize.constantize
24
+ subdomain_source = resource.to_adapter.find_first(self.basecamper[:subdomain_field] => conditions[:subdomain])
25
+ conditions[self.basecamper[:scope_field]] = (subdomain_source.nil?) ? nil : subdomain_source.id
26
+ conditions.delete(self.basecamper[:subdomain_field])
27
+ end
28
+ super
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,5 @@
1
+ module Devise
2
+ module Basecamper
3
+ VERSION = "0.0.6"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: devise-basecamper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - JD Hendrickson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: orm_adapter
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.0.7
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.0.7
30
+ - !ruby/object:Gem::Dependency
31
+ name: devise
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 2.0.4
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.0.4
46
+ description: Implement basecamp style subdomain authentication with support for multiple
47
+ users under a single subdomain scoped account.
48
+ email:
49
+ - jd@digitalopera.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .gitignore
55
+ - Gemfile
56
+ - LICENSE
57
+ - README.md
58
+ - Rakefile
59
+ - devise-basecamper.gemspec
60
+ - lib/devise-basecamper.rb
61
+ - lib/devise-basecamper/devise/models/authenticatable.rb
62
+ - lib/devise-basecamper/model.rb
63
+ - lib/devise-basecamper/version.rb
64
+ homepage: https://github.com/digitalopera/devise-basecamper
65
+ licenses: []
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 1.8.21
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Implement basecamp style subdomain authentication
88
+ test_files: []
89
+ has_rdoc: