symphonia 2.2.1 → 3.0.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.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/symphonia/symphonia_bootstrap.scss +10 -19
- data/app/controllers/symphonia/accounts_controller.rb +3 -3
- data/app/controllers/symphonia/login_controller.rb +7 -6
- data/app/controllers/symphonia/user_sessions_controller.rb +1 -1
- data/app/controllers/symphonia/users_controller.rb +10 -10
- data/app/models/symphonia/user.rb +14 -5
- data/app/views/layouts/symphonia/application.html.erb +1 -1
- data/app/views/symphonia/accounts/_form.html.erb +2 -9
- data/app/views/symphonia/accounts/reset_password.html.erb +1 -1
- data/db/migrate/20190706130409_add_external_id_to_users.rb +7 -0
- data/db/seeds.rb +1 -1
- data/lib/symphonia/controller_extensions.rb +4 -3
- data/lib/symphonia/query.rb +1 -1
- data/lib/symphonia/user_management.rb +4 -0
- data/lib/symphonia/version.rb +1 -1
- data/spec/factories/factories.rb +2 -2
- data/spec/models/user_spec.rb +6 -0
- data/spec/rails_helper.rb +1 -1
- data/spec/requests/accounts_spec.rb +5 -6
- metadata +9 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0e10863dd8e75d183b562258003c40246689f75f0d93ff6943934107be2abfd
|
4
|
+
data.tar.gz: a985e3482c1e9b9901de42e3c7f20dd7f322eec1a2695c0b42acfe33e8a2f99a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fff9a1db7d9b89780d878198ba3d1a5fe59bcf924a2d5b2487a435120268ead124b8df1f5a80ba649e0f3b2dd25af17a31efba8f6c204d024dcc4add2793064
|
7
|
+
data.tar.gz: b5d316307dc2b6b894585beff086f66bbe8be9ca6d768d91c463c536a074002bebb5f354058d709607c38fa72dfdf0291d10a2f0c6f961d91a47955b44110910
|
@@ -2,32 +2,23 @@
|
|
2
2
|
// *= require rails_bootstrap_forms
|
3
3
|
// *= require bootstrap-datepicker3
|
4
4
|
//@import "bootstrap-sprockets";
|
5
|
+
|
5
6
|
@import "bootstrap";
|
6
7
|
@import "bootstrap-datepicker3";
|
7
8
|
|
8
|
-
//@media (min-width: $screen-sm) {
|
9
|
-
// #internal_static_page_sign {
|
10
|
-
// font-size: 20em;
|
11
|
-
// }
|
12
|
-
//}
|
13
|
-
//
|
14
|
-
//@media (min-width: $screen-md) {
|
15
|
-
// #internal_static_page_sign {
|
16
|
-
// font-size: 25em;
|
17
|
-
// }
|
18
|
-
//}
|
19
|
-
//
|
20
|
-
//@media (min-width: $screen-lg) {
|
21
|
-
// #internal_static_page_sign {
|
22
|
-
// font-size: 30em;
|
23
|
-
// }
|
24
|
-
//}
|
25
9
|
|
10
|
+
// fixed navbar
|
26
11
|
body > .container {
|
27
|
-
padding-top: 80px;
|
12
|
+
padding-top: 80px;
|
13
|
+
}
|
14
|
+
|
15
|
+
@media print {
|
16
|
+
body > .container {
|
17
|
+
padding-top: 0 !important;
|
18
|
+
}
|
28
19
|
}
|
20
|
+
|
29
21
|
footer.footer {
|
30
|
-
//position: absolute;
|
31
22
|
height: 40px;
|
32
23
|
line-height: 40px;
|
33
24
|
bottom: 0;
|
@@ -113,9 +113,9 @@ module Symphonia
|
|
113
113
|
@user = find_account_by_token(params.require(:id))
|
114
114
|
return render_404 if @user.nil?
|
115
115
|
|
116
|
-
if params[:password] && params[:password_confirmation]
|
116
|
+
if params[:password]# && params[:password_confirmation]
|
117
117
|
@user.password = params[:password]
|
118
|
-
@user.password_confirmation = params[:password_confirmation]
|
118
|
+
# @user.password_confirmation = params[:password_confirmation]
|
119
119
|
end
|
120
120
|
|
121
121
|
if @user.changed? && @user.save
|
@@ -166,4 +166,4 @@ module Symphonia
|
|
166
166
|
|
167
167
|
end
|
168
168
|
|
169
|
-
end
|
169
|
+
end
|
@@ -35,6 +35,7 @@ module Symphonia
|
|
35
35
|
|
36
36
|
def destroy
|
37
37
|
current_session && current_session.destroy
|
38
|
+
session.delete :return_to
|
38
39
|
redirect_to '/', notice: t(:text_successfully_logout)
|
39
40
|
end
|
40
41
|
|
@@ -53,12 +54,12 @@ module Symphonia
|
|
53
54
|
path ||= Symphonia.config.after_login_path.presence
|
54
55
|
path ||= get_first_menu_item_path(Symphonia::MenuManager.menu(:top_menu).values) || :admin_path
|
55
56
|
case path
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
when Symbol
|
58
|
+
main_app.send(path)
|
59
|
+
when Proc
|
60
|
+
path.call(self)
|
61
|
+
else
|
62
|
+
path
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
@@ -25,12 +25,12 @@ module Symphonia
|
|
25
25
|
key :'$ref', :User
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
# response :default do
|
29
|
+
# key :description, 'unexpected error'
|
30
|
+
# schema do
|
31
|
+
# key :'$ref', :ErrorModel
|
32
|
+
# end
|
33
|
+
# end
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -49,7 +49,7 @@ module Symphonia
|
|
49
49
|
@entities = @entities.page(params[:page])
|
50
50
|
render layout: !request.xhr?
|
51
51
|
end
|
52
|
-
format.json { render json: @entities.all, only: %i[id]+Symphonia::User.registered_attributes.keys }
|
52
|
+
format.json { render json: @entities.all, only: %i[id] + Symphonia::User.registered_attributes.keys }
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -105,7 +105,7 @@ module Symphonia
|
|
105
105
|
@user.edited_at = DateTime.now
|
106
106
|
if @user.save
|
107
107
|
format.html { redirect_back_or_default user_path(@user), notice: t(:text_updated) }
|
108
|
-
format.any(:json
|
108
|
+
format.any(:json, :xml) { head :no_content }
|
109
109
|
else
|
110
110
|
format.html do
|
111
111
|
@roles = Symphonia::Role.all
|
@@ -122,7 +122,7 @@ module Symphonia
|
|
122
122
|
|
123
123
|
respond_to do |format|
|
124
124
|
format.html { redirect_to params[:back_url] || users_url }
|
125
|
-
format.js { render js: "Symphonia.filters.removeRow('#{view_context.dom_id(@user)}')"}
|
125
|
+
format.js { render js: "Symphonia.filters.removeRow('#{view_context.dom_id(@user)}')" }
|
126
126
|
format.json { head :no_content }
|
127
127
|
end
|
128
128
|
end
|
@@ -152,7 +152,7 @@ module Symphonia
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def authorize
|
155
|
-
if User.current.id == @user
|
155
|
+
if User.current.logged_in? && User.current.id == @user&.id
|
156
156
|
true
|
157
157
|
else
|
158
158
|
super
|
@@ -20,6 +20,13 @@ module Symphonia
|
|
20
20
|
|
21
21
|
acts_as_authentic do |config|
|
22
22
|
end
|
23
|
+
validates :email, uniqueness: { case_sensitive: false }
|
24
|
+
validates :password,
|
25
|
+
confirmation: { if: :require_password? },
|
26
|
+
length: {
|
27
|
+
minimum: 8,
|
28
|
+
if: :require_password?
|
29
|
+
}
|
23
30
|
|
24
31
|
include UserManagement
|
25
32
|
|
@@ -47,6 +54,8 @@ module Symphonia
|
|
47
54
|
end
|
48
55
|
end
|
49
56
|
|
57
|
+
attr_writer :password_confirmation
|
58
|
+
|
50
59
|
has_and_belongs_to_many :preferences, foreign_key: 'user_id'
|
51
60
|
|
52
61
|
belongs_to :edited_by, class_name: 'Symphonia::User', required: false
|
@@ -57,6 +66,7 @@ module Symphonia
|
|
57
66
|
scope :recipients_for, ->(notification) { joins(:preferences).where(preferences: { name: notification, type: 'Symphonia::EmailPreference' }) }
|
58
67
|
|
59
68
|
scope :like, ->(q) { t = arel_table; where(t[:email].matches("%#{q}%").or(t[:first_name].matches("%#{q}%").or(t[:last_name].matches("%#{q}%")))) }
|
69
|
+
scope :admins, -> { where(admin: true) }
|
60
70
|
|
61
71
|
alias_attribute :mail, :email
|
62
72
|
|
@@ -64,6 +74,9 @@ module Symphonia
|
|
64
74
|
before_save do |model|
|
65
75
|
Rails.cache.delete_matched('user_allowed_to*') if model.role_id_changed?
|
66
76
|
end
|
77
|
+
before_validation do |model|
|
78
|
+
model.login ||= model.email
|
79
|
+
end
|
67
80
|
|
68
81
|
def allowed_to?(action)
|
69
82
|
return true if admin?
|
@@ -134,12 +147,8 @@ module Symphonia
|
|
134
147
|
def persistence_token
|
135
148
|
nil
|
136
149
|
end
|
137
|
-
|
138
|
-
def language
|
139
|
-
Symphonia.config.default_locale || I18n.default_locale
|
140
|
-
end
|
141
150
|
end
|
142
151
|
|
143
152
|
end
|
144
153
|
|
145
|
-
end
|
154
|
+
end
|
@@ -33,7 +33,7 @@
|
|
33
33
|
<slot id="flash_messages" name="flash_messages"><%= render_flash_messages.html_safe -%></slot>
|
34
34
|
<%= yield %>
|
35
35
|
</div>
|
36
|
-
<footer class="footer">
|
36
|
+
<footer class="footer d-print-none">
|
37
37
|
<div class="container text-center">
|
38
38
|
© Lukáš Pokorný
|
39
39
|
<%= yield :footer %>
|
@@ -1,14 +1,7 @@
|
|
1
1
|
<div class="row">
|
2
|
-
<div class="col-xs-12 col-sm-6 col-md-3"
|
2
|
+
<!-- <div class="col-xs-12 col-sm-6 col-md-3"><%#= f.text_field :login, required: true %></div>-->
|
3
3
|
<div class="col-xs-12 col-sm-6 col-md-3"><%= f.email_field :mail, required: true %></div>
|
4
4
|
<div class="col-xs-12 col-sm-6 col-md-3"><%= f.text_field :first_name, required: true %></div>
|
5
5
|
<div class="col-xs-12 col-sm-6 col-md-3"><%= f.text_field :last_name, required: true %></div>
|
6
|
-
|
7
|
-
<div class="row">
|
8
|
-
<div class="col-xs-12 col-sm-6">
|
9
|
-
<%= f.password_field :password, required: f.object.new_record?, prepend: icon('key') %>
|
10
|
-
</div>
|
11
|
-
<div class="col-xs-12 col-sm-6">
|
12
|
-
<%= f.password_field :password_confirmation, required: f.object.new_record? %>
|
13
|
-
</div>
|
6
|
+
<div class="col-xs-12 col-sm-6 col-md-3"><%= f.password_field :password, required: f.object.new_record?, prepend: icon('key') %></div>
|
14
7
|
</div>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<%= symphonia_form_tag(url: reset_password_account_path(params[:id]), method: 'put') do |f| %>
|
7
7
|
<%= f.error_messages %>
|
8
8
|
<%= f.password_field(:password, label: t(:'attributes.password'), required: true, wrapper_class: 'required') -%>
|
9
|
-
|
9
|
+
<%#= f.password_field(:password_confirmation, label: t(:'attributes.password_confirmation'), required: true, wrapper_class: 'required') -%>
|
10
10
|
|
11
11
|
<%= f.submit(t(:button_submit), class: 'btn btn-primary btn-block') -%>
|
12
12
|
|
data/db/seeds.rb
CHANGED
@@ -74,9 +74,8 @@ module Symphonia
|
|
74
74
|
# private
|
75
75
|
|
76
76
|
def set_locale
|
77
|
-
client_lang =
|
78
|
-
client_lang
|
79
|
-
@client_lang = client_lang.detect { |l| I18n.available_locales.include?(l.to_sym) }
|
77
|
+
client_lang = params.fetch(:locale, nil).presence || session[:locale].presence || request.env['HTTP_ACCEPT_LANGUAGE'].to_s.split(',').collect { |l| l.scan(/^[a-z]{2}/) }.flatten
|
78
|
+
@client_lang = Array(client_lang).detect { |l| I18n.available_locales.include?(l.to_sym) }
|
80
79
|
|
81
80
|
I18n.locale = (@client_lang || I18n.default_locale)
|
82
81
|
session[:locale] = I18n.locale
|
@@ -152,11 +151,13 @@ module Symphonia
|
|
152
151
|
|
153
152
|
def current_user_session
|
154
153
|
return @current_user_session if defined?(@current_user_session)
|
154
|
+
|
155
155
|
@current_user_session = UserSession.find
|
156
156
|
end
|
157
157
|
|
158
158
|
def current_user
|
159
159
|
return (Symphonia::User.current ||= @current_user) if defined?(@current_user)
|
160
|
+
|
160
161
|
@current_user = current_user_session && current_user_session.user
|
161
162
|
Symphonia::User.current = @current_user || Symphonia::User::Anonymous.new
|
162
163
|
end
|
data/lib/symphonia/query.rb
CHANGED
@@ -12,7 +12,7 @@ module Symphonia
|
|
12
12
|
|
13
13
|
class_attribute :model
|
14
14
|
|
15
|
-
# @param [nil, String] sort
|
15
|
+
# @param [nil, String] sort column_name:asc|desc
|
16
16
|
# @param [Hash] filters
|
17
17
|
# @param [nil, Array] columns
|
18
18
|
def initialize(c = nil, sort: "", filters: {}, columns: nil, **options)
|
data/lib/symphonia/version.rb
CHANGED
data/spec/factories/factories.rb
CHANGED
@@ -6,7 +6,7 @@ FactoryBot.define do
|
|
6
6
|
login { email }
|
7
7
|
admin { false }
|
8
8
|
password { SecureRandom.hex(16) }
|
9
|
-
password_confirmation { password }
|
9
|
+
# password_confirmation { password }
|
10
10
|
last_request_at { Time.now }
|
11
11
|
|
12
12
|
trait :admin do
|
@@ -18,7 +18,7 @@ FactoryBot.define do
|
|
18
18
|
preference_names { [] }
|
19
19
|
end
|
20
20
|
after(:build) do |user, evaluator|
|
21
|
-
user.preferences = evaluator.preference_names.collect { |pref_name| FactoryBot.create(:email_preference, name: pref_name) }
|
21
|
+
user.preferences = evaluator.preference_names.collect { |pref_name| Symphonia::EmailPreference.find_by(name: pref_name) || FactoryBot.create(:email_preference, name: pref_name) }
|
22
22
|
end
|
23
23
|
end
|
24
24
|
factory :admin_user, traits: [:admin]
|
data/spec/models/user_spec.rb
CHANGED
@@ -7,4 +7,10 @@ RSpec.describe Symphonia::User do
|
|
7
7
|
it "#to_s" do
|
8
8
|
expect(subject.to_s).to eq "#{subject.first_name} #{subject.last_name}"
|
9
9
|
end
|
10
|
+
|
11
|
+
it "#name=" do
|
12
|
+
subject.name = "Tata smoula"
|
13
|
+
expect(subject.first_name).to eq "Tata"
|
14
|
+
expect(subject.last_name).to eq "smoula"
|
15
|
+
end
|
10
16
|
end
|
data/spec/rails_helper.rb
CHANGED
@@ -10,4 +10,4 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
10
10
|
# Prevent database truncation if the environment is production
|
11
11
|
abort('The Rails environment is running in production mode!') if Rails.env.production?
|
12
12
|
|
13
|
-
require_relative 'spec_helper'
|
13
|
+
require_relative 'spec_helper'
|
@@ -34,10 +34,10 @@ describe Symphonia::AccountsController do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
context 'pending' do
|
37
|
-
let(:pending_user) { FactoryBot.create(:user, status: 'pending', password: 'heslo123'
|
37
|
+
let(:pending_user) { FactoryBot.create(:user, status: 'pending', password: 'heslo123') }
|
38
38
|
|
39
39
|
it '#login' do
|
40
|
-
post symphonia.user_sessions_path, params: { login_session: { login: pending_user.login, password: 'heslo123' }}
|
40
|
+
post symphonia.user_sessions_path, params: { login_session: { login: pending_user.login, password: 'heslo123' } }
|
41
41
|
expect(response).to have_http_status :success
|
42
42
|
expect(Symphonia::User.current.id).not_to eq pending_user.id
|
43
43
|
end
|
@@ -90,13 +90,13 @@ describe Symphonia::AccountsController do
|
|
90
90
|
before { FactoryBot.create(:user, status: 'active'); user.update_columns(perishable_token: token) }
|
91
91
|
|
92
92
|
it 'valid token' do
|
93
|
-
put symphonia.reset_password_account_path(id: token, password: password, password_confirmation: password
|
93
|
+
put symphonia.reset_password_account_path(id: token, password: password, password_confirmation: password)
|
94
94
|
expect(response).to redirect_to symphonia.user_current_path
|
95
95
|
expect(flash[:notice]).not_to be :blank
|
96
96
|
end
|
97
97
|
|
98
98
|
it 'invalid password' do
|
99
|
-
put symphonia.reset_password_account_path(id: token, password: '12', password_confirmation: '11'
|
99
|
+
put symphonia.reset_password_account_path(id: token, password: '12', password_confirmation: '11')
|
100
100
|
expect(response).to have_http_status :success
|
101
101
|
expect(flash[:notice]).to be_nil
|
102
102
|
end
|
@@ -104,7 +104,6 @@ describe Symphonia::AccountsController do
|
|
104
104
|
end
|
105
105
|
|
106
106
|
|
107
|
-
|
108
107
|
end
|
109
108
|
|
110
109
|
context 'form for user', logged: true do
|
@@ -115,4 +114,4 @@ describe Symphonia::AccountsController do
|
|
115
114
|
end
|
116
115
|
end
|
117
116
|
|
118
|
-
end
|
117
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: symphonia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Pokorny
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '5.2'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: jbuilder
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '2.5'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '2.5'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rails-i18n
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +72,14 @@ dependencies:
|
|
86
72
|
requirements:
|
87
73
|
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '5.0'
|
90
76
|
type: :runtime
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
82
|
+
version: '5.0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: bootstrap
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,16 +126,16 @@ dependencies:
|
|
140
126
|
name: font-awesome-rails
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
|
-
- - "
|
129
|
+
- - "~>"
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
131
|
+
version: 4.7.0.5
|
146
132
|
type: :runtime
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
|
-
- - "
|
136
|
+
- - "~>"
|
151
137
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
138
|
+
version: 4.7.0.5
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: jquery-rails
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -565,6 +551,7 @@ files:
|
|
565
551
|
- db/migrate/20130714140502_create_preferences.rb
|
566
552
|
- db/migrate/20130828175114_create_attachments.rb
|
567
553
|
- db/migrate/20141213204351_create_admin_modules.rb
|
554
|
+
- db/migrate/20190706130409_add_external_id_to_users.rb
|
568
555
|
- db/seeds.rb
|
569
556
|
- lib/generators/symphonia/entity_controller/entity_controller_generator.rb
|
570
557
|
- lib/generators/symphonia/entity_controller/templates/controller.rb
|