iam 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -31,7 +31,7 @@ Also you may log in using user_id (e.g. 42):
31
31
  Add gem to your gemfile:
32
32
 
33
33
  ```ruby
34
- gem 'iam', '~> 0.1.3'
34
+ gem 'iam', '~> 0.1.4'
35
35
  ```
36
36
 
37
37
  Add helper to your application layout (after `jQuery`):
@@ -1,8 +1,9 @@
1
1
  <% role, accounts = account_group %>
2
2
 
3
3
  <tr>
4
- <td class='role-name' colspan=<%= Iam::Configuration.account_attributes.count %>
4
+ <td class='role-name' colspan=<%= Iam::Configuration.account_attributes.count %>>
5
5
  <%= role.public_send Iam::Configuration.role_name_attribute %>
6
6
  </td>
7
7
  </tr>
8
+
8
9
  <%= render partial: 'iam/account', collection: accounts %>
@@ -0,0 +1,4 @@
1
+ <span class='iam-setting iam-<%= key_setting %>-settings'>
2
+ <%= check_box_tag key_setting %>
3
+ <%= t "iam.key.#{key_setting}" %>
4
+ </span>
@@ -1,3 +1,4 @@
1
1
  <table id='iam-menu' href='<%= log_in_as_path(id: 'ID') %>'>
2
2
  <%= render partial: 'iam/account_group', collection: @account_samples.to_a %>
3
+ <%= render partial: 'iam/settings' %>
3
4
  </table>
@@ -0,0 +1,11 @@
1
+ <tr>
2
+ <td class='iam-settings-header' colspan=<%= Iam::Configuration.account_attributes.count %>>
3
+ <%= t 'iam.settings' %>
4
+ </td>
5
+ </tr>
6
+
7
+ <tr>
8
+ <td class='iam-settings' colspan=<%= Iam::Configuration.account_attributes.count %>>
9
+ <%= render partial: 'iam/key_setting', collection: %w{alt ctrl shift} %>
10
+ </td>
11
+ </tr>
@@ -16,10 +16,13 @@ Gem::Specification.new do |s|
16
16
  s.require_path = 'lib'
17
17
 
18
18
  s.add_dependency 'activesupport', '~> 3.1'
19
- s.add_dependency 'coffee-rails', '~> 3.2.1'
20
19
  s.add_dependency 'sass'
21
- s.add_dependency 'devise'
20
+ s.add_dependency 'coffee-rails'
22
21
 
22
+ s.add_development_dependency 'jquery-rails'
23
+ s.add_development_dependency 'sass'
24
+ s.add_development_dependency 'sqlite3'
25
+ s.add_development_dependency 'devise'
23
26
  s.add_development_dependency 'rails', '~> 3.1'
24
27
  s.add_development_dependency 'rspec-rails', '~> 2.10'
25
28
 
@@ -4,7 +4,7 @@ module IamHelper
4
4
 
5
5
  @account_samples = account_samples
6
6
  stylesheet_link_tag('iam') +
7
- javascript_include_tag('iam') +
7
+ javascript_include_tag('iam', 'jquery.cookie') +
8
8
  render('iam/menu')
9
9
  end
10
10
 
@@ -1,3 +1,3 @@
1
1
  module Iam
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
@@ -11,5 +11,4 @@
11
11
  // GO AFTER THE REQUIRES BELOW.
12
12
  //
13
13
  //= require jquery
14
- //= require iam
15
14
  //= require_tree .
@@ -8,7 +8,6 @@
8
8
  * You're free to add application-wide styles to this file and they'll appear at the top of the
9
9
  * compiled file, but it's generally better to create a new file per style scope.
10
10
  *
11
- *= require iam
12
11
  *= require_self
13
12
  *= require_tree .
14
13
  */
@@ -5,9 +5,9 @@
5
5
  <%= stylesheet_link_tag "application", :media => "all" %>
6
6
  <%= javascript_include_tag "application" %>
7
7
  <%= csrf_meta_tags %>
8
+ <%= include_iam %>
8
9
  </head>
9
10
  <body>
10
- <%= iam %>
11
11
 
12
12
  <%= yield %>
13
13
 
@@ -1,44 +1,62 @@
1
1
  $ ->
2
2
  $menu = $('#iam-menu')
3
3
  linkTemplate = $menu.attr 'href'
4
- inputMode = false
5
- input = ''
4
+ inputMode = false # account id is anticipated to be typed
5
+ input = '' # typed string
6
+ controlKeys = ['alt', 'ctrl', 'shift']
6
7
 
7
8
  iamNotice = (notice) ->
8
9
  $notice = $("<div class='iam-notice'>#{notice}</div>")
9
10
  $('body').append $notice
10
11
  $notice.fadeIn(200).delay(1000).fadeOut 600
11
12
 
12
- log_in_by_link = (link) ->
13
+ logInByLink = (link) ->
13
14
  $.post link, (data) ->
14
15
  $menu.hide()
15
16
  window.location.reload()
16
17
  iamNotice data.notice
17
18
 
