iam 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
- Iam enables you to log in as another user in single click. All you need is to:
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
- All configuration params available are self descriptive enough.
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
- // Generated by CoffeeScript 1.3.3
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%;
@@ -14,7 +14,7 @@
14
14
  margin: 0
15
15
  padding: 2px
16
16
 
17
- .role-name, .iam-settings-header
17
+ .role-name, .iam-settings-header, .log-out-header
18
18
  cursor: default
19
19
  padding: 5px
20
20
  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 == 'production'
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
@@ -0,0 +1,5 @@
1
+ <tr href='<%= log_out_path(current_user) %>' class='sign-out'>
2
+ <td class='log-out-header' colspan=<%= Iam::Configuration[:account][:attributes].count %>>
3
+ <%= t('iam.log_out.log_out') %>
4
+ </td>
5
+ </tr>
@@ -1,4 +1,9 @@
1
1
  <table id='iam-menu'>
2
2
  <%= render partial: 'iam/account_group', collection: account_samples.to_a %>
3
+
4
+ <% if signed_in? %>
5
+ <%= render partial: 'iam/sign_out' %>
6
+ <% end %>
7
+
3
8
  <%= render partial: 'iam/settings' %>
4
9
  </table>
@@ -1,3 +1,8 @@
1
1
  en:
2
2
  iam:
3
- success: "Successfully logged in as %{name}"
3
+ log_in:
4
+ success: "Successfully logged in as %{name}"
5
+ log_out:
6
+ log_out: Log out
7
+ success: Successfully logged out
8
+ settings: Settings
@@ -1,4 +1,5 @@
1
1
  Rails.application.routes.draw do
2
2
  post 'iam/log_in/:id' => 'iam#log_in', as: :log_in
3
+ delete 'iam/log_out/:id' => 'iam#log_out', as: :log_out
3
4
  get 'iam/menu' => 'iam#menu', as: :iam_menu
4
5
  end
@@ -5,6 +5,10 @@ module Iam
5
5
  sign_in Iam::Configuration[:account][:class].downcase, account
6
6
  end
7
7
 
8
+ def log_out_account(account)
9
+ sign_out account
10
+ end
11
+
8
12
  def current_account?(account)
9
13
  current_user == account
10
14
  end
@@ -1,3 +1,3 @@
1
1
  module Iam
2
- VERSION = '0.2.2'
2
+ VERSION = '0.3.0'
3
3
  end
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.2.2
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: 2012-12-21 00:00:00.000000000 Z
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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.24
243
+ rubygems_version: 1.8.11
298
244
  signing_key:
299
245
  specification_version: 3
300
246
  summary: Simple account switcher for Rails.