gems: add pg, sequel, prawn, aws-sdk-s3 for invoicing

- pg + sequel: connect to the storage stack's Postgres.
- prawn + prawn-table: render invoice PDFs.
- aws-sdk-s3: upload PDFs to MinIO and mint presigned download URLs.

Also pulls libpq-dev into the Docker build (for the pg gem) and the
postgresql client lib into the Nix dev shell.
This commit is contained in:
Sergei Poljanski 2026-05-26 17:29:21 +03:00
commit 2ea46b12e6
Signed by: asxpi
GPG key ID: 4F8851660FA4121B
4 changed files with 54 additions and 0 deletions

View file

@ -2,6 +2,7 @@ FROM ruby:3.4-slim-bookworm
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \ build-essential \
libpq-dev \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
RUN groupadd -g 11000 asxpio \ RUN groupadd -g 11000 asxpio \

View file

@ -12,6 +12,12 @@ gem 'erubi', '~> 1.13'
gem 'mail', '~> 2.8' gem 'mail', '~> 2.8'
gem 'dotenv', '~> 3.1' gem 'dotenv', '~> 3.1'
gem 'pg', '~> 1.5'
gem 'sequel', '~> 5.86'
gem 'prawn', '~> 2.5'
gem 'prawn-table', '~> 0.2'
gem 'aws-sdk-s3', '~> 1.170'
group :development do group :development do
gem 'rerun', '~> 0.14' gem 'rerun', '~> 0.14'
end end

View file

@ -1,7 +1,27 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
aws-eventstream (1.4.0)
aws-partitions (1.1253.0)
aws-sdk-core (3.249.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.128.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.224.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
base64 (0.3.0) base64 (0.3.0)
bigdecimal (3.3.1)
date (3.5.1) date (3.5.1)
dotenv (3.2.0) dotenv (3.2.0)
erubi (1.13.1) erubi (1.13.1)
@ -16,6 +36,7 @@ GEM
ffi (1.17.4-x86_64-darwin) ffi (1.17.4-x86_64-darwin)
ffi (1.17.4-x86_64-linux-gnu) ffi (1.17.4-x86_64-linux-gnu)
ffi (1.17.4-x86_64-linux-musl) ffi (1.17.4-x86_64-linux-musl)
jmespath (1.6.2)
listen (3.10.0) listen (3.10.0)
logger logger
rb-fsevent (~> 0.10, >= 0.10.3) rb-fsevent (~> 0.10, >= 0.10.3)
@ -27,6 +48,7 @@ GEM
net-imap net-imap
net-pop net-pop
net-smtp net-smtp
matrix (0.4.3)
mini_mime (1.1.5) mini_mime (1.1.5)
multi_json (1.21.1) multi_json (1.21.1)
mustermann (3.1.1) mustermann (3.1.1)
@ -40,6 +62,20 @@ GEM
net-smtp (0.5.1) net-smtp (0.5.1)
net-protocol net-protocol
nio4r (2.7.5) nio4r (2.7.5)
pdf-core (0.10.0)
pg (1.6.3)
pg (1.6.3-aarch64-linux)
pg (1.6.3-aarch64-linux-musl)
pg (1.6.3-arm64-darwin)
pg (1.6.3-x86_64-darwin)
pg (1.6.3-x86_64-linux)
pg (1.6.3-x86_64-linux-musl)
prawn (2.5.0)
matrix (~> 0.4)
pdf-core (~> 0.10.0)
ttfunk (~> 1.8)
prawn-table (0.2.2)
prawn (>= 1.3.0, < 3.0.0)
puma (6.6.1) puma (6.6.1)
nio4r (~> 2.0) nio4r (~> 2.0)
rack (3.2.6) rack (3.2.6)
@ -57,6 +93,8 @@ GEM
ffi (~> 1.0) ffi (~> 1.0)
rerun (0.14.0) rerun (0.14.0)
listen (~> 3.0) listen (~> 3.0)
sequel (5.104.0)
bigdecimal
sinatra (4.2.1) sinatra (4.2.1)
logger (>= 1.6.0) logger (>= 1.6.0)
mustermann (~> 3.0) mustermann (~> 3.0)
@ -72,6 +110,8 @@ GEM
tilt (~> 2.0) tilt (~> 2.0)
tilt (2.7.0) tilt (2.7.0)
timeout (0.6.1) timeout (0.6.1)
ttfunk (1.8.0)
bigdecimal (~> 3.1)
PLATFORMS PLATFORMS
aarch64-linux-gnu aarch64-linux-gnu
@ -87,15 +127,20 @@ PLATFORMS
x86_64-linux-musl x86_64-linux-musl
DEPENDENCIES DEPENDENCIES
aws-sdk-s3 (~> 1.170)
dotenv (~> 3.1) dotenv (~> 3.1)
erubi (~> 1.13) erubi (~> 1.13)
mail (~> 2.8) mail (~> 2.8)
pg (~> 1.5)
prawn (~> 2.5)
prawn-table (~> 0.2)
puma (~> 6.6) puma (~> 6.6)
rack (~> 3.2) rack (~> 3.2)
rack-protection (~> 4.2) rack-protection (~> 4.2)
rack-session (~> 2.1) rack-session (~> 2.1)
rackup (~> 2.3) rackup (~> 2.3)
rerun (~> 0.14) rerun (~> 0.14)
sequel (~> 5.86)
sinatra (~> 4.2) sinatra (~> 4.2)
sinatra-contrib (~> 4.2) sinatra-contrib (~> 4.2)

View file

@ -18,6 +18,8 @@
pkgs.openssl pkgs.openssl
pkgs.zlib pkgs.zlib
pkgs.libyaml pkgs.libyaml
pkgs.postgresql.lib
pkgs.postgresql
]; ];
shellHook = '' shellHook = ''