mensa 0.1.13 → 0.1.14

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: d241173fd2c405deaa9f1f04016026486383fe40cb87e7e1151014791424fb63
4
- data.tar.gz: 0bf71f0777403f5aad311c1217b4509bd2fbe0f70e9e29446ff3899950d6d249
3
+ metadata.gz: da50e030f24e6c7e64770478ffd598ca0b8be05620336d3b9bf8771f2b21d421
4
+ data.tar.gz: 79b64d284100efce11449c1901d5d1451095255eb9eb77c2e187fb20d1ce1f6d
5
5
  SHA512:
6
- metadata.gz: 2ed7f0c69955ac60050e226b8e5ab13ac270a037d30b4119faa211c3ee13a132ef1bc8d30d4133430a26b888e840bfd4e2d683d00a5c8dd5ffaffdf9839fabbe
7
- data.tar.gz: 9f103e8cf817a7f9fdb6a30d92f3331246aab6114fa16187aecc07b75ed33782f41997a3cc0826885d7cd7865794c903a3a3bb15696ba5eb4e596e6c86b73b1c
6
+ metadata.gz: 641ad2ec79f5248734a44d7ead99431a9ebf688772dc3a0e7b7e2ba384af9801da4759dc533e8bebe7303445ec438360735fefd91aeaf011b1e6408d65388300
7
+ data.tar.gz: '0977c07090e1ced8802e9acc874db2e58a68987891375cfa5887154e67bf73ea298566a5254505b8bc6687c4031a0a1ac49d83d69b6b396b51b9eedb39f6cf7d'
@@ -0,0 +1,3 @@
1
+ # Make sure RUBY_VERSION matches the Ruby version in .ruby-version
2
+ ARG RUBY_VERSION=3.4.1
3
+ FROM ghcr.io/rails/devcontainer/images/ruby:$RUBY_VERSION
@@ -0,0 +1,49 @@
1
+ name: "mensa"
2
+
3
+ services:
4
+ rails-app:
5
+ cpu_count: 2
6
+ build:
7
+ context: ..
8
+ dockerfile: .devcontainer/Dockerfile
9
+
10
+ volumes:
11
+ - ../..:/workspaces:cached
12
+ # Overrides default command so things don't shut down after the process ends.
13
+ command: sleep infinity
14
+
15
+ # Uncomment the next line to use a non-root user for all processes.
16
+ # user: vscode
17
+
18
+ # Use "forwardPorts" in **devcontainer.json** to forward an app port locally.
19
+ # (Adding the "ports" property to this file will not forward from a Codespace.)
20
+ depends_on:
21
+ - selenium
22
+ - postgres
23
+ - redis
24
+
25
+ environment:
26
+ - DATABASE_URL=postgres://postgres:postgres@postgres:5432
27
+ - RUBY_YJIT_ENABLE=1
28
+
29
+ selenium:
30
+ image: selenium/standalone-chromium
31
+ restart: unless-stopped
32
+
33
+ redis:
34
+ image: redis:6.2
35
+ restart: unless-stopped
36
+
37
+ postgres:
38
+ image: postgres:17.0
39
+ restart: unless-stopped
40
+ networks:
41
+ - default
42
+ volumes:
43
+ - postgres-data:/var/lib/postgresql/data
44
+ environment:
45
+ POSTGRES_USER: postgres
46
+ POSTGRES_PASSWORD: postgres
47
+
48
+ volumes:
49
+ postgres-data:
@@ -0,0 +1,36 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2
+ // README at: https://github.com/devcontainers/templates/tree/main/src/ruby
3
+ {
4
+ "name": "mensa",
5
+ "dockerComposeFile": "compose.yaml",
6
+ "service": "rails-app",
7
+ "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
8
+ // Features to add to the dev container. More info: https://containers.dev/features.
9
+ "features": {
10
+ "ghcr.io/devcontainers/features/github-cli:1": {},
11
+ "ghcr.io/rails/devcontainer/features/activestorage": {},
12
+ "ghcr.io/rails/devcontainer/features/postgres-client": {
13
+ "version": "17"
14
+ },
15
+ "ghcr.io/devcontainers/features/node:1": {},
16
+ "ghcr.io/duduribeiro/devcontainer-features/tmux:1": {},
17
+ "ghcr.io/devcontainers-extra/features/mkcert:1": {}
18
+ },
19
+ "containerEnv": {
20
+ "CAPYBARA_SERVER_PORT": "45678",
21
+ "SELENIUM_HOST": "selenium",
22
+ "DB_HOST": "postgres"
23
+ },
24
+ "forwardPorts": [
25
+ 3000,
26
+ 5432
27
+ ],
28
+ "customizations": {
29
+ "vscode": {
30
+ "extensions": [
31
+ "Shopify.ruby-lsp"
32
+ ]
33
+ }
34
+ },
35
+ "postCreateCommand": "bin/setup"
36
+ }
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  /.bundle/
2
+ /vendor/bundle/
2
3
  /doc/
