klastera 1.0.1 → 1.1.0

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: 280e925c5270bc97994f02d9a01833a0145faf0a23e7f6d4997d894917e72a6d
4
- data.tar.gz: 4f59e0354a9f828f76fe0f07b35fe6edaff61cb5eccd58d910c13044aa776533
3
+ metadata.gz: 12536c20cf2d30bd60e704036cd40ffc688caee158a0802fa39713e6e46c4c49
4
+ data.tar.gz: 5b945c20beba1467597764507a6aaa373287c3c50663fa0d115f92d4d310d47b
5
5
  SHA512:
6
- metadata.gz: 8a06f21fd4e70f4adc24e70aea484c2edf61b4263f6b197da3baeb18409e702caba181212e70876e1138b6bbc22562cb05bd793844d92a6b6dcb70b6a2448159
7
- data.tar.gz: 84abb2005421a9aa81acfd33a5f96fe5077841c16287fe0434bdbeadd9427b67a2d0632f57c545b0e77821075713e4953e119451acf4af360512673cbddc6d0f
6
+ metadata.gz: 0a6d3198aa48188ad3d7e847070a23bd84876de19f81ddcc34d44ed906ab274f2b678c4228e023bc2294ba36defb49a1518cb057905675ad97a243f7bf5c8b27
7
+ data.tar.gz: 76183a671d08a2eca8885425562a7e93e2196c72f6405984239a28cd872ef53d83f16dd78a3a48b720b2a6ad15a5d72e3912a83928e5099fc0756c2d6c46ce75
@@ -5,12 +5,8 @@ module Klastera
5
5
  before_action :set_xhr_render_session
6
6
  before_action :check_access_to_cluster_admin
7
7
 
8
- def current_organization
9
- super
10
- end
11
-
12
8
  def check_access_to_cluster_admin
13
- unless current_user.can_admin_clusters?
9
+ unless cluster_user.can_admin_clusters?
14
10
  redirect_to main_app.root_path, flash: { alert: t('klastera.messages.access_cluster_admin') }
15
11
  end
16
12
  end
@@ -49,17 +49,13 @@ module Klastera
49
49
  @cluster = ::Cluster.find(params[:id])
50
50
  end
51
51
 
52
- ###
53
- # We are assuming that the main application
54
- # has have implemented current_organization
55
- ###
56
52
  def set_clusters
57
- @clusters = current_organization.clusters
53
+ @clusters = cluster_organization.clusters
58
54
  end
59
55
 
60
56
  def cluster_params
61
57
  parameters = params.require(:cluster).permit(:nid, :name, :color, :order)
62
- parameters[:organization_id]=current_organization.id
58
+ parameters[:organization_id]=cluster_organization.id
63
59
  parameters
64
60
  end
65
61
  end
@@ -0,0 +1,5 @@
1
+ module Klastera
2
+ class ClusterFilter
3
+ include Klastera::Concerns::ClusterFilter
4
+ end
5
+ end
@@ -8,14 +8,14 @@ module Klastera::Concerns::Cluster
8
8
 
9
9
  attr_reader :last_record
10
10
 
11
- MODES = [ :suborganization, :required_filter, :optional_filter ].freeze
11
+ MODES = [ :required_suborganization, :optional_suborganization, :optional_filter ].freeze
12
12
 
13
- default_scope { order(id: :desc) }
14
13
  belongs_to :organization, class_name: Klastera.organization_class
15
14
 
