bootswatch_rails 3.2.0.22 → 3.2.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bootswatch_rails/version.rb +1 -1
- data/lib/generators/bootswatch_rails/sorcery/sorcery_generator.rb +41 -11
- data/lib/generators/bootswatch_rails/sorcery/templates/_form.html.erb +3 -1
- data/lib/generators/bootswatch_rails/sorcery/templates/ability_migration.rb +28 -0
- data/lib/generators/bootswatch_rails/sorcery/templates/ability_model.rb +3 -0
- data/lib/generators/bootswatch_rails/sorcery/templates/assignment_migration.rb +10 -0
- data/lib/generators/bootswatch_rails/sorcery/templates/assignment_model.rb +4 -0
- data/lib/generators/bootswatch_rails/sorcery/templates/index.html.erb +22 -8
- data/lib/generators/bootswatch_rails/sorcery/templates/picture_uploader.rb +65 -0
- data/lib/generators/bootswatch_rails/sorcery/templates/role_migration.rb +11 -0
- data/lib/generators/bootswatch_rails/sorcery/templates/role_model.rb +5 -0
- data/lib/generators/bootswatch_rails/sorcery/templates/roles_controller.rb +80 -0
- data/lib/generators/bootswatch_rails/sorcery/templates/show.html.erb +2 -2
- data/lib/generators/bootswatch_rails/sorcery/templates/sorcery.de.yml +38 -9
- data/lib/generators/bootswatch_rails/sorcery/templates/user_migration.rb +19 -19
- data/lib/generators/bootswatch_rails/sorcery/templates/user_model.rb +4 -3
- data/vendor/assets/stylesheets/paper.css +34 -21
- data/vendor/assets/stylesheets/yeti.css +39 -39
- metadata +11 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9b6d64a94c444c61214c3a4f0fca343ab569dbe
|
4
|
+
data.tar.gz: 0db44cda7ac19f2ee5405c6ca2427cbc11959506
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1e8fdf32d93d9fb54b21c4d0ebcbd09c2b57a27f5adf821c72a987d95a81691e9993ef8874385d2073513d35ae1d296be3eb645320c4695765931762d7a6b9a
|
7
|
+
data.tar.gz: 4c39a739911cb688ec8dc7df82f8a172c2cd77d3fcb3d9aeb1e64dc486fbe1bfe55c99d4e33b03dd2ec3aa7c03254040171173edd08f5596b5b70af57cae7997
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module BootswatchRails
|
2
2
|
BOOTSTRAP = "3.2.0"
|
3
|
-
VERSION = "3.2.0.
|
3
|
+
VERSION = "3.2.0.24"
|
4
4
|
THEMES = [:amelia, :cerulean, :cosmo, :custom, :cyborg, :darkly, :flatly, :journal, :lumen, :paper, :readable, :sandstone, :simplex, :slate, :spacelab, :superhero, :united, :yeti]
|
5
5
|
DEFAULT = 1
|
6
6
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require 'rails/generators/active_record'
|
2
2
|
|
3
3
|
module BootswatchRails
|
4
|
-
USER_STATUS = %w(guest member admin sysadm)
|
5
|
-
|
6
4
|
module Generators
|
7
5
|
class SorceryGenerator < ActiveRecord::Generators::Base
|
8
|
-
desc "Install
|
6
|
+
desc "Install authentication (with Sorcery) and (optional) authorization."
|
9
7
|
argument :name, type: :string, default: "user",
|
10
8
|
banner: "user model (default 'user')"
|
11
9
|
class_option :picture, type: :boolean, default: false,
|
12
10
|
desc: 'Add picture to user (needs carrierwave)'
|
11
|
+
class_option :authorization, type: :boolean, default: true,
|
12
|
+
desc: 'Add dynamic athorization on top of authentication'
|
13
13
|
class_option :user_activation, type: :boolean, default: false,
|
14
14
|
desc: 'User activation by email with optional success email'
|
15
15
|
class_option :reset_password, type: :boolean, default: false,
|
@@ -29,23 +29,41 @@ module BootswatchRails
|
|
29
29
|
class_option :layout, type: :string, default: 'centered',
|
30
30
|
desc: 'Layout to be used for rendering login.html.erb'
|
31
31
|
source_root File.expand_path("../templates", __FILE__)
|
32
|
-
|
33
|
-
def
|
32
|
+
|
33
|
+
def add_migrations
|
34
34
|
migration_template "user_migration.rb", "db/migrate/create_#{table_name}.rb"
|
35
|
+
return unless options.authorization?
|
36
|
+
migration_template "role_migration.rb", "db/migrate/create_roles.rb"
|
37
|
+
migration_template "assignment_migration.rb", "db/migrate/create_assignments.rb"
|
38
|
+
migration_template "ability_migration.rb", "db/migrate/create_abilities.rb"
|
35
39
|
end
|
36
40
|
|
37
|
-
def
|
41
|
+
def add_models
|
38
42
|
template "user_model.rb", "app/models/#{name}.rb"
|
43
|
+
return unless options.authorization?
|
44
|
+
template "role_model.rb", "app/models/role.rb"
|
45
|
+
template "assignment_model.rb", "app/models/assignment.rb"
|
46
|
+
template "ability_model.rb", "app/models/ability.rb"
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_uploader
|
50
|
+
return unless options.picture?
|
51
|
+
template "picture_uploader.rb", "app/uploaders/picture_uploader.rb"
|
39
52
|
end
|
40
53
|
|
41
54
|
def add_mailer
|
42
55
|
return unless reset_password?
|
43
|
-
template "user_mailer.rb", "app/mailers/#{
|
44
|
-
template "reset_password_email.html.erb", "app/views/#{
|
56
|
+
template "user_mailer.rb", "app/mailers/#{mailer_name}.rb"
|
57
|
+
template "reset_password_email.html.erb", "app/views/#{mailer_name}/reset_password_email.html.erb"
|
45
58
|
end
|
46
59
|
|
47
|
-
def
|
60
|
+
def add_controllers
|
48
61
|
template "users_controller.rb", "app/controllers/#{table_name}_controller.rb"
|
62
|
+
return unless authorization?
|
63
|
+
# TODO
|
64
|
+
# template "roles_controller.rb", "app/controllers/roles_controller.rb"
|
65
|
+
# template "assignments_controller.rb", "app/controllers/assignments_controller.rb"
|
66
|
+
# template "abilities_controller.rb", "app/controllers/abilities_controller.rb"
|
49
67
|
end
|
50
68
|
|
51
69
|
def add_views
|
@@ -54,6 +72,8 @@ module BootswatchRails
|
|
54
72
|
views.each do |view|
|
55
73
|
template "#{view}.html.erb", "app/views/#{table_name}/#{view}.html.erb"
|
56
74
|
end
|
75
|
+
return unless options.authorization?
|
76
|
+
# TODO
|
57
77
|
end
|
58
78
|
|
59
79
|
def add_routes
|
@@ -84,6 +104,12 @@ module BootswatchRails
|
|
84
104
|
" get '/logout' => '#{table_name}#log_out', as: :logout, format: false",
|
85
105
|
""
|
86
106
|
]
|
107
|
+
lines << [
|
108
|
+
" resources :roles",
|
109
|
+
" resources :assignments",
|
110
|
+
" resources :abilities",
|
111
|
+
""
|
112
|
+
] if options.authorization?
|
87
113
|
route lines.join("\n")
|
88
114
|
end
|
89
115
|
|
@@ -117,6 +143,10 @@ module BootswatchRails
|
|
117
143
|
options.picture?
|
118
144
|
end
|
119
145
|
|
146
|
+
def authorization?
|
147
|
+
options.authorization?
|
148
|
+
end
|
149
|
+
|
120
150
|
def user_activation?
|
121
151
|
options.user_activation?
|
122
152
|
end
|
@@ -180,8 +210,8 @@ module BootswatchRails
|
|
180
210
|
|
181
211
|
def whitelist
|
182
212
|
text = ":email, :name, :phone, :comment, :theme, " +
|
183
|
-
":active, :
|
184
|
-
text += ", :picture, :picture_cache" if
|
213
|
+
":active, :sysadm, :password, :password_confirmation"
|
214
|
+
text += ", :picture, :picture_cache" if options.picture?
|
185
215
|
end
|
186
216
|
end
|
187
217
|
end
|
@@ -25,7 +25,9 @@
|
|
25
25
|
<%%= f.input :active %>
|
26
26
|
<%%= f.input :password %>
|
27
27
|
<%%= f.input :password_confirmation %>
|
28
|
-
|
28
|
+
<%%- if current_<%= name %>.sysadmin and @<%= name %> != current_<%= name %> -%>
|
29
|
+
<%%= f.input :sysadm %>
|
30
|
+
<%%- end -%>
|
29
31
|
|
30
32
|
<%%= f.button :submit, class: 'btn btn-primary' %>
|
31
33
|
<%%- if @<%= name %>.new_record? -%>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class CreateAbilities < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :abilities do |t|
|
4
|
+
t.belongs_to :role, index: true
|
5
|
+
t.string :resource, null: false
|
6
|
+
t.boolean :create_new, default: false
|
7
|
+
t.boolean :read_own, default: false
|
8
|
+
t.boolean :read_any, default: false
|
9
|
+
t.boolean :update_own, default: false
|
10
|
+
t.boolean :update_any, default: false
|
11
|
+
t.boolean :delete_own, default: false
|
12
|
+
t.boolean :delete_any, default: false
|
13
|
+
t.boolean :user1_own, default: false
|
14
|
+
t.boolean :user1_any, default: false
|
15
|
+
t.string :user1_name
|
16
|
+
t.boolean :user2_own, default: false
|
17
|
+
t.boolean :user2_any, default: false
|
18
|
+
t.string :user2_name
|
19
|
+
t.boolean :user3_own, default: false
|
20
|
+
t.boolean :user3_any, default: false
|
21
|
+
t.string :user3_name
|
22
|
+
|
23
|
+
t.timestamps
|
24
|
+
end
|
25
|
+
|
26
|
+
add_index :abilities, :resource, unique: true
|
27
|
+
end
|
28
|
+
end
|
@@ -3,13 +3,16 @@
|
|
3
3
|
<table class="table table-striped table-hover">
|
4
4
|
<thead>
|
5
5
|
<tr>
|
6
|
-
<th><%%= t('activerecord.
|
6
|
+
<th><%%= t('activerecord.attributes.<%= name %>.name') %>
|
7
|
+
<br>
|
8
|
+
<%%= t('activerecord.attributes.<%= name %>.phone') %></th>
|
7
9
|
<th><%%= t('activerecord.attributes.<%= name %>.comment') %></th>
|
8
10
|
<%- if has_picture? -%>
|
9
11
|
<th><%%= t('activerecord.attributes.<%= name %>.picture') %></th>
|
10
12
|
<%- end -%>
|
11
|
-
<th><%%= t('activerecord.attributes.<%= name %>.active')
|
12
|
-
|
13
|
+
<th><%%= t('activerecord.attributes.<%= name %>.active') %>
|
14
|
+
<br>
|
15
|
+
<%%= t('activerecord.attributes.<%= name %>.sysadm') %></th>
|
13
16
|
<th class="index-actions"><%%= t('actions.title') %></th>
|
14
17
|
</tr>
|
15
18
|
</thead>
|
@@ -17,13 +20,24 @@
|
|
17
20
|
<tbody>
|
18
21
|
<%% @<%= table_name %>.each do |<%= name %>| %>
|
19
22
|
<tr>
|
20
|
-
<td
|
21
|
-
|
23
|
+
<td>
|
24
|
+
<%%= mail_to(<%= name %>.email, <%= name %>.name) %>
|
25
|
+
<br>
|
26
|
+
<%%= <%= name %>.phone %>
|
27
|
+
</td>
|
28
|
+
<td>
|
29
|
+
<%%= <%= name %>.comment %>
|
30
|
+
</td>
|
22
31
|
<%- if has_picture? -%>
|
23
|
-
<td
|
32
|
+
<td>
|
33
|
+
<%%= image_tag(<%= name %>.picture_url(:thumb).to_s) %>
|
34
|
+
</td>
|
24
35
|
<%- end -%>
|
25
|
-
<td
|
26
|
-
|
36
|
+
<td>
|
37
|
+
<%%= <%= name %>.active ? t('simple_form.yes') : t('simple_form.no') %>
|
38
|
+
<br>
|
39
|
+
<%%= <%= name %>.sysadm ? t('simple_form.yes') : t('simple_form.no') %>
|
40
|
+
</td>
|
27
41
|
<td class="index-actions">
|
28
42
|
<%%= link_to t('actions.show'), <%= name %>, class: 'btn btn-default btn-xs' %>
|
29
43
|
<%%- if current_<%= name %>.status.to_sym == :sysadm or <%= name %> == current_<%= name %> -%>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class PictureUploader < CarrierWave::Uploader::Base
|
4
|
+
|
5
|
+
# Include RMagick or MiniMagick support:
|
6
|
+
# include CarrierWave::RMagick
|
7
|
+
include CarrierWave::MiniMagick
|
8
|
+
|
9
|
+
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
|
10
|
+
## Seems to be gone in Rails 4.0 ???
|
11
|
+
## include Sprockets::Helpers::RailsHelper
|
12
|
+
## include Sprockets::Helpers::IsolatedHelper
|
13
|
+
|
14
|
+
# Choose what kind of storage to use for this uploader:
|
15
|
+
storage :file
|
16
|
+
# storage :fog
|
17
|
+
|
18
|
+
# Override the directory where uploaded files will be stored.
|
19
|
+
# This is a sensible default for uploaders that are meant to be mounted:
|
20
|
+
def store_dir
|
21
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
22
|
+
end
|
23
|
+
|
24
|
+
# Provide a default URL as a default if there hasn't been a file uploaded:
|
25
|
+
# def default_url
|
26
|
+
# # For Rails 3.1+ asset pipeline compatibility:
|
27
|
+
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
28
|
+
#
|
29
|
+
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
|
30
|
+
# end
|
31
|
+
|
32
|
+
# Process files as they are uploaded:
|
33
|
+
# process :scale => [200, 300]
|
34
|
+
#
|
35
|
+
# def scale(width, height)
|
36
|
+
# # do something
|
37
|
+
# end
|
38
|
+
|
39
|
+
# Create different versions of your uploaded files:
|
40
|
+
version :thumb do
|
41
|
+
process :resize_to_limit => [100, 100]
|
42
|
+
end
|
43
|
+
version :carousel do
|
44
|
+
process :resize_to_fill => [600, 400]
|
45
|
+
end
|
46
|
+
version :display do
|
47
|
+
process :resize_to_limit => [600, 600]
|
48
|
+
end
|
49
|
+
version :avatar do
|
50
|
+
process :resize_to_limit => [300, 300]
|
51
|
+
end
|
52
|
+
|
53
|
+
# Add a white list of extensions which are allowed to be uploaded.
|
54
|
+
# For images you might use something like this:
|
55
|
+
def extension_white_list
|
56
|
+
%w(jpg jpeg gif png)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Override the filename of the uploaded files:
|
60
|
+
# Avoid using model.id or version_name here, see uploader/store.rb for details.
|
61
|
+
# def filename
|
62
|
+
# "something.jpg" if original_filename
|
63
|
+
# end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
class RolesController < ApplicationController
|
2
|
+
force_ssl if: :ssl_configured?
|
3
|
+
before_action :set_role, only: [:show, :edit, :update, :destroy]
|
4
|
+
|
5
|
+
# GET /roles
|
6
|
+
# GET /roles.json
|
7
|
+
def index
|
8
|
+
@roles = Role.all
|
9
|
+
end
|
10
|
+
|
11
|
+
# GET /roles/1
|
12
|
+
# GET /roles/1.json
|
13
|
+
def show
|
14
|
+
end
|
15
|
+
|
16
|
+
# GET /roles/new
|
17
|
+
def new
|
18
|
+
@role = Role.new
|
19
|
+
end
|
20
|
+
|
21
|
+
# GET /roles/1/edit
|
22
|
+
def edit
|
23
|
+
end
|
24
|
+
|
25
|
+
# POST /roles
|
26
|
+
# POST /roles.json
|
27
|
+
def create
|
28
|
+
@role = Role.new(role_params)
|
29
|
+
|
30
|
+
respond_to do |format|
|
31
|
+
if @role.save
|
32
|
+
format.html { redirect_to @role, notice: 'Role was successfully created.' }
|
33
|
+
format.json { render :show, status: :created, location: @role }
|
34
|
+
else
|
35
|
+
format.html { render :new }
|
36
|
+
format.json { render json: @role.errors, status: :unprocessable_entity }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# PATCH/PUT /roles/1
|
42
|
+
# PATCH/PUT /roles/1.json
|
43
|
+
def update
|
44
|
+
respond_to do |format|
|
45
|
+
if @role.update(role_params)
|
46
|
+
format.html { redirect_to @role, notice: 'Role was successfully updated.' }
|
47
|
+
format.json { render :show, status: :ok, location: @role }
|
48
|
+
else
|
49
|
+
format.html { render :edit }
|
50
|
+
format.json { render json: @role.errors, status: :unprocessable_entity }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# DELETE /roles/1
|
56
|
+
# DELETE /roles/1.json
|
57
|
+
def destroy
|
58
|
+
@role.destroy
|
59
|
+
respond_to do |format|
|
60
|
+
format.html { redirect_to roles_url, notice: 'Role was successfully destroyed.' }
|
61
|
+
format.json { head :no_content }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
# Always enforce SSL for this controller
|
67
|
+
def ssl_configured?
|
68
|
+
Rails.env.production?
|
69
|
+
end
|
70
|
+
|
71
|
+
# Use callbacks to share common setup or constraints between actions.
|
72
|
+
def set_role
|
73
|
+
@role = Role.find(params[:id])
|
74
|
+
end
|
75
|
+
|
76
|
+
# Never trust parameters from the scary internet, only allow the white list through.
|
77
|
+
def role_params
|
78
|
+
params.require(:role).permit(:name)
|
79
|
+
end
|
80
|
+
end
|
@@ -35,8 +35,8 @@
|
|
35
35
|
<td><%%= @<%= name %>.active ? t('simple_form.yes') : t('simple_form.no') %></td>
|
36
36
|
</tr>
|
37
37
|
<tr>
|
38
|
-
<td><%%= t('activerecord.attributes.<%= name %>.
|
39
|
-
<td><%%=
|
38
|
+
<td><%%= t('activerecord.attributes.<%= name %>.sysadm') %></td>
|
39
|
+
<td><%%= @<%= name %>.sysadm ? t('simple_form.yes') : t('simple_form.no') %></td>
|
40
40
|
</tr>
|
41
41
|
<%- if activity_logging? -%>
|
42
42
|
<%%- if @<%= name %>.last_login_at.present? -%>
|
@@ -29,19 +29,22 @@ de:
|
|
29
29
|
reset_password_email:
|
30
30
|
subject: "Kennwort für #{name} zurücksetzen"
|
31
31
|
|
32
|
-
enums:
|
33
|
-
<%= name %>:
|
34
|
-
status:
|
35
|
-
guest: "Gast"
|
36
|
-
member: "Mitglied"
|
37
|
-
admin: "Admin"
|
38
|
-
sysadm: "System-Admin"
|
39
|
-
|
40
32
|
activerecord:
|
41
33
|
models:
|
42
34
|
<%= name %>:
|
43
35
|
one: "Benutzer"
|
44
36
|
other: "Benutzer"
|
37
|
+
<%- if authorization? -%>
|
38
|
+
role:
|
39
|
+
one: "Rolle"
|
40
|
+
other: "Rollen"
|
41
|
+
assignment:
|
42
|
+
one: "Rollenzuordnung"
|
43
|
+
other: "Rollenzuordnungen"
|
44
|
+
ability:
|
45
|
+
one: "Fähigkeit"
|
46
|
+
other: Fähigkeiten"
|
47
|
+
<%- end -%>
|
45
48
|
attributes:
|
46
49
|
<%= name %>:
|
47
50
|
email: "E-Mail"
|
@@ -53,7 +56,7 @@ de:
|
|
53
56
|
<%- end -%>
|
54
57
|
theme: "Oberfläche"
|
55
58
|
active: "Aktiv"
|
56
|
-
|
59
|
+
sysadm: "Admin"
|
57
60
|
password: "Kennwort"
|
58
61
|
password_confirmation: "Kennwort wiederholen"
|
59
62
|
<%- if remember_me? -%>
|
@@ -69,3 +72,29 @@ de:
|
|
69
72
|
failed_logins_count: "Fehlversuche Anmeldung"
|
70
73
|
lock_expires_at: "Gesperrt bis"
|
71
74
|
<%- end -%>
|
75
|
+
<%- if options.authorization? -%>
|
76
|
+
role:
|
77
|
+
name: "Bezeichnung"
|
78
|
+
assignment:
|
79
|
+
<%= name %>: "Benutzer"
|
80
|
+
role: "Rolle"
|
81
|
+
ability:
|
82
|
+
resource: "Tabelle"
|
83
|
+
create_new: "Neu Anlegen"
|
84
|
+
read_own: "Lesen Eigene"
|
85
|
+
read_any: "Lesen Alle"
|
86
|
+
update_own: "Edit Eigene"
|
87
|
+
update_any: "Edit Alle"
|
88
|
+
delete_own: "Löschen Eigene"
|
89
|
+
delete_any: "Löschen Alle"
|
90
|
+
user1_own: "Zusatz1 Eigene"
|
91
|
+
user1_any: "Zusatz1 Alle"
|
92
|
+
user1_name: "Zusatz1 Name"
|
93
|
+
user2_own: "Zusatz2 Eigene"
|
94
|
+
user2_any: "Zusatz2 Alle"
|
95
|
+
user2_name: "Zusatz2 Name"
|
96
|
+
user3_own: "Zusatz3 Eigene"
|
97
|
+
user3_any: "Zusatz3 Alle"
|
98
|
+
user3_name: "Zusatz3 Name"
|
99
|
+
<%- end -%>
|
100
|
+
|
@@ -1,51 +1,51 @@
|
|
1
1
|
class <%= migration_name.camelize %> < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
create_table :<%= table_name %> do |t|
|
4
|
-
t.string
|
5
|
-
t.string
|
6
|
-
t.string
|
7
|
-
t.text
|
4
|
+
t.string :email, null: false
|
5
|
+
t.string :name
|
6
|
+
t.string :phone
|
7
|
+
t.text :comment
|
8
8
|
<%- if has_picture? -%>
|
9
|
-
t.string
|
9
|
+
t.string :picture
|
10
10
|
<%- end -%>
|
11
|
-
t.integer
|
12
|
-
t.boolean
|
13
|
-
t.
|
11
|
+
t.integer :theme, default: BootswatchRails::DEFAULT
|
12
|
+
t.boolean :active, default: true
|
13
|
+
t.boolean :sysadm, default: false
|
14
14
|
|
15
|
-
t.string
|
16
|
-
t.string
|
15
|
+
t.string :crypted_password, null: false
|
16
|
+
t.string :salt, null: false
|
17
17
|
<%- if user_activation? -%>
|
18
|
-
t.string
|
19
|
-
t.string
|
18
|
+
t.string :activation_state, default: nil
|
19
|
+
t.string :activation_token, default: nil
|
20
20
|
t.datetime :activation_token_expires_at, default: nil
|
21
21
|
<%- end -%>
|
22
22
|
<%- if reset_password? -%>
|
23
|
-
t.string
|
23
|
+
t.string :reset_password_token, default: nil
|
24
24
|
t.datetime :reset_password_token_expires_at, default: nil
|
25
25
|
t.datetime :reset_password_email_sent_at, default: nil
|
26
26
|
<%- end -%>
|
27
27
|
<%- if remember_me? -%>
|
28
|
-
t.boolean
|
29
|
-
t.string
|
28
|
+
t.boolean :remember_me
|
29
|
+
t.string :remember_me_token, default: nil
|
30
30
|
t.datetime :remember_me_token_expires_at, default: nil
|
31
31
|
<%- end -%>
|
32
32
|
<%- if brute_force_protection? -%>
|
33
|
-
t.integer
|
33
|
+
t.integer :failed_logins_count, default: 0
|
34
34
|
t.datetime :lock_expires_at, default: nil
|
35
|
-
t.string
|
35
|
+
t.string :unlock_token, default: nil
|
36
36
|
<%- end -%>
|
37
37
|
<%- if activity_logging? -%>
|
38
38
|
t.datetime :last_login_at, default: nil
|
39
39
|
t.datetime :last_logout_at, default: nil
|
40
40
|
t.datetime :last_activity_at, default: nil
|
41
|
-
t.string
|
41
|
+
t.string :last_login_from_ip_address, default: nil
|
42
42
|
<%- end -%>
|
43
43
|
|
44
44
|
t.timestamps
|
45
45
|
end
|
46
46
|
|
47
47
|
add_index :<%= table_name %>, :email, unique: true
|
48
|
-
add_index :<%= table_name %>, :
|
48
|
+
add_index :<%= table_name %>, :sysadm
|
49
49
|
<%- if user_activation? -%>
|
50
50
|
add_index :<%= table_name %>, :activation_token
|
51
51
|
<%- end -%>
|
@@ -6,12 +6,13 @@ class <%= class_name %> < ActiveRecord::Base
|
|
6
6
|
validates :password, confirmation: true
|
7
7
|
validates :password_confirmation, presence: true, on: :create
|
8
8
|
|
9
|
+
has_many :assignments
|
10
|
+
has_many :roles, through: :assignments
|
11
|
+
has_many :abilities, through: :roles
|
12
|
+
|
9
13
|
<%- if has_picture? -%>
|
10
14
|
mount_uploader :picture, PictureUploader
|
11
15
|
|
12
16
|
<%- end -%>
|
13
|
-
enum status: <%= BootswatchRails::USER_STATUS %>
|
14
|
-
validates :status, presence: true
|
15
|
-
|
16
17
|
enum theme: BootswatchRails::THEMES
|
17
18
|
end
|
@@ -3665,11 +3665,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
|
|
3665
3665
|
.nav-tabs.nav-justified > .active > a,
|
3666
3666
|
.nav-tabs.nav-justified > .active > a:hover,
|
3667
3667
|
.nav-tabs.nav-justified > .active > a:focus {
|
3668
|
-
border: 1px solid
|
3668
|
+
border: 1px solid transparent;
|
3669
3669
|
}
|
3670
3670
|
@media (min-width: 768px) {
|
3671
3671
|
.nav-tabs.nav-justified > li > a {
|
3672
|
-
border-bottom: 1px solid
|
3672
|
+
border-bottom: 1px solid transparent;
|
3673
3673
|
border-radius: 3px 3px 0 0;
|
3674
3674
|
}
|
3675
3675
|
.nav-tabs.nav-justified > .active > a,
|
@@ -3733,11 +3733,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
|
|
3733
3733
|
.nav-tabs-justified > .active > a,
|
3734
3734
|
.nav-tabs-justified > .active > a:hover,
|
3735
3735
|
.nav-tabs-justified > .active > a:focus {
|
3736
|
-
border: 1px solid
|
3736
|
+
border: 1px solid transparent;
|
3737
3737
|
}
|
3738
3738
|
@media (min-width: 768px) {
|
3739
3739
|
.nav-tabs-justified > li > a {
|
3740
|
-
border-bottom: 1px solid
|
3740
|
+
border-bottom: 1px solid transparent;
|
3741
3741
|
border-radius: 3px 3px 0 0;
|
3742
3742
|
}
|
3743
3743
|
.nav-tabs-justified > .active > a,
|
@@ -5630,7 +5630,7 @@ button.close {
|
|
5630
5630
|
margin-left: -11px;
|
5631
5631
|
border-bottom-width: 0;
|
5632
5632
|
border-top-color: rgba(0, 0, 0, 0);
|
5633
|
-
border-top-color: rgba(0, 0, 0, 0.
|
5633
|
+
border-top-color: rgba(0, 0, 0, 0.075);
|
5634
5634
|
bottom: -11px;
|
5635
5635
|
}
|
5636
5636
|
.popover.top > .arrow:after {
|
@@ -5646,7 +5646,7 @@ button.close {
|
|
5646
5646
|
margin-top: -11px;
|
5647
5647
|
border-left-width: 0;
|
5648
5648
|
border-right-color: rgba(0, 0, 0, 0);
|
5649
|
-
border-right-color: rgba(0, 0, 0, 0.
|
5649
|
+
border-right-color: rgba(0, 0, 0, 0.075);
|
5650
5650
|
}
|
5651
5651
|
.popover.right > .arrow:after {
|
5652
5652
|
content: " ";
|
@@ -5660,7 +5660,7 @@ button.close {
|
|
5660
5660
|
margin-left: -11px;
|
5661
5661
|
border-top-width: 0;
|
5662
5662
|
border-bottom-color: rgba(0, 0, 0, 0);
|
5663
|
-
border-bottom-color: rgba(0, 0, 0, 0.
|
5663
|
+
border-bottom-color: rgba(0, 0, 0, 0.075);
|
5664
5664
|
top: -11px;
|
5665
5665
|
}
|
5666
5666
|
.popover.bottom > .arrow:after {
|
@@ -5676,7 +5676,7 @@ button.close {
|
|
5676
5676
|
margin-top: -11px;
|
5677
5677
|
border-right-width: 0;
|
5678
5678
|
border-left-color: rgba(0, 0, 0, 0);
|
5679
|
-
border-left-color: rgba(0, 0, 0, 0.
|
5679
|
+
border-left-color: rgba(0, 0, 0, 0.075);
|
5680
5680
|
}
|
5681
5681
|
.popover.left > .arrow:after {
|
5682
5682
|
content: " ";
|
@@ -6280,7 +6280,8 @@ body {
|
|
6280
6280
|
p {
|
6281
6281
|
margin: 0 0 1em;
|
6282
6282
|
}
|
6283
|
-
input
|
6283
|
+
input,
|
6284
|
+
button {
|
6284
6285
|
-webkit-font-smoothing: antialiased;
|
6285
6286
|
letter-spacing: .1px;
|
6286
6287
|
text-rendering: optimizeLegibility;
|
@@ -6290,13 +6291,14 @@ a {
|
|
6290
6291
|
-o-transition: all 0.2s;
|
6291
6292
|
transition: all 0.2s;
|
6292
6293
|
}
|
6294
|
+
textarea,
|
6295
|
+
textarea.form-control,
|
6293
6296
|
input[type=text],
|
6294
6297
|
input[type=password],
|
6295
6298
|
input[type=email],
|
6296
|
-
|
6299
|
+
input[type=number],
|
6297
6300
|
[type=text].form-control,
|
6298
|
-
[type=password].form-control
|
6299
|
-
textarea.form-control {
|
6301
|
+
[type=password].form-control {
|
6300
6302
|
padding: 0;
|
6301
6303
|
border: none;
|
6302
6304
|
border-radius: 0;
|
@@ -6304,30 +6306,33 @@ textarea.form-control {
|
|
6304
6306
|
box-shadow: inset 0 -1px 0 #dddddd;
|
6305
6307
|
font-size: 16px;
|
6306
6308
|
}
|
6309
|
+
textarea:focus,
|
6310
|
+
textarea.form-control:focus,
|
6307
6311
|
input[type=text]:focus,
|
6308
6312
|
input[type=password]:focus,
|
6309
6313
|
input[type=email]:focus,
|
6310
|
-
|
6314
|
+
input[type=number]:focus,
|
6311
6315
|
[type=text].form-control:focus,
|
6312
|
-
[type=password].form-control:focus
|
6313
|
-
textarea.form-control:focus {
|
6316
|
+
[type=password].form-control:focus {
|
6314
6317
|
-webkit-box-shadow: inset 0 -2px 0 #2196f3;
|
6315
6318
|
box-shadow: inset 0 -2px 0 #2196f3;
|
6316
6319
|
}
|
6320
|
+
textarea[disabled],
|
6321
|
+
textarea.form-control[disabled],
|
6317
6322
|
input[type=text][disabled],
|
6318
6323
|
input[type=password][disabled],
|
6319
6324
|
input[type=email][disabled],
|
6320
|
-
|
6325
|
+
input[type=number][disabled],
|
6321
6326
|
[type=text].form-control[disabled],
|
6322
6327
|
[type=password].form-control[disabled],
|
6323
|
-
textarea
|
6328
|
+
textarea[readonly],
|
6329
|
+
textarea.form-control[readonly],
|
6324
6330
|
input[type=text][readonly],
|
6325
6331
|
input[type=password][readonly],
|
6326
6332
|
input[type=email][readonly],
|
6327
|
-
|
6333
|
+
input[type=number][readonly],
|
6328
6334
|
[type=text].form-control[readonly],
|
6329
|
-
[type=password].form-control[readonly]
|
6330
|
-
textarea.form-control[readonly] {
|
6335
|
+
[type=password].form-control[readonly] {
|
6331
6336
|
-webkit-box-shadow: none;
|
6332
6337
|
box-shadow: none;
|
6333
6338
|
border-bottom: 1px dotted #ddd;
|
@@ -6384,11 +6389,18 @@ select.form-control {
|
|
6384
6389
|
}
|
6385
6390
|
.nav-tabs > li.active > a:hover {
|
6386
6391
|
border: none;
|
6392
|
+
color: #2196f3;
|
6387
6393
|
}
|
6388
6394
|
.nav-tabs > li.disabled > a {
|
6389
6395
|
-webkit-box-shadow: inset 0 -1px 0 #dddddd;
|
6390
6396
|
box-shadow: inset 0 -1px 0 #dddddd;
|
6391
6397
|
}
|
6398
|
+
.nav-tabs.nav-justified > li > a,
|
6399
|
+
.nav-tabs.nav-justified > li > a:hover,
|
6400
|
+
.nav-tabs.nav-justified > .active > a,
|
6401
|
+
.nav-tabs.nav-justified > .active > a:hover {
|
6402
|
+
border: none;
|
6403
|
+
}
|
6392
6404
|
.nav-tabs .dropdown-menu {
|
6393
6405
|
margin-top: 0;
|
6394
6406
|
}
|
@@ -6413,7 +6425,7 @@ select.form-control {
|
|
6413
6425
|
.alert-danger {
|
6414
6426
|
background-color: #e51c23;
|
6415
6427
|
}
|
6416
|
-
.alert a,
|
6428
|
+
.alert a:not(.close),
|
6417
6429
|
.alert .alert-link {
|
6418
6430
|
color: #fff;
|
6419
6431
|
font-weight: bold;
|
@@ -6465,6 +6477,7 @@ select.form-control {
|
|
6465
6477
|
.close {
|
6466
6478
|
font-size: 34px;
|
6467
6479
|
font-weight: 300;
|
6480
|
+
line-height: 24px;
|
6468
6481
|
opacity: 0.6;
|
6469
6482
|
}
|
6470
6483
|
.close:hover {
|
@@ -891,7 +891,7 @@ html {
|
|
891
891
|
body {
|
892
892
|
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
893
893
|
font-size: 15px;
|
894
|
-
line-height: 1.
|
894
|
+
line-height: 1.4;
|
895
895
|
color: #222222;
|
896
896
|
background-color: #ffffff;
|
897
897
|
}
|
@@ -938,7 +938,7 @@ img {
|
|
938
938
|
}
|
939
939
|
.img-thumbnail {
|
940
940
|
padding: 4px;
|
941
|
-
line-height: 1.
|
941
|
+
line-height: 1.4;
|
942
942
|
background-color: #ffffff;
|
943
943
|
border: 1px solid #dddddd;
|
944
944
|
border-radius: 0;
|
@@ -1243,7 +1243,7 @@ dl {
|
|
1243
1243
|
}
|
1244
1244
|
dt,
|
1245
1245
|
dd {
|
1246
|
-
line-height: 1.
|
1246
|
+
line-height: 1.4;
|
1247
1247
|
}
|
1248
1248
|
dt {
|
1249
1249
|
font-weight: bold;
|
@@ -1290,7 +1290,7 @@ blockquote small,
|
|
1290
1290
|
blockquote .small {
|
1291
1291
|
display: block;
|
1292
1292
|
font-size: 80%;
|
1293
|
-
line-height: 1.
|
1293
|
+
line-height: 1.4;
|
1294
1294
|
color: #6f6f6f;
|
1295
1295
|
}
|
1296
1296
|
blockquote footer:before,
|
@@ -1329,7 +1329,7 @@ blockquote:after {
|
|
1329
1329
|
address {
|
1330
1330
|
margin-bottom: 21px;
|
1331
1331
|
font-style: normal;
|
1332
|
-
line-height: 1.
|
1332
|
+
line-height: 1.4;
|
1333
1333
|
}
|
1334
1334
|
code,
|
1335
1335
|
kbd,
|
@@ -1362,7 +1362,7 @@ pre {
|
|
1362
1362
|
padding: 10px;
|
1363
1363
|
margin: 0 0 10.5px;
|
1364
1364
|
font-size: 14px;
|
1365
|
-
line-height: 1.
|
1365
|
+
line-height: 1.4;
|
1366
1366
|
word-break: break-all;
|
1367
1367
|
word-wrap: break-word;
|
1368
1368
|
color: #333333;
|
@@ -2067,7 +2067,7 @@ th {
|
|
2067
2067
|
.table > tbody > tr > td,
|
2068
2068
|
.table > tfoot > tr > td {
|
2069
2069
|
padding: 8px;
|
2070
|
-
line-height: 1.
|
2070
|
+
line-height: 1.4;
|
2071
2071
|
vertical-align: top;
|
2072
2072
|
border-top: 1px solid #dddddd;
|
2073
2073
|
}
|
@@ -2337,18 +2337,18 @@ input[type="checkbox"]:focus {
|
|
2337
2337
|
}
|
2338
2338
|
output {
|
2339
2339
|
display: block;
|
2340
|
-
padding-top:
|
2340
|
+
padding-top: 9px;
|
2341
2341
|
font-size: 15px;
|
2342
|
-
line-height: 1.
|
2342
|
+
line-height: 1.4;
|
2343
2343
|
color: #6f6f6f;
|
2344
2344
|
}
|
2345
2345
|
.form-control {
|
2346
2346
|
display: block;
|
2347
2347
|
width: 100%;
|
2348
|
-
height:
|
2349
|
-
padding:
|
2348
|
+
height: 39px;
|
2349
|
+
padding: 8px 12px;
|
2350
2350
|
font-size: 15px;
|
2351
|
-
line-height: 1.
|
2351
|
+
line-height: 1.4;
|
2352
2352
|
color: #6f6f6f;
|
2353
2353
|
background-color: #ffffff;
|
2354
2354
|
background-image: none;
|
@@ -2393,8 +2393,8 @@ input[type="date"],
|
|
2393
2393
|
input[type="time"],
|
2394
2394
|
input[type="datetime-local"],
|
2395
2395
|
input[type="month"] {
|
2396
|
-
line-height:
|
2397
|
-
line-height: 1.
|
2396
|
+
line-height: 39px;
|
2397
|
+
line-height: 1.4 \0;
|
2398
2398
|
}
|
2399
2399
|
input[type="date"].input-sm,
|
2400
2400
|
input[type="time"].input-sm,
|
@@ -2473,8 +2473,8 @@ fieldset[disabled] .checkbox label {
|
|
2473
2473
|
cursor: not-allowed;
|
2474
2474
|
}
|
2475
2475
|
.form-control-static {
|
2476
|
-
padding-top:
|
2477
|
-
padding-bottom:
|
2476
|
+
padding-top: 9px;
|
2477
|
+
padding-bottom: 9px;
|
2478
2478
|
margin-bottom: 0;
|
2479
2479
|
}
|
2480
2480
|
.form-control-static.input-lg,
|
@@ -2518,7 +2518,7 @@ select[multiple].input-lg {
|
|
2518
2518
|
position: relative;
|
2519
2519
|
}
|
2520
2520
|
.has-feedback .form-control {
|
2521
|
-
padding-right:
|
2521
|
+
padding-right: 48.75px;
|
2522
2522
|
}
|
2523
2523
|
.form-control-feedback {
|
2524
2524
|
position: absolute;
|
@@ -2526,9 +2526,9 @@ select[multiple].input-lg {
|
|
2526
2526
|
right: 0;
|
2527
2527
|
z-index: 2;
|
2528
2528
|
display: block;
|
2529
|
-
width:
|
2530
|
-
height:
|
2531
|
-
line-height:
|
2529
|
+
width: 39px;
|
2530
|
+
height: 39px;
|
2531
|
+
line-height: 39px;
|
2532
2532
|
text-align: center;
|
2533
2533
|
}
|
2534
2534
|
.input-lg + .form-control-feedback {
|
@@ -2681,11 +2681,11 @@ select[multiple].input-lg {
|
|
2681
2681
|
.form-horizontal .checkbox-inline {
|
2682
2682
|
margin-top: 0;
|
2683
2683
|
margin-bottom: 0;
|
2684
|
-
padding-top:
|
2684
|
+
padding-top: 9px;
|
2685
2685
|
}
|
2686
2686
|
.form-horizontal .radio,
|
2687
2687
|
.form-horizontal .checkbox {
|
2688
|
-
min-height:
|
2688
|
+
min-height: 30px;
|
2689
2689
|
}
|
2690
2690
|
.form-horizontal .form-group {
|
2691
2691
|
margin-left: -15px;
|
@@ -2695,7 +2695,7 @@ select[multiple].input-lg {
|
|
2695
2695
|
.form-horizontal .control-label {
|
2696
2696
|
text-align: right;
|
2697
2697
|
margin-bottom: 0;
|
2698
|
-
padding-top:
|
2698
|
+
padding-top: 9px;
|
2699
2699
|
}
|
2700
2700
|
}
|
2701
2701
|
.form-horizontal .has-feedback .form-control-feedback {
|
@@ -2722,9 +2722,9 @@ select[multiple].input-lg {
|
|
2722
2722
|
background-image: none;
|
2723
2723
|
border: 1px solid transparent;
|
2724
2724
|
white-space: nowrap;
|
2725
|
-
padding:
|
2725
|
+
padding: 8px 12px;
|
2726
2726
|
font-size: 15px;
|
2727
|
-
line-height: 1.
|
2727
|
+
line-height: 1.4;
|
2728
2728
|
border-radius: 0;
|
2729
2729
|
-webkit-user-select: none;
|
2730
2730
|
-moz-user-select: none;
|
@@ -3153,7 +3153,7 @@ tbody.collapse.in {
|
|
3153
3153
|
padding: 3px 20px;
|
3154
3154
|
clear: both;
|
3155
3155
|
font-weight: normal;
|
3156
|
-
line-height: 1.
|
3156
|
+
line-height: 1.4;
|
3157
3157
|
color: #555555;
|
3158
3158
|
white-space: nowrap;
|
3159
3159
|
}
|
@@ -3202,7 +3202,7 @@ tbody.collapse.in {
|
|
3202
3202
|
display: block;
|
3203
3203
|
padding: 3px 20px;
|
3204
3204
|
font-size: 12px;
|
3205
|
-
line-height: 1.
|
3205
|
+
line-height: 1.4;
|
3206
3206
|
color: #999999;
|
3207
3207
|
white-space: nowrap;
|
3208
3208
|
}
|
@@ -3491,7 +3491,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
|
|
3491
3491
|
vertical-align: middle;
|
3492
3492
|
}
|
3493
3493
|
.input-group-addon {
|
3494
|
-
padding:
|
3494
|
+
padding: 8px 12px;
|
3495
3495
|
font-size: 15px;
|
3496
3496
|
font-weight: normal;
|
3497
3497
|
line-height: 1;
|
@@ -3618,7 +3618,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
|
|
3618
3618
|
}
|
3619
3619
|
.nav-tabs > li > a {
|
3620
3620
|
margin-right: 2px;
|
3621
|
-
line-height: 1.
|
3621
|
+
line-height: 1.4;
|
3622
3622
|
border: 1px solid transparent;
|
3623
3623
|
border-radius: 0 0 0 0;
|
3624
3624
|
}
|
@@ -3973,8 +3973,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
|
|
3973
3973
|
border-bottom: 1px solid transparent;
|
3974
3974
|
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
3975
3975
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
3976
|
-
margin-top:
|
3977
|
-
margin-bottom:
|
3976
|
+
margin-top: 3px;
|
3977
|
+
margin-bottom: 3px;
|
3978
3978
|
}
|
3979
3979
|
@media (min-width: 768px) {
|
3980
3980
|
.navbar-form .form-group {
|
@@ -4053,8 +4053,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
|
|
4053
4053
|
border-bottom-left-radius: 0;
|
4054
4054
|
}
|
4055
4055
|
.navbar-btn {
|
4056
|
-
margin-top:
|
4057
|
-
margin-bottom:
|
4056
|
+
margin-top: 3px;
|
4057
|
+
margin-bottom: 3px;
|
4058
4058
|
}
|
4059
4059
|
.navbar-btn.btn-sm {
|
4060
4060
|
margin-top: 4.5px;
|
@@ -4307,8 +4307,8 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
|
|
4307
4307
|
.pagination > li > span {
|
4308
4308
|
position: relative;
|
4309
4309
|
float: left;
|
4310
|
-
padding:
|
4311
|
-
line-height: 1.
|
4310
|
+
padding: 8px 12px;
|
4311
|
+
line-height: 1.4;
|
4312
4312
|
text-decoration: none;
|
4313
4313
|
color: #008cba;
|
4314
4314
|
background-color: transparent;
|
@@ -4573,7 +4573,7 @@ a.list-group-item.active > .badge,
|
|
4573
4573
|
display: block;
|
4574
4574
|
padding: 4px;
|
4575
4575
|
margin-bottom: 21px;
|
4576
|
-
line-height: 1.
|
4576
|
+
line-height: 1.4;
|
4577
4577
|
background-color: #ffffff;
|
4578
4578
|
border: 1px solid #dddddd;
|
4579
4579
|
border-radius: 0;
|
@@ -5416,14 +5416,14 @@ button.close {
|
|
5416
5416
|
.modal-header {
|
5417
5417
|
padding: 15px;
|
5418
5418
|
border-bottom: 1px solid #e5e5e5;
|
5419
|
-
min-height: 16.
|
5419
|
+
min-height: 16.4px;
|
5420
5420
|
}
|
5421
5421
|
.modal-header .close {
|
5422
5422
|
margin-top: -2px;
|
5423
5423
|
}
|
5424
5424
|
.modal-title {
|
5425
5425
|
margin: 0;
|
5426
|
-
line-height: 1.
|
5426
|
+
line-height: 1.4;
|
5427
5427
|
}
|
5428
5428
|
.modal-body {
|
5429
5429
|
position: relative;
|
@@ -6233,7 +6233,7 @@ button.close {
|
|
6233
6233
|
background-color: #006687;
|
6234
6234
|
}
|
6235
6235
|
.btn {
|
6236
|
-
padding:
|
6236
|
+
padding: 8px 12px;
|
6237
6237
|
}
|
6238
6238
|
.btn-lg {
|
6239
6239
|
padding: 16px 20px;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootswatch_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.0.
|
4
|
+
version: 3.2.0.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Volker Wiegand
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -123,6 +123,10 @@ files:
|
|
123
123
|
- lib/generators/bootswatch_rails/install/templates/lib/templates/erb/scaffold/show.html.erb
|
124
124
|
- lib/generators/bootswatch_rails/sorcery/sorcery_generator.rb
|
125
125
|
- lib/generators/bootswatch_rails/sorcery/templates/_form.html.erb
|
126
|
+
- lib/generators/bootswatch_rails/sorcery/templates/ability_migration.rb
|
127
|
+
- lib/generators/bootswatch_rails/sorcery/templates/ability_model.rb
|
128
|
+
- lib/generators/bootswatch_rails/sorcery/templates/assignment_migration.rb
|
129
|
+
- lib/generators/bootswatch_rails/sorcery/templates/assignment_model.rb
|
126
130
|
- lib/generators/bootswatch_rails/sorcery/templates/change.html.erb
|
127
131
|
- lib/generators/bootswatch_rails/sorcery/templates/edit.html.erb
|
128
132
|
- lib/generators/bootswatch_rails/sorcery/templates/index.html.erb
|
@@ -130,7 +134,11 @@ files:
|
|
130
134
|
- lib/generators/bootswatch_rails/sorcery/templates/log_in.html.erb
|
131
135
|
- lib/generators/bootswatch_rails/sorcery/templates/new.html.erb
|
132
136
|
- lib/generators/bootswatch_rails/sorcery/templates/password.html.erb
|
137
|
+
- lib/generators/bootswatch_rails/sorcery/templates/picture_uploader.rb
|
133
138
|
- lib/generators/bootswatch_rails/sorcery/templates/reset_password_email.html.erb
|
139
|
+
- lib/generators/bootswatch_rails/sorcery/templates/role_migration.rb
|
140
|
+
- lib/generators/bootswatch_rails/sorcery/templates/role_model.rb
|
141
|
+
- lib/generators/bootswatch_rails/sorcery/templates/roles_controller.rb
|
134
142
|
- lib/generators/bootswatch_rails/sorcery/templates/show.html.erb
|
135
143
|
- lib/generators/bootswatch_rails/sorcery/templates/sorcery.de.yml
|
136
144
|
- lib/generators/bootswatch_rails/sorcery/templates/user_mailer.rb
|
@@ -185,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
193
|
version: '0'
|
186
194
|
requirements: []
|
187
195
|
rubyforge_project:
|
188
|
-
rubygems_version: 2.4.
|
196
|
+
rubygems_version: 2.4.2
|
189
197
|
signing_key:
|
190
198
|
specification_version: 4
|
191
199
|
summary: Add bootswatch.com themes to the Rails asset pipeline
|