3
4
  /log/*.log
4
5
  /pkg/
@@ -9,4 +10,4 @@
9
10
  /test/dummy/storage/
10
11
  /test/dummy/app/assets/builds/
11
12
  /test/dummy/tmp/
12
- /node_modules/
13
+ /node_modules/
data/Gemfile.lock CHANGED
@@ -13,7 +13,7 @@ GIT
13
13
  PATH
14
14
  remote: .
15
15
  specs:
16
- mensa (0.1.0)
16
+ mensa (0.1.12)
17
17
  caxlsx_rails (~> 0)
18
18
  importmap-rails
19
19
  pagy (>= 6)
@@ -119,12 +119,12 @@ GEM
119
119
  rack-test (>= 0.6.3)
120
120
  regexp_parser (>= 1.5, < 3.0)
121
121
  xpath (~> 3.2)
122
- caxlsx (3.4.1)
122
+ caxlsx (4.2.0)
123
123
  htmlentities (~> 4.3, >= 4.3.4)
124
124
  marcel (~> 1.0)
125
125
  nokogiri (~> 1.10, >= 1.10.4)
126
126
  rubyzip (>= 1.3.0, < 3)
127
- caxlsx_rails (0.6.3)
127
+ caxlsx_rails (0.6.4)
128
128
  actionpack (>= 3.1)
129
129
  caxlsx (>= 3.0)
130
130
  coderay (1.1.3)
@@ -141,7 +141,7 @@ GEM
141
141
  htmlentities (4.3.4)
142
142
  i18n (1.14.1)
143
143
  concurrent-ruby (~> 1.0)
144
- importmap-rails (2.0.1)
144
+ importmap-rails (2.1.0)
145
145
  actionpack (>= 6.0.0)
146
146
  activesupport (>= 6.0.0)
147
147
  railties (>= 6.0.0)
@@ -161,6 +161,7 @@ GEM
161
161
  matrix (0.4.2)
162
162
  method_source (1.0.0)
163
163
  mini_mime (1.1.5)
164
+ mini_portile2 (2.8.8)
164
165
  minitest (5.21.1)
165
166
  mutex_m (0.2.0)
166
167
  net-imap (0.4.9.1)
@@ -173,11 +174,10 @@ GEM
173
174
  net-smtp (0.4.0.1)
174
175
  net-protocol
175
176
  nio4r (2.7.0)
176
- nokogiri (1.16.0-arm64-darwin)
177
+ nokogiri (1.16.0)
178
+ mini_portile2 (~> 2.8.2)
177
179
  racc (~> 1.4)
178
- nokogiri (1.16.0-x86_64-linux)
179
- racc (~> 1.4)
180
- pagy (7.0.4)
180
+ pagy (9.3.3)
181
181
  pg (1.5.4)
182
182
  pry (0.14.2)
183
183
  coderay (~> 1.1)
@@ -249,22 +249,23 @@ GEM
249
249
  actionpack (>= 5.2)
250
250
  activesupport (>= 5.2)
251
251
  sprockets (>= 3.0.0)
252
- stimulus-rails (1.3.3)
252
+ stimulus-rails (1.3.4)
253
253
  railties (>= 6.0.0)
254
254
  stringio (3.1.0)
255
- tailwindcss-rails (2.3.0-arm64-darwin)
256
- railties (>= 6.0.0)
257
- tailwindcss-rails (2.3.0-x86_64-linux)
258
- railties (>= 6.0.0)
255
+ tailwindcss-rails (4.0.0)
256
+ railties (>= 7.0.0)
257
+ tailwindcss-ruby (~> 4.0)
258
+ tailwindcss-ruby (4.0.4-aarch64-linux-gnu)
259
+ tailwindcss-ruby (4.0.4-arm64-darwin)
260
+ tailwindcss-ruby (4.0.4-x86_64-linux-gnu)
259
261
  temple (0.10.3)
260
- textacular (5.6.0)
261
- activerecord (>= 5.0, < 7.2)
262
+ textacular (5.7.0)
263
+ activerecord (>= 5.0)
262
264
  thor (1.3.0)
263
265
  tilt (2.3.0)
264
266
  timeout (0.4.1)
265
- turbo-rails (2.0.4)
267
+ turbo-rails (2.0.11)
266
268
  actionpack (>= 6.0.0)
267
- activejob (>= 6.0.0)
268
269
  railties (>= 6.0.0)
269
270
  tzinfo (2.0.6)
270
271
  concurrent-ruby (~> 1.0)
@@ -282,6 +283,7 @@ GEM
282
283
  zeitwerk (2.6.12)
283
284
 
284
285
  PLATFORMS
286
+ aarch64-linux
285
287
  arm64-darwin-22
286
288
  x86_64-linux
287
289
 
@@ -1,3 +1,5 @@
1
+ require "securerandom"
2
+
1
3
  module Mensa
2
4
  class ExportJob < ApplicationJob
3
5
  queue_as :default
@@ -7,9 +9,11 @@ module Mensa
7
9
  # export_complete: lambda do |user_id, table_name, attachment|
8
10
  # end
9
11
 
10
- def perform(user_id, table_name)
12
+ def perform(user, table_name)
11
13
  table = Mensa.for_name(table_name)
12
- context = Mensa.config.callbacks[:export_started].call(user_id, table_name)
14
+ return unless table.exportable?
15
+
16
+ context = Mensa.config.callbacks[:export_started].call(user, table_name)
13
17
 
14
18
  styles = []
15
19
  default_style = { b: true, bg_color: '3B82F6', fg_color: 'FFFFFF', border: { style: :thin, color: '000000' }, sz: 8,
@@ -82,10 +86,26 @@ module Mensa
82
86
  sheet.auto_filter = Axlsx.cell_range([first_cell, last_cell], false)
83
87
  end
84
88
 
85
- attachment = { io: p.to_stream,
86
- content_type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', filename: "#{table_name}_export_#{Time.current.strftime("%Y-%m-%d-%H:%M:%S")}.xlsx" }
89
+ base_filename = "#{table_name}_export_#{Time.current.strftime("%Y-%m-%d-%H:%M:%S")}"
90
+ enc = nil
91
+ password = nil
92
+ if table.export_with_password?
93
+ password = SecureRandom.hex(6)
94
+ enc = Zip::TraditionalEncrypter.new(password)
95
+ end
96
+ stringio = Zip::OutputStream.write_buffer(encrypter: enc) do |zio|
97
+ zio.put_next_entry("#{base_filename}.xlsx")
98
+ zio.write p.to_stream.read
99
+ end
100
+ stringio.rewind
101
+
102
+ attachment = { io: stringio,
103
+ content_type: 'application/zip', filename: "#{base_filename}.zip" }
104
+ if password.present?
105
+ attachment[:password] = password
106
+ end
87
107
 
88
- Mensa.config.callbacks[:export_completed].call(user_id, table_name, context, attachment)
108
+ Mensa.config.callbacks[:export_completed].call(user, table_name, context, attachment)
89
109
  end
90
110
  end
91
111
  end
@@ -17,6 +17,8 @@ module Mensa
17
17
  config_reader :view_condensed_toggle?
18
18
  config_reader :view_columns_sorting?
19
19
  config_reader :show_header?
20
+ config_reader :exportable?
21
+ config_reader :export_with_password?
20
22
 
21
23
  def initialize(config = {})
22
24
  @params = config.to_h.deep_symbolize_keys
@@ -52,6 +52,9 @@ module Mensa::Config
52
52
  option :column, dsl_hash: Mensa::Config::ColumnDsl
53
53
  option :link
54
54
 
55
+ option :exportable, default: true
56
+ option :export_with_password, default: false
57
+
55
58
  # Default sort order {column: direction, column: direction}
56
59
  option :order, default: {}
57
60
 
data/bin/setup ADDED
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #!/usr/bin/env ruby
4
+ require "fileutils"
5
+
6
+ # path to your application root.
7
+ GEM_ROOT = File.expand_path("..", __dir__)
8
+ APP_ROOT = File.expand_path("../test/dummy", __dir__)
9
+
10
+ def system!(*args)
11
+ system(*args, exception: true)
12
+ end
13
+
14
+ def copy_sample(file)
15
+ return if File.exist?(file)
16
+
17
+ copy_sample!(file)
18
+ end
19
+
20
+ def copy_sample!(file)
21
+ FileUtils.cp "#{file}.sample", file
22
+ end
23
+
24
+ FileUtils.chdir GEM_ROOT do
25
+ # This script is a way to set up or update your development environment automatically.
26
+ # This script is idempotent, so that you can run it at any time and get an expectable outcome.
27
+ # Add necessary setup steps to this file.
28
+
29
+ puts "== Installing dependencies =="
30
+ system! "gem install bundler --conservative"
31
+ system("bundle config set --local path 'vendor/bundle'")
32
+ system("bundle check") || system!("bundle install")
33
+
34
+ system!("yarn install")
35
+ end
36
+
37
+ FileUtils.chdir APP_ROOT do
38
+ puts "\n== Copying sample files =="
39
+ copy_sample "config/database.yml"
40
+ copy_sample! "config/tailwind.config.js"
41
+ copy_sample! "app/assets/stylesheets/application.tailwind.css"
42
+ copy_sample "config/puma.rb"
43
+ unless File.exist?(".ssl/localhost.crt")
44
+ FileUtils.mkdir_p ".ssl"
45
+ FileUtils.chdir "#{APP_ROOT}/.ssl" do
46
+ system!("mkcert localhost")
47
+ end
48
+ end
49
+
50
+ puts "\n== Caching mode =="
51
+ FileUtils.touch "tmp/caching-dev.txt"
52
+
53
+ puts "\n== Preparing database =="
54
+ system! "bin/rails db:prepare"
55
+
56
+ puts "\n== Removing old logs and tempfiles =="
57
+ system! "bin/rails log:clear tmp:clear"
58
+
59
+ puts "\n== Done, welcome to Soverin Core =="
60
+ puts "To start the application, run 'cd test/dummy; bin/rails s'"
61
+ end
data/lib/mensa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mensa
2
- VERSION = "0.1.13"
2
+ VERSION = "0.1.14"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mensa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom de Grunt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-07 00:00:00.000000000 Z
11
+ date: 2025-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: caxlsx_rails
@@ -144,6 +144,9 @@ executables: []
144
144
  extensions: []
145
145
  extra_rdoc_files: []
146
146
  files:
147
+ - ".devcontainer/Dockerfile"
148
+ - ".devcontainer/compose.yaml"
149
+ - ".devcontainer/devcontainer.json"
147
150
  - ".github/workflows/gem-push.yml"
148
151
  - ".gitignore"
149
152
  - Gemfile
@@ -231,6 +234,7 @@ files:
231
234
  - app/views/mensa/tables/show.turbo_stream.slim
232
235
  - bin/importmap
233
236
  - bin/rails
237
+ - bin/setup
234
238
  - config/importmap.rb
235
239
  - config/locales/en.yml
236
240
  - config/locales/nl.yml