klastera 1.5.5.1 → 1.5.5.3
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 +4 -4
- data/MIT-LICENSE +0 -0
- data/README.rdoc +0 -0
- data/Rakefile +0 -0
- data/app/assets/javascripts/klastera/application.js +0 -0
- data/app/assets/javascripts/klastera/clusters.js +0 -0
- data/app/assets/stylesheets/klastera/clusters.scss +0 -0
- data/app/controllers/klastera/application_controller.rb +0 -0
- data/app/controllers/klastera/clusters_controller.rb +0 -0
- data/app/helpers/klastera/application_helper.rb +0 -0
- data/app/models/klastera/cluster.rb +0 -0
- data/app/models/klastera/cluster_entity.rb +0 -0
- data/app/models/klastera/cluster_filter.rb +0 -0
- data/app/models/klastera/cluster_user.rb +0 -0
- data/app/models/klastera/concerns/cluster.rb +0 -0
- data/app/models/klastera/concerns/cluster_entity.rb +0 -0
- data/app/models/klastera/concerns/cluster_filter.rb +0 -0
- data/app/models/klastera/concerns/cluster_user.rb +0 -0
- data/app/models/klastera/concerns/clusterizable.rb +8 -2
- data/app/models/klastera/concerns/organization.rb +0 -0
- data/app/models/klastera/concerns/transfer.rb +0 -0
- data/app/models/klastera/concerns/user.rb +0 -0
- data/app/models/klastera/transfer.rb +0 -0
- data/app/views/klastera/clusters/_filter.html.erb +0 -0
- data/app/views/klastera/clusters/_form.html.erb +0 -0
- data/app/views/klastera/clusters/_form_transfer.html.erb +0 -0
- data/app/views/klastera/clusters/_table.html.erb +0 -0
- data/app/views/klastera/clusters/create.js.erb +0 -0
- data/app/views/klastera/clusters/destroy.js.erb +0 -0
- data/app/views/klastera/clusters/edit.html.erb +0 -0
- data/app/views/klastera/clusters/index.html.erb +0 -0
- data/app/views/klastera/clusters/new.html.erb +0 -0
- data/app/views/klastera/clusters/transfer.html.erb +0 -0
- data/app/views/klastera/clusters/update.js.erb +0 -0
- data/app/views/layouts/klastera/_cluster_entity_fields.html.erb +0 -0
- data/app/views/layouts/klastera/_cluster_filter.html.erb +0 -0
- data/app/views/layouts/klastera/_cluster_role.html.erb +0 -0
- data/app/views/layouts/klastera/_cluster_selector.html.erb +0 -0
- data/app/views/layouts/klastera/_cluster_user_fields.html.erb +0 -0
- data/app/views/layouts/klastera/_nested_cluster_entity.html.erb +0 -0
- data/app/views/layouts/klastera/_nested_cluster_user.html.erb +0 -0
- data/app/views/layouts/klastera/_options.html.erb +0 -0
- data/config/locales/es.yml +0 -0
- data/config/routes.rb +0 -0
- data/db/migrate/20200324203929_create_klastera_clusters.rb +0 -0
- data/db/migrate/20200326111219_add_cluster_options_to_organizations.rb +0 -0
- data/db/migrate/20200330010551_create_klastera_cluster_users.rb +0 -0
- data/db/migrate/20200330221601_add_order_field_to_clusters.rb +0 -0
- data/db/migrate/20200518142609_create_klastera_cluster_entities.rb +0 -0
- data/db/migrate/20200908180057_add_cluster_config_to_organization.rb +0 -0
- data/db/migrate/20220602222332_add_unique_index_to_cluster_entities.rb +0 -0
- data/lib/klastera/engine.rb +0 -0
- data/lib/klastera/version.rb +1 -1
- data/lib/klastera.rb +0 -0
- data/lib/tasks/klastera_tasks.rake +0 -0
- data/test/controllers/klastera/clusters_controller_test.rb +0 -0
- data/test/fixtures/klastera/cluster_users.yml +0 -0
- data/test/fixtures/klastera/clusters.yml +0 -0
- data/test/integration/navigation_test.rb +0 -0
- data/test/klastera_test.rb +0 -0
- data/test/models/klastera/cluster_test.rb +0 -0
- data/test/models/klastera/cluster_user_test.rb +0 -0
- data/test/models/klastera/clusterizable_nested_attributes_test.rb +64 -0
- data/test/test_helper.rb +0 -0
- metadata +10 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1b7a266fca197bb8333a1bfa72e2a36b2bdec447429a1e50e95b5b89dc31fb5f
|
|
4
|
+
data.tar.gz: fd8ec6949e6fea5015fe33090ecf09a90e9815361d8e861fb42ac856e83ff111
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 29ed3030a1296a3fb95073255642e9bef489fea5d136291d8d6f8e71f5b2b6f8ab040034e56c5dc66e70d09451d1880290fedfbbc904ac105ec7dc58ae4810f8
|
|
7
|
+
data.tar.gz: 7bc4e57bdac9abc5cf68be34bc64c48dbce81f6db405485e4dca1e6a8079e1d97e28630e159fb5049158a5d0f280fd000849b89e0cf6dfdc87f2a56bd4ae4e6b
|
data/MIT-LICENSE
CHANGED
|
File without changes
|
data/README.rdoc
CHANGED
|
File without changes
|
data/Rakefile
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -7,7 +7,11 @@ module Klastera::Concerns::Clusterizable
|
|
|
7
7
|
belongs_to :cluster
|
|
8
8
|
|
|
9
9
|
has_many :cluster_entities, as: :entity, class_name: "Klastera::ClusterEntity"
|
|
10
|
-
|
|
10
|
+
# reject_if exige cluster_id presente. Con :all_blank, una fila EXISTENTE (con id) cuyo select
|
|
11
|
+
# se deja en blanco (include_blank del formulario) no se descarta y se guarda con cluster_id=NULL:
|
|
12
|
+
# queda un cluster_entity huérfano, invisible en el formulario, que cuenta en las validaciones y
|
|
13
|
+
# bloquea el guardado. Para quitar una zona existente se usa _destroy, no vaciar el select.
|
|
14
|
+
accepts_nested_attributes_for :cluster_entities, reject_if: ->(attrs) { attrs[:cluster_id].blank? }, allow_destroy: true
|
|
11
15
|
|
|
12
16
|
validates :cluster_id, presence: true, if: -> { cluster_id.present? && organization.present? && organization.required_suborganization_mode? }
|
|
13
17
|
validate :at_least_one_cluster_entity, if: -> { organization.present? && organization.required_suborganization_mode? }
|
|
@@ -50,8 +54,10 @@ module Klastera::Concerns::Clusterizable
|
|
|
50
54
|
)
|
|
51
55
|
end
|
|
52
56
|
|
|
57
|
+
# No cuenta las filas marcadas para destruir: quitar una zona con el basurero y agregar otra en
|
|
58
|
+
# el mismo guardado deja una sola zona al final, y no debe rechazarse.
|
|
53
59
|
def has_one_cluster_entity
|
|
54
|
-
if cluster_entities.length > 1
|
|
60
|
+
if cluster_entities.reject(&:marked_for_destruction?).length > 1
|
|
55
61
|
return errors.add(:cluster_entities, I18n.t('klastera.messages.has_one_cluster_entity'))
|
|
56
62
|
end
|
|
57
63
|
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/config/locales/es.yml
CHANGED
|
File without changes
|
data/config/routes.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/klastera/engine.rb
CHANGED
|
File without changes
|
data/lib/klastera/version.rb
CHANGED
data/lib/klastera.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/test/klastera_test.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
# Estos tests no corren dentro de este repo: no existe test/dummy y usan modelos de Llegando
|
|
4
|
+
# (Profile, Organization, ::Cluster). Para correrlos hay que copiarlos a llegando-neo con la gema
|
|
5
|
+
# apuntando a esta rama.
|
|
6
|
+
#
|
|
7
|
+
# El test que prueba el fix es "no vacia el cluster_id de una fila existente": con :all_blank
|
|
8
|
+
# falla (la fila queda con cluster_id NULL). Los otros dos pasan igual en main y protegen que
|
|
9
|
+
# el cambio no rompa el descarte de filas nuevas vacias ni agregar/destruir zonas.
|
|
10
|
+
module Klastera
|
|
11
|
+
class ClusterizableNestedAttributesTest < ActiveSupport::TestCase
|
|
12
|
+
def build_entity_with_cluster
|
|
13
|
+
entity = Profile.create!(organization: Organization.first, nid: SecureRandom.hex(4))
|
|
14
|
+
cluster = ::Cluster.create!(organization: entity.organization, name: "c-#{SecureRandom.hex(2)}")
|
|
15
|
+
ce = Klastera::ClusterEntity.create!(entity: entity, cluster_id: cluster.id)
|
|
16
|
+
[entity.reload, ce, cluster]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test "descarta una fila nueva con cluster_id vacio" do
|
|
20
|
+
entity, = build_entity_with_cluster
|
|
21
|
+
entity.assign_attributes(cluster_entities_attributes: { "0" => { "cluster_id" => "", "_destroy" => "false" } })
|
|
22
|
+
assert_equal 1, entity.cluster_entities.size
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "no vacia el cluster_id de una fila existente" do
|
|
26
|
+
entity, ce, cluster = build_entity_with_cluster
|
|
27
|
+
entity.assign_attributes(cluster_entities_attributes: { "0" => { "id" => ce.id, "cluster_id" => "", "_destroy" => "false" } })
|
|
28
|
+
entity.save!
|
|
29
|
+
assert_equal cluster.id, ce.reload.cluster_id
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
test "sigue permitiendo agregar y destruir zonas" do
|
|
33
|
+
entity, ce, = build_entity_with_cluster
|
|
34
|
+
otro = ::Cluster.create!(organization: entity.organization, name: "otro")
|
|
35
|
+
entity.assign_attributes(cluster_entities_attributes: {
|
|
36
|
+
"0" => { "id" => ce.id, "_destroy" => "1" },
|
|
37
|
+
"1" => { "cluster_id" => otro.id.to_s, "_destroy" => "false" }
|
|
38
|
+
})
|
|
39
|
+
assert entity.cluster_entities.any?(&:marked_for_destruction?)
|
|
40
|
+
assert entity.cluster_entities.any? { |c| c.new_record? && c.cluster_id == otro.id }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Entidad que permite una sola zona (por defecto): quitar una y agregar otra en el mismo guardado
|
|
44
|
+
# deja una sola, y la validacion no debe contar la fila marcada para destruir.
|
|
45
|
+
test "acepta quitar una zona y agregar otra en el mismo guardado" do
|
|
46
|
+
entity, ce, = build_entity_with_cluster
|
|
47
|
+
otro = ::Cluster.create!(organization: entity.organization, name: "otro-#{SecureRandom.hex(2)}")
|
|
48
|
+
entity.assign_attributes(cluster_entities_attributes: {
|
|
49
|
+
"0" => { "id" => ce.id, "_destroy" => "1" },
|
|
50
|
+
"1" => { "cluster_id" => otro.id.to_s, "_destroy" => "false" }
|
|
51
|
+
})
|
|
52
|
+
entity.valid?
|
|
53
|
+
assert_not entity.errors[:cluster_entities].any? { |m| m == I18n.t('klastera.messages.has_one_cluster_entity') }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
test "sigue rechazando dos zonas vigentes en una entidad de una sola zona" do
|
|
57
|
+
entity, _ce, = build_entity_with_cluster
|
|
58
|
+
otro = ::Cluster.create!(organization: entity.organization, name: "otro2-#{SecureRandom.hex(2)}")
|
|
59
|
+
entity.assign_attributes(cluster_entities_attributes: { "1" => { "cluster_id" => otro.id.to_s, "_destroy" => "false" } })
|
|
60
|
+
entity.valid?
|
|
61
|
+
assert entity.errors[:cluster_entities].any?
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
data/test/test_helper.rb
CHANGED
|
File without changes
|
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.5.
|
|
4
|
+
version: 1.5.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:
|
|
11
|
+
date: 2026-11-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -108,6 +108,7 @@ files:
|
|
|
108
108
|
- test/klastera_test.rb
|
|
109
109
|
- test/models/klastera/cluster_test.rb
|
|
110
110
|
- test/models/klastera/cluster_user_test.rb
|
|
111
|
+
- test/models/klastera/clusterizable_nested_attributes_test.rb
|
|
111
112
|
- test/test_helper.rb
|
|
112
113
|
homepage: https://github.com/ginosx/klastera
|
|
113
114
|
licenses:
|
|
@@ -128,16 +129,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
128
129
|
- !ruby/object:Gem::Version
|
|
129
130
|
version: '0'
|
|
130
131
|
requirements: []
|
|
131
|
-
rubygems_version: 3.
|
|
132
|
+
rubygems_version: 3.1.6
|
|
132
133
|
signing_key:
|
|
133
134
|
specification_version: 4
|
|
134
135
|
summary: Clusterization Engine
|
|
135
136
|
test_files:
|
|
136
|
-
- test/controllers/klastera/clusters_controller_test.rb
|
|
137
|
-
- test/fixtures/klastera/cluster_users.yml
|
|
138
|
-
- test/fixtures/klastera/clusters.yml
|
|
139
137
|
- test/integration/navigation_test.rb
|
|
140
|
-
- test/
|
|
141
|
-
- test/models/klastera/cluster_test.rb
|
|
138
|
+
- test/models/klastera/clusterizable_nested_attributes_test.rb
|
|
142
139
|
- test/models/klastera/cluster_user_test.rb
|
|
140
|
+
- test/models/klastera/cluster_test.rb
|
|
141
|
+
- test/klastera_test.rb
|
|
142
|
+
- test/fixtures/klastera/clusters.yml
|
|
143
|
+
- test/fixtures/klastera/cluster_users.yml
|
|
143
144
|
- test/test_helper.rb
|
|
145
|
+
- test/controllers/klastera/clusters_controller_test.rb
|