klastera 1.5.2.4 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. metadata +7 -77
  3. data/MIT-LICENSE +0 -20
  4. data/README.rdoc +0 -3
  5. data/Rakefile +0 -37
  6. data/app/assets/javascripts/klastera/application.js +0 -13
  7. data/app/assets/javascripts/klastera/clusters.js +0 -2
  8. data/app/assets/stylesheets/klastera/clusters.scss +0 -46
  9. data/app/controllers/klastera/application_controller.rb +0 -29
  10. data/app/controllers/klastera/clusters_controller.rb +0 -60
  11. data/app/helpers/klastera/application_helper.rb +0 -40
  12. data/app/models/klastera/cluster.rb +0 -5
  13. data/app/models/klastera/cluster_entity.rb +0 -5
  14. data/app/models/klastera/cluster_filter.rb +0 -5
  15. data/app/models/klastera/cluster_user.rb +0 -5
  16. data/app/models/klastera/concerns/cluster.rb +0 -67
  17. data/app/models/klastera/concerns/cluster_entity.rb +0 -18
  18. data/app/models/klastera/concerns/cluster_filter.rb +0 -22
  19. data/app/models/klastera/concerns/cluster_user.rb +0 -41
  20. data/app/models/klastera/concerns/clusterizable.rb +0 -57
  21. data/app/models/klastera/concerns/organization.rb +0 -49
  22. data/app/models/klastera/concerns/transfer.rb +0 -45
  23. data/app/models/klastera/concerns/user.rb +0 -77
  24. data/app/models/klastera/transfer.rb +0 -5
  25. data/app/views/klastera/clusters/_filter.html.erb +0 -0
  26. data/app/views/klastera/clusters/_form.html.erb +0 -22
  27. data/app/views/klastera/clusters/_form_transfer.html.erb +0 -34
  28. data/app/views/klastera/clusters/_table.html.erb +0 -33
  29. data/app/views/klastera/clusters/create.js.erb +0 -1
  30. data/app/views/klastera/clusters/destroy.js.erb +0 -6
  31. data/app/views/klastera/clusters/edit.html.erb +0 -10
  32. data/app/views/klastera/clusters/index.html.erb +0 -21
  33. data/app/views/klastera/clusters/new.html.erb +0 -10
  34. data/app/views/klastera/clusters/transfer.html.erb +0 -10
  35. data/app/views/klastera/clusters/update.js.erb +0 -1
  36. data/app/views/layouts/klastera/_cluster_entity_fields.html.erb +0 -10
  37. data/app/views/layouts/klastera/_cluster_filter.html.erb +0 -23
  38. data/app/views/layouts/klastera/_cluster_role.html.erb +0 -48
  39. data/app/views/layouts/klastera/_cluster_selector.html.erb +0 -21
  40. data/app/views/layouts/klastera/_cluster_user_fields.html.erb +0 -10
  41. data/app/views/layouts/klastera/_nested_cluster_entity.html.erb +0 -43
  42. data/app/views/layouts/klastera/_nested_cluster_user.html.erb +0 -22
  43. data/app/views/layouts/klastera/_options.html.erb +0 -21
  44. data/config/locales/es.yml +0 -96
  45. data/config/routes.rb +0 -7
  46. data/db/migrate/20200324203929_create_klastera_clusters.rb +0 -12
  47. data/db/migrate/20200326111219_add_cluster_options_to_organizations.rb +0 -6
  48. data/db/migrate/20200330010551_create_klastera_cluster_users.rb +0 -9
  49. data/db/migrate/20200330221601_add_order_field_to_clusters.rb +0 -5
  50. data/db/migrate/20200518142609_create_klastera_cluster_entities.rb +0 -8
  51. data/db/migrate/20200908180057_add_cluster_config_to_organization.rb +0 -5
  52. data/db/migrate/20220602222332_add_unique_index_to_cluster_entities.rb +0 -5
  53. data/lib/klastera/engine.rb +0 -5
  54. data/lib/klastera/version.rb +0 -3
  55. data/lib/klastera.rb +0 -236
  56. data/lib/tasks/klastera_tasks.rake +0 -32
  57. data/test/controllers/klastera/clusters_controller_test.rb +0 -52
  58. data/test/fixtures/klastera/cluster_users.yml +0 -9
  59. data/test/fixtures/klastera/clusters.yml +0 -11
  60. data/test/integration/navigation_test.rb +0 -8
  61. data/test/klastera_test.rb +0 -7
  62. data/test/models/klastera/cluster_test.rb +0 -9
  63. data/test/models/klastera/cluster_user_test.rb +0 -9
  64. data/test/test_helper.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99215b6fc85cb71ec6b735a59cfd8e2890c14b059ed2b2ed15483688bdf67d63
