symphonia 3.1.5 → 3.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -8
  3. data/CHANGELOG.md +88 -0
  4. data/app/assets/javascripts/symphonia/symphonia_ckeditor.js +0 -1
  5. data/app/controllers/symphonia/accounts_controller.rb +0 -1
  6. data/app/controllers/symphonia/roles_controller.rb +3 -64
  7. data/app/controllers/symphonia/user_sessions_controller.rb +1 -1
  8. data/app/controllers/symphonia/users_controller.rb +1 -34
  9. data/app/helpers/symphonia/application_helper.rb +1 -1
  10. data/app/helpers/symphonia/form_helper.rb +0 -2
  11. data/app/models/symphonia/user.rb +2 -25
  12. data/app/views/symphonia/accounts/_form.html.erb +19 -8
  13. data/app/views/symphonia/accounts/edit.html.erb +2 -2
  14. data/app/views/symphonia/users/_form.html.erb +7 -7
  15. data/app/views/symphonia/users/edit.html.erb +17 -15
  16. data/app/views/symphonia/users/new.html.erb +2 -2
  17. data/config/routes.rb +1 -0
  18. data/db/migrate/20200428180001_add_uuid_to_users.rb +6 -0
  19. data/db/migrate/20200428180008_add_avatar_to_users.rb +5 -0
  20. data/db/seeds.rb +2 -1
  21. data/lib/generators/symphonia/setup/setup_generator.rb +2 -1
  22. data/lib/generators/symphonia/setup/templates/app/assets/javascripts/application.js.tt +1 -0
  23. data/lib/symphonia.rb +0 -1
  24. data/lib/symphonia/action_cable/connection.rb +1 -1
  25. data/lib/symphonia/admin_constraint.rb +2 -1
  26. data/lib/symphonia/base_controller.rb +7 -0
  27. data/lib/symphonia/engine.rb +9 -8
  28. data/lib/symphonia/model_attributes/attribute.rb +1 -1
  29. data/lib/symphonia/version.rb +1 -1
  30. data/spec/controllers/base_controller_spec.rb +37 -2
  31. data/spec/factories/factories.rb +11 -12
  32. data/spec/spec_helper.rb +2 -2
  33. metadata +42 -69
  34. data/app/controllers/symphonia/api_controller.rb +0 -64
  35. data/app/controllers/symphonia/attachments_controller.rb +0 -37
  36. data/app/controllers/symphonia/images_controller.rb +0 -16
  37. data/app/models/symphonia/attachment.rb +0 -16
  38. data/app/models/symphonia/common_file.rb +0 -9
  39. data/app/models/symphonia/image.rb +0 -46
  40. data/app/models/symphonia/swagger/error_model.rb +0 -19
  41. data/app/models/symphonia/swagger/responses.rb +0 -27
  42. data/lib/symphonia/attachable.rb +0 -35
  43. data/spec/controllers/api_controller_spec.rb +0 -9
  44. data/spec/controllers/images_controller_spec.rb +0 -5
  45. data/spec/models/attachment_spec.rb +0 -22
  46. data/spec/requests/attachments_controller_spec.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aa7ffaee9227f92a65343e7ceb49c1b456a55979dee59eb58084315f9395c4ff
4
- data.tar.gz: 863eab3a706edd2db29cbe2929fb9c4a873bd57bbe7516dd1aced6c3b844693c
3
+ metadata.gz: 7a195060e6fa12677b383245afdaa0d7cefb75e463031b21aca473c2b2eabc6d
4
+ data.tar.gz: ca98109a38542883af2f24a0eadbfb9363861b09fa98a146437c405ba4872338
5
5
  SHA512:
6
- metadata.gz: 254b4b7854e3ea0e0c86fb8a97774db2947212d88611e32e4758d02fadd4d4b7d9ff4205eb15f82bc3c7fda78ab6f56b740693c02b3b4f085b9607a509b9f93f
7
- data.tar.gz: 931719ab8a002fa957fb9091960417d0a4a9b7b30bc9f4aa2d8244989b910aa43b79c7dc5afe32102f82bc541944f656c79e573c26a8d45922cde248e16b95db
6
+ metadata.gz: 4b5a099d7ab9e70cbe8526a9e2a765220c3d137472a08dfcbedebaef43745c96f78dc90512335adf4da26b1e910052231c9fa49fcff11dc8eeda122bb8ef1554
7
+ data.tar.gz: 6f300e80b0373f6f19298f6a1c33a4e059be86e7f1110eeebe74f32e90a04960a3ab2edbadf2d5d54624fbc3b4b38c6734b02abd7f6e857d06c11c6648a49b03
@@ -1,7 +1,3 @@
1
- #require:
2
- # - rubocop-rails
3
- All:
4
- Rails: true
5
1
  AllCops:
