tb_core 1.4.3.1 → 1.4.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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +18 -54
  3. data/app/assets/javascripts/admin/core/application.js +8 -4
  4. data/app/assets/javascripts/admin/core/dashboard.js +2 -3
  5. data/app/assets/javascripts/admin/core/date_picker.js +2 -2
  6. data/app/assets/javascripts/admin/core/editor.js +2 -2
  7. data/app/assets/javascripts/admin/core/modal.js +1 -1
  8. data/app/assets/javascripts/admin/core/users.js +5 -5
  9. data/app/assets/javascripts/tb_core.js +8 -0
  10. data/app/assets/libs/sortable/sortable.js +152 -91
  11. data/app/controllers/admin/application_controller.rb +1 -2
  12. data/app/controllers/admin/dashboard_controller.rb +2 -2
  13. data/app/controllers/admin/settings_controller.rb +2 -2
  14. data/app/controllers/admin/users_controller.rb +4 -7
  15. data/app/controllers/concerns/tb_core/error_handling.rb +16 -7
  16. data/app/controllers/concerns/tb_core/user_authentication.rb +5 -5
  17. data/app/controllers/tb_core/application_controller.rb +1 -1
  18. data/app/controllers/user_sessions_controller.rb +2 -2
  19. data/app/helpers/tb_core/application_helper.rb +4 -36
  20. data/app/mailers/tb_core_mailer.rb +3 -3
  21. data/app/models/concerns/tb_core/user_model.rb +131 -0
  22. data/app/models/spud/spud_user_model.rb +6 -138
  23. data/app/models/spud_permission.rb +4 -4
  24. data/app/models/spud_role.rb +1 -1
  25. data/app/models/spud_user.rb +2 -1
  26. data/app/views/admin/dashboard/index.html.erb +1 -1
  27. data/app/views/admin/settings/_form.html.erb +1 -1
  28. data/app/views/admin/settings/edit.html.erb +1 -1
  29. data/app/views/admin/setup/new.html.erb +1 -1
  30. data/app/views/admin/users/_form.html.erb +1 -1
  31. data/app/views/admin/users/index.html.erb +2 -2
  32. data/app/views/admin/users/show.html.erb +1 -1
  33. data/app/views/layouts/admin/application.html.erb +6 -6
  34. data/app/views/layouts/admin/login.html.erb +1 -1
  35. data/app/views/tb_core_mailer/forgot_password_notification.html.erb +2 -2
  36. data/app/views/tb_core_mailer/user_credentials.html.erb +2 -2
  37. data/app/views/user_sessions/_form.html.erb +1 -1
  38. data/app/views/user_sessions/new.html.erb +1 -1
  39. data/lib/generators/spud/module_generator.rb +7 -7
  40. data/lib/generators/spud/setup_generator.rb +6 -7
  41. data/lib/generators/spud/templates/assets/admin/application.js +1 -1
  42. data/lib/generators/spud/templates/assets/application.js +3 -4
  43. data/lib/generators/spud/templates/controller_spec.rb.erb +5 -5
  44. data/lib/generators/spud/templates/views/admin/_form.html.erb +1 -1
  45. data/lib/generators/spud/templates/views/admin/index.html.erb +1 -1
  46. data/lib/generators/spud/templates/views/admin/show.html.erb +1 -1
  47. data/lib/generators/spud/templates/views/frontend/index.html.erb +1 -1
  48. data/lib/generators/spud/templates/views/frontend/show.html.erb +1 -1
  49. data/lib/tb_core.rb +3 -5
  50. data/lib/tb_core/belongs_to_app.rb +47 -46
  51. data/lib/tb_core/catch_all_route.rb +3 -0
  52. data/lib/tb_core/configuration.rb +28 -0
  53. data/lib/tb_core/engine.rb +61 -0
  54. data/lib/tb_core/errors.rb +50 -0
  55. data/lib/tb_core/responder.rb +0 -26
  56. data/lib/{spud_core → tb_core}/searchable.rb +4 -1
  57. data/lib/tb_core/spud_core.rb +23 -0
  58. data/lib/{spud_core → tb_core}/test_files.rb +0 -0
  59. data/lib/tb_core/test_helper.rb +3 -3
  60. data/lib/tb_core/version.rb +3 -0
  61. data/spec/controllers/admin/application_controller_spec.rb +5 -5
  62. data/spec/controllers/admin/dashboard_controller_spec.rb +5 -5
  63. data/spec/controllers/admin/password_reset_controller_spec.rb +1 -1
  64. data/spec/controllers/admin/settings_controller_spec.rb +1 -1
  65. data/spec/controllers/admin/setup_controller_spec.rb +2 -2
  66. data/spec/controllers/admin/user_sessions_controller_spec.rb +2 -2
  67. data/spec/controllers/admin/users_controller_spec.rb +17 -17
  68. data/spec/dummy/app/assets/javascripts/admin/application.js +1 -1
  69. data/spec/dummy/app/assets/javascripts/application.js +1 -1
  70. data/spec/dummy/config/application.rb +1 -1
  71. data/spec/factories/spud_admin_permission_factories.rb +2 -2
  72. data/spec/factories/spud_role_factories.rb +2 -2
  73. data/spec/factories/spud_user_factories.rb +6 -6
  74. data/spec/helpers/spud/admin/application_helper_spec.rb +1 -1
  75. data/spec/helpers/tb_core/application_helper_spec.rb +0 -35
  76. data/spec/lib/spud_core/configuration_spec.rb +2 -2
  77. data/spec/lib/tb_core/belongs_to_app_spec.rb +4 -3
  78. data/spec/models/spud_role_spec.rb +2 -2
  79. data/spec/models/spud_user_spec.rb +13 -13
  80. data/spec/rails_helper.rb +1 -1
  81. metadata +59 -67
  82. data/app/assets/javascripts/tb_core.js.erb +0 -9
  83. data/app/assets/javascripts/tb_core/configuration.js.erb +0 -9
  84. data/app/assets/javascripts/tb_core/console.js +0 -12
  85. data/app/assets/javascripts/tb_core/remote.js +0 -237
  86. data/app/assets/javascripts/tb_core/utility.js +0 -55
  87. data/app/controllers/concerns/tb_core/sortable_params.rb +0 -80
  88. data/app/controllers/spud/application_controller.rb +0 -10
  89. data/lib/generators/spud/templates/assets/bootstrap.js +0 -14
  90. data/lib/spud_core/catch_all_route.rb +0 -3
  91. data/lib/spud_core/configuration.rb +0 -56
  92. data/lib/spud_core/engine.rb +0 -76
  93. data/lib/spud_core/errors.rb +0 -47
  94. data/lib/spud_core/version.rb +0 -5
  95. data/lib/tb_core/table_header.rb +0 -92
  96. data/spec/controllers/tb_core/sortable_params_spec.rb +0 -64