18
- log_in_by_input = ->
19
- if inputMode
20
- if input.match(/^\d+$/)
21
- link = linkTemplate.replace(/ID/, input)
22
- log_in_by_link link
23
- else
24
- iamNotice "#{input} is invalid id." if input
19
+ isTilde = (code) ->
20
+ String.fromCharCode(code) == 'À' # tilde with any control key (alt shift ctrl)
21
+
22
+ controlKeysMatch = (e) ->
23
+ for key in controlKeys
24
+ checkBox = $(".iam-#{key}-settings input")[0]
25
+ return false if checkBox.checked != e["#{key}Key"]
26
+ true
27
+
28
+ inputSelected = ->
29
+ $(document.getSelection().focusNode).find('input, textarea').length > 0
30
+
31
+ processInput = (input) ->
32
+ if input.match(/^\d+$/)
33
+ link = linkTemplate.replace(/ID/, input)
34
+ logInByLink link
35
+ else
36
+ iamNotice "#{input} is invalid id." if input
37
+
38
+ logInByInput = ->
39
+ processInput input if inputMode
25
40
  input = ''
26
41
 
27
42
  $menu.on 'click', 'td', ->
28
43
  $tr = $(@).parents 'tr'
29
44
  link = $tr.attr 'href'
30
- if link
31
- log_in_by_link link
32
- inputMode = false
33
- input = ''
45
+ logInByLink link if link
34
46
 
35
- $(document).on 'keypress', (e) ->
36
- $selectedInput = $(document.getSelection().focusNode).find('input, textarea')
37
-
38
- if $selectedInput.length == 0 && (e.keyCode == 96 || e.keyCode == 1105) # '`' || 'ё'
39
- log_in_by_input()
47
+ $(document).on 'keydown', (e) ->
48
+ if !inputSelected() && isTilde(e.keyCode) && controlKeysMatch(e)
49
+ logInByInput()
40
50
 
41
51
  inputMode = !inputMode
42
52
  $menu.toggle()
43
53
  else
44
- input += String.fromCharCode e.keyCode
54
+ input += String.fromCharCode e.keyCode if 48 <= e.keyCode <= 57
55
+
56
+ $.each controlKeys, ->
57
+ $checkbox = $(".iam-#{@}-settings input")
58
+ cookieName = "iam-#{@}-checked"
59
+
60
+ $checkbox[0].checked = $.cookie(cookieName) == 'true'
61
+
62
+ $checkbox.on 'click', -> $.cookie cookieName, @.checked
@@ -0,0 +1,72 @@
1
+ /*!
2
+ * jQuery Cookie Plugin v1.3
3
+ * https://github.com/carhartl/jquery-cookie
4
+ *
5
+ * Copyright 2011, Klaus Hartl
6
+ * Dual licensed under the MIT or GPL Version 2 licenses.
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ * http://www.opensource.org/licenses/GPL-2.0
9
+ */
10
+ (function ($, document, undefined) {
11
+
12
+ var pluses = /\+/g;
13
+
14
+ function raw(s) {
15
+ return s;
16
+ }
17
+
18
+ function decoded(s) {
19
+ return decodeURIComponent(s.replace(pluses, ' '));
20
+ }
21
+
22
+ var config = $.cookie = function (key, value, options) {
23
+
24
+ // write
25
+ if (value !== undefined) {
26
+ options = $.extend({}, config.defaults, options);
27
+
28
+ if (value === null) {
29
+ options.expires = -1;
30
+ }
31
+
32
+ if (typeof options.expires === 'number') {
33
+ var days = options.expires, t = options.expires = new Date();
34
+ t.setDate(t.getDate() + days);
35
+ }
36
+
37
+ value = config.json ? JSON.stringify(value) : String(value);
38
+
39
+ return (document.cookie = [
40
+ encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value),
41
+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
42
+ options.path ? '; path=' + options.path : '',
43
+ options.domain ? '; domain=' + options.domain : '',
44
+ options.secure ? '; secure' : ''
45
+ ].join(''));
46
+ }
47
+
48
+ // read
49
+ var decode = config.raw ? raw : decoded;
50
+ var cookies = document.cookie.split('; ');
51
+ for (var i = 0, l = cookies.length; i < l; i++) {
52
+ var parts = cookies[i].split('=');
53
+ if (decode(parts.shift()) === key) {
54
+ var cookie = decode(parts.join('='));
55
+ return config.json ? JSON.parse(cookie) : cookie;
56
+ }
57
+ }
58
+
59
+ return null;
60
+ };
61
+
62
+ config.defaults = {};
63
+
64
+ $.removeCookie = function (key, options) {
65
+ if ($.cookie(key) !== null) {
66
+ $.cookie(key, null, options);
67
+ return true;
68
+ }
69
+ return false;
70
+ };
71
+
72
+ })(jQuery, document);
@@ -15,12 +15,16 @@
15
15
  margin: 0
16
16
  padding: 2px
17
17
 
18
- .role-name
18
+ .role-name, .iam-settings-header
19
19
  cursor: default
20
20
  padding: 5px
21
21
  font-size: 120%
22
22
  font-weight: bold
23
23
 