4
- data.tar.gz: 681507d7a0c1f0c6d7fde205afa8d8a8154509026d78998b8a7801386ff340a3
3
+ metadata.gz: 26024cfbeac47db7de270c9281e98d197b377f53c4122fb4a6eec246dae615cb
4
+ data.tar.gz: f452de2debec0cc4c34549ec98f5dcd387cbb8d32102ed6924ff06ccc89b90cd
5
5
  SHA512:
6
- metadata.gz: 829f195a0c49d8edf0b327026971d027e48f9bb5f1b8b07ac8399099138401250afb92d65de92366ba23478b6b852e4b9d057545bc637fabf09bd9f24071cc53
7
- data.tar.gz: 8f15f4de6d6665a309e238664f207b0c8e686b2fecf9ea75ace0c9cf813bfa6b23fefb1ae09ed8cfafc6fa19a7d2a455400c7fd6d76859600cc81a4987578053
6
+ metadata.gz: '096e198a76a0d1f12b83339d76d9fc6f83c64ac3b893b5dafc5ef1b77f4179aee49b146e1be92d2f9ae9b572c4d108dbc3bb9ba80c78a6404459850a1dcd4265'
7
+ data.tar.gz: 416ef7b6a278be2686cf613b5ea5382bd728a480486217f2a2b3511677d93b4631a0818cc08a1a94f74bcf7bc57c7598a3f871a901f14f116b817f8b4ec1dcfe
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: klastera
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2.4
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gino Barahona
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-06 00:00:00.000000000 Z
11
+ date: 2024-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.6
19
+ version: 6.1.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.6
26
+ version: 6.1.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pg
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,69 +44,7 @@ email:
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
- files:
48
- - MIT-LICENSE
49
- - README.rdoc
50
- - Rakefile
51
- - app/assets/javascripts/klastera/application.js
52
- - app/assets/javascripts/klastera/clusters.js
53
- - app/assets/stylesheets/klastera/clusters.scss
54
- - app/controllers/klastera/application_controller.rb
55
- - app/controllers/klastera/clusters_controller.rb
56
- - app/helpers/klastera/application_helper.rb
57
- - app/models/klastera/cluster.rb
58
- - app/models/klastera/cluster_entity.rb
59
- - app/models/klastera/cluster_filter.rb
60
- - app/models/klastera/cluster_user.rb
61
- - app/models/klastera/concerns/cluster.rb
62
- - app/models/klastera/concerns/cluster_entity.rb
63
- - app/models/klastera/concerns/cluster_filter.rb
64
- - app/models/klastera/concerns/cluster_user.rb
65
- - app/models/klastera/concerns/clusterizable.rb
66
- - app/models/klastera/concerns/organization.rb
67
- - app/models/klastera/concerns/transfer.rb
68
- - app/models/klastera/concerns/user.rb
69
- - app/models/klastera/transfer.rb
70
- - app/views/klastera/clusters/_filter.html.erb
71
- - app/views/klastera/clusters/_form.html.erb
72
- - app/views/klastera/clusters/_form_transfer.html.erb
73
- - app/views/klastera/clusters/_table.html.erb
74
- - app/views/klastera/clusters/create.js.erb
75
- - app/views/klastera/clusters/destroy.js.erb
76
- - app/views/klastera/clusters/edit.html.erb
77
- - app/views/klastera/clusters/index.html.erb
78
- - app/views/klastera/clusters/new.html.erb
79
- - app/views/klastera/clusters/transfer.html.erb
80
- - app/views/klastera/clusters/update.js.erb
81
- - app/views/layouts/klastera/_cluster_entity_fields.html.erb
82
- - app/views/layouts/klastera/_cluster_filter.html.erb
83
- - app/views/layouts/klastera/_cluster_role.html.erb
84
- - app/views/layouts/klastera/_cluster_selector.html.erb
85
- - app/views/layouts/klastera/_cluster_user_fields.html.erb
86
- - app/views/layouts/klastera/_nested_cluster_entity.html.erb
87
- - app/views/layouts/klastera/_nested_cluster_user.html.erb
88
- - app/views/layouts/klastera/_options.html.erb
89
- - config/locales/es.yml
90
- - config/routes.rb
91
- - db/migrate/20200324203929_create_klastera_clusters.rb
92
- - db/migrate/20200326111219_add_cluster_options_to_organizations.rb
93
- - db/migrate/20200330010551_create_klastera_cluster_users.rb
94
- - db/migrate/20200330221601_add_order_field_to_clusters.rb
95
- - db/migrate/20200518142609_create_klastera_cluster_entities.rb
96
- - db/migrate/20200908180057_add_cluster_config_to_organization.rb
97
- - db/migrate/20220602222332_add_unique_index_to_cluster_entities.rb
98
- - lib/klastera.rb
99
- - lib/klastera/engine.rb
100
- - lib/klastera/version.rb
101
- - lib/tasks/klastera_tasks.rake
102
- - test/controllers/klastera/clusters_controller_test.rb
103
- - test/fixtures/klastera/cluster_users.yml
104
- - test/fixtures/klastera/clusters.yml
105
- - test/integration/navigation_test.rb
106
- - test/klastera_test.rb
107
- - test/models/klastera/cluster_test.rb
108
- - test/models/klastera/cluster_user_test.rb
109
- - test/test_helper.rb
47
+ files: []
110
48
  homepage: https://github.com/ginosx/klastera
