klastera 1.1.4 → 1.1.5
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d4f51a31ad550a707ac854779af0d6335062752af2bf79eeb41e23eefc0ddce
|
4
|
+
data.tar.gz: 4abd8e21893258c0dd037d7596168a9266247441be74a751c0d6ee8ae2231796
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29c527c10bbb047607183891488a773655ff8d394ca28961e9745dd067cf77f0a8aa6012f096d334c3209a70e4adb1359b0623b4f3a28dd3d9dca08594328783
|
7
|
+
data.tar.gz: d55827e7deaa63de06c32a27a0ece3df1217d8eb4a553e1cdedee6b0efd882d33c77e9bcc9a574e89f0c7c7ae4ba4c7380c1ac74e3db79eef5f7892b4c6d62b4
|
@@ -11,10 +11,48 @@ module Klastera::Concerns::ClusterUser
|
|
11
11
|
validates :cluster_id, presence: true
|
12
12
|
|
13
13
|
scope :of, -> (user,organization) {
|
14
|
+
Rails.logger.warn("DON'T USE THIS SCOPE DIRECTLY: Use ::ClusterUser.get_from class method instead!")
|
14
15
|
includes(:cluster).where(user_id: user, "clusters.organization_id": organization)
|
15
16
|
}
|
16
17
|
end
|
17
18
|
|
18
19
|
module ClassMethods
|
20
|
+
|
21
|
+
##
|
22
|
+
# Returns a hash with the users with cluster relation
|
23
|
+
#
|
24
|
+
def get_user_clusters_from(organization)
|
25
|
+
users_hash = {}
|
26
|
+
organization_cluster_ids = ::Cluster.of(organization).map(&:id)
|
27
|
+
::ClusterUser.includes(:user).where(cluster_id: organization_cluster_ids).each do |cluster|
|
28
|
+
user_id = cluster.user.id
|
29
|
+
users_hash[user_id] ||= [];
|
30
|
+
users_hash[user_id] << cluster.id
|
31
|
+
end
|
32
|
+
users_hash
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Returns a Cluster::ActiveRecord_Relation
|
37
|
+
#
|
38
|
+
##
|
39
|
+
def get_clusters_from(user,organization)
|
40
|
+
clusters = []
|
41
|
+
unless user.can_admin_clusters?
|
42
|
+
# We could return cu.clusters but you may quering this result and a array can't handle order, where and etc.
|
43
|
+
# So we take only the cluster_ids and perfome a new search in order to get a Cluster::ActiveRecord_Relation
|
44
|
+
# like the else block.
|
45
|
+
# TODO: resolve it without quering twice
|
46
|
+
clusters_id = ::ClusterUser.of(user,organization).map(&:cluster_id)
|
47
|
+
clusters = ::Cluster.where(id: clusters_id)
|
48
|
+
# Add a empty cluster instance to handle models without a cluster assignation. Only for use and show modes
|
49
|
+
if organization.optional_mode?
|
50
|
+
clusters << ::Cluster.new({nid: :without_cluster, name: I18n.t('klastera.without_cluster')})
|
51
|
+
end
|
52
|
+
else
|
53
|
+
clusters = ::Cluster.of(organization)
|
54
|
+
end
|
55
|
+
clusters
|
56
|
+
end
|
19
57
|
end
|
20
58
|
end
|
@@ -3,7 +3,12 @@ module Klastera::Concerns::Clusterizable
|
|
3
3
|
included do
|
4
4
|
attr_accessor :lonely_cluster
|
5
5
|
belongs_to :cluster
|
6
|
+
|
6
7
|
validates :cluster_id, presence: true, if: proc { self.organization.required_suborganization_mode? }
|
8
|
+
|
9
|
+
scope :related_clusters, ->() {
|
10
|
+
includes(:cluster).where("#{self.table_name}.cluster_id IS NOT NULL")
|
11
|
+
}
|
7
12
|
end
|
8
13
|
|
9
14
|
module ClassMethods
|
data/lib/klastera/version.rb
CHANGED
data/lib/klastera.rb
CHANGED
@@ -7,6 +7,21 @@ module Klastera
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
class << self
|
10
|
+
|
11
|
+
##
|
12
|
+
# Returns a ::Cluster::ActiveRecord_Relation from a given scope
|
13
|
+
#
|
14
|
+
def clusters_from!(user,organization,scope,includes=[])
|
15
|
+
_scope_result = scope.respond_to?(:map) ? scope : cluster_scope!(user,organization,scope,includes)
|
16
|
+
::Cluster.where(id: _scope_result.related_clusters.map(&:cluster_id))
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# Returns a scope with filtered by clusters or
|
21
|
+
# the scope filterd its organization if
|
22
|
+
# the organization haven't active the cluster mode
|
23
|
+
#
|
24
|
+
#
|
10
25
|
def cluster_scope!(user,organization,scope,includes=[])
|
11
26
|
scope_klass = scope_class(scope)
|
12
27
|
raise RelatedClusterEntityComplianceError, "attribute cluster_id was not found in #{scope_klass}" unless scope_klass.try(:column_names).try(:include?,'cluster_id')
|
@@ -15,15 +30,13 @@ module Klastera
|
|
15
30
|
|
16
31
|
session_clusters(user,organization) do |clusters|
|
17
32
|
clusters = clusters.reject{|c|c.id.blank?}
|
18
|
-
|
19
33
|
if organization.required_suborganization_mode?
|
20
34
|
scope_klass = scope_klass.where("#{scope.table_name}.cluster_id IN (?)",clusters)
|
21
|
-
elsif organization.optional_mode?
|
35
|
+
elsif organization.optional_mode? && user.is_a_cluster_user?
|
22
36
|
with_clusters = clusters.present? ? "#{scope.table_name}.cluster_id IN (#{clusters.map(&:id).join(',')})" : nil
|
23
37
|
without_clusters = "#{with_clusters.blank? ? '' : ' OR ' }#{scope.table_name}.cluster_id IS NULL"
|
24
38
|
scope_klass = scope_klass.where("#{with_clusters}#{without_clusters}")
|
25
39
|
end
|
26
|
-
|
27
40
|
end
|
28
41
|
|
29
42
|
scope_klass
|
@@ -40,23 +53,15 @@ module Klastera
|
|
40
53
|
end
|
41
54
|
|
42
55
|
##
|
56
|
+
# Returns a cluster array if organization is using the cluster mode
|
43
57
|
#
|
58
|
+
# Use this only to get current_user/organization clusters
|
59
|
+
# understanding this wont be useful out of a cluster mode context.
|
44
60
|
#
|
45
61
|
##
|
46
62
|
def session_clusters(user,organization)
|
47
|
-
clusters = []
|
48
|
-
if
|
49
|
-
unless user.can_admin_clusters?
|
50
|
-
# TODO: 1: return a Cluster::ActiveRecord_Relation and then remove to_a in ::Cluster.of line
|
51
|
-
# TODO: 2: fix call to ::Cluster instead of Klastera::Cluster
|
52
|
-
clusters = ::ClusterUser.of(user,organization).map{|cu|::Cluster.find(cu.cluster_id)}
|
53
|
-
clusters << ::Cluster.new({nid: :without_cluster, name: I18n.t('klastera.without_cluster')}) if organization.optional_mode?
|
54
|
-
else
|
55
|
-
# TODO: remove "to_a" after ClusterUser.of result became a Cluster::ActiveRecord_Relation object
|
56
|
-
clusters = ::Cluster.of(organization).to_a
|
57
|
-
end
|
58
|
-
yield(clusters) if block_given?
|
59
|
-
end
|
63
|
+
clusters = organization.is_in_cluster_mode? ? ::ClusterUser.get_clusters_from(user,organization) : []
|
64
|
+
yield(clusters) if block_given?
|
60
65
|
clusters
|
61
66
|
end
|
62
67
|
end
|
@@ -69,6 +74,8 @@ module Klastera
|
|
69
74
|
helper_method :cluster_organization
|
70
75
|
helper_method :cluster_clusters
|
71
76
|
# helper_method :cluster_clusters_ids
|
77
|
+
helper_method :user_has_more_than_one_cluster
|
78
|
+
helper_method :clusters_from
|
72
79
|
end
|
73
80
|
if respond_to?(:hide_action)
|
74
81
|
hide_action :cluster_scope
|
@@ -83,16 +90,20 @@ module Klastera
|
|
83
90
|
hide_action :cluster_clusters=
|
84
91
|
# hide_action :cluster_clusters_ids
|
85
92
|
# hide_action :cluster_clusters_ids=
|
93
|
+
hide_action :user_has_more_than_one_cluster
|
94
|
+
hide_action :user_has_more_than_one_cluster=
|
95
|
+
hide_action :clusters_from
|
96
|
+
hide_action :clusters_from=
|
86
97
|
end
|
87
98
|
before_action :set_the_lonely_cluster, only: %i[ create update ]
|
88
99
|
end
|
89
100
|
|
90
101
|
def set_the_lonely_cluster
|
91
|
-
form_model = params[:controller].singularize
|
102
|
+
form_model = @form_record ? model_name_from_record_or_class(@form_record).param_key : params[:controller].singularize
|
92
103
|
parameters = params.require( form_model ) rescue nil
|
93
104
|
lonely_cluster = parameters.blank? ? false : parameters.permit( :lonely_cluster ).present?
|
94
105
|
if lonely_cluster
|
95
|
-
params[form_model][:cluster_id] =
|
106
|
+
params[form_model][:cluster_id] = cluster_clusters.first.try(:id)
|
96
107
|
end
|
97
108
|
end
|
98
109
|
|
@@ -116,6 +127,15 @@ module Klastera
|
|
116
127
|
# cluster_clusters.map(&:id)
|
117
128
|
# end
|
118
129
|
|
130
|
+
def user_has_more_than_one_cluster
|
131
|
+
@cluster_clusters ||= cluster_clusters
|
132
|
+
@cluster_clusters.size > 1
|
133
|
+
end
|
134
|
+
|
135
|
+
def clusters_from(scope,includes=[])
|
136
|
+
Klastera.clusters_from!(cluster_user,cluster_organization,scope,includes)
|
137
|
+
end
|
138
|
+
|
119
139
|
def set_cluster_filter
|
120
140
|
@filter = ::ClusterFilter.new(cluster_filter_params)
|
121
141
|
end
|
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.1.
|
4
|
+
version: 1.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gino Barahona
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|