24
+ .iam-setting
25
+ text-align: left
26
+ padding-left: 10px
27
+
24
28
  .iam-notice
25
29
  position: fixed
26
30
  left: 200px
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.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-12-03 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: &15866760 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,63 +21,76 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
24
+ version_requirements: *15866760
25
+ - !ruby/object:Gem::Dependency
26
+ name: sass
27
+ requirement: &15865720 !ruby/object:Gem::Requirement
25
28
  none: false
26
29
  requirements:
27
- - - ~>
30
+ - - ! '>='
28
31
  - !ruby/object:Gem::Version
29
- version: '3.1'
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *15865720
30
36
  - !ruby/object:Gem::Dependency
31
37
  name: coffee-rails
32
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &15864540 !ruby/object:Gem::Requirement
33
39
  none: false
34
40
  requirements:
35
- - - ~>
41
+ - - ! '>='
36
42
  - !ruby/object:Gem::Version
37
- version: 3.2.1
43
+ version: '0'
38
44
  type: :runtime
39
45
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 3.2.1
46
+ version_requirements: *15864540
46
47
  - !ruby/object:Gem::Dependency
47
- name: sass
48
- requirement: !ruby/object:Gem::Requirement
48
+ name: jquery-rails
49
+ requirement: &15863720 !ruby/object:Gem::Requirement
49
50
  none: false
50
51
  requirements:
51
52
  - - ! '>='
52
53
  - !ruby/object:Gem::Version
53
54
  version: '0'
54
- type: :runtime
55
+ type: :development
55
56
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
+ version_requirements: *15863720
58
+ - !ruby/object:Gem::Dependency
59
+ name: sass
60
+ requirement: &15863080 !ruby/object:Gem::Requirement
57
61
  none: false
58
62
  requirements:
59
63
  - - ! '>='
60
64
  - !ruby/object:Gem::Version
61
65
  version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *15863080
62
69
  - !ruby/object:Gem::Dependency
63
- name: devise
64
- requirement: !ruby/object:Gem::Requirement
70
+ name: sqlite3
71
+ requirement: &15862420 !ruby/object:Gem::Requirement
65
72
  none: false
66
73
  requirements:
67
74
  - - ! '>='
68
75
  - !ruby/object:Gem::Version
69
76
  version: '0'
70
- type: :runtime
77
+ type: :development
71
78
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
79
+ version_requirements: *15862420
80
+ - !ruby/object:Gem::Dependency
81
+ name: devise
82
+ requirement: &15861720 !ruby/object:Gem::Requirement
73
83
  none: false
74
84
  requirements:
75
85
  - - ! '>='
76
86
  - !ruby/object:Gem::Version
77
87
  version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *15861720
78
91
  - !ruby/object:Gem::Dependency
79
92
  name: rails
80
- requirement: !ruby/object:Gem::Requirement
93
+ requirement: &15861080 !ruby/object:Gem::Requirement
81
94
  none: false
82
95
  requirements:
83
96
  - - ~>
@@ -85,15 +98,10 @@ dependencies:
85
98
  version: '3.1'
86
99
  type: :development
87
100
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: '3.1'
101
+ version_requirements: *15861080
94
102
  - !ruby/object:Gem::Dependency
95
103
  name: rspec-rails
96
- requirement: !ruby/object:Gem::Requirement
104
+ requirement: &15860400 !ruby/object:Gem::Requirement
97
105
  none: false
98
106
  requirements:
99
107
  - - ~>
@@ -101,12 +109,7 @@ dependencies:
101
109
  version: '2.10'
102
110
  type: :development
103
111
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ~>
108
- - !ruby/object:Gem::Version
109
- version: '2.10'
112
+ version_requirements: *15860400
110
113
  description: Simple account switcher for Rails that automatically retrieves a few
111
114
  user accounts for each role and provides single-click login feature.
112
115
  email: fut.wrk@gmail.com
@@ -122,7 +125,9 @@ files:
122
125
  - app/views/iam/_account.html.erb
123
126
  - app/views/iam/_account_attribute.html.erb
124
127
  - app/views/iam/_account_group.html.erb
128
+ - app/views/iam/_key_setting.html.erb
125
129
  - app/views/iam/_menu.html.erb
130
+ - app/views/iam/_settings.html.erb
126
131
  - config/locales/iam.en.yml
127
132
  - config/routes.rb
128
133
  - iam.gemspec
@@ -181,6 +186,7 @@ files:
181
186
  - spec/spec_helper.rb
182
187
  - spec/support/database_cleaner.rb
183
188
  - vendor/assets/javascripts/iam.js.coffee
189
+ - vendor/assets/javascripts/jquery.cookie.js
184
190
  - vendor/assets/stylesheets/iam.css.sass
185
191
  homepage: http://github.com/FUT/iam
186
192
  licenses:
@@ -203,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
209
  version: '0'
204
210
  requirements: []
205
211
  rubyforge_project: iam
206
- rubygems_version: 1.8.24
212
+ rubygems_version: 1.8.11
207
213
  signing_key:
208
214
  specification_version: 3
209
215
  summary: Simple account switcher for Rails.