effective_resources 2.25.15 → 2.26.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bbde5a40ed9d45271d9e3d8c7c935c59dd6a8ec709106a171efa00b4039d08d6
4
- data.tar.gz: ecb7387a65cf50a43a1d9087fde4bfb77f54a9150b0275d36ce1d9fe1c93a8d3
3
+ metadata.gz: 76931ae3422d0b14af4c84ed8670f0a03eba10ffb55804850d8d6aa23409d947
4
+ data.tar.gz: 9a8f17357dd11e73cc82070c20825fa63e89701ec80f1de679479c6b1f1123a9
5
5
  SHA512:
6
- metadata.gz: 44a87836e25135b42fad6d47c66b734574084d7cd13707380725d52280a18b6417117eb0a4f4025868c9b597c00e767bf1e2df28c75c38f418be744b422e451a
7
- data.tar.gz: d1381999ffa3539a7a79f555b02bd7912bf786ae865d920a471a344591da29eb62962eedfe6446b607615e6199b2b06277ffd6c8622352b41530600366e60449
6
+ metadata.gz: 20bc96638e82faf39e0595eee398104967dbc273e308c15768f32d55e518430698017c63a233b84a192a0be6a7ade9bb3a80c344274271a230e839d55c8b5672
7
+ data.tar.gz: 7eacea35ae629bcd2b6febb4d548bf15c239d3c5422b01633dd967f780b2590c94ca8bf92ca27832a430f45d74e51e90a2150c16715e0b2e7bc4b8c00eb91d78
data/README.md CHANGED
@@ -374,21 +374,20 @@ This gem provides an admin endpoint for select2 AJAX to fetch users.
374
374
  To use this endpoint please add
375
375
 
376
376
  ```
377
- can :admin, :effective_resources
377
+ can :users, :ajax
378
378
  ```
379
379
 
380
380
  And then create a select field like this:
381
381
 
382
382
  ```
383
- = f.select :user_id, current_user.class.all,
384
- ajax_url: effective_resources.users_admin_select2_ajax_index_path
383
+ = f.select :user_id, current_user.class.all, ajax_url: effective_resources.users_effective_ajax_index_path
385
384
  ```
386
385
 
387
- To format the results, add a method to your User class. It can return html.
386
+ To format the results, add a method to your User class. Should return HTML with a span tag
388
387
 
389
388
  ```
390
389
  def to_select2
391
- "<span>#{user.first_name} #{user.last_name}</span> <small>#{user.email}</small>"
390
+ "<span>#{first_name} #{last_name}</span> <small>&lt;#{try(:public_email) || email}&gt;</small>"
392
391
  end
393
392
  ```
394
393
 
@@ -42,7 +42,7 @@ module Effective
42
42
  raise('expected a Hash with id and text params') unless option.kind_of?(Hash) && option[:id] && option[:text]
43
43
  option
44
44
  else
45
- { id: resource.to_param, text: resource.try(:to_select2) || resource.to_s }
45
+ { id: resource.to_param, text: to_select2(resource) }
46
46
  end
47
47
  end
48
48
 
@@ -56,12 +56,13 @@ module Effective
56
56
 
57
57
  private
58
58
 
59
- def to_select2(resource)
60
- if resource.try(:email).present?
61
- "<span>#{resource}</span> <small>#{resource.email}</small>"
62
- else
63
- "<span>#{resource}</span>"
64
- end
59
+ def to_select2(resource, with_organizations = false)
60
+ organizations = Array(resource.try(:organizations)).join(', ') if with_organizations
61
+
62
+ [
63
+ (resource.try(:to_select2) || "<span>#{resource.to_s}</span>"),
64
+ ("<small>#{organizations}</small>" if organizations.present?)
65
+ ].compact.join(' ')
65
66
  end
66
67
 
67
68
  end