111
49
  licenses:
112
50
  - MIT
@@ -126,16 +64,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
64
  - !ruby/object:Gem::Version
127
65
  version: '0'
128
66
  requirements: []
129
- rubygems_version: 3.3.7
67
+ rubygems_version: 3.1.6
130
68
  signing_key:
131
69
  specification_version: 4
132
70
  summary: Clusterization Engine
133
- test_files:
134
- - test/controllers/klastera/clusters_controller_test.rb
135
- - test/fixtures/klastera/cluster_users.yml
136
- - test/fixtures/klastera/clusters.yml
137
- - test/integration/navigation_test.rb
138
- - test/klastera_test.rb
139
- - test/models/klastera/cluster_test.rb
140
- - test/models/klastera/cluster_user_test.rb
141
- - test/test_helper.rb
71
+ test_files: []
data/MIT-LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright 2020 Gino Barahona
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc DELETED
@@ -1,3 +0,0 @@
1
- = Klastera
2
-
3
- This project rocks and uses MIT-LICENSE.
data/Rakefile DELETED
@@ -1,37 +0,0 @@
1
- begin
2
- require 'bundler/setup'
3
- rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
- end
6
-
7
- require 'rdoc/task'
8
-
9
- RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'Klastera'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
15
- end
16
-
17
- APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
- load 'rails/tasks/engine.rake'
19
-
20
-
21
- load 'rails/tasks/statistics.rake'
22
-
23
-
24
-
25
- Bundler::GemHelper.install_tasks
26
-
27
- require 'rake/testtask'
28
-
29
- Rake::TestTask.new(:test) do |t|
30
- t.libs << 'lib'
31
- t.libs << 'test'
32
- t.pattern = 'test/**/*_test.rb'
33
- t.verbose = false
34
- end
35
-
36
-
37
- task default: :test
@@ -1,13 +0,0 @@
1
- // This is a manifest file that'll be compiled into application.js, which will include all the files
2
- // listed below.
3
- //
4
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
- // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
- //
7
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
- // compiled file.
9
- //
10
- // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
- // about supported directives.
12
- //
13
- //= require_tree .
@@ -1,2 +0,0 @@
1
- // Place all the behaviors and hooks related to the matching controller here.
2
- // All this logic will automatically be available in application.js.
@@ -1,46 +0,0 @@
1
- .nested-cluster-user,
2
- .nested-cluster-entity {
3
- .panel {
4
- margin: 0;
5
- border-bottom: 0;
6
- .panel-heading {
7
- padding: 10px 12px 10px 15px;
8
- background: none;
9
- }
10
- }
11
- }
12
-
13
- #cluster-remote-table {
14
- .cluster-id { width: 70px; }
15
- .cluster-order { width: 70px; }
16
- .cluster-color { width: 70px; }
17
- .odd .colorless { color: #F9F9F9 }
18
- .even .colorless { color: #FFF }
19
- tr:hover .colorless { color: #444; opacity: 0.2;}
20
- }
21
-
22
- #cluster-remote-form {
23
- h4.blank-modal-title {
24
- margin: 0;
25
- line-height: 28px;
26
- letter-spacing: 0.05rem;
27
- font-size: 21px;
28
- font-weight: 400;
29
- color: #666;
30
- }
31
- }
32
-
33
-
34
- ul.klastera-option-help {
35
- padding-left: 20px;
36
- list-style-type: disc;
37
- }
38
-
39
- ul.klastera-option-help li {
40
- margin-bottom: 10px;
41
- padding-bottom: 5px;
42
- border-bottom: 1px solid #DDD;
43
- }
44
-
45
- ul.klastera-option-help li b { color: #8A8A8A; font-weight: 400; }
46
- ul.klastera-option-help li b:first-child { color: #2E5F9B; font-weight: bold; }
@@ -1,29 +0,0 @@
1
- module Klastera
2
- class ApplicationController < ::ApplicationController
3
- protect_from_forgery with: :exception
4
- layout :disable_in_xhr_requests
5
- before_action :set_xhr_render_session
6
- before_action :check_access_to_cluster_admin
7
-
8
- def check_access_to_cluster_admin
9
- unless cluster_user.can_admin_clusters?
10
- redirect_to main_app.root_path, flash: { alert: t('klastera.messages.access_cluster_admin') }
11
- end
12
- end
13
-
14
- if respond_to?(:skip_after_action)
15
- skip_after_action :verify_authorized
16
- end
17
-
18
- private
19
- def disable_in_xhr_requests
20
- request.xhr? ? false : nil
21
- end
22
-
23
- def set_xhr_render_session
24
- return unless request.get?
25
- # request.xhr? return nil when this is not a XHR request, but we need a boolean
26
- session[:xhr_render] = request.xhr?.present?
27
- end
28
- end
29
- end
@@ -1,60 +0,0 @@
1
- require_dependency "klastera/application_controller"
2
-
3
- module Klastera
4
- class ClustersController < ApplicationController
5
- before_action :set_cluster, only: %i[ edit update destroy transfer ]
6
- before_action :set_clusters, only: %i[ index ]
7
-
8
- def index; end
9
-
10
- def new
11
- @cluster = ::Cluster.new
12
- end
13
-
14
- def edit; end
15
-
16
- def transfer
17
- @transfer = Transfer.new
18
- end
19
-
20
- def create
21
- @cluster = ::Cluster.new(cluster_params)
22
- if @cluster.save
23
- @cluster = ::Cluster.new
24
- set_clusters
25
- end
26
- end
27
-
28
- def update
29
- if @cluster.update(cluster_params)
30
- set_clusters
31
- end
32
- end
33
-
34
- def destroy
35
- new_cluster_id = params.require(:transfer).permit(:new_cluster_id).values.first rescue nil
36
- @transfer = Transfer.new( current_cluster: @cluster, new_cluster_id: new_cluster_id )
37
- if @transfer.valid?
38
- if @transfer.apply!
39
- @cluster.destroy
40
- end
41
- set_clusters
42
- end
43
- end
44
-
45
- private
46
- def set_cluster
47
- @cluster = ::Cluster.find(params[:id])
48
- end
49
-
50
- def set_clusters
51
- @clusters = cluster_organization.clusters
52
- end
53
-
54
- def cluster_params
55
- parameters = params.require(:cluster).permit(:nid, :name, :color, :order)
56
- parameters[:organization_id]=cluster_organization.id
57
- parameters
58
- end
59
- end
60
- end
@@ -1,40 +0,0 @@
1
- module Klastera
2
- module ApplicationHelper
3
- def ac_errors_as_html_list(errors)
4
- array_as_html_list(
5
- errors.messages.inject([]) do |array,(attr,errors_array)|
6
- array.concat(errors_array)
7
- array
8
- end
9
- )
10
- end
11
-
12
- def array_as_html_list(array)
13
- "<ul style='padding:0;'><li>#{array.join("</li><li>")}</li></ul>".html_safe
14
- end
15
-
16
- def method_missing(method, *args, &block)
17
- if method.to_s.end_with?('_path') or method.to_s.end_with?('_url')
18
- if main_app.respond_to?(method)
19
- main_app.send(method, *args)
20
- else
21
- super
22
- end
23
- else
24
- super
25
- end
26
- end
27
-
28
- def respond_to?(method, include_priv=false)
29
- if method.to_s.end_with?('_path') or method.to_s.end_with?('_url')
30
- if main_app.respond_to?(method,include_priv)
31
- true
32
- else
33
- super
34
- end
35
- else
36
- super
37
- end
38
- end
39
- end
40
- end
@@ -1,5 +0,0 @@
1
- module Klastera
2
- class Cluster < ActiveRecord::Base
3
- include Klastera::Concerns::Cluster
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Klastera
2
- class ClusterEntity < ActiveRecord::Base
3
- include Klastera::Concerns::ClusterEntity
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Klastera
2
- class ClusterFilter
3
- include Klastera::Concerns::ClusterFilter
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Klastera
2
- class ClusterUser < ActiveRecord::Base
3
- include Klastera::Concerns::ClusterUser
4
- end
5
- end
@@ -1,67 +0,0 @@
1
- module Klastera::Concerns::Cluster
2
- extend ActiveSupport::Concern
3
- # 'included do' causes the included code to be evaluated in the
4
- # context where it is included (cluster.rb), rather than being
5
- # executed in the module's context (klastera/concerns/models/cluster).
6
- included do
7
- self.table_name = 'clusters'
8
-
9
- attr_reader :last_record
10
-
11
- REQUIRED_MODE = :required_suborganization.freeze
12
- OPTIONAL_MODE = :optional_suborganization.freeze
13
- MODES = [ REQUIRED_MODE, OPTIONAL_MODE ].freeze
14
-
15
- belongs_to :organization, class_name: Klastera.organization_class
16
- has_many :cluster_users
17
- has_many :cluster_entities, dependent: :destroy
18
-
19
- scope :of, -> (organization,except_ids=[]) {
20
- _scope = where(organization: organization)
21
- _scope = _scope.where.not(id: except_ids) unless except_ids.blank?
22
- _scope
23
- }
24
-
25
- validates :name, presence: true
26
- validates :nid, presence: true
27
- validates :organization_id, presence: true
28
-
29
- validates_uniqueness_of :nid, scope: [:nid, :organization_id]
30
-
31
- before_destroy do |record|
32
- self.can_transfer_and_destroy?
33
- end
34
-
35
- def siblings
36
- ::Cluster.of(self.organization,[self.id])
37
- end
38
-
39
- def is_the_last_record_in_required_suborganization_mode?
40
- self.organization.required_suborganization_mode? && self.siblings.blank?
41
- end
42
-
43
- def required_transfer?
44
- self.organization.required_suborganization_mode?
45
- end
46
-
47
- def has_related_entities_using_it?
48
- self.cluster_entities.size > 0
49
- end
50
-
51
- def can_transfer_and_destroy?
52
- can_destroy = true
53
- if is_the_last_record_in_required_suborganization_mode?
54
- errors.add(:last_record, I18n.t('klastera.messages.cant_delete_the_last_record_in_required_suborganization_mode'))
55
- can_destroy = false
56
- end
57
- can_destroy
58
- end
59
-
60
- def display_name_nid
61
- "#{name} (#{nid==Klastera::UNCLUSTERED_ENTITY ? I18n.t("klastera.#{ Klastera::UNCLUSTERED_ENTITY}") : nid})"
62
- end
63
- end
64
-
65
- module ClassMethods
66
- end
67
- end
@@ -1,18 +0,0 @@
1
- module Klastera::Concerns::ClusterEntity
2
- extend ActiveSupport::Concern
3
-
4
- included do
5
- self.table_name = 'cluster_entities'
6
- belongs_to :entity, polymorphic: true
7
- belongs_to :cluster, class_name: "::Cluster"
8
- end
9
-
10
- module ClassMethods
11
- def left_join_sources_of(scope_klass)
12
- scope_klass_arel_table = scope_klass.arel_table
13
- scope_klass_arel_table.join(arel_table, Arel::Nodes::OuterJoin).on(
14
- scope_klass_arel_table[:id].eq(arel_table[:entity_id]), arel_table[:entity_type].eq(scope_klass.name)
15
- ).join_sources
16
- end
17
- end
18
- end
@@ -1,22 +0,0 @@
1
- module Klastera::Concerns::ClusterFilter
2
- extend ActiveSupport::Concern
3
-
4
- included do
5
- include ActiveModel::Model
6
- include ActiveModel::Validations::Callbacks
7
-
8
- attr_accessor :cluster_id
9
- end
10
-
11
- module ClassMethods
12
- def attr_accessor(*vars)
13
- @attributes ||= []
14
- @attributes.concat vars
15
- super(*vars)
16
- end
17
-
18
- def attributes
19
- @attributes
20
- end
21
- end
22
- end
@@ -1,41 +0,0 @@
1
- module Klastera::Concerns::ClusterUser
2
- extend ActiveSupport::Concern
3
-
4
- included do
5
- self.table_name = 'cluster_users'
6
- belongs_to :user
7
- belongs_to :cluster
8
- validates :cluster_id, presence: true
9
- end
10
-
11
- module ClassMethods
12
- ##
13
- # Return a Cluster::ActiveRecord_Relation of organization (and) user
14
- #
15
- def clusters_of(organization,and_user=nil)
16
- and_user_id = and_user.present? ? { users: { id: and_user } } : {}
17
- ::Cluster.eager_load(cluster_users: :user).where({ organization_id: organization }.merge(and_user_id) ).order(order: :asc)
18
- end
19
-
20
- ##
21
- # Return a User::ActiveRecord_Relation of organization (and) user
22
- #
23
- def users_of(organization)
24
- ::User.eager_load(:cluster_users).where(users: { organization_id: organization } )
25
- end
26
-
27
- ##
28
- # Return a hash of users and its clusters
29
- #
30
- def users_hash_of(organization)
31
- users = {}
32
- rows = self.users_of(organization).pluck("users.id AS user_id","cluster_users.cluster_id").uniq
33
- rows.each do |row|
34
- user_id = row.first
35
- users[user_id] ||= []
36
- users[user_id] << row.last
37
- end
38
- users
39
- end
40
- end
41
- end
@@ -1,57 +0,0 @@
1
- module Klastera::Concerns::Clusterizable
2
- extend ActiveSupport::Concern
3
-
4
- included do
5
- class MutipleClustersOperationError < StandardError; end
6
-
7
- belongs_to :cluster
8
-
9
- has_many :cluster_entities, as: :entity, class_name: "Klastera::ClusterEntity"
10
- accepts_nested_attributes_for :cluster_entities, reject_if: :all_blank, allow_destroy: true
11
-
12
- validates :cluster_id, presence: true, if: -> { cluster_id.present? && organization.present? && organization.required_suborganization_mode? }
13
- validate :at_least_one_cluster_entity, if: -> { organization.present? && organization.required_suborganization_mode? }
14
- validate :uniqueness_of_cluster_entity_record
15
-
16
- scope :includes_cluster, -> { includes(cluster_entities: :cluster) }
17
-
18
- def at_least_one_cluster_entity
19
- if cluster_entities.length == 0 || cluster_entities.reject{|cluster_entity| cluster_entity._destroy == true}.empty?
20
- return errors.add(:cluster_entities, I18n.t('klastera.messages.at_least_one_cluster_entity'))
21
- end
22
- end
23
-
24
- def allow_multiple_clusters?(default=:one)
25
- organization.present? && organization.cluster_cardinality_of(self.class, default: default) == :many
26
- end
27
-
28
- ##
29
- # This is a legacy method and we don't recommend using it.
30
- # Implement directly Klastera.entity_clusters_string_list instead of this method.
31
- # TODO: In order to deprecate it, you will need to perform some changes in the main app
32
- ##
33
- def clusters_string_separated_by(separator,attribute=:name)
34
- Klastera.entity_clusters_string_list!(
35
- cluster_entities, separator, attribute
36
- )
37
- end
38
-
39
- def has_one_cluster_entity
40
- if cluster_entities.length > 1
41
- return errors.add(:cluster_entities, I18n.t('klastera.messages.has_one_cluster_entity'))
42
- end
43
- end
44
-
45
- def uniqueness_of_cluster_entity_record
46
- if cluster_entities.map(&:cluster_id).uniq.size != cluster_entities.size
47
- return errors.add(:cluster_entities, I18n.t('klastera.messages.duplicated_cluster_entity') )
48
- end
49
- end
50
- end
51
-
52
- module ClassMethods
53
- def cluster_entity_params
54
- [ :cluster_id, { cluster_entities_attributes: [:id, :cluster_id, :_destroy] } ]
55
- end
56
- end
57
- end
@@ -1,49 +0,0 @@
1
- module Klastera::Concerns::Organization
2
- extend ActiveSupport::Concern
3
- included do
4
- serialize :cluster_config
5
- has_many :clusters
6
-
7
- validates :use_cluster_as, inclusion: { in: ::Cluster::MODES.map{|m|m.to_s}, message: I18n.t('klastera.clusters.wrong_option') }, if: proc{ use_cluster_as.present? }
8
-
9
- # Return a symbol version of use_cluster_as value
10
- def cluster_mode
11
- self.use_cluster_as.to_s.to_sym
12
- end
13
-
14
- def cluster_cardinality_of(entity, default: :many)
15
- if cluster_config.is_a?(Hash)
16
- entities_cardinality = cluster_config[:entities]&.[](:cardinality)||{}
17
- entity = entity.to_s.to_sym
18
- if entities_cardinality.has_key?(entity)
19
- default = entities_cardinality[entity]
20
- end
21
- end
22
- default.to_s.to_sym
23
- end
24
-
25
- ##
26
- # Return a boolean if one of three of options was set in organization
27
- # As useless option you can retrieve the value passing false as argument.
28
- #
29
- ##
30
- def is_in_cluster_mode?(return_the_mode=false)
31
- is_active = cluster_mode.present? && ::Cluster::MODES.include?(cluster_mode)
32
- ( return_the_mode ? ( is_active ? cluster_mode : false ) : is_active )
33
- end
34
-
35
- def required_suborganization_mode?
36
- cluster_mode == ::Cluster::REQUIRED_MODE
37
- end
38
-
39
- def optional_suborganization_mode?
40
- cluster_mode == ::Cluster::OPTIONAL_MODE
41
- end
42
- end
43
-
44
- module ClassMethods
45
- def cluster_params
46
- [ :use_cluster_as ]
47
- end
48
- end
49
- end