6
2
  TargetRubyVersion: 2.5
7
3
 
@@ -16,13 +12,13 @@ Metrics/AbcSize:
16
12
  Enabled: false
17
13
  Metrics/BlockLength:
18
14
  Enabled: false
19
- Metrics/LineLength:
20
- Enabled: false
15
+ #Metrics/LineLength:
16
+ # Enabled: false
21
17
  Metrics/MethodLength:
22
18
  Enabled: false
23
19
 
24
- Style/BracesAroundHashParameters:
25
- EnforcedStyle: context_dependent
20
+ #Style/BracesAroundHashParameters:
21
+ # EnforcedStyle: context_dependent
26
22
  Style/Documentation:
27
23
  Enabled: false
28
24
  Style/MutableConstant:
@@ -0,0 +1,88 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+ ### Removed
9
+ - openapi (it seems to be uneccessary)
10
+ - paperclip support
11
+ ### Changed
12
+ - upgrade authlogic to 6.1.0
13
+ ## [3.2.4] - 2020-05-10
14
+ ### Added
15
+ - sidekiq-cron gem
16
+ ## [3.2.3] - 2020-05-07
17
+ ### Fixed
18
+ - find user by token from session
19
+ ## [3.2.2] - 2020-05-05
20
+ ### Changed
21
+ - user/account form layout
22
+ - Sidekiq v6
23
+ ### Fixed
24
+ - UsersController#update Role should be sorted
25
+ ## [3.2.1] - 2020-05-01
26
+ ### Added
27
+ - avatar_url to users
28
+ - uuid to users
29
+ - openapi support
30
+ ### Changed
31
+ - improve setup generator
32
+ - anonymous user have no "enforced" language
33
+ ### Fixed
34
+ - update .rubocop
35
+ - bootstrap_form update to 4.4.0
36
+ - show time in localtime
37
+ ### Removed
38
+ - ckeditor-jquery
39
+ ## [3.1.5] - 2020-01-20
40
+ ### Changed
41
+ - improve split name (Symphonia::UserManagement#name=)
42
+ ## [3.1.4] - 2020-01-17
43
+ ### Changed
44
+ - improve role form
45
+ ## [3.1.3] - 2019-12-21
46
+ ### Added
47
+ - bootstrap_modal_helper extended by `link_to_modal` feature
48
+ ### Changed
49
+ - helper Symphonia::BootstrapModalHelper in BaseController
50
+ - new argument options in `icon` method (pass into `fa_icon`)
51
+ ## [3.1.2] - 2019-12-07
52
+ ### Added
53
+ - skip permission check in link_to_new_entity method
54
+ ### Fixed
55
+ - login form additional buttons
56
+ - lost_password form & mail
57
+ - reset_password form & mail
58
+ ## [3.1.1] - 2019-12-07
59
+ ### Changed
60
+ - accounts registration validation
61
+ - update static 500.html
62
+ ## [3.1.0] - 2019-12-07
63
+ ### Added
64
+ - BaseController for simplier create CRUD inheritance
65
+ - base views (new, form, edit, show and index)
66
+ - general EntityDecorator
67
+ - input field in model Attribute
68
+ - TextAttribute format
69
+ ### Changed
70
+ - registration form refactored
71
+ - update dummy to Rails 6
72
+ ### Removed
73
+ - wicked_pdf dependency
74
+ ## [3.0.3] - 2019-10-06
75
+ ### Changed
76
+ - rubocop.yml
77
+ - use real user in tests instead a dummy object
78
+ ## [3.0.1] - 2019-07-08
79
+ ### Changed
80
+ - do not require password for SSO users
81
+ - hide password field from form of SSO users
82
+ ## [3.0.0] - 2019-07-06
83
+ ### Added
84
+ - external_id on user
85
+ ### Changed
86
+ - users/show only for logged users
87
+ - upgrade to authlogic 5
88
+ - minor improvements
@@ -1,4 +1,3 @@
1
- //= require ckeditor-jquery
2
1
  //= require_self
3
2
 
4
3
  CKEDITOR.editorConfig = function( config )
@@ -106,7 +106,6 @@ module Symphonia
106
106
 
107
107
  if params[:password] # && params[:password_confirmation]
108
108
  @user.password = params[:password]
109
- # @user.password_confirmation = params[:password_confirmation]
110
109
  end
111
110
 
112
111
  if @user.changed? && @user.save
@@ -14,87 +14,26 @@ module Symphonia
14
14
  #
15
15
  # before_action :authorize
16
16
  before_action :load_permissions, only: [:new, :edit, :update, :create]
17
- #
18
- # #layout 'admin'
19
- #
20
- # def index
21
- # @query = Symphonia::Role.query.new(self)
22
- # @entities = @query.entities
23
- # respond_to do |format|
24
- # format.html do
25
- # @entities = @entities.page(params[:page])
26
- # render layout: !request.xhr?
27
- # end
28
- # format.xml { render xml: @entities.all }
29
- # format.json { render json: @entities.all }
30
- # end
31
- # end
32
- #
33
- # def show
34
- # @role = Role.find(params[:id])
35
- # respond_to do |format|
36
- # format.html
37
- # format.json { render json: @role }
38
- # end
39
- # end
40
- #
41
- # def new
42
- # @role = Role.new
43
- # end
44
- #
45
- # def edit
46
- # @role = Role.find(params[:id])
47
- # end
48
17
 
49
18
  def create
50
19
  @entity = @role = Role.new(entity_params)
51
20
  @role.permissions = Symphonia::Permissions.find_all(params[:permissions]).map(&:name)
52
21
  super
53
- # respond_to do |format|
54
- # if @role.save
55
- # format.html { redirect_to((params[:continue] ? new_role_path : roles_path), notice: t(:text_created)) }
56
- # format.json { render(json: @role, status: :created, location: @role) }
57
- # else
58
- # format.html { render(action: 'new') }
59
- # format.json { render(json: @role.errors, status: :unprocessable_entity) }
60
- # end
61
- # end
62
22
  end
63
23
 
64
24
  def update
65
25
  @entity = @role = Role.find(params[:id])
66
26
  @role.permissions = Symphonia::Permissions.find_all(params[:permissions]).map(&:name)
67
27
  super
68
- # respond_to do |format|
69
- # if @role.update_attributes(role_params)
70
- # format.html { redirect_to(edit_role_path(@role), notice: t(:text_updated)) }
71
- # format.json { head(:no_content) }
72
- # else
73
- # format.html { render(action: 'edit') }
74
- # format.json { render(json: @role.errors, status: :unprocessable_entity) }
75
- # end
76
- # end
28
+
77
29
  end
78
30
 
79
- # def destroy
80
- # @role = Role.find(params[:id])
81
- # @role.destroy
82
- # respond_to do |format|
83
- # format.html { redirect_to(roles_url, notice: t(:text_destroyed)) }
84
- # format.json { head :no_content }
85
- # format.js { render js: "Symphonia.filters.removeRow('#{view_context.dom_id(@role)}')"}
86
- # end
87
- # end
88
- #
89
31
  private
90
- #
32
+
91
33
  def load_permissions
92
34
  @permissions = Symphonia::Permissions.all
93
35
  end
94
- #
95
- # def role_params
96
- # params.require(:role).permit(:name, :description, permissions: [])
97
- # end
36
+
98
37
  end
99
38
 
100
39
  end
@@ -8,7 +8,7 @@ module Symphonia
8
8
  end
9
9
 
10
10
  def current_session
11
- current_user_session
11
+ current_user_session
12
12
  end
13
13
 
14
14
  end
@@ -1,38 +1,5 @@
1
1
  module Symphonia
2
2
  class UsersController < ApplicationController
3
- include ::Swagger::Blocks
4
-
5
- swagger_path '/admin/users/{id}.json' do
6
- operation :get do
7
- key :summary, 'Find User by ID'
8
- key :description, 'Returns a single user if the user has access'
9
- # key :operationId, 'findPetById'
10
- # key :tags, [
11
- # 'pet'
12
- # ]
13
- parameter do
14
- key :name, :id
15
- key :in, :path
16
- key :description, 'ID of user to fetch'
17
- key :required, true
18
- key :type, :integer
19
- key :format, :int64
20
- end
21
- extend Symphonia::Swagger::Responses
22
- response 200 do
23
- key :description, 'user response'
24
- schema do
25
- key :'$ref', :User
26
- end
27
- end
28
- # response :default do
29
- # key :description, 'unexpected error'
30
- # schema do
31
- # key :'$ref', :ErrorModel
32
- # end
33
- # end
34
- end
35
- end
36
3
 
37
4
  helper Symphonia::RendererHelper
38
5
 
@@ -108,7 +75,7 @@ module Symphonia
108
75
  format.any(:json, :xml) { head :no_content }
109
76
  else
110
77
  format.html do
111
- @roles = Symphonia::Role.all
78
+ @roles = Symphonia::Role.sorted
112
79
  render action: 'edit'
113
80
  end
114
81
  format.xml { render xml: @user.errors, status: :unprocessable_entity }
@@ -38,7 +38,7 @@ module Symphonia
38
38
  end
39
39
  options[:container_class] ||= 'mr-auto'
40
40
 
41
- return content_tag(:ul, s.html_safe, itemscope: '', itemtype: 'http://data-vocabulary.org/BreadcrumbList', class: "navbar-nav #{options[:container_class]}", id: menu.to_s)
41
+ return content_tag(:ul, s.html_safe, itemscope: '', itemtype: 'http://schema.org/BreadcrumbList', class: "navbar-nav #{options[:container_class]}", id: menu.to_s)
42
42
  end
43
43
 
44
44
  def render_menu_node(menu, item, options = {})
@@ -4,8 +4,6 @@ module Symphonia
4
4
  def symphonia_form_for(object, options={}, &block)
5
5
  options.reverse_merge!(builder: Symphonia::FormBuilder)
6
6
 
7
- options = process_options(options)
8
-
9
7
  unless options[:remote] && options[:local].nil?
10
8
  options[:local] = true
11
9
  end
@@ -19,6 +19,7 @@ module Symphonia
19
19
  end
20
20
 
21
21
  acts_as_authentic do |config|
22
+ config.crypto_provider = ::Authlogic::CryptoProviders::SCrypt
22
23
  end
23
24
  validates :email, uniqueness: { case_sensitive: false }
24
25
  validates :password,
@@ -30,30 +31,6 @@ module Symphonia
30
31
 
31
32
  include UserManagement
32
33
 
33
- include ::Swagger::Blocks
34
-
35
- swagger_schema :User do
36
- key :required, %i[id login email]
37
- property :id do
38
- key :type, :integer
39
- key :format, :int64
40
- end
41
- property :fist_name do
42
- key :type, :string
43
- end
44
- property :last_name do
45
- key :type, :string
46
- end
47
- property :email do
48
- key :type, :string
49
- key :format, :email
50
- end
51
- property :status do
52
- key :type, :string
53
- key :enum, Symphonia::User.statuses.keys
54
- end
55
- end
56
-
57
34
  attr_writer :password_confirmation
58
35
 
59
36
  has_and_belongs_to_many :preferences, foreign_key: 'user_id'
@@ -155,7 +132,7 @@ module Symphonia
155
132
  end
156
133
 
157
134
  def language
158
- Symphonia.config.default_locale || I18n.default_locale
135
+ nil
159
136
  end
160
137
  end
161
138
 
@@ -1,9 +1,20 @@
1
- <div class="row">
2
- <!-- <div class="col-xs-12 col-sm-6 col-md-3"><%#= f.text_field :login, required: true %></div>-->
3
- <div class="col-xs-12 col-sm-6 col-md-3"><%= f.email_field :mail, required: true %></div>
4
- <div class="col-xs-12 col-sm-6 col-md-3"><%= f.text_field :first_name, required: true %></div>
5
- <div class="col-xs-12 col-sm-6 col-md-3"><%= f.text_field :last_name, required: true %></div>
6
- <% if f.object.external_id.blank? %>
7
- <div class="col-xs-12 col-sm-6 col-md-3"><%= f.password_field :password, required: f.object.new_record?, prepend: icon('key') %></div>
8
- <% end %>
1
+ <div class="row justify-content-center">
2
+ <div class="col-lg-8">
3
+ <%= f.email_field :email, required: true %>
4
+ </div>
5
+ <div class="col-lg-8">
6
+ <%= f.text_field :first_name, required: true %>
7
+
8
+ </div>
9
+ <div class="col-lg-8">
10
+ <%= f.text_field :last_name, required: true %>
11
+
12
+ </div>
13
+ <div class="col-lg-8">
14
+ <% if f.object.external_id.blank? %>
15
+ <%= f.password_field :password, required: f.object.new_record?, prepend: icon('key') %>
16
+ <% end %>
17
+ </div>
9
18
  </div>
19
+
20
+
@@ -1,6 +1,6 @@
1
1
  <%= title(@user.name) %>
2
- <%= symphonia_form_for(@user, :url => {:action => 'update'}) do |f| %>
3
- <%= render(:partial => @user.form_path, :locals => {:f => f}) %>
2
+ <%= symphonia_form_for(@user, url: { action: 'update' }) do |f| %>
3
+ <%= render(partial: @user.form_path, locals: { f: f }) %>
4
4
 
5
5
  <div class="buttons">
6
6
  <%= link_to_back %>
@@ -1,13 +1,13 @@
1
- <%= render(partial: 'symphonia/accounts/form', locals: {f: f}) %>
2
- <div class="row">
3
- <% if Symphonia::User.current.admin? %>
4
- <div class="col-sm-6">
1
+ <%= render(partial: 'symphonia/accounts/form', locals: { f: f }) %>
2
+ <% if Symphonia::User.current.admin? %>
3
+ <div class="row justify-content-center">
4
+ <div class="col-8">
5
5
  <%= f.check_box :admin, id: 'user_admin', layout: :inline %>
6
6
  </div>
7
7
  <% if @roles.any? %>
8
- <div class="col-sm-6">
8
+ <div class="col-9">
9
9
  <%= f.select(:role_id, options_from_collection_for_select(@roles, :id, :name, selected: @user.role_id), include_blank: true, layout: :horizontal) %>
10
10
  </div>
11
11
  <% end -%>
12
- <% end %>
13
- </div>
12
+ </div>
13
+ <% end %>
@@ -4,22 +4,24 @@
4
4
  <%= render(partial: 'form', locals: { f: f }) %>
5
5
 
6
6
  <% if @user && !@user.new_record? && Symphonia::User.current.logged_in? && (prefs = Symphonia::EmailPreference.visible.to_a).any? %>
7
- <%= hidden_field_tag 'user[preference_ids][]' %>
8
- <fieldset id="users-notifications-map" class="clearfix">
9
- <%= content_tag(:legend, t(:label_user_notifications)) %>
10
- <div class="row">
11
- <% prefs.each do |pref| %>
12
- <div class="col-md-3 col-sm-6">
13
- <div class="form-check">
14
- <label class="form-check-label">
15
- <%= check_box_tag('user[preference_ids][]', pref.id, @user.preference_ids.include?(pref.id), class: 'form-check-input') %>
16
- <%= t(pref.name, scope: :preferences) %>
17
- </label>
7
+ <div class="row justify-content-center">
8
+ <%= hidden_field_tag 'user[preference_ids][]' %>
9
+ <fieldset id="users-notifications-map" class="col-8">
10
+ <%= content_tag(:legend, t(:label_user_notifications)) %>
11
+ <div class="row">
12
+ <% prefs.each do |pref| %>
13
+ <div class="col-6">
14
+ <div class="form-check">
15
+ <label class="form-check-label">
16
+ <%= check_box_tag('user[preference_ids][]', pref.id, @user.preference_ids.include?(pref.id), class: 'form-check-input') %>
17
+ <%= t(pref.name, scope: :preferences) %>
18
+ </label>
19
+ </div>
18
20
  </div>
19
- </div>
20
- <% end %>
21
- </div>
22
- </fieldset>
21
+ <% end %>
22
+ </div>
23
+ </fieldset>
24
+ </div>
23
25
  <% end %>
24
26
 
25
27
  <%= f.primary unless request.xhr? %>