iam 0.2.2 → 0.3.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/README.md +39 -2
- data/app/assets/javascripts/iam.coffee +14 -1
- data/app/assets/javascripts/iam.js +1 -2
- data/app/assets/stylesheets/iam.css +1 -1
- data/app/assets/stylesheets/iam.css.sass +1 -1
- data/app/controllers/iam_controller.rb +10 -2
- data/app/views/iam/_sign_out.html.erb +5 -0
- data/app/views/iam/menu.html.erb +5 -0
- data/config/locales/iam.en.yml +6 -1
- data/config/routes.rb +1 -0
- data/lib/iam/authorization_provider/devise.rb +4 -0
- data/lib/iam/version.rb +1 -1
- metadata +26 -80
data/README.md
CHANGED
@@ -13,9 +13,15 @@ I'm sure you have similar workflows and user stories across your application:
|
|
13
13
|
|
14
14
|
But you don't want to click log out, click log in, fill in email and password, click submit again and again, do you?
|
15
15
|
|
16
|
+
##Features
|
17
|
+
|
18
|
+
1. Log in via user selection from list
|
19
|
+
2. Log in via typing user id
|
20
|
+
3. Log out
|
21
|
+
|
16
22
|
##Usage
|
17
23
|
|
18
|
-
|
24
|
+
Log in via user selection from list:
|
19
25
|
|
20
26
|
* press `
|
21
27
|
* click user you want to log in as
|
@@ -41,11 +47,42 @@ Generate configuration file:
|
|
41
47
|
rails g iam:initializer
|
42
48
|
```
|
43
49
|
|
44
|
-
|
50
|
+
You will get `config/iam.yml` that will suit you in 9 cases from 10:
|
51
|
+
|
52
|
+
```yml
|
53
|
+
# Amount of accounts to display for each role block
|
54
|
+
:accounts_for_each_role: 3
|
55
|
+
|
56
|
+
# Authorization provider will be used to perform log_in and log_out routines.
|
57
|
+
# You may easily extend current list of providers available. All you need
|
58
|
+
# is to implement MyProvider module and replace the setting with `my_provider` value
|
59
|
+
:authorization_provider: devise
|
60
|
+
|
61
|
+
:account:
|
62
|
+
# This class will be used to instantiate accounts
|
63
|
+
:class: User
|
64
|
+
|
65
|
+
# These attributes will be shown in a row for each account
|
66
|
+
:attributes:
|
67
|
+
- id
|
68
|
+
- full_name
|
69
|
+
|
70
|
+
:role:
|
71
|
+
# This class will be used to instantiate account roles
|
72
|
+
:class: Role
|
73
|
+
|
74
|
+
# These attributes will be shown in a row for each role header
|
75
|
+
:attributes:
|
76
|
+
- name
|
77
|
+
```
|
78
|
+
|
79
|
+
All configuration params are well described and make the gem really flexible.
|
45
80
|
|
46
81
|
Also each developer can configure control keys (alt ctrl shift) to make up iam-menu show/hide combination.
|
47
82
|
These configurations are saved into cookies and you may forget these settings after first customization.
|
48
83
|
|
84
|
+
Also the gem was __totally__ disabled from usage in production environment. Thus you can sleep peaсefully ;)
|
85
|
+
|
49
86
|
##License
|
50
87
|
|
51
88
|
MIT
|
@@ -1,5 +1,6 @@
|
|
1
1
|
$ ->
|
2
2
|
templateLink = '/iam/log_in/:id'
|
3
|
+
logOutLink = '/iam/log_out/:id'
|
3
4
|
menuLink = '/iam/menu'
|
4
5
|
inputMode = false # account id is anticipated to be typed
|
5
6
|
input = '' # typed string
|
@@ -9,11 +10,15 @@ $ ->
|
|
9
10
|
$('.iam-settings-header').on 'click', ->
|
10
11
|
$('.iam-settings').toggle()
|
11
12
|
|
12
|
-
$('#iam-menu').on 'click', 'td', ->
|
13
|
+
$('#iam-menu').on 'click', 'td.attribute', ->
|
13
14
|
$tr = $(@).parents 'tr'
|
14
15
|
link = $tr.attr 'href'
|
15
16
|
logInByLink link if link
|
16
17
|
|
18
|
+
$('#iam-menu tr.sign-out').on 'click', ->
|
19
|
+
link = $(this).attr 'href'
|
20
|
+
logOutByLink link if link
|
21
|
+
|
17
22
|
$.each controlKeys, ->
|
18
23
|
$checkbox = $(".iam-#{@}-settings input")
|
19
24
|
cookieName = "iam-#{@}-checked"
|
@@ -32,6 +37,14 @@ $ ->
|
|
32
37
|
window.location.reload()
|
33
38
|
iamNotice data.notice
|
34
39
|
|
40
|
+
logOutByLink = (link) ->
|
41
|
+
$.ajax
|
42
|
+
url: link,
|
43
|
+
type: 'DELETE',
|
44
|
+
success: (data) ->
|
45
|
+
window.location.reload()
|
46
|
+
iamNotice data.notice
|
47
|
+
|
35
48
|
isTilde = (code) ->
|
36
49
|
String.fromCharCode(code) == 'À' # tilde with any control key (alt shift ctrl)
|
37
50
|
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
(function(){$(function(){var e,t,n,r,i,s,o,u,a,f,l,c,h;return h="/iam/log_in/:id",l="/iam/menu",s=!1,i="",e=["alt","ctrl","shift"],r=function(){return $(".iam-settings-header").on("click",function(){return $(".iam-settings").toggle()}),$("#iam-menu").on("click","td",function(){var e,t;e=$(this).parents("tr"),t=e.attr("href");if(t)return f(t)}),$.each(e,function(){var e,t;return e=$(".iam-"+this+"-settings input"),t="iam-"+this+"-checked",e[0].checked=$.cookie(t)==="true",e.on("click",function(){return $.cookie(t,this.checked)})})},n=function(e){var t;return t=$("<div class='iam-notice'>"+e+"</div>"),$("body").append(t),t.fadeIn(200).delay(1e3).fadeOut(600)},f=function(e){return $.post(e,function(e){return window.location.reload(),n(e.notice)})},u=function(e){return String.fromCharCode(e)==="À"},t=function(t){var n,r,i,s;for(i=0,s=e.length;i<s;i++){n=e[i],r=$.cookie("iam-"+n+"-checked")==="true";if(r!==t[""+n+"Key"])return!1}return!0},o=function(){return $(document.getSelection().focusNode).find("input, textarea").length>0},c=function(e){var t;if(e.match(/^\d+$/))return t=h.replace(/:id/,e),f(t);if(e)return n(""+e+" is invalid id.")},a=function(){return s?c(i):$.get(l,function(e){return $("body").append(e),r()}),i=""},$(document).on("keydown",function(e){var n;if(!o()&&u(e.keyCode)&&t(e))return a(),s=!s,$("#iam-menu").remove();if(48<=(n=e.keyCode)&&n<=57)return i+=String.fromCharCode(e.keyCode)})})}).call(this);
|
1
|
+
(function(){$(function(){var e,t,n,r,i,s,o,u,a,f,l,c,h,p,d;d="/iam/log_in/:id";c="/iam/log_out/:id";h="/iam/menu";s=false;i="";e=["alt","ctrl","shift"];r=function(){$(".iam-settings-header").on("click",function(){return $(".iam-settings").toggle()});$("#iam-menu").on("click","td.attribute",function(){var e,t;e=$(this).parents("tr");t=e.attr("href");if(t)return f(t)});$("#iam-menu tr.sign-out").on("click",function(){var e;e=$(this).attr("href");if(e)return l(e)});return $.each(e,function(){var e,t;e=$(".iam-"+this+"-settings input");t="iam-"+this+"-checked";e[0].checked=$.cookie(t)==="true";return e.on("click",function(){return $.cookie(t,this.checked)})})};n=function(e){var t;t=$("<div class='iam-notice'>"+e+"</div>");$("body").append(t);return t.fadeIn(200).delay(1e3).fadeOut(600)};f=function(e){return $.post(e,function(e){window.location.reload();return n(e.notice)})};l=function(e){return $.ajax({url:e,type:"DELETE",success:function(e){window.location.reload();return n(e.notice)}})};u=function(e){return String.fromCharCode(e)==="À"};t=function(t){var n,r,i,s;for(i=0,s=e.length;i<s;i++){n=e[i];r=$.cookie("iam-"+n+"-checked")==="true";if(r!==t[""+n+"Key"])return false}return true};o=function(){return $(document.getSelection().focusNode).find("input, textarea").length>0};p=function(e){var t;if(e.match(/^\d+$/)){t=d.replace(/:id/,e);return f(t)}else{if(e)return n(""+e+" is invalid id.")}};a=function(){if(s){p(i)}else{$.get(h,function(e){$("body").append(e);return r()})}return i=""};return $(document).on("keydown",function(e){var n;if(!o()&&u(e.keyCode)&&t(e)){a();s=!s;return $("#iam-menu").remove()}else{if(48<=(n=e.keyCode)&&n<=57){return i+=String.fromCharCode(e.keyCode)}}})})}).call(this)
|
@@ -12,7 +12,7 @@
|
|
12
12
|
border: 1px solid #c9dac3;
|
13
13
|
margin: 0;
|
14
14
|
padding: 2px; }
|
15
|
-
#iam-menu .role-name, #iam-menu .iam-settings-header {
|
15
|
+
#iam-menu .role-name, #iam-menu .iam-settings-header, #iam-menu .log-out-header {
|
16
16
|
cursor: default;
|
17
17
|
padding: 5px;
|
18
18
|
font-size: 120%;
|
@@ -7,11 +7,19 @@ class IamController < ApplicationController
|
|
7
7
|
def menu; end
|
8
8
|
|
9
9
|
def log_in
|
10
|
-
return if Rails.env
|
10
|
+
return if Rails.env.production?
|
11
11
|
|
12
12
|
log_in_account account
|
13
13
|
|
14
|
-
render json: { notice: I18n.t('iam.success', name: account_name(account)) }
|
14
|
+
render json: { notice: I18n.t('iam.log_in.success', name: account_name(account)) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def log_out
|
18
|
+
return if Rails.env.production?
|
19
|
+
|
20
|
+
log_out_account account
|
21
|
+
|
22
|
+
render json: { notice: I18n.t('iam.log_out.success') }
|
15
23
|
end
|
16
24
|
|
17
25
|
private
|
data/app/views/iam/menu.html.erb
CHANGED
data/config/locales/iam.en.yml
CHANGED
data/config/routes.rb
CHANGED
data/lib/iam/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iam
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &11747100 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '3.1'
|
24
|
+
version_requirements: *11747100
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: rack
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &11744660 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: '0'
|
38
33
|
type: :runtime
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
35
|
+
version_requirements: *11744660
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: pry
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &11743260 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: '0'
|
54
44
|
type: :development
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
46
|
+
version_requirements: *11743260
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: uglifier
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &11742340 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ! '>='
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: '0'
|
70
55
|
type: :development
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
57
|
+
version_requirements: *11742340
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: sass
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &11794140 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ! '>='
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: '0'
|
86
66
|
type: :development
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
68
|
+
version_requirements: *11794140
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: coffee-rails
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &11792200 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ! '>='
|
@@ -101,15 +76,10 @@ dependencies:
|
|
101
76
|
version: '0'
|
102
77
|
type: :development
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
79
|
+
version_requirements: *11792200
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: jquery-rails
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &11791380 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ! '>='
|
@@ -117,15 +87,10 @@ dependencies:
|
|
117
87
|
version: '0'
|
118
88
|
type: :development
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
90
|
+
version_requirements: *11791380
|
126
91
|
- !ruby/object:Gem::Dependency
|
127
92
|
name: sqlite3
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &11790520 !ruby/object:Gem::Requirement
|
129
94
|
none: false
|
130
95
|
requirements:
|
131
96
|
- - ! '>='
|
@@ -133,15 +98,10 @@ dependencies:
|
|
133
98
|
version: '0'
|
134
99
|
type: :development
|
135
100
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
101
|
+
version_requirements: *11790520
|
142
102
|
- !ruby/object:Gem::Dependency
|
143
103
|
name: devise
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirement: &11801740 !ruby/object:Gem::Requirement
|
145
105
|
none: false
|
146
106
|
requirements:
|
147
107
|
- - ! '>='
|
@@ -149,15 +109,10 @@ dependencies:
|
|
149
109
|
version: '0'
|
150
110
|
type: :development
|
151
111
|
prerelease: false
|
152
|
-
version_requirements:
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ! '>='
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: '0'
|
112
|
+
version_requirements: *11801740
|
158
113
|
- !ruby/object:Gem::Dependency
|
159
114
|
name: rails
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &11799800 !ruby/object:Gem::Requirement
|
161
116
|
none: false
|
162
117
|
requirements:
|
163
118
|
- - ~>
|
@@ -165,15 +120,10 @@ dependencies:
|
|
165
120
|
version: '3.1'
|
166
121
|
type: :development
|
167
122
|
prerelease: false
|
168
|
-
version_requirements:
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ~>
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '3.1'
|
123
|
+
version_requirements: *11799800
|
174
124
|
- !ruby/object:Gem::Dependency
|
175
125
|
name: rspec-rails
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirement: &11797120 !ruby/object:Gem::Requirement
|
177
127
|
none: false
|
178
128
|
requirements:
|
179
129
|
- - ~>
|
@@ -181,12 +131,7 @@ dependencies:
|
|
181
131
|
version: '2.10'
|
182
132
|
type: :development
|
183
133
|
prerelease: false
|
184
|
-
version_requirements:
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ~>
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: '2.10'
|
134
|
+
version_requirements: *11797120
|
190
135
|
description: Simple account switcher for Rails that automatically retrieves a few
|
191
136
|
user accounts for each role and provides single-click login feature.
|
192
137
|
email: fut.wrk@gmail.com
|
@@ -210,6 +155,7 @@ files:
|
|
210
155
|
- app/views/iam/_account_group.html.erb
|
211
156
|
- app/views/iam/_key_setting.html.erb
|
212
157
|
- app/views/iam/_settings.html.erb
|
158
|
+
- app/views/iam/_sign_out.html.erb
|
213
159
|
- app/views/iam/menu.html.erb
|
214
160
|
- config/locales/iam.en.yml
|
215
161
|
- config/routes.rb
|
@@ -294,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
294
240
|
version: '0'
|
295
241
|
requirements: []
|
296
242
|
rubyforge_project: iam
|
297
|
-
rubygems_version: 1.8.
|
243
|
+
rubygems_version: 1.8.11
|
298
244
|
signing_key:
|
299
245
|
specification_version: 3
|
300
246
|
summary: Simple account switcher for Rails.
|