lato_spaces 3.1.23 → 3.2.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: 962be7a6c98c4e07eb3b02e4e4c7747de019863f60ef35246855a0db34d25475
4
- data.tar.gz: b6196760168336ebf3817fb12977b0b44f1ea7aae546ae46b7cbd52c8ad2e231
3
+ metadata.gz: 3444a3028e399641c312a023bf6ac4ac02815747ed0bb6185a07120800a6d4ee
4
+ data.tar.gz: e29d329206491723e51c31ce8a97a73b9c7d5410fa2653bbf12a576f605f6327
5
5
  SHA512:
6
- metadata.gz: e8e60a1a44ec88200bf32f67b0b32877777e8fbabcfd664021ae473170d0d5673a3ac6dbe49777e71fa288b24f61f02b77228020479118c92de17318d47752fa
7
- data.tar.gz: 4f568b5532fce79862f4161a03cc02cd9f86f5d8b9bc7b2b872cd0633eb53fcbb2402d7946b4660cc73b4af89d4d11d1f95f223103116aa5bc00c3b56b13b01f
6
+ metadata.gz: 9f51a50f75322d535d2bae852ad86554069ca4c2f292cc6a750b69eb93082bfd07c6af2a9f4c72466372827338c79ab3803cdd119961ff35763c1e96291b2ad8
7
+ data.tar.gz: def89bea0b5460d7109c9e07fdc362fc220ae2b2b54e1ca43bfa56c81b4c6e31e7428754995913453b3bdbaf2b7981ae2594faf09bfbd955f98b2f35ee3eaea2
data/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  # Lato Spaces
2
2
  Integrate different workspaces on Lato projects.
3
3
 
4
+ Group selection requires a current membership. Every request protected by `authenticate_group` rechecks access and clears revoked selections. Users with `lato_spaces_admin` can select and manage all groups. When non-admin management is enabled, membership deletion and invitation resends are restricted to their own groups.
5
+
4
6
  ## Installation
7
+
8
+ Requires Rails 8.1.3.1 or newer in the 8.1 series and Lato 3.25.0 or newer. Existing applications must install the new Lato session migration before deployment; previous sessions are invalidated.
5
9
  Add required dependencies to your application's Gemfile:
6
10
 
