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 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.