@@ -1,6 +1,5 @@
1
1
  class Admin::ApplicationController < TbCore::ApplicationController
2
- include TbCore::SortableParams
3
-
2
+ include TbCore::BelongsToApp
4
3
  before_action :require_admin_user
5
4
  add_breadcrumb 'Dashboard', :admin_root_path
6
5
  layout 'admin/detail'
@@ -5,7 +5,7 @@ class Admin::DashboardController < Admin::ApplicationController
5
5
 
6
6
  def index
7
7
  @setting = SpudUserSetting.find_by(spud_user_id: current_user.id, key: 'dash_icon_order')
8
- apps = Spud::Core.admin_applications
8
+ apps = TbCore.admin_applications
9
9
  if @setting.nil? == false
10
10
  apps = arrange_apps(apps)
11
11
  end
@@ -27,7 +27,7 @@ class Admin::DashboardController < Admin::ApplicationController
27
27
 
28
28
  def badges
29
29
  data = []
30
- @admin_applications = Spud::Core.admin_applications.select do |admin_application|
30
+ @admin_applications = TbCore.admin_applications.select do |admin_application|
31
31
  if current_user.can_view_app?(admin_application)
32
32
  if admin_application[:badge]
33
33
  data << {key: admin_application[:key], badge_count: admin_application[:badge].call(current_user)}