7
11
  ```ruby
data/Rakefile CHANGED
@@ -3,6 +3,4 @@ require "bundler/setup"
3
3
  APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
4
  load "rails/tasks/engine.rake"
5
5
 
6
- load "rails/tasks/statistics.rake"
7
-
8
6
  require "bundler/gem_tasks"
@@ -2,7 +2,9 @@ module LatoSpaces::Groupable
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  def authenticate_group
5
- if @session.get(:spaces_group_id).blank?
5
+ group_id = @session.get(:spaces_group_id)
6
+ unless group_id.present? && accessible_spaces_groups.exists?(id: group_id)
7
+ session_group_destroy if group_id.present?
6
8
  redirect_to lato_spaces.root_path
7
9
  return false
8
10
  end
@@ -11,16 +13,22 @@ module LatoSpaces::Groupable
11
13
  end
12
14
 
13
15
  def session_group_create(group_id)
14
- cookies.encrypted[:lato_session] = { value: Lato::Session.generate_session_per_user(@session.user_id, spaces_group_id: group_id), expires: Lato.config.session_lifetime.from_now }
15
- @session = Lato::Session.new(cookies.encrypted[:lato_session])
16
+ group = accessible_spaces_groups.find_by(id: group_id)
17
+ return false unless group
16
18
 
17
- true
19
+ session_update(spaces_group_id: group.id)
18
20
  end
19
21
 
20
22
  def session_group_destroy
21
- cookies.encrypted[:lato_session] = { value: Lato::Session.generate_session_per_user(@session.user_id), expires: Lato.config.session_lifetime.from_now }
22
- @session = Lato::Session.new(cookies.encrypted[:lato_session])
23
+ session_update(spaces_group_id: nil)
24
+ end
23
25
 
24
- true
26
+ private
27
+
28
+ def accessible_spaces_groups
29
+ return LatoSpaces::Group.none unless @session.really_valid?
30
+ return LatoSpaces::Group.all if @session.user.lato_spaces_admin
31
+
32
+ LatoSpaces::Group.where(id: LatoSpaces::Membership.where(lato_user_id: @session.user_id).select(:lato_spaces_group_id))
25
33
  end
26
34
  end
@@ -96,9 +96,7 @@ module LatoSpaces
96
96
  end
97
97
 
98
98
  def find_group
99
- query = LatoSpaces::Group.all
100
- query = query.joins(:lato_spaces_memberships).where(lato_spaces_memberships: { lato_user_id: @session.user_id }) unless @session.user.lato_spaces_admin
101
- @group = query.find(params[:id])
99
+ @group = accessible_spaces_groups.find(params[:id])
102
100
  end
103
101
  end
104
- end
102
+ end
@@ -56,13 +56,11 @@ module LatoSpaces
56
56
  end
57
57
 
58
58
  def find_group
59
- query = LatoSpaces::Group.all
60
- query = query.joins(:lato_spaces_memberships).where(lato_spaces_memberships: { lato_user_id: @session.user_id }) unless @session.user.lato_spaces_admin
61
- @group = query.find(params[:group_id])
59
+ @group = accessible_spaces_groups.find(params[:group_id])
62
60
  end
63
61
 
64
62
  def find_membership
65
- @membership = LatoSpaces::Membership.find(params[:id])
63
+ @membership = LatoSpaces::Membership.where(lato_spaces_group_id: accessible_spaces_groups.select(:id)).find(params[:id])
66
64
  end
67
65
  end
68
- end
66
+ end
@@ -3,35 +3,49 @@
3
3
  <% end %>
4
4
 
5
5
  <%= turbo_frame_tag 'index' do %>
6
- <div class="row">
7
- <% @groups.each do |group| %>
8
- <% is_selected = @session.get(:spaces_group_id)&.to_i == group.id %>
9
- <% is_preferred = @memberships.find { |m| m.lato_spaces_group_id == group.id }&.preferred %>
6
+ <%
7
+
8
+ groups = @groups.map do |group|
9
+ is_selected = @session.get(:spaces_group_id)&.to_i == group.id
10
+ is_preferred = @memberships.find { |m| m.lato_spaces_group_id == group.id }&.preferred
11
+
12
+ {
13
+ id: group.id,
14
+ name: group.name,
15
+ is_selected: is_selected,
16
+ is_preferred: is_preferred
17
+ }
18
+ end
10
19
 
20
+ groups = groups.sort_by { |g| [g[:is_preferred] ? 0 : 1, g[:name].downcase] }
21
+ %>
22
+
23
+ <div class="row">
24
+ <% groups.each do |group| %>
11
25
  <div class="col col-12 col-lg-6 col-lg-4 col-xl-3 mb-3">
12
- <div class="card h-100 border border-4 position-relative <%= is_selected ? 'border-success' : 'border-light' %>">
13
- <%= link_to lato_spaces.setgroup_path(group), class: "position-absolute top-0 left-0 w-100 h-100", data: { turbo_method: :post } do %><% end %>
26
+ <div class="card h-100 border border-4 position-relative <%= group[:is_selected] ? 'border-success' : 'border-light' %>">
27
+ <%= link_to lato_spaces.setgroup_path(group[:id]), class: "position-absolute top-0 left-0 w-100 h-100", data: { turbo_method: :post } do %><% end %>
14
28
  <div class="card-body">
15
29
  <div class="d-flex align-items-center justify-content-between d-lg-block">
16
30
  <div class="d-flex align-items-center d-lg-block text-center">
17
31
  <i class="<%= LatoSpaces.config.group_icon %> fs-1 me-2 me-lg-0"></i><br>
18
- <span class="fw-bold"><%= group.name %></span>
32
+ <span class="fw-bold"><%= group[:name] %></span>
19
33
  </div>
20
34
  <div class="d-flex justify-content-center align-items-center mt-lg-2 position-relative">
21
35
  <% if @session.user.lato_spaces_admin || LatoSpaces.config.permit_group_management %>
22
- <%= link_to lato_spaces.groups_show_path(group), class: "btn btn-light me-1", data: { turbo_frame: '_top' } do %>
36
+ <%= link_to lato_spaces.groups_show_path(group[:id]), class: "btn btn-light me-1", data: { turbo_frame: '_top' } do %>
23
37
  <i class="bi bi-gear"></i>
24
38
  <% end %>
25
39
  <% end %>
26
40
 
27
41
  <% if LatoSpaces.config.permit_group_preferred %>
28
- <%= link_to lato_spaces.setpreferred_path(group), class: "btn btn-#{is_preferred ? 'warning' : 'light'} ms-1 me-1", data: { turbo_method: :post } do %>
29
- <i class="bi bi-star<%= is_preferred ? '-fill' : '' %>"></i>
42
+ <%= link_to lato_spaces.setpreferred_path(group[:id]), class: "btn btn-#{group[:is_preferred] ? 'warning' : 'light'} ms-1 me-1", data: { turbo_method: :post } do %>
43
+ <i class="bi bi-star<%= group[:is_preferred] ? '-fill' : '' %>"></i>
30
44
  <% end %>
31
45
  <% end %>
32
46
 
33
- <%= link_to lato_spaces.setgroup_path(group), class: "btn btn-#{is_selected ? 'success' : 'primary'} ms-1", data: { turbo_method: :post } do %>
34
- <i class="bi bi-check-circle<%= is_selected ? '-fill' : '' %>"></i>
47
+ <%= link_to lato_spaces.setgroup_path(group[:id]), class: "btn btn-#{group[:is_selected] ? 'success' : 'primary'} ms-1", data: { turbo_method: :post } do %>
48
+ <i class="bi bi-check-circle<%= group[:is_selected] ? '-fill' : '' %>"></i>
35
49
  <% end %>
36
50
  </div>
37
51
  </div>
@@ -1,3 +1,3 @@
1
1
  module LatoSpaces
2
- VERSION = "3.1.23"
2
+ VERSION = "3.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lato_spaces
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.23
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregorio Galante
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-11-16 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rails
@@ -16,28 +15,34 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: 7.1.1
18
+ version: 8.1.3.1
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '8.2'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
26
  - - ">="
25
27
  - !ruby/object:Gem::Version
26
- version: 7.1.1
28
+ version: 8.1.3.1
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '8.2'
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: lato
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
36
  - - ">="
32
37
  - !ruby/object:Gem::Version
33
- version: '0'
38
+ version: 3.25.0
34
39
  type: :runtime
35
40
  prerelease: false
36
41
  version_requirements: !ruby/object:Gem::Requirement
37
42
  requirements:
38
43
  - - ">="
39
44
  - !ruby/object:Gem::Version
40
- version: '0'
45
+ version: 3.25.0
41
46
  description: A Rails engine to integrate different workspaces on Lato projects!
42
47
  email:
43
48
  - me@gregoriogalante.com
@@ -98,7 +103,6 @@ licenses:
98
103
  metadata:
99
104
  homepage_uri: https://github.com/Lato-org/lato_spaces
100
105
  source_code_uri: https://github.com/Lato-org/lato_spaces
101
- post_install_message:
102
106
  rdoc_options: []
103
107
  require_paths:
104
108
  - lib
@@ -113,8 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
117
  - !ruby/object:Gem::Version
114
118
  version: '0'
115
119
  requirements: []
116
- rubygems_version: 3.4.1
117
- signing_key:
120
+ rubygems_version: 4.0.9
118
121
  specification_version: 4
119
122
  summary: Another engine for Lato projects
120
123
  test_files: []