16
- scope :all_clusters_of, lambda { |organization,except_ids=[]|
17
- g=where(organization: organization)
18
- g.where.not(id: except_ids) unless except_ids.blank?
15
+ scope :of, -> (organization,except_ids=[]) {
16
+ _scope = where(organization: organization)
17
+ _scope = _scope.where.not(id: except_ids) unless except_ids.blank?
18
+ _scope
19
19
  }
20
20
 
21
21
  validates :name, presence: true
@@ -29,15 +29,15 @@ module Klastera::Concerns::Cluster
29
29
  end
30
30
 
31
31
  def siblings
32
- self.class.all_clusters_of(self.organization,[self.id])
32
+ ::Cluster.of(self.organization,[self.id])
33
33
  end
34
34
 
35
- def is_the_last_record_in_suborganization_mode?
36
- self.organization.suborganization_mode? && self.siblings.blank?
35
+ def is_the_last_record_in_required_suborganization_mode?
36
+ self.organization.required_suborganization_mode? && self.siblings.blank?
37
37
  end
38
38
 
39
39
  def required_transfer?
40
- self.organization.suborganization_mode?
40
+ self.organization.required_suborganization_mode?
41
41
  end
42
42
 
43
43
  def has_related_entities_using_it?
@@ -46,8 +46,8 @@ module Klastera::Concerns::Cluster
46
46
 
47
47
  def can_transfer_and_destroy?
48
48
  can_destroy = true
49
- if is_the_last_record_in_suborganization_mode?
50
- errors.add(:last_record, I18n.t('klastera.messages.cant_delete_the_last_record_in_suborganization_mode'))
49
+ if is_the_last_record_in_required_suborganization_mode?
50
+ errors.add(:last_record, I18n.t('klastera.messages.cant_delete_the_last_record_in_required_suborganization_mode'))
51
51
  can_destroy = false
52
52
  end
53
53
  can_destroy
@@ -0,0 +1,21 @@
1
+ module Klastera::Concerns::ClusterFilter
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ include ActiveModel::Model
6
+ include ActiveModel::Validations::Callbacks
7
+ attr_accessor :cluster_id
8
+ end
9
+
10
+ module ClassMethods
11
+ def attr_accessor(*vars)
12
+ @attributes ||= []
13
+ @attributes.concat vars
14
+ super(*vars)
15
+ end
16
+
17
+ def attributes
18
+ @attributes
19
+ end
20
+ end
21
+ end
@@ -10,9 +10,9 @@ module Klastera::Concerns::ClusterUser
10
10
  validates :user_id, presence: true
11
11
  validates :cluster_id, presence: true
12
12
 
13
- before_destroy do |record|
14
- end
15
-
13
+ scope :of, -> (user,organization) {
14
+ includes(:cluster).where(user_id: user, "clusters.organization_id": organization)
15
+ }
16
16
  end
17
17
 
18
18
  module ClassMethods
@@ -0,0 +1,14 @@
1
+ module Klastera::Concerns::Clusterizable
2
+ extend ActiveSupport::Concern
3
+ included do
4
+ attr_accessor :lonely_cluster
5
+ belongs_to :cluster
6
+ validates :cluster_id, presence: true, if: proc { self.organization.required_suborganization_mode? }
7
+ end
8
+
9
+ module ClassMethods
10
+ def cluster_params
11
+ [ :cluster_id, :lonely_cluster ]
12
+ end
13
+ end
14
+ end
@@ -21,21 +21,17 @@ module Klastera::Concerns::Organization
21
21
  ( return_the_mode ? ( is_active ? cluster_mode : false ) : is_active )
22
22
  end
23
23
 
24
- def suborganization_mode?
24
+ def required_suborganization_mode?
25
25
  cluster_mode == ::Cluster::MODES.first
26
26
  end
27
27
 
28
- def required_filter_mode?
28
+ def optional_suborganization_mode?
29
29
  cluster_mode == ::Cluster::MODES.second
30
30
  end
31
31
 
32
32
  def optional_filter_mode?
33
33
  cluster_mode == ::Cluster::MODES.third
34
34
  end
35
-
36
- def cluster_is_required?
37
- self.suborganization_mode? || self.required_filter_mode?
38
- end
39
35
  end
40
36
 
41
37
  module ClassMethods
@@ -21,7 +21,7 @@ module Klastera::Concerns::Transfer
21
21
  #
22
22
  # If you see this, please fixe it. Thanks
23
23
  #
24
- if current_cluster.class.name != 'Cluster' || current_cluster.try(:is_the_last_record_in_suborganization_mode?)
24
+ if current_cluster.class.name != 'Cluster' || current_cluster.try(:is_the_last_record_in_required_suborganization_mode?)
25
25
  errors.add(:current_cluster, I18n.t('klastera.messages.current_cluster.cant_transfer'))
26
26
  elsif self.required_transfer? && new_cluster_id.present? && new_cluster.nil?
27
27
  errors.add(:new_cluster_id, I18n.t('klastera.messages.new_cluster_id.nil'))
@@ -3,8 +3,6 @@ module Klastera::Concerns::User
3
3
 
4
4
  included do
5
5
 
6
- ## @@current_organization = nil
7
-
8
6
  CLUSTER_ROOT = 'root'.freeze
9
7
  CLUSTER_ADMIN = 'admin'.freeze
10
8
  CLUSTER_USER = 'user'.freeze
@@ -15,7 +13,7 @@ module Klastera::Concerns::User
15
13
  accepts_nested_attributes_for :cluster_users, reject_if: :all_blank, allow_destroy: true
16
14
  validates :cluster_role, presence: true, if: proc{ self.organization.is_in_cluster_mode? }
17
15
  validates :cluster_role, inclusion: { in: CLUSTER_ROLES , message: I18n.t('klastera.clusters.wrong_option') }, if: proc{ cluster_role.present? }
18
- validate :at_least_one_role, if: proc{ self.use_cluster? && self.need_cluster_assignation? }
16
+ validate :at_least_one_role, if: proc{ self.use_cluster? && self.try(:need_cluster_assignation?) }
19
17
  before_destroy do |record|
20
18
  end
21
19
 
@@ -30,22 +28,15 @@ module Klastera::Concerns::User
30
28
  def is_not_a_cluster_user?; ! self.is_a_cluster_user?; end
31
29
 
32
30
  def need_cluster_assignation?
33
- self.organization.is_in_cluster_mode? && self.organization.suborganization_mode? && self.is_a_cluster_user?
31
+ self.try(:organization).try(:is_in_cluster_mode?) && self.is_a_cluster_user?
34
32
  end
35
33
 
36
34
  def can_admin_clusters?
37
35
  self.organization.is_in_cluster_mode? && ( self.is_a_cluster_admin? || self.is_a_cluster_root? )
38
36
  end
39
37
 
40
- # def __current_organization
41
- # @@current_organization
42
- # end
43
-
44
- # def __current_organization=(organization)
45
- # @@current_organization = organization
46
- # end
47
-
48
38
  private
39
+
49
40
  def at_least_one_role
50
41
  if cluster_users.none?
51
42
  errors.add(:base, I18n.t('klastera.user.you_need_add_at_least_one_cluster'))
@@ -8,9 +8,9 @@
8
8
  <div class="row">
9
9
  <% if can_transfer_and_destroy %>
10
10
  <div class="col-xs-12">
11
- <div class="alert alert-<%=current_organization.suborganization_mode? ? :warning : :info %> text-center">
12
- <i class="fa fa-2x fa-<%=current_organization.suborganization_mode? ? :warning : 'info-circle' %> float-none"></i>
13
- <p class="margin-top-5 fa-1-2x"><%=t("klastera.clusters.transfer.#{current_organization.suborganization_mode? ? :required : :optional}")%></p>
11
+ <div class="alert alert-<%=cluster_organization.required_suborganization_mode? ? :warning : :info %> text-center">
12
+ <i class="fa fa-2x fa-<%=cluster_organization.required_suborganization_mode? ? :warning : 'info-circle' %> float-none"></i>
13
+ <p class="margin-top-5 fa-1-2x"><%=t("klastera.clusters.transfer.#{cluster_organization.required_suborganization_mode? ? :required : :optional}")%></p>
14
14
  </div>
15
15
  </div>
16
16
  <div class="col-xs-12">
@@ -11,7 +11,7 @@
11
11
  </thead>
12
12
  <tbody>
13
13
  <% @clusters.each do |cluster| %>
14
- <tr>
14
+ <tr class="middle-align-rows">
15
15
  <td class="text-center cluster-id"><%= cluster.id %></td>
16
16
  <td class="text-center cluster-order"><%= cluster.order %></td>
17
17
  <td class="text-center cluster-color">
@@ -0,0 +1,23 @@
1
+ <%= simple_form_for(@filter, url: url, remote: true) do |f| %>
2
+
3
+ <div class="inline-buttons-block top">
4
+ <%= button_tag(t('klastera.actions.filter'), class: 'btn btn-primary btn-sm float-right', data: { disable_with: "<i class='fa fa-spinner spin'></i>" }) %>
5
+ </div>
6
+
7
+ <%=yield(f)%>
8
+
9
+ <% if cluster_organization.is_in_cluster_mode? %>
10
+ <% cluster_collection = cluster_clusters %>
11
+ <% if cluster_collection.size > 1 %>
12
+ <div class="inline-label-control-block">
13
+ <%= f.input :cluster_id, collection: cluster_collection, prompt: t('klastera.clusters.all'), label: false, wrapper: false %>
14
+ <label class="control-label"><%=t('klastera.cluster.title')%>:</label>
15
+ </div>
16
+ <% end %>
17
+ <% end %>
18
+
19
+ <div class="inline-buttons-block bottom">
20
+ <%= button_tag(t('klastera.actions.filter'), class: 'btn btn-primary btn-sm float-right', data: { disable_with: "<i class='fa fa-spinner spin'></i>" }) %>
21
+ </div>
22
+
23
+ <% end %>
@@ -1,5 +1,6 @@
1
1
  <% user_cluster_roles = user_cluster_roles.nil? ? User::CLUSTER_ROLES : user_cluster_roles %>
2
- <% if @user.organization.is_in_cluster_mode? %>
2
+ <% other_visibility_reason = other_visibility_reason.nil? ? false : other_visibility_reason %>
3
+ <% if @user.try(:organization).try(:is_in_cluster_mode?) || other_visibility_reason %>
3
4
  <div class="form-group">
4
5
  <%= f.label t('klastera.cluster_role') %>
5
6
  <%= f.select :cluster_role, user_cluster_roles.map{|r|[t("klastera.roles.#{r}"),r]}, { include_blank: true }, { class: 'form-control' } %>
@@ -0,0 +1,23 @@
1
+ <% other_visibility_reason = other_visibility_reason.nil? ? false : other_visibility_reason %>
2
+ <% if cluster_organization.is_in_cluster_mode? || other_visibility_reason %>
3
+ <%
4
+ cluster_collection = cluster_clusters
5
+ label = t('klastera.cluster.id')
6
+ %>
7
+ <% if f.is_a?(SimpleForm::FormBuilder) %>
8
+ <% if cluster_collection.size == 1 %>
9
+ <%= f.input :lonely_cluster, as: :hidden, html_input: { value: true } %>
10
+ <% else %>
11
+ <%= f.input :cluster_id, collection: cluster_collection, label: label %>
12
+ <% end %>
13
+ <% else %>
14
+ <% if cluster_collection.size == 1 %>
15
+ <%= f.hidden_field :lonely_cluster, value: true %>
16
+ <% else %>
17
+ <div class="form-group">
18
+ <%= f.label label %>
19
+ <%= f.select :cluster_id, cluster_collection, { include_blank: true }, { class: 'form-control' } %>
20
+ </div>
21
+ <% end %>
22
+ <% end %>
23
+ <% end %>
@@ -1,6 +1,6 @@
1
1
  <tr class="nested-fields">
2
2
  <td class="field">
3
- <%= f.select :cluster_id, current_organization.clusters.map{|c|[c.name,c.id]}, { include_blank: true }, { class: 'form-control' } %>
3
+ <%= f.select :cluster_id, @user.organization.clusters.map{|c|[c.name,c.id]}, { include_blank: true }, { class: 'form-control' } %>
4
4
  </td>
5
5
  <td class="action vertical-align-middle" width="44">
6
6
  <%= link_to_remove_association f, class: 'btn btn-danger btn-xs text-danger' do %>
@@ -1,4 +1,4 @@
1
- <% if @user.need_cluster_assignation? %>
1
+ <% if @user.try(:need_cluster_assignation?) %>
2
2
  <div class="panel panel-default">
3
3
  <div class="panel-heading">
4
4
  <h4 class="panel-title">
@@ -6,8 +6,8 @@
6
6
  data-toggle="popover"
7
7
  data-content="<%=
8
8
  t('klastera.help.popover.content',
9
- m1:t('klastera.help.suborganization', t: t('klastera.suborganization')),
10
- m2:t('klastera.help.required_filter', t: t('klastera.required_filter'), e: t('klastera.clusters.entities')),
9
+ m1:t('klastera.help.required_suborganization', t: t('klastera.required_suborganization'), e: t('klastera.clusters.entities')),
10
+ m2:t('klastera.help.optional_suborganization', t: t('klastera.optional_suborganization'), e: t('klastera.clusters.entities')),
11
11
  m3:t('klastera.help.optional_filter', t: t('klastera.optional_filter'), e: t('klastera.clusters.entities'))
12
12
  )%>"
13
13
  >
@@ -1,8 +1,11 @@
1
1
  es:
2
2
  klastera:
3
+ cluster:
4
+ title: Cluster
5
+ id: Cluster ID
3
6
  user:
4
7
  add_cluster: Agregar cluster
5
- you_need_add_at_least_one_cluster: Todos los usuarios deben pertenecer a algún cluster, exceptos aquellos con cluster rol de tipo admin
8
+ you_need_add_at_least_one_cluster: Esta organización usa clusters en modo obligatorio. Asigne un cluster al usuario por favor.
6
9
  assign_cluster_role: Asignar role
7
10
  cluster_root_asignation:
8
11
  title: Asignación Routing Super Admin
@@ -20,10 +23,11 @@ es:
20
23
  cluster_color: Color
21
24
  organization_name: Organización
22
25
  use_cluster_as: Activar y usar cluster como
23
- suborganization: Sub-organización
24
- required_filter: Filtro obligatorio
26
+ required_suborganization: Sub-organización Obligatorio
27
+ optional_suborganization: Sub-organización Opcional
25
28
  optional_filter: Filtro opcional
26
29
  clusters:
30
+ all: Todos
27
31
  title: Clusters
28
32
  siblings: Seleccione un cluster
29
33
  cant_delete: No se puede eliminar
@@ -42,6 +46,7 @@ es:
42
46
  required: Para eliminar el Cluster es necesario asignar las entidades asociadas a un nuevo Cluster
43
47
  optional: Entidades asociadas al Cluster pueden quedar sin asignar o ser asignadas a un nuevo Cluster
44
48
  actions:
49
+ filter: Filtrar
45
50
  cancel: Cancelar
46
51
  add: Agregar
47
52
  delete: Eliminar
@@ -52,7 +57,7 @@ es:
52
57
  updated: Actualizado
53
58
  messages:
54
59
  record_action_successfully: Registro %{a} exitosamente
55
- cant_delete_the_last_record_in_suborganization_mode: No se puede eliminar el único cluster de esta organización
60
+ cant_delete_the_last_record_in_required_suborganization_mode: No se puede eliminar el único cluster de esta organización
56
61
  new_cluster_id:
57
62
  nil: Cluster no existe
58
63
  same: Cluster no puede ser el mismo
@@ -63,8 +68,8 @@ es:
63
68
  popover:
64
69
  title: Descripción de cada opción
65
70
  content: "<ul class='klastera-option-help'><li>%{m1}</li><li>%{m2}</li><li>%{m3}</li></ul>"
66
- suborganization: "<b>%{t}</b>: Considera los clusters como suborganizaciones."
67
- required_filter: "<b>%{t}</b>: Obliga a definir un cluster en las entidades %{e}."
71
+ required_suborganization: "<b>%{t}</b>: Obliga definir un cluster en las entidades %{e} ."
72
+ optional_suborganization: "<b>%{t}</b>: Permite definir un cluster en las entidades %{e}."
68
73
  optional_filter: "<b>%{t}</b>: Permite definir un cluster en las entidades %{e} de forma opcional."
69
74
  activemodel:
70
75
  attributes:
@@ -2,19 +2,5 @@ class AddClusterOptionsToOrganizations < ActiveRecord::Migration
2
2
  def change
3
3
  add_column :organizations, :use_cluster_as, :string
4
4
  add_index :organizations, :use_cluster_as, using: :btree
5
- #add_column :organizations, :use_cluster_as_suborganization, :boolean, default: false
6
- #add_column :organizations, :use_cluster_as_required_filter, :boolean, default: false
7
- #add_column :organizations, :use_cluster_as_optional_filter, :boolean, default: false
8
- end
9
-
10
- def migrate(direction)
11
- super
12
- if direction == :up
13
- execute <<-SQL
14
- -- COMMENT ON COLUMN "organizations"."use_cluster_as_suborganization" IS 'force_cluster';
15
- -- COMMENT ON COLUMN "organizations"."use_cluster_as_required_filter" IS 'use_cluster';
16
- -- COMMENT ON COLUMN "organizations"."use_cluster_as_optional_filter" IS 'show_cluster';
17
- SQL
18
- end
19
5
  end
20
6
  end
@@ -1,8 +1,8 @@
1
1
  class CreateKlasteraClusterUsers < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :cluster_users do |t|
4
- t.integer :user_id
5
- t.string :cluster_id
4
+ t.integer :user_id, null: false
5
+ t.integer :cluster_id, null: false
6
6
  end
7
7
  add_column :users, :cluster_role, :string
8
8
  end
@@ -1,3 +1,3 @@
1
1
  module Klastera
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/klastera.rb CHANGED
@@ -2,4 +2,114 @@ require "klastera/engine"
2
2
 
3
3
  module Klastera
4
4
  mattr_accessor :organization_class
5
- end
5
+
6
+ class RelatedClusterEntityComplianceError < StandardError; end
7
+ extend ActiveSupport::Concern
8
+
9
+ class << self
10
+ def cluster_scope!(user,organization,scope,includes=[])
11
+ scope_klass = scope_class(scope)
12
+ raise RelatedClusterEntityComplianceError, "attribute cluster_id was not found in #{scope_klass}" unless scope_klass.try(:column_names).try(:include?,'cluster_id')
13
+ scope_klass = scope_klass.includes(includes) if includes.present?
14
+ scope_klass = scope_klass.where(organization_id: organization)
15
+
16
+ session_clusters(user,organization) do |clusters|
17
+ or_without_cluster = organization.required_suborganization_mode? ? "" : " OR cluster_id IS NULL "
18
+ scope_klass = scope_klass.where("cluster_id IN (?)#{or_without_cluster}",clusters.map{|c|c.id})
19
+ end
20
+
21
+ scope_klass
22
+ end
23
+
24
+ ##
25
+ # TODO:
26
+ # Implement a validation to ensure that
27
+ # object is a ActiveRecord::Base class
28
+ #
29
+ ##
30
+ def scope_class(object)
31
+ object
32
+ end
33
+
34
+ ##
35
+ #
36
+ #
37
+ ##
38
+ def session_clusters(user,organization)
39
+ clusters = []
40
+ if organization.is_in_cluster_mode?
41
+ unless user.can_admin_clusters?
42
+ # TODO: return a Cluster::ActiveRecord_Relation and then remove to_a in ::Cluster.of line
43
+ clusters = ::ClusterUser.of(user,organization).map{|cu|cu.cluster}
44
+ else
45
+ # TODO: remove "to_a" after ClusterUser.of result became a Cluster::ActiveRecord_Relation object
46
+ clusters = ::Cluster.of(organization).to_a
47
+ end
48
+ yield(clusters) if block_given?
49
+ end
50
+ clusters
51
+ end
52
+ end
53
+
54
+ included do
55
+ if respond_to?(:helper_method)
56
+ helper_method :cluster_scope
57
+ helper_method :user_cluster
58
+ helper_method :cluster_user
59
+ helper_method :cluster_organization
60
+ helper_method :cluster_clusters
61
+ end
62
+ if respond_to?(:hide_action)
63
+ hide_action :cluster_scope
64
+ hide_action :cluster_scope=
65
+ hide_action :user_cluster
66
+ hide_action :user_cluster=
67
+ hide_action :cluster_user
68
+ hide_action :cluster_user=
69
+ hide_action :cluster_organization
70
+ hide_action :cluster_organization=
71
+ hide_action :cluster_clusters
72
+ hide_action :cluster_clusters=
73
+ end
74
+ before_action :set_the_lonely_cluster, only: %i[ create update ]
75
+ end
76
+
77
+ def set_the_lonely_cluster
78
+ form_model = params[:controller].singularize
79
+ parameters = params.require( form_model ) rescue nil
80
+ lonely_cluster = parameters.blank? ? false : parameters.permit( :lonely_cluster ).present?
81
+ if lonely_cluster
82
+ params[form_model][:cluster_id] = ::ClusterUser.of(cluster_user,cluster_organization).first.try(:cluster_id)
83
+ end
84
+ end
85
+
86
+ def cluster_scope(scope,includes=[])
87
+ Klastera.cluster_scope!(cluster_user,cluster_organization,scope,includes)
88
+ end
89
+
90
+ def cluster_user
91
+ current_user
92
+ end
93
+
94
+ def cluster_organization
95
+ current_organization
96
+ end
97
+
98
+ def cluster_clusters
99
+ Klastera.session_clusters(cluster_user,cluster_organization).map{|c|[c.name,c.id]}
100
+ end
101
+
102
+ def set_cluster_filter
103
+ @filter = ::ClusterFilter.new(cluster_filter_params)
104
+ end
105
+
106
+ def cluster_filter_params
107
+ parameters = params.require(:cluster_filter) rescue nil
108
+ return {} if parameters.blank?
109
+ parameters.permit(*cluster_filter_permit_params)
110
+ end
111
+
112
+ def cluster_filter_permit_params
113
+ [ :cluster_id ].concat( ::ClusterFilter.attributes )
114
+ end
115
+ 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.0.1
4
+ version: 1.1.0
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-03-31 00:00:00.000000000 Z
11
+ date: 2020-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -58,9 +58,12 @@ files:
58
58
  - app/helpers/klastera/application_helper.rb
59
59
  - app/helpers/klastera/clusters_helper.rb
60
60
  - app/models/klastera/cluster.rb
61
+ - app/models/klastera/cluster_filter.rb
61
62
  - app/models/klastera/cluster_user.rb
62
63
  - app/models/klastera/concerns/cluster.rb
64
+ - app/models/klastera/concerns/cluster_filter.rb
63
65
  - app/models/klastera/concerns/cluster_user.rb
66
+ - app/models/klastera/concerns/clusterizable.rb
64
67
  - app/models/klastera/concerns/organization.rb
65
68
  - app/models/klastera/concerns/transfer.rb
66
69
  - app/models/klastera/concerns/user.rb
@@ -76,7 +79,9 @@ files:
76
79
  - app/views/klastera/clusters/new.html.erb
77
80
  - app/views/klastera/clusters/transfer.html.erb
78
81
  - app/views/klastera/clusters/update.js.erb
82
+ - app/views/layouts/klastera/_cluster_filter.html.erb
79
83
  - app/views/layouts/klastera/_cluster_role.html.erb
84
+ - app/views/layouts/klastera/_cluster_selector.html.erb
80
85
  - app/views/layouts/klastera/_cluster_user_fields.html.erb
81
86
  - app/views/layouts/klastera/_nested_cluster_user.html.erb
82
87
  - app/views/layouts/klastera/_options.html.erb