@@ -4,7 +4,7 @@ class Admin::SettingsController < Admin::ApplicationController
4
4
  skip_before_action :require_admin_user
5
5
 
6
6
  before_action do |c|
7
- if current_user && current_user.has_admin_rights?
7
+ if current_user&.admin_rights?
8
8
  add_breadcrumb 'Settings', :admin_settings_path
9
9
  end
10
10
  end
@@ -34,7 +34,7 @@ private
34
34
  end
35
35
 
36
36
  def check_password
37
- if user_params[:password].nil? || user_params[:password].empty?
37
+ if user_params[:password].blank?
38
38
  return true
39
39
  else
40
40
  if !current_user.valid_password?(params[:current_password])
@@ -25,8 +25,8 @@ class Admin::UsersController < Admin::ApplicationController
25
25
 
26
26
  def export
27
27
  users = SpudUser.all
28
- export_columns = %w(created_at first_name last_name email last_login_at)
29
- file_name = Spud::Core.site_name + ' Users Export.csv'
28
+ export_columns = %w[created_at first_name last_name email last_login_at]
29
+ file_name = TbCore.site_name + ' Users Export.csv'
30
30
  send_data users.as_csv(export_columns),
31
31
  type: 'text/csv; charset=iso-8859-1; header=present',
32
32
  disposition: "attachment; filename=#{file_name}"
@@ -83,10 +83,7 @@ class Admin::UsersController < Admin::ApplicationController
83
83
  private
84
84
 
85
85
  def load_user
86
- @user = SpudUser.find(params[:id])
87
- if @user.blank?
88
- raise Spud::NotFoundError.new('user')
89
- end
86
+ @user = SpudUser.find_by!(id: params[:id])
90
87
  end
91
88
 
92
89
  def user_params
@@ -94,7 +91,7 @@ private
94
91
  end
95
92
 
96
93
  def send_credentials_email
97
- if params[:send_email] && user_params[:password] && !@user.errors.any?
94
+ if params[:send_email] && user_params[:password] && @user.errors.none?
98
95
  TbCoreMailer.user_credentials(@user, user_params[:password]).deliver_later
99
96
  end
100
97
  return true
@@ -3,7 +3,7 @@ module TbCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- rescue_from Spud::RequestError, with: :handle_request_error
6
+ rescue_from RequestError, with: :handle_request_error
7
7
  rescue_from ActiveRecord::RecordNotFound, with: :handle_record_not_found
8
8
  rescue_from ActionController::UnknownFormat, with: :handle_unknown_format_error
9
9
  end
@@ -12,7 +12,7 @@ module TbCore
12
12
  error.request_url = request.original_url
13
13
  error.template = template_for_request_error() if respond_to?(:template_for_request_error, true)
14
14
 
15
- if error.is_a?(Spud::UnauthorizedError) && request.format.html?
15
+ if error.is_a?(UnauthorizedError) && request.format.html?
16
16
  redirect_to(login_path_for_require_user)
17
17
  return false
18
18
  end
@@ -35,15 +35,24 @@ module TbCore
35
35
  end
36
36
  end
37
37
 
38
- def handle_record_not_found(error)
39
- error = Spud::NotFoundError.new('record')
38
+ def handle_record_not_found(e)
39
+ error = NotFoundError.new(class_string(e.model))
40
40
  handle_request_error(error)
41
41
  end
42
42
 
43
- def handle_unknown_format_error(error)
44
- error = Spud::NotFoundError.new()
45
- handle_request_error(error)
43
+ def class_string(model_name)
44
+ string = 'record'
45
+ begin
46
+ object_class = Object.const_get(model_name)
47
+ string = object_class.model_name.human
48
+ rescue NameError # rubocop:disable Lint/HandleExceptions
49
+ end
50
+ string
46
51
  end
47
52
 
53
+ def handle_unknown_format_error(_e)
54
+ error = NotFoundError.new()
55
+ handle_request_error(error)
56
+ end
48
57
  end
49
58
  end
@@ -15,7 +15,7 @@ module TbCore
15
15
 
16
16
  def current_user
17
17
  return @current_user if defined?(@current_user)
18
- @current_user = current_user_session && current_user_session.spud_user
18
+ @current_user = current_user_session&.spud_user
19
19
  end
20
20
 
21
21
  def current_user_id
@@ -24,13 +24,13 @@ module TbCore
24
24
  end
25
25
 
26
26
  def require_user
27
- raise Spud::UnauthorizedError.new unless current_user
27
+ raise UnauthorizedError.new unless current_user
28
28
  true
29
29
  end
30
30
 
31
31
  def require_admin_user
32
- raise Spud::UnauthorizedError.new unless current_user
33
- raise Spud::AccessDeniedError.new unless current_user.has_admin_rights?
32
+ raise UnauthorizedError.new unless current_user
33
+ raise AccessDeniedError.new unless current_user.admin_rights?
34
34
  true
35
35
  end
36
36
 
@@ -43,7 +43,7 @@ module TbCore
43
43
 
44
44
  def set_time_zone
45
45
  old_time_zone = Time.zone
46
- Time.zone = current_user.time_zone if current_user && current_user.time_zone.present?
46
+ Time.zone = current_user.time_zone if current_user&.time_zone.present?
47
47
  yield
48
48
  ensure
49
49
  Time.zone = old_time_zone
@@ -8,7 +8,7 @@ module TbCore
8
8
  self.responder = TbCore::Responder
9
9
 
10
10
  def not_found
11
- raise Spud::NotFoundError
11
+ raise NotFoundError
12
12
  end
13
13
 
14
14
  ActiveSupport.run_load_hooks(:tb_core_application_controller, self)
@@ -14,7 +14,7 @@ class UserSessionsController < ApplicationController
14
14
  end
15
15
 
16
16
  def create
17
- @user_session = SpudUserSession.new(user_session_params.to_h)
17
+ @user_session = SpudUserSession.new(user_session_params)
18
18
  if @user_session.save()
19
19
  respond_with @user_session do |format|