@@ -0,0 +1,53 @@
1
+ module Effective
2
+ class AjaxController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+
5
+ include Effective::Select2AjaxController
6
+
7
+ def users
8
+ EffectiveResources.authorize!(self, :users, :ajax)
9
+
10
+ with_organizations = current_user.class.try(:effective_memberships_organization_user?)
11
+
12
+ collection = current_user.class.all
13
+ collection = collection.includes(:organizations) if with_organizations
14
+
15
+ respond_with_select2_ajax(collection, skip_authorize: true) do |user|
16
+ data = { first_name: user.first_name, last_name: user.last_name, email: user.email }
17
+
18
+ if with_organizations
19
+ data[:company] = user.organizations.first.try(:to_s)
20
+ data[:organization_id] = user.organizations.first.try(:id)
21
+ data[:organization_type] = user.organizations.first.try(:class).try(:name)
22
+ end
23
+
24
+ {
25
+ id: user.to_param,
26
+ text: to_select2(user, with_organizations),
27
+ data: data
28
+ }
29
+ end
30
+ end
31
+
32
+ def organizations
33
+ EffectiveResources.authorize!(self, :organizations, :ajax)
34
+
35
+ raise('the effective memberships gem is required') unless defined?(EffectiveMemberships)
36
+
37
+ klass = EffectiveMemberships.Organization
38
+ raise('an EffectiveMemberships.Organization is required') unless klass.try(:effective_memberships_organization?)
39
+
40
+ collection = klass.all
41
+
42
+ respond_with_select2_ajax(collection) do |organization|
43
+ data = { title: organization.title, email: organization.email }
44
+
45
+ {
46
+ id: organization.to_param,
47
+ text: to_select2(organization),
48
+ data: data
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -22,7 +22,7 @@ module ActsAsPublished
22
22
  included do
23
23
  attr_writer :save_as_draft
24
24
 
25
- before_validation(if: -> { EffectiveResources.falsey?(@save_as_draft) && @save_as_draft.present? }) do
25
+ before_validation(if: -> { EffectiveResources.falsey?(@save_as_draft) && (@save_as_draft.present? || new_record?) }) do
26
26
  self.published_start_at ||= Time.zone.now
27
27
  end
28
28
 
@@ -292,11 +292,10 @@ module EffectiveDeviseUser
292
292
  end
293
293
 
294
294
  def to_select2_search_columns
295
- [:email, :public_email, :first_name, :last_name, :name]
295
+ [:email, :public_email, :alternate_email, :first_name, :last_name, :name]
296
296
  end
297
297
 
298
298
  def to_select2
299
- "<span>#{email_to_s}</span> <small>#{email}</small>"
299
+ "<span>#{email_to_s}</span> <small>&lt;#{try(:public_email) || email}&gt;</small>"
300
300
  end
301
-
302
301
  end
data/config/routes.rb CHANGED
@@ -3,12 +3,10 @@ Rails.application.routes.draw do
3
3
  end
4
4
 
5
5
  EffectiveResources::Engine.routes.draw do
6
-
7
- namespace :admin do
8
- resources :select2_ajax, only: [] do
9
- get :users, on: :collection
10
- get :organizations, on: :collection
6
+ namespace :effective do
7
+ resources :ajax, only: [] do
8
+ get :users, on: :collection, as: :users
9
+ get :organizations, on: :collection, as: :organizations
11
10
  end
12
11
  end
13
-
14
12
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '2.25.15'.freeze
2
+ VERSION = '2.26.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.25.15
4
+ version: 2.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-18 00:00:00.000000000 Z
11
+ date: 2024-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -175,7 +175,6 @@ files:
175
175
  - README.md
176
176
  - app/assets/javascripts/effective_resources.js
177
177
  - app/assets/javascripts/effective_resources/effective_ujs.js
178
- - app/controllers/admin/select2_ajax_controller.rb
179
178
  - app/controllers/concerns/effective/crud_controller.rb
180
179
  - app/controllers/concerns/effective/crud_controller/actions.rb
181
180
  - app/controllers/concerns/effective/crud_controller/dsl.rb
@@ -194,6 +193,7 @@ files:
194
193
  - app/controllers/concerns/effective/wizard_controller/permitted_params.rb
195
194
  - app/controllers/concerns/effective/wizard_controller/save.rb
196
195
  - app/controllers/concerns/effective/wizard_controller/wicked_overrides.rb
196
+ - app/controllers/effective/ajax_controller.rb
197
197
  - app/helpers/effective_resources_email_helper.rb
198
198
  - app/helpers/effective_resources_helper.rb
199
199
  - app/helpers/effective_resources_private_helper.rb
@@ -1,29 +0,0 @@
1
- module Admin
2
- class Select2AjaxController < ApplicationController
3
- before_action(:authenticate_user!) if defined?(Devise)
4
- before_action { EffectiveResources.authorize!(self, :admin, :effective_resources) }
5
-
6
- include Effective::Select2AjaxController
7
-
8
- def users
9
- collection = current_user.class.all
10
-
11
- respond_with_select2_ajax(collection) do |user|
12
- { id: user.to_param, text: user.try(:to_select2) || to_select2(user) }
13
- end
14
- end
15
-
16
- def organizations
17
- raise('the effective memberships gem is required') unless defined?(EffectiveMemberships)
18
-
19
- klass = EffectiveMemberships.Organization
20
- raise('an EffectiveMemberships.Organization is required') unless klass.try(:effective_memberships_organization?)
21
-
22
- collection = klass.all
23
-
24
- respond_with_select2_ajax(collection) do |organization|
25
- { id: organization.to_param, text: organization.try(:to_select2) || to_select2(organization) }
26
- end
27
- end
28
- end
29
- end