klastera 1.2.4.1 → 1.2.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/klastera.rb +57 -34
- data/lib/klastera/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8780a6928f5249deb34be42cac1f52a226113865b9f29ddb12e1a36f018141ed
|
4
|
+
data.tar.gz: 1d99b709cea49a08533192ad8a1df621d78ea4d4ee59e1c266f06e952e6d8063
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62c72441e00d9edb6c17525453cde71d864389c9342dbe54df3538609814aef0cdcbc3f7c49f49134d526e2da1f99ff1cc258b750cd024a7031afd3a80977d2d
|
7
|
+
data.tar.gz: 806978a3fae34b0a2ddda331ce37b90de2e66f9c77bd707859b721ac7c83980f706b5eb432a00875db8b26b4c8901b11307ef62ab063952d013eef30eca69772
|
data/lib/klastera.rb
CHANGED
@@ -8,7 +8,7 @@ module Klastera
|
|
8
8
|
KLSTR_HELPERS = %i[
|
9
9
|
cluster_user cluster_organization user_has_more_than_one_cluster
|
10
10
|
cluster_scope cluster_clusters cluster_scope_filtered clusters_from
|
11
|
-
user_clusters_string_list
|
11
|
+
user_clusters_string_list set_collection_before_group_by_entity
|
12
12
|
]
|
13
13
|
|
14
14
|
class << self
|
@@ -36,13 +36,15 @@ module Klastera
|
|
36
36
|
end
|
37
37
|
|
38
38
|
#
|
39
|
-
#
|
39
|
+
# In cases you don't have the active_record_collection object to filter, this method helps you
|
40
|
+
# calling cluster_scope! before and pass the collction to filter_clusterized_collection_with!,
|
41
|
+
# but at the end of the day, I just like to wrap methods.
|
40
42
|
#
|
41
|
-
def cluster_scope_filtered!(scope,cluster_id,user,organization
|
43
|
+
def cluster_scope_filtered!(scope,cluster_id,user,organization)
|
42
44
|
self.filter_clusterized_collection_with!(
|
43
|
-
organization,
|
44
45
|
cluster_id,
|
45
|
-
self.cluster_scope!(user,organization,
|
46
|
+
self.cluster_scope!(scope,user,organization),
|
47
|
+
organization
|
46
48
|
)
|
47
49
|
end
|
48
50
|
|
@@ -50,61 +52,75 @@ module Klastera
|
|
50
52
|
# In order to this works, active_record_collection argument
|
51
53
|
# should be passed through cluster_scope! method before.
|
52
54
|
#
|
53
|
-
def filter_clusterized_collection_with!(
|
55
|
+
def filter_clusterized_collection_with!(cluster_id,active_record_collection,cluster_organization)
|
54
56
|
if cluster_organization.is_in_cluster_mode?
|
57
|
+
|
58
|
+
# IMPORTANT
|
59
|
+
# The next block was commented on because cluster_scope! method is not returning
|
60
|
+
# the cluster_entities within the scope anymore and it doesn't make any sense trying
|
61
|
+
# to filter based on force/use/show logic. Nevertheless, someday we will need it again.
|
62
|
+
|
63
|
+
# # If cluster_id is nil we will try to filter including unclustered entities active_record_collection wsas
|
64
|
+
# unless cluster_id.present?
|
65
|
+
# # Based on force/use/show definition we don't really need this validation. A force cluster organization won't return an entity that
|
66
|
+
# # doesn't belong to a cluster. Nevertheless we don't know if active_record_collection argument is fully definition-compliant.
|
67
|
+
# if cluster_organization.optional_suborganization_mode?
|
68
|
+
# cluster_array << nil
|
69
|
+
# end
|
70
|
+
# end
|
71
|
+
|
55
72
|
if cluster_id.present?
|
56
|
-
cluster_array = [cluster_id]
|
57
|
-
#
|
58
|
-
# A force cluster organization won't return an entity out of a cluster, but
|
59
|
-
# we don't know if the clusterized entities are fully definition-compliant.
|
60
|
-
cluster_array << nil if cluster_organization.optional_suborganization_mode?
|
73
|
+
cluster_array = [cluster_id] unless cluster_id.is_a?(Array)
|
74
|
+
# The ActiveRecordCollection argument should have previously eager-loaded the cluster entities, thus the join statement is unnecessary.
|
61
75
|
active_record_collection = active_record_collection.joins(:cluster_entities).where("cluster_entities.cluster_id": cluster_array)
|
62
76
|
end
|
63
|
-
|
77
|
+
|
78
|
+
# You should use a block with clusterable data only
|
64
79
|
yield(active_record_collection) if block_given?
|
65
80
|
end
|
66
81
|
active_record_collection
|
67
82
|
end
|
68
83
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
84
|
+
##
|
85
|
+
#
|
86
|
+
#
|
87
|
+
##
|
88
|
+
def set_collection_before_group_by_entity!(active_record_collection,entity_params,cluster_organization)
|
73
89
|
entity_params_keys = [:entity_name,:entity_attribute,:entity_id,:entity_id_attribute,:unamed]
|
90
|
+
entity_params[:entity_id] ||= nil #Ensures the entity_id attribute presence even if there is no filter
|
74
91
|
entity_params = entity_params.slice(*entity_params_keys).values
|
75
|
-
|
92
|
+
model_class = active_record_collection.model.base_class
|
93
|
+
model_relations = model_class.reflections.keys
|
94
|
+
if model_relations.include?(entity_params[0])
|
76
95
|
entity_params << "#{entity_params[0]}_id".to_sym
|
77
96
|
if entity_params[0] == 'cluster'
|
78
97
|
entity_params << :unclustered if cluster_organization.is_in_cluster_mode?
|
79
98
|
active_record_collection = Klastera.filter_clusterized_collection_with!(
|
80
|
-
cluster_organization,
|
81
99
|
entity_params[2],
|
82
|
-
active_record_collection
|
100
|
+
active_record_collection,
|
101
|
+
cluster_organization
|
83
102
|
)
|
84
103
|
end
|
85
|
-
yield(
|
86
|
-
active_record_collection,
|
87
|
-
entity_params_keys.zip(entity_params).to_h)
|
104
|
+
yield( active_record_collection, entity_params_keys.zip(entity_params).to_h )
|
88
105
|
end
|
89
106
|
end
|
90
107
|
|
91
108
|
##
|
92
109
|
# Returns a ::Cluster::ActiveRecord_Relation from a given scope
|
93
110
|
#
|
94
|
-
def clusters_from!(user,organization
|
95
|
-
cluster_scope!(user,organization
|
111
|
+
def clusters_from!(scope,user,organization)
|
112
|
+
cluster_scope!(scope,user,organization).related_clusters
|
96
113
|
end
|
97
114
|
|
98
115
|
##
|
99
116
|
# Returns a scope filtered by clusters or its
|
100
117
|
# organization if the cluster mode is not active.
|
101
118
|
#
|
102
|
-
def cluster_scope!(user,organization
|
119
|
+
def cluster_scope!(scope,user,organization)
|
103
120
|
scope_klass = scope_class(scope).where(organization_id: organization)
|
104
121
|
session_clusters(user,organization) do |clusters|
|
105
122
|
if organization.is_in_cluster_mode?
|
106
123
|
scope_klass = scope_klass.select("DISTINCT ON (#{scope.table_name}.id) #{scope.table_name}.id, #{scope.table_name}.*")
|
107
|
-
scope_klass = scope_klass.includes(includes) if includes.present?
|
108
124
|
cluster_ids = clusters.map(&:id)
|
109
125
|
if organization.required_suborganization_mode?
|
110
126
|
scope_klass = scope_klass.joins(:cluster_entities).where( cluster_entities: { cluster_id: cluster_ids } )
|
@@ -117,7 +133,7 @@ module Klastera
|
|
117
133
|
").where("cluster_entities.id IS NULL#{or_these_cluster_ids}")
|
118
134
|
end
|
119
135
|
# Provisional fix to avoid SQL clashes due to DISTINCT ON clause
|
120
|
-
scope_klass = scope_class(scope).
|
136
|
+
scope_klass = scope_class(scope).eager_load(:cluster_entities).where(id: scope_klass.map(&:id), organization_id: organization)
|
121
137
|
end
|
122
138
|
end
|
123
139
|
scope_klass
|
@@ -210,26 +226,29 @@ module Klastera
|
|
210
226
|
[ :cluster_id ].concat( ::ClusterFilter.attributes )
|
211
227
|
end
|
212
228
|
|
213
|
-
def
|
214
|
-
Klastera.
|
229
|
+
def filter_clusterized_collection_with(cluster_id,active_record_collection)
|
230
|
+
Klastera.filter_clusterized_collection_with!(cluster_id,active_record_collection,cluster_organization)
|
231
|
+
end
|
232
|
+
|
233
|
+
def cluster_scope(scope)
|
234
|
+
Klastera.cluster_scope!(scope,cluster_user,cluster_organization)
|
215
235
|
end
|
216
236
|
|
217
237
|
def cluster_clusters
|
218
238
|
Klastera.session_clusters(cluster_user,cluster_organization)
|
219
239
|
end
|
220
240
|
|
221
|
-
def cluster_scope_filtered(scope,cluster_id
|
241
|
+
def cluster_scope_filtered(scope,cluster_id)
|
222
242
|
Klastera.cluster_scope_filtered!(
|
223
243
|
scope,
|
224
244
|
cluster_id,
|
225
245
|
cluster_user,
|
226
|
-
cluster_organization
|
227
|
-
includes
|
246
|
+
cluster_organization
|
228
247
|
)
|
229
248
|
end
|
230
249
|
|
231
|
-
def clusters_from(scope
|
232
|
-
Klastera.clusters_from!(cluster_user,cluster_organization
|
250
|
+
def clusters_from(scope)
|
251
|
+
Klastera.clusters_from!(scope,cluster_user,cluster_organization)
|
233
252
|
end
|
234
253
|
|
235
254
|
def user_clusters_string_list(object_entity,separator,attribute=:name)
|
@@ -242,6 +261,10 @@ module Klastera
|
|
242
261
|
)
|
243
262
|
end
|
244
263
|
|
264
|
+
def set_collection_before_group_by_entity(active_record_collection,entity_params,&block)
|
265
|
+
Klastera.set_collection_before_group_by_entity!(active_record_collection,params,cluster_organization,&block)
|
266
|
+
end
|
267
|
+
|
245
268
|
included do
|
246
269
|
Klastera::KLSTR_HELPERS.each do |action|
|
247
270
|
if respond_to?(:helper_method)
|
data/lib/klastera/version.rb
CHANGED
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.2.4.
|
4
|
+
version: 1.2.4.2
|
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-06-
|
11
|
+
date: 2020-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|