20
20
  format.html{
@@ -35,7 +35,7 @@ class UserSessionsController < ApplicationController
35
35
  end
36
36
 
37
37
  def destroy
38
- current_user_session.destroy unless current_user_session.blank?
38
+ current_user_session.destroy if current_user_session.present?
39
39
  respond_with({}) do |format|
40
40
  format.html{
41
41
  flash[:notice] = 'Logout successful!'
@@ -58,49 +58,17 @@ module TbCore::ApplicationHelper
58
58
 
59
59
  def tb_page_title
60
60
  if content_for?(:title)
61
- title = content_for(:title) + ' | ' + Spud::Core.site_name
61
+ title = content_for(:title) + ' | ' + TbCore.site_name
62
62
  elsif @page_title
63
- title = @page_title + ' | ' + Spud::Core.site_name
63
+ title = @page_title + ' | ' + TbCore.site_name
64
64
  else
65
- title = Spud::Core.site_name
65
+ title = TbCore.site_name
66
66
  end
67
67
  return content_tag :title, title
68
68
  end
69
69
 
70
- # Build a table header for a model
71
- #
72
- # * path_helper: The helper method you want to use to generate URLs.
73
- # * model: The class we should use for translations (optional)
74
- # * permit: Array of request params that are forwarded to the sort links
75
- #
76
- # Example:
77
- #
78
- # <%= tb_table_header :admin_users_path, model: SpudUser do |t| %>
79
- # <%= t.sortable :name %>
80
- # <%= t.sortable :email %>
81
- # <%= t.header :last_login %>
82
- # <th></th>
83
- # <% end %>
84
- #
85
- # Header labels will be pulled from en.yml. To provide a different
86
- # label pass the label: option
87
- #
88
- # Example:
89
- #
90
- # <%= t.header :name, label: 'Full Name' %>
91
- #
92
- def tb_table_header(path_helper, model: nil, permit: [], &block)
93
- header = TbCore::TableHeader.new(
94
- path_helper: path_helper,
95
- model: model,
96
- params: params.permit(permit.concat([:sort, :dir, :search, :tab])),
97
- context: self)
98
- header.capture(block) if block
99
- header.to_html
100
- end
101
-
102
70
  def current_site_name
103
- return Spud::Core.config.site_name
71
+ return TbCore.config.site_name
104
72
  end
105
73
 
106
74
  def cache_key_for_spud_collection(collection, key:'view', cache_params:[], for_user:false)
@@ -1,5 +1,5 @@
1
1
  class TbCoreMailer < ActionMailer::Base
2
- default from: Spud::Core.from_address
2
+ default from: TbCore.from_address
3
3
  layout 'mailer'
4
4
 
5
5
  def forgot_password_notification(user, url)
@@ -7,7 +7,7 @@ class TbCoreMailer < ActionMailer::Base
7
7
  @url = url
8
8
  mail(
9
9
  to: to_address_for_user(user),
10
- subject: default_i18n_subject(site_name: Spud::Core.site_name)
10
+ subject: default_i18n_subject(site_name: TbCore.site_name)
11
11
  )
12
12
  end
13
13
 
@@ -16,7 +16,7 @@ class TbCoreMailer < ActionMailer::Base
16
16
  @password = password
17
17
  mail(
18
18
  to: to_address_for_user(user),
19
- subject: default_i18n_subject(site_name: Spud::Core.site_name)
19
+ subject: default_i18n_subject(site_name: TbCore.site_name)
20
20
  )
21
21
  end
22
22
 
@@ -0,0 +1,131 @@
1
+ module TbCore
2
+ module UserModel
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ self.table_name = 'spud_users'
7
+
8
+ acts_as_authentic do |c|
9
+ c.transition_from_crypto_providers = Authlogic::CryptoProviders::Sha512
10
+ c.crypto_provider = Authlogic::CryptoProviders::SCrypt
11
+ c.logged_in_timeout = 24.hours
12
+ c.login_field = :email if TbCore.config.use_email_as_login
13
+ if TbCore.config.user_password_length
14
+ c.merge_validates_length_of_password_field_options(minimum: TbCore.config.user_password_length)
15
+ end
16
+ end
17
+
18
+ belongs_to :role,
19
+ class_name: SpudRole.to_s, foreign_key: :spud_role_id, required: false
20
+ has_many :spud_user_settings,
21
+ dependent: :destroy, foreign_key: :spud_user_id
22
+
23
+ validates :first_name, :last_name, presence: true
24
+ before_validation :set_login_to_email, if: -> { TbCore.config.use_email_as_login }
25
+ before_update :unset_requires_password_change
26
+
27
+ scope :admins, lambda {
28
+ where('super_admin = 1 OR role_id IS NOT NULL')
29
+ }
30
+
31
+ scope :ordered, -> { order('last_name asc, first_name asc, email asc') }
32
+ end
33
+
34
+ module ClassMethods
35
+
36
+ # Returns an ActiveRecord::Relation performing a LIKE query against name columns
37
+ def where_name_like(string)
38
+ full_name = Arel::Nodes::NamedFunction.new(
39
+ 'concat',
40
+ [arel_table[:first_name], Arel::Nodes.build_quoted(' '), arel_table[:last_name]]
41
+ )
42
+ search = '%' + string + '%'
43
+ where(full_name.matches(search))
44
+ end
45
+
46
+ # Return an array of users who have the requested permission
47
+ #
48
+ # * tag - Desired permission tag string (required)
49
+ # * include_supers - Whether to include super user (default: true)
50
+ def with_permission(tag, include_supers: true)
51
+ role_ids = SpudRolePermission.where(spud_permission_tag: tag).pluck(:spud_role_id).uniq()
52
+ if include_supers
53
+ where(super_admin: true).or(where(spud_role_id: role_ids))
54
+ else
55
+ where(spud_role_id: role_ids)
56
+ end
57
+ end
58
+
59
+ def as_csv(column_names)
60
+ CSV.generate do |csv|
61
+ csv << column_names
62
+ all.find_each do |item|
63
+ csv << item.attributes.values_at(*column_names)
64
+ end
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ def full_name
71
+ return login if first_name.blank? && last_name.blank?
72
+ [first_name, last_name].reject(&:blank?).join(' ')
73
+ end
74
+
75
+ def full_name_with_email
76
+ "#{full_name} (#{email})"
77
+ end
78
+
79
+ # Returns true if user can view at least one dashboard app
80
+ def admin_rights?
81
+ return true if super_admin
82
+ TbCore.admin_applications.find { |app| can_view_app?(app) }.present?
83
+ end
84
+
85
+ # Returns true if the user can view a spud app based on it's key
86
+ def can_view_app?(admin_application)
87
+ return true if super_admin?
88
+ key = admin_application[:key]
89
+ permissions.find { |p| p.apps.include?(key) }.present?
90
+ end
91
+
92
+ # Check if a user has a given list of permissions
93
+ #
94
+ # * if one tag is supplied, return true if the tag matches
95
+ # * if multiple tags are supplied, return true if ALL tags match
96
+ def permission?(*tags)
97
+ return true if super_admin?
98
+ my_tags = permissions.collect(&:tag)
99
+ tags.find { |tag| !my_tags.include?(tag) }.blank?
100
+ end
101
+
102
+ # Check if a user has at least one out of a given list of permissions
103
+ #
104
+ # * if one tag is supplied, return true if the tag matches
105
+ # * if multiple tags are supplied, return true if ANY tag matches
106
+ def any_permission?(*tags)
107
+ return true if super_admin?
108
+ permissions.find { |p| tags.include?(p.tag) }.present?
109
+ end
110
+
111
+ # Return a list of SpudPermission objects for the user's SpudRole
112
+ def permissions
113
+ return [] if role.blank?
114
+ role.permissions
115
+ end
116
+
117
+ private
118
+
119
+ def set_login_to_email
120
+ self.login = email if email.present?
121
+ true
122
+ end
123
+
124
+ def unset_requires_password_change
125
+ if password_changed? && !requires_password_change_changed?(to: true)
126
+ self.requires_password_change = false
127
+ end
128
+ true
129
+ end
130
+ end
131
+ end
@@ -1,144 +1,12 @@
1
1
  class Spud::SpudUserModel < ActiveRecord::Base
2
- self.table_name = 'spud_users'
3
2
  self.abstract_class = true
3
+ include TbCore::UserModel
4
4
 
5
- acts_as_authentic do |c|
6
- c.transition_from_crypto_providers = Authlogic::CryptoProviders::Sha512
7
- c.crypto_provider = Authlogic::CryptoProviders::SCrypt
8
- c.logged_in_timeout = 24.hours
9
- if Spud::Core.config.use_email_as_login
10
- c.login_field = :email
11
- end
12
- end
13
-
14
- belongs_to :role, class_name: 'SpudRole', foreign_key: 'spud_role_id'
15
- has_many :spud_user_settings
16
-
17
- validates :first_name, :last_name, presence: true
18
- before_validation :set_login_to_email, if: ->{ Spud::Core.config.use_email_as_login }
19
- before_update :unset_requires_password_change
20
-
21
- scope :admins, ->{
22
- where('super_admin = 1 OR role_id IS NOT NULL')
23
- }
24
-
25
- scope :ordered, ->{ order('last_name asc, first_name asc, email asc') }
26
-
27
- def full_name
28
- if first_name.blank? && last_name.blank?
29
- return self.login
30
- end
31
- if self.first_name.blank?
32
- return self.last_name
33
- elsif self.last_name.blank?
34
- return self.first_name
35
- end
36
- return "#{self.first_name} #{self.last_name}"
37
- end
38
-
39
- def full_name_with_email
40
- return "#{full_name} (#{email})"
41
- end
42
-
43
- # Returns true if user can view at least one dashboard app
44
- def has_admin_rights?
45
- if self.super_admin?
46
- return true
47
- else
48
- return Spud::Core.admin_applications.find{ |app| self.can_view_app?(app) }.present?
49
- end
50
- end
51
-
52
- # Returns true if the user can view a spud app based on it's key
53
- def can_view_app?(admin_application)
54
- if self.super_admin?
55
- return true
56
- else
57
- key = admin_application[:key]
58
- return self.permissions.find{ |p| p.apps.include?(key) }.present?
59
- end
60
- end
61
-
62
- # Check if a user has a given list of permissions
63
- #
64
- # * if one tag is supplied, return true if the tag matches
65
- # * if multiple tags are supplied, return true if ALL tags match
66
- def has_permission?(*tags)
67
- if self.super_admin?
68
- return true
69
- else
70
- my_tags = self.permissions.collect(&:tag)
71
- return tags.find{ |tag| !my_tags.include?(tag) }.blank?
72
- end
73
- end
74
-
75
- # Check if a user has at least one out of a given list of permissions
76
- #
77
- # * if one tag is supplied, return true if the tag matches
78
- # * if multiple tags are supplied, return true if ANY tag matches
79
- def has_any_permission?(*tags)
80
- if self.super_admin?
81
- return true
82
- else
83
- return self.permissions.find{ |p| tags.include?(p.tag) }.present?
84
- end
85
- end
86
-
87
- # Return a list of SpudPermission objects for the user's SpudRole
88
- def permissions
89
- if !self.role
90
- return []
91
- else
92
- return self.role.permissions
93
- end
94
- end
95
-
96
- # Returns an ActiveRecord::Relation performing a LIKE query against name columns
97
- def self.where_name_like(string)
98
- full_name = Arel::Nodes::NamedFunction.new(
99
- 'concat',
100
- [arel_table[:first_name], Arel::Nodes.build_quoted(' '), arel_table[:last_name]]
5
+ def initialize(*args)
6
+ ActiveSupport::Deprecation.warn(
7
+ 'Spud::SpudUserModel has been replaced by TbCore::UserModel. See the README for details.',
8
+ caller
101
9
  )
102
- search = '%' + string + '%'
103
- where(full_name.matches(search))
104
- end
105
-
106
- # Return an array of users who have the requested permission
107
- #
108
- # * tag - Desired permission tag string (required)
109
- # * include_supers - Whether to include super user (default: true)
110
- def self.with_permission(tag, include_supers: true)
111
- role_ids = SpudRolePermission.where(spud_permission_tag: tag).pluck(:spud_role_id).uniq()
112
- if include_supers
113
- where(super_admin: true).or(where(spud_role_id: role_ids))
114
- else
115
- where(spud_role_id: role_ids)
116
- end
10
+ super
117
11
  end
118
-
119
- def self.as_csv(column_names, options = {})
120
- CSV.generate do |csv|
121
- csv << column_names
122
- all.each do |item|
123
- csv << item.attributes.values_at(*column_names)
124
- end
125
- end
126
- end
127
-
128
- private
129
-
130
- def set_login_to_email
131
- if self.email.present?
132
- self.login = self.email
133
- end
134
- return true
135
- end
136
-
137
- def unset_requires_password_change
138
- if password_changed? && !requires_password_change_changed?(to: true)
139
- self.requires_password_change = false
140
- end
141
- return true
142
- end
143
-
144
12
  end