pg_rails 7.0.8.pre.alpha.10 → 7.0.8.pre.alpha.12
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/pg_associable/app/javascript/modal_controller.js +1 -1
- data/pg_engine/app/admin/accounts.rb +1 -4
- data/pg_engine/app/controllers/admin/accounts_controller.rb +4 -4
- data/pg_engine/app/controllers/concerns/pg_engine/resource.rb +2 -0
- data/pg_engine/app/helpers/pg_engine/pg_rails_helper.rb +11 -0
- data/pg_engine/app/helpers/pg_engine/print_helper.rb +2 -2
- data/pg_engine/app/lib/pg_form_builder.rb +21 -0
- data/pg_engine/app/models/account.rb +2 -9
- data/pg_engine/app/models/pg_engine/base_record.rb +3 -3
- data/pg_engine/app/models/user.rb +20 -13
- data/pg_engine/app/models/user_account.rb +4 -12
- data/pg_engine/app/views/admin/accounts/_form.html.slim +0 -1
- data/pg_engine/app/views/pg_engine/base/index.html.slim +1 -1
- data/pg_engine/config/initializers/simple_form_monkey_patch.rb +12 -0
- data/pg_engine/config/locales/es.yml +4 -0
- data/pg_engine/config/simple_form/simple_form_bootstrap.rb +2 -4
- data/pg_engine/db/migrate/20240314114503_remove_hash_ids.rb +5 -0
- data/pg_engine/lib/tasks/auto_anotar_modelos.rake +4 -1
- data/pg_engine/spec/factories/accounts.rb +0 -1
- data/pg_engine/spec/lib/pg_form_builder_spec.rb +14 -0
- data/pg_layout/app/javascript/utils.ts +3 -0
- data/pg_layout/app/views/devise/registrations/new.html.erb +3 -4
- data/pg_layout/app/views/layouts/pg_layout/layout.html.slim +4 -3
- data/pg_layout/app/views/pg_layout/_navbar.html.erb +5 -3
- data/pg_rails/lib/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84eace9e9d023c54401e822df64d253dd94dcdf3831fd19ce1c77bb0ad674541
|
4
|
+
data.tar.gz: 3c1b74610da49e737f4fba5d9b89737a529650831278f95fcfc4c66ebd32a1f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c350c91dc1f91c4eb6c2b7ad866296d1057c89637ec3b45922ec89a0720d7942a4706a0ab3659adabb34da2a8f681d56367a722b5d7d4f1595210bb3bda12dc
|
7
|
+
data.tar.gz: '0806e415216083b9afe67adb247328764964cd537351a4406e88c7768946b71fe661de0a469f3d61af215d85706312d772e12cf52b03f65c083cb773cf06d687'
|
@@ -1,24 +1,21 @@
|
|
1
1
|
ActiveAdmin.register Account do
|
2
|
-
permit_params :plan, :nombre
|
2
|
+
permit_params :plan, :nombre
|
3
3
|
|
4
4
|
index do
|
5
5
|
selectable_column
|
6
6
|
id_column
|
7
7
|
column :plan
|
8
8
|
column :nombre
|
9
|
-
column :hashid
|
10
9
|
actions
|
11
10
|
end
|
12
11
|
|
13
12
|
filter :plan
|
14
13
|
filter :nombre
|
15
|
-
filter :hashid
|
16
14
|
|
17
15
|
form do |f|
|
18
16
|
f.inputs do
|
19
17
|
f.input :plan
|
20
18
|
f.input :nombre
|
21
|
-
f.input :hashid
|
22
19
|
end
|
23
20
|
f.actions
|
24
21
|
end
|
@@ -15,19 +15,19 @@ module Admin
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def atributos_permitidos
|
18
|
-
%i[plan nombre
|
18
|
+
%i[plan nombre]
|
19
19
|
end
|
20
20
|
|
21
21
|
def atributos_para_buscar
|
22
|
-
%i[plan nombre
|
22
|
+
%i[plan nombre]
|
23
23
|
end
|
24
24
|
|
25
25
|
def atributos_para_listar
|
26
|
-
%i[plan nombre
|
26
|
+
%i[plan nombre]
|
27
27
|
end
|
28
28
|
|
29
29
|
def atributos_para_mostrar
|
30
|
-
%i[plan nombre
|
30
|
+
%i[plan nombre]
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -210,6 +210,8 @@ module PgEngine
|
|
210
210
|
def buscar_instancia
|
211
211
|
if Object.const_defined?('FriendlyId') && @clase_modelo.is_a?(FriendlyId)
|
212
212
|
@clase_modelo.friendly.find(params[:id])
|
213
|
+
elsif @clase_modelo.respond_to? :find_by_hashid
|
214
|
+
@clase_modelo.find_by!(hashid: params[:id])
|
213
215
|
else
|
214
216
|
@clase_modelo.find(params[:id])
|
215
217
|
end
|
@@ -98,10 +98,10 @@ module PgEngine
|
|
98
98
|
'No'
|
99
99
|
end
|
100
100
|
|
101
|
-
def print_currency(number, simbolo: '$')
|
101
|
+
def print_currency(number, simbolo: '$', precision: nil)
|
102
102
|
return if number.blank?
|
103
103
|
|
104
|
-
precision
|
104
|
+
precision ||= (number % 1).positive? ? 2 : 0
|
105
105
|
"#{simbolo} #{number_with_precision(number, delimiter: '.', separator: ',',
|
106
106
|
precision:)}"
|
107
107
|
end
|
@@ -4,6 +4,27 @@ class PgFormBuilder < SimpleForm::FormBuilder
|
|
4
4
|
include PgAssociable::FormBuilderMethods
|
5
5
|
include PgEngine::ErrorHelper
|
6
6
|
|
7
|
+
def default_prefix(attribute_name)
|
8
|
+
at_name = object.class.human_attribute_name(attribute_name.to_s).downcase
|
9
|
+
"#{articulo(attribute_name)} #{at_name}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def articulo(attribute_name)
|
13
|
+
gender = I18n.t("gender.#{attribute_name}", default: nil)
|
14
|
+
if gender.present?
|
15
|
+
gender == 'f' ? 'La' : 'El'
|
16
|
+
else
|
17
|
+
at_name = object.class.human_attribute_name(attribute_name.to_s).downcase
|
18
|
+
at_name.ends_with?('a') ? 'La' : 'El'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def input(attribute_name, options = {}, &)
|
23
|
+
options[:error_prefix] ||= default_prefix(attribute_name)
|
24
|
+
|
25
|
+
super(attribute_name, options, &)
|
26
|
+
end
|
27
|
+
|
7
28
|
def mensajes_de_error
|
8
29
|
base_errors = object.errors[:base]
|
9
30
|
base_message = (base_errors.map(&:to_s).join('<br>') if base_errors.present?)
|
@@ -6,25 +6,18 @@
|
|
6
6
|
#
|
7
7
|
# id :bigint not null, primary key
|
8
8
|
# discarded_at :datetime
|
9
|
-
# hashid :string
|
10
9
|
# nombre :string not null
|
11
10
|
# plan :integer not null
|
12
11
|
# created_at :datetime not null
|
13
12
|
# updated_at :datetime not null
|
14
|
-
# actualizado_por_id :bigint
|
15
|
-
# creado_por_id :bigint
|
16
|
-
#
|
17
|
-
# Indexes
|
18
|
-
#
|
19
|
-
# index_accounts_on_actualizado_por_id (actualizado_por_id)
|
20
|
-
# index_accounts_on_creado_por_id (creado_por_id)
|
13
|
+
# actualizado_por_id :bigint indexed
|
14
|
+
# creado_por_id :bigint indexed
|
21
15
|
#
|
22
16
|
# Foreign Keys
|
23
17
|
#
|
24
18
|
# fk_rails_... (actualizado_por_id => users.id)
|
25
19
|
# fk_rails_... (creado_por_id => users.id)
|
26
20
|
#
|
27
|
-
# generado con pg_rails
|
28
21
|
|
29
22
|
class Account < ApplicationRecord
|
30
23
|
audited
|
@@ -47,10 +47,10 @@ module PgEngine
|
|
47
47
|
|
48
48
|
def to_s
|
49
49
|
%i[nombre name].each do |campo|
|
50
|
-
return "#{send(campo)} ##{
|
50
|
+
return "#{send(campo)} ##{to_param}" if try(campo).present?
|
51
51
|
end
|
52
|
-
if
|
53
|
-
"#{self.class.nombre_singular} ##{
|
52
|
+
if to_param.present?
|
53
|
+
"#{self.class.nombre_singular} ##{to_param}"
|
54
54
|
else
|
55
55
|
super
|
56
56
|
end
|
@@ -3,41 +3,36 @@
|
|
3
3
|
# Table name: users
|
4
4
|
#
|
5
5
|
# id :bigint not null, primary key
|
6
|
+
# apellido :string not null
|
6
7
|
# confirmation_sent_at :datetime
|
7
|
-
# confirmation_token :string
|
8
|
+
# confirmation_token :string indexed
|
8
9
|
# confirmed_at :datetime
|
9
10
|
# current_sign_in_at :datetime
|
10
11
|
# current_sign_in_ip :string
|
11
12
|
# developer :boolean default(FALSE), not null
|
12
13
|
# discarded_at :datetime
|
13
|
-
# email :string default(""), not null
|
14
|
+
# email :string default(""), not null, indexed
|
14
15
|
# encrypted_password :string default(""), not null
|
15
16
|
# failed_attempts :integer default(0), not null
|
16
17
|
# last_sign_in_at :datetime
|
17
18
|
# last_sign_in_ip :string
|
18
19
|
# locked_at :datetime
|
20
|
+
# nombre :string not null
|
19
21
|
# remember_created_at :datetime
|
20
22
|
# reset_password_sent_at :datetime
|
21
|
-
# reset_password_token :string
|
23
|
+
# reset_password_token :string indexed
|
22
24
|
# sign_in_count :integer default(0), not null
|
23
25
|
# unconfirmed_email :string
|
24
|
-
# unlock_token :string
|
26
|
+
# unlock_token :string indexed
|
25
27
|
# created_at :datetime not null
|
26
28
|
# updated_at :datetime not null
|
27
29
|
#
|
28
|
-
# Indexes
|
29
|
-
#
|
30
|
-
# index_users_on_confirmation_token (confirmation_token) UNIQUE
|
31
|
-
# index_users_on_email (email) UNIQUE
|
32
|
-
# index_users_on_reset_password_token (reset_password_token) UNIQUE
|
33
|
-
# index_users_on_unlock_token (unlock_token) UNIQUE
|
34
|
-
#
|
35
30
|
class User < ApplicationRecord
|
36
31
|
# ApplicationRecord should be defined on Application
|
37
32
|
|
38
33
|
# Include default devise modules. Others available are:
|
39
34
|
devise :database_authenticatable, :registerable,
|
40
|
-
:recoverable, :rememberable,
|
35
|
+
:recoverable, :rememberable,
|
41
36
|
:lockable, :timeoutable, :trackable, :confirmable
|
42
37
|
|
43
38
|
audited
|
@@ -46,7 +41,19 @@ class User < ApplicationRecord
|
|
46
41
|
has_many :user_accounts
|
47
42
|
has_many :accounts, through: :user_accounts
|
48
43
|
|
49
|
-
validates :
|
44
|
+
validates :nombre, :apellido, presence: true
|
45
|
+
|
46
|
+
validates_presence_of :email
|
47
|
+
validates_uniqueness_of :email, message: 'ya pertenece a un usuario'
|
48
|
+
validates_format_of :email, with: /\A[^@\s]+@[^@\s]+\z/
|
49
|
+
validates_presence_of :password, if: :password_required?
|
50
|
+
validates_confirmation_of :password, if: :password_required?, message: 'Las contraseñas no coinciden'
|
51
|
+
validates_length_of :password, if: :password_required?, within: 6..128,
|
52
|
+
message: 'es demasiado corta (6 caracteres mínimo)'
|
53
|
+
|
54
|
+
def password_required?
|
55
|
+
!persisted? || !password.nil? || !password_confirmation.nil?
|
56
|
+
end
|
50
57
|
|
51
58
|
scope :query, ->(param) { where('email ILIKE ?', "%#{param}%") }
|
52
59
|
|
@@ -8,17 +8,10 @@
|
|
8
8
|
# profiles :integer default([]), not null, is an Array
|
9
9
|
# created_at :datetime not null
|
10
10
|
# updated_at :datetime not null
|
11
|
-
# account_id :bigint not null
|
12
|
-
# actualizado_por_id :bigint
|
13
|
-
# creado_por_id :bigint
|
14
|
-
# user_id :bigint not null
|
15
|
-
#
|
16
|
-
# Indexes
|
17
|
-
#
|
18
|
-
# index_user_accounts_on_account_id (account_id)
|
19
|
-
# index_user_accounts_on_actualizado_por_id (actualizado_por_id)
|
20
|
-
# index_user_accounts_on_creado_por_id (creado_por_id)
|
21
|
-
# index_user_accounts_on_user_id (user_id)
|
11
|
+
# account_id :bigint not null, indexed
|
12
|
+
# actualizado_por_id :bigint indexed
|
13
|
+
# creado_por_id :bigint indexed
|
14
|
+
# user_id :bigint not null, indexed
|
22
15
|
#
|
23
16
|
# Foreign Keys
|
24
17
|
#
|
@@ -27,7 +20,6 @@
|
|
27
20
|
# fk_rails_... (creado_por_id => users.id)
|
28
21
|
# fk_rails_... (user_id => users.id)
|
29
22
|
#
|
30
|
-
# generado con pg_rails
|
31
23
|
|
32
24
|
class UserAccount < ApplicationRecord
|
33
25
|
audited
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module SimpleForm
|
2
|
+
module Components
|
3
|
+
module Errors
|
4
|
+
def error_text
|
5
|
+
text = has_custom_error? ? options[:error] : errors.reject(&:empty?).send(error_method)
|
6
|
+
return if text.blank?
|
7
|
+
|
8
|
+
"#{html_escape(options[:error_prefix])} #{html_escape(text)}".lstrip.html_safe
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -56,8 +56,7 @@ SimpleForm.setup do |config|
|
|
56
56
|
b.optional :readonly
|
57
57
|
b.use :label, class: 'form-label'
|
58
58
|
b.use :input, class: 'form-control', error_class: 'is-invalid'
|
59
|
-
b.use :
|
60
|
-
b.optional :error, wrap_with: { class: 'invalid-feedback' }
|
59
|
+
b.use :error, wrap_with: { class: 'invalid-feedback' }
|
61
60
|
b.use :hint, wrap_with: { class: 'form-text' }
|
62
61
|
end
|
63
62
|
|
@@ -66,8 +65,7 @@ SimpleForm.setup do |config|
|
|
66
65
|
b.optional :readonly
|
67
66
|
b.use :label, class: 'form-label'
|
68
67
|
b.use :input, class: 'form-select', error_class: 'is-invalid'
|
69
|
-
b.use :
|
70
|
-
b.optional :error, wrap_with: { class: 'invalid-feedback' }
|
68
|
+
b.use :error, wrap_with: { class: 'invalid-feedback' }
|
71
69
|
b.use :hint, wrap_with: { class: 'form-text' }
|
72
70
|
end
|
73
71
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# NOTE: only doing this in development as some production environments (Heroku)
|
2
2
|
# NOTE: are sensitive to local FS writes, and besides -- it's just not proper
|
3
3
|
# NOTE: to have a dev-mode tool do its thing in production.
|
4
|
+
Dotenv.load
|
5
|
+
|
4
6
|
if Rails.env.development?
|
5
7
|
require 'annotate'
|
6
8
|
task :set_annotation_options do
|
@@ -21,7 +23,8 @@ if Rails.env.development?
|
|
21
23
|
'show_complete_foreign_keys' => 'false',
|
22
24
|
'show_indexes' => 'false',
|
23
25
|
'simple_indexes' => 'true',
|
24
|
-
'model_dir' => ['
|
26
|
+
'model_dir' => ENV['MODEL_PATHS'],
|
27
|
+
# 'model_dir' => ['app/models', 'app/overrides'],
|
25
28
|
# 'model_dir' => 'app/models',
|
26
29
|
'root_dir' => '',
|
27
30
|
'include_version' => 'false',
|
@@ -29,4 +29,18 @@ describe PgFormBuilder do
|
|
29
29
|
it { expect(subject).to eq 'Por favor, revisá los campos obligatorios:' }
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
describe '#default_prefix' do
|
34
|
+
context 'cuando el atributo es masculino' do
|
35
|
+
subject { instancia.default_prefix(:nombre) }
|
36
|
+
|
37
|
+
it { expect(subject).to eq 'El nombre' }
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'cuando el atributo es femenino' do
|
41
|
+
subject { instancia.default_prefix(:fecha) }
|
42
|
+
|
43
|
+
it { expect(subject).to eq 'La fecha' }
|
44
|
+
end
|
45
|
+
end
|
32
46
|
end
|
@@ -3,6 +3,9 @@ export function round (value) {
|
|
3
3
|
}
|
4
4
|
|
5
5
|
export function printCurrency (value, simboloMoneda = '$') {
|
6
|
+
if (typeof value === 'string') {
|
7
|
+
value = parseFloat(value)
|
8
|
+
}
|
6
9
|
const decimals = (value % 1 > 0) ? 2 : 0
|
7
10
|
return simboloMoneda + ' ' + numberWithDots(value.toFixed(decimals).replace('.', ','))
|
8
11
|
}
|
@@ -1,15 +1,14 @@
|
|
1
1
|
<h2><%= t(".sign_up") %></h2>
|
2
2
|
|
3
3
|
<%= pg_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
|
4
|
-
<%= f.
|
4
|
+
<%= f.mensajes_de_error %>
|
5
5
|
|
6
6
|
<div class="form-inputs">
|
7
|
+
<%= f.input :nombre, required: true, autofocus: true %>
|
8
|
+
<%= f.input :apellido, required: true %>
|
7
9
|
<%= f.input :email,
|
8
10
|
required: true,
|
9
|
-
autofocus: true ,
|
10
11
|
input_html: { autocomplete: "email" }%>
|
11
|
-
<%= f.input :nombre, required: true %>
|
12
|
-
<%= f.input :apellido, required: true %>
|
13
12
|
<%= f.input :password,
|
14
13
|
required: true,
|
15
14
|
hint: (t('devise.shared.minimum_password_length', count: @minimum_password_length) if @minimum_password_length),
|
@@ -14,15 +14,16 @@ html
|
|
14
14
|
= stylesheet_link_tag 'application', 'data-turbo-track': 'reload'
|
15
15
|
= javascript_include_tag 'application', 'data-turbo-track': 'reload', type: 'module'
|
16
16
|
body
|
17
|
-
|
18
|
-
|
17
|
+
div class="#{ @sidebar == false ? '' : 'with-sidebar' }"
|
18
|
+
- unless @sidebar == false
|
19
|
+
= render partial: 'pg_layout/sidebar'
|
19
20
|
div
|
20
21
|
.position-relative.d-flex.justify-content-around
|
21
22
|
#flash.flash.position-absolute.z-1.mt-1
|
22
23
|
= render partial: 'pg_layout/flash'
|
23
24
|
= render partial: 'pg_layout/navbar'
|
24
25
|
div
|
25
|
-
- if user_signed_in?
|
26
|
+
- if user_signed_in? && @breadcrumb != false
|
26
27
|
.d-flex.align-items-center.justify-content-between.px-3.py-1.d-print-none[
|
27
28
|
style="min-height: 2.5em;"]
|
28
29
|
nav aria-label="breadcrumb"
|
@@ -1,8 +1,10 @@
|
|
1
1
|
<nav class="navbar navbar-expand-<%= @breakpoint_navbar_expand %> bg-light">
|
2
2
|
<div class="container-fluid">
|
3
|
-
|
4
|
-
<
|
5
|
-
|
3
|
+
<% unless @sidebar == false %>
|
4
|
+
<button data-controller="navbar" data-action="navbar#expandNavbar" class="btn btn-outline-primary me-2 d-none d-<%= @breakpoint_navbar_expand %>-inline-block">
|
5
|
+
<i class="bi bi-list"></i>
|
6
|
+
</button>
|
7
|
+
<% end %>
|
6
8
|
<!-- <a class="navbar-brand" href="#">Navbar</a> -->
|
7
9
|
<button class="navbar-toggler btn btn-outline-primary me-2" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
8
10
|
<i class="bi bi-list"></i>
|
data/pg_rails/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.8.pre.alpha.
|
4
|
+
version: 7.0.8.pre.alpha.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martín Rosso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Rails goodies.
|
14
14
|
email:
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- pg_engine/app/helpers/pg_engine/flash_helper.rb
|
54
54
|
- pg_engine/app/helpers/pg_engine/form_helper.rb
|
55
55
|
- pg_engine/app/helpers/pg_engine/index_helper.rb
|
56
|
+
- pg_engine/app/helpers/pg_engine/pg_rails_helper.rb
|
56
57
|
- pg_engine/app/helpers/pg_engine/postgres_helper.rb
|
57
58
|
- pg_engine/app/helpers/pg_engine/print_helper.rb
|
58
59
|
- pg_engine/app/helpers/pg_engine/route_helper.rb
|
@@ -89,6 +90,7 @@ files:
|
|
89
90
|
- pg_engine/app/views/pg_engine/base/new.html.slim
|
90
91
|
- pg_engine/config/initializers/active_admin.rb
|
91
92
|
- pg_engine/config/initializers/devise.rb
|
93
|
+
- pg_engine/config/initializers/simple_form_monkey_patch.rb
|
92
94
|
- pg_engine/config/locales/devise.en.yml
|
93
95
|
- pg_engine/config/locales/es.yml
|
94
96
|
- pg_engine/config/routes.rb
|
@@ -102,6 +104,7 @@ files:
|
|
102
104
|
- pg_engine/db/migrate/20240211153049_create_user_accounts.rb
|
103
105
|
- pg_engine/db/migrate/20240222115722_create_active_storage_tables.active_storage.rb
|
104
106
|
- pg_engine/db/migrate/20240305200900_nombre_user.rb
|
107
|
+
- pg_engine/db/migrate/20240314114503_remove_hash_ids.rb
|
105
108
|
- pg_engine/db/seeds.rb
|
106
109
|
- pg_engine/lib/pg_engine.rb
|
107
110
|
- pg_engine/lib/pg_engine/configuracion.rb
|