iam 0.1.3 → 0.1.4

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