pg_rails 7.0.1 → 7.0.2
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/README.md +6 -4
- data/pg_associable/app/assets/css/pg_associable.scss +99 -0
- data/pg_associable/app/assets/js/asociable_controller.js +59 -0
- data/pg_associable/app/assets/js/asociable_inline_controller.js +141 -0
- data/pg_associable/app/assets/js/modal_controller.js +130 -0
- data/pg_associable/app/helpers/pg_associable/form_builder_methods.rb +31 -0
- data/pg_associable/app/helpers/pg_associable/helpers.rb +19 -0
- data/pg_associable/app/inputs/pg_associable/pg_associable_inline_input.rb +39 -0
- data/pg_associable/app/inputs/pg_associable/pg_associable_input.rb +41 -0
- data/pg_associable/app/views/pg_associable/_resultados.html.slim +9 -0
- data/pg_associable/app/views/pg_associable/_resultados_inline.html.slim +12 -0
- data/pg_associable/app/views/pg_engine/base/_pg_associable_modal.html.slim +39 -0
- data/pg_associable/index.js +7 -0
- data/pg_associable/lib/pg_associable/engine.rb +12 -0
- data/pg_associable/lib/pg_associable/simple_form_initializer.rb +34 -0
- data/pg_associable/lib/pg_associable.rb +5 -0
- data/{lib/tasks/pg_rails_tasks.rake → pg_associable/lib/tasks/pg_associable_tasks.rake} +1 -2
- data/pg_engine/app/assets/stylesheets/pg_rails_b5.scss +74 -0
- data/pg_engine/app/controllers/pg_engine/base_controller.rb +365 -0
- data/pg_engine/app/controllers/pg_engine/devise_controller.rb +9 -0
- data/pg_engine/app/controllers/pg_engine/signed_in_controller.rb +7 -0
- data/{app/decorators/pg_rails → pg_engine/app/decorators/pg_engine}/base_decorator.rb +21 -23
- data/pg_engine/app/helpers/pg_engine/flash_helper.rb +26 -0
- data/pg_engine/app/helpers/pg_engine/form_helper.rb +33 -0
- data/pg_engine/app/helpers/pg_engine/index_helper.rb +42 -0
- data/{app/helpers/pg_rails → pg_engine/app/helpers/pg_engine}/postgres_helper.rb +1 -1
- data/{app/helpers/pg_rails → pg_engine/app/helpers/pg_engine}/print_helper.rb +15 -31
- data/pg_engine/app/helpers/pg_engine/route_helper.rb +41 -0
- data/pg_engine/app/inputs/pg_engine/fecha_input.rb +20 -0
- data/{app/lib/pg_rails → pg_engine/app/lib/pg_engine}/filtros_builder.rb +16 -17
- data/pg_engine/app/lib/pg_form_builder.rb +22 -0
- data/pg_engine/app/models/pg_engine/base_record.rb +63 -0
- data/{app/policies/pg_rails → pg_engine/app/policies/pg_engine}/application_policy.rb +2 -2
- data/pg_engine/app/views/pg_engine/base/download.xlsx.axlsx +14 -0
- data/pg_engine/app/views/pg_engine/base/index.html.slim +51 -0
- data/pg_engine/config/locales/es.yml +48 -0
- data/pg_engine/config/simple_form/simple_form.rb +178 -0
- data/pg_engine/config/simple_form/simple_form_bootstrap.rb +371 -0
- data/{lib/pg_rails → pg_engine/lib/pg_engine}/configuracion.rb +3 -1
- data/pg_engine/lib/pg_engine/engine.rb +53 -0
- data/{lib/pg_rails → pg_engine/lib/pg_engine}/utils/logueador.rb +8 -1
- data/pg_engine/lib/pg_engine.rb +35 -0
- data/{lib → pg_engine/lib}/tasks/auto_anotar_modelos.rake +1 -1
- data/pg_engine/lib/templates/activeadmin/audits.rb +53 -0
- data/pg_engine/lib/templates/activeadmin/users.rb +54 -0
- data/pg_layout/app/assets/stylesheets/sidebar.scss +106 -0
- data/pg_layout/app/javascript/cookies.js +23 -0
- data/pg_layout/app/javascript/navbar_controller.js +10 -0
- data/pg_layout/app/lib/navbar.rb +61 -0
- data/pg_layout/app/views/devise/confirmations/new.html.erb +20 -0
- data/pg_layout/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/pg_layout/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/pg_layout/app/views/devise/mailer/password_change.html.erb +3 -0
- data/pg_layout/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/pg_layout/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/pg_layout/app/views/devise/passwords/edit.html.erb +27 -0
- data/pg_layout/app/views/devise/passwords/new.html.erb +18 -0
- data/pg_layout/app/views/devise/registrations/edit.html.erb +35 -0
- data/pg_layout/app/views/devise/registrations/new.html.erb +25 -0
- data/pg_layout/app/views/devise/sessions/new.html.erb +20 -0
- data/pg_layout/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/pg_layout/app/views/devise/shared/_links.html.erb +25 -0
- data/pg_layout/app/views/devise/unlocks/new.html.erb +19 -0
- data/pg_layout/app/views/kaminari/_first_page.html.slim +3 -0
- data/pg_layout/app/views/kaminari/_gap.html.slim +2 -0
- data/pg_layout/app/views/kaminari/_last_page.html.slim +3 -0
- data/pg_layout/app/views/kaminari/_next_page.html.slim +3 -0
- data/pg_layout/app/views/kaminari/_page.html.slim +6 -0
- data/pg_layout/app/views/kaminari/_paginator.html.slim +12 -0
- data/pg_layout/app/views/kaminari/_prev_page.html.slim +3 -0
- data/pg_layout/app/views/layouts/pg_layout/devise.html.slim +24 -0
- data/pg_layout/app/views/layouts/pg_layout/layout.html.slim +30 -0
- data/pg_layout/app/views/pg_layout/_flash.html.slim +10 -0
- data/pg_layout/app/views/pg_layout/_navbar.html.erb +43 -0
- data/pg_layout/app/views/pg_layout/_sidebar.html.erb +42 -0
- data/pg_layout/index.js +35 -0
- data/pg_layout/lib/pg_layout/engine.rb +7 -0
- data/pg_layout/lib/pg_layout.rb +9 -0
- data/pg_rails/js/index.js +2 -0
- data/pg_rails/lib/pg_rails.rb +7 -0
- data/{lib/pg_rails → pg_rails/lib}/version.rb +1 -1
- data/pg_rails/scss/pg_rails.scss +3 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/model_generator.rb +34 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/admin.rb +19 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/create_table_migration.rb.tt +46 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/migration.rb.tt +48 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/model.rb +47 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/module.rb +9 -0
- data/pg_scaffold/lib/generators/pg_decorator/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_decorator/pg_decorator_generator.rb +31 -0
- data/pg_scaffold/lib/generators/pg_decorator/templates/decorator.rb +22 -0
- data/pg_scaffold/lib/generators/pg_factory_bot/model/model_generator.rb +95 -0
- data/pg_scaffold/lib/generators/pg_factory_bot/model/templates/factories.erb +14 -0
- data/pg_scaffold/lib/generators/pg_pundit/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_pundit/pg_pundit_generator.rb +21 -0
- data/pg_scaffold/lib/generators/pg_pundit/templates/policy.rb +37 -0
- data/pg_scaffold/lib/generators/pg_rails/instalar/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_rails/instalar/instalar_generator.rb +17 -0
- data/pg_scaffold/lib/generators/pg_rails/instalar/templates/pg_rails.rb +10 -0
- data/pg_scaffold/lib/generators/pg_resource_route/pg_resource_route_generator.rb +27 -0
- data/pg_scaffold/lib/generators/pg_rspec/model/model_generator.rb +30 -0
- data/pg_scaffold/lib/generators/pg_rspec/model/templates/model_spec.rb +15 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/scaffold_generator.rb +43 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/api_controller_spec.rb +167 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/controller_spec.rb +269 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/edit_spec.rb +34 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/index_spec.rb +28 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/new_spec.rb +34 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/routing_spec.rb +50 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/show_spec.rb +26 -0
- data/pg_scaffold/lib/generators/pg_scaffold/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_scaffold/pg_scaffold_generator.rb +87 -0
- data/pg_scaffold/lib/generators/pg_scaffold/templates/controller.rb +37 -0
- data/pg_scaffold/lib/generators/pg_slim/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_slim/pg_slim_generator.rb +31 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/_form.html.slim +12 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/download.xlsx.axlsx +14 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/edit.html.slim +5 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/index.html.slim +51 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/new.html.slim +5 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/partial.html.slim +1 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/show.html.slim +38 -0
- data/pg_scaffold/lib/pg_scaffold/monkey_patches/mejoras_a_named_base.rb +37 -0
- data/pg_scaffold/lib/pg_scaffold/monkey_patches/mejoras_de_atributos.rb +116 -0
- data/pg_scaffold/lib/pg_scaffold/railtie.rb +16 -0
- data/pg_scaffold/lib/pg_scaffold.rb +4 -0
- metadata +134 -48
- data/Rakefile +0 -36
- data/app/assets/javascripts/pg_rails/asociacion_creable.js +0 -85
- data/app/assets/javascripts/pg_rails/best_in_place_datepicker.js +0 -58
- data/app/assets/javascripts/pg_rails/librerias.js +0 -13
- data/app/assets/javascripts/pg_rails/librerias_b3.js +0 -14
- data/app/assets/javascripts/pg_rails/validaciones.js +0 -44
- data/app/assets/javascripts/pg_rails.js +0 -318
- data/app/assets/stylesheets/pg_rails/librerias.scss +0 -5
- data/app/assets/stylesheets/pg_rails/pg_chosen.scss +0 -29
- data/app/assets/stylesheets/pg_rails/pg_rails.scss +0 -199
- data/app/assets/stylesheets/pg_rails_b3.scss +0 -10
- data/app/assets/stylesheets/pg_rails_b4.scss +0 -12
- data/app/assets/stylesheets/pg_rails_b5.scss +0 -1
- data/app/controllers/pg_rails/application_controller.rb +0 -316
- data/app/controllers/pg_rails/editar_en_lugar_controller.rb +0 -24
- data/app/helpers/pg_rails/editar_en_lugar_helper.rb +0 -106
- data/app/helpers/pg_rails/form_helper.rb +0 -25
- data/app/inputs/pg_rails/asociacion_creable_input.rb +0 -72
- data/app/inputs/pg_rails/fecha_input.rb +0 -20
- data/app/inputs/pg_rails/selects_dependientes_input.rb +0 -9
- data/app/lib/pg_form_builder.rb +0 -31
- data/app/models/pg_rails/application_record.rb +0 -51
- data/app/views/application/_abrir_modal.js.erb +0 -14
- data/app/views/application/_actualizar_smart_listing.html.slim +0 -3
- data/app/views/application/_cerrar_modal.js.erb +0 -8
- data/app/views/application/_modal_ajax_form.js.erb +0 -7
- data/config/brakeman.ignore +0 -42
- data/config/locales/es.yml +0 -17
- data/config/routes.rb +0 -3
- data/config/spring.rb +0 -1
- data/lib/pg_rails/engine.rb +0 -42
- data/lib/pg_rails/simple_form/initializer.rb +0 -583
- data/lib/pg_rails.rb +0 -23
- /data/{lib/pg_rails → pg_engine/lib/pg_engine}/core_ext.rb +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/ Flash messages que se muestran en el HTML
|
|
2
|
+
/ slim-lint:disable LineLength
|
|
3
|
+
- flash_to_show = flash.select { |flash_message| flash_message[0].to_sym.in? ApplicationController._flash_types }
|
|
4
|
+
/ slim-lint:enable LineLength
|
|
5
|
+
|
|
6
|
+
- flash_to_show.each do |flash_type, message|
|
|
7
|
+
.toast(class="bg-#{flash_type_to_class(flash_type)}-subtle" role="alert"
|
|
8
|
+
aria-live="assertive" aria-atomic="true")
|
|
9
|
+
.toast-body
|
|
10
|
+
= message
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<nav class="navbar navbar-expand-<%= @breakpoint_navbar_expand %> bg-light">
|
|
2
|
+
<div class="container-fluid">
|
|
3
|
+
<button data-controller="navbar" data-action="navbar#expandNavbar" class="btn btn-outline-primary me-2 d-none d-<%= @breakpoint_navbar_expand %>-inline-block">
|
|
4
|
+
<i class="bi bi-list"></i>
|
|
5
|
+
</button>
|
|
6
|
+
<!-- <a class="navbar-brand" href="#">Navbar</a> -->
|
|
7
|
+
<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
|
+
<i class="bi bi-list"></i>
|
|
9
|
+
<!-- <span class="navbar-toggler-icon"></span> -->
|
|
10
|
+
</button>
|
|
11
|
+
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
|
12
|
+
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
|
13
|
+
<% if user_signed_in? %>
|
|
14
|
+
<li class="nav-item dropdown">
|
|
15
|
+
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
16
|
+
<%= current_user.email %>
|
|
17
|
+
</a>
|
|
18
|
+
<ul class="dropdown-menu">
|
|
19
|
+
<li>
|
|
20
|
+
<%= link_to "Mi perfil", edit_user_registration_path, class: 'dropdown-item' %>
|
|
21
|
+
</li>
|
|
22
|
+
<li>
|
|
23
|
+
<%= link_to "Cerrar sesión", destroy_user_session_path, data: { 'turbo-method': 'delete' }, class: 'dropdown-item' %>
|
|
24
|
+
</li>
|
|
25
|
+
</ul>
|
|
26
|
+
</li>
|
|
27
|
+
<% else %>
|
|
28
|
+
<li class="nav-item">
|
|
29
|
+
<%= link_to 'ingresar', new_user_session_path, class: 'nav-link' %>
|
|
30
|
+
</li>
|
|
31
|
+
<% end %>
|
|
32
|
+
</ul>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</nav>
|
|
36
|
+
<!-- <nav>
|
|
37
|
+
<ul>
|
|
38
|
+
<li>
|
|
39
|
+
|
|
40
|
+
</li>
|
|
41
|
+
</ul>
|
|
42
|
+
</nav>
|
|
43
|
+
-->
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<div id="sidebar" class="<%= @navbar_opened_class %> flex-shrink-0 bg-gradient d-none d-<%= @breakpoint_navbar_expand %>-block">
|
|
2
|
+
<% if user_signed_in? %>
|
|
3
|
+
<div class="sidebar--large-items" style="position:fixed">
|
|
4
|
+
<hr>
|
|
5
|
+
<div class="sidebar--small-items">
|
|
6
|
+
<ul class="list-unstyled ps-0">
|
|
7
|
+
<li class="mb-1 text-center">
|
|
8
|
+
<a href="javascript:void(0)" class="nav-link" data-bs-toggle="tooltip" data-bs-title="Agenda">
|
|
9
|
+
<i class="bi bi-calendar"></i>
|
|
10
|
+
</a>
|
|
11
|
+
</li>
|
|
12
|
+
</ul>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="sidebar--large-items">
|
|
15
|
+
<ul class="list-unstyled ps-0">
|
|
16
|
+
<% @navbar.sidebar.each do |entry| %>
|
|
17
|
+
<% next if @navbar.hide_entry?(entry) %>
|
|
18
|
+
<% random_id = rand(99999).to_s %>
|
|
19
|
+
<li class="mb-1">
|
|
20
|
+
<% if entry[:children].present? %>
|
|
21
|
+
<button class="btn btn-toggle d-inline-flex align-items-center rounded border-0 collapsed" data-bs-toggle="collapse" data-bs-target="#<%= 'collapse-' + random_id %>" aria-expanded="true">
|
|
22
|
+
<%= entry[:title] %>
|
|
23
|
+
</button>
|
|
24
|
+
<div class="collapse <%= @navbar.any_children_active?(entry, request) ? 'show' : '' %>" id="<%= 'collapse-' + random_id %>">
|
|
25
|
+
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small">
|
|
26
|
+
<% entry[:children].each do |child| %>
|
|
27
|
+
<% next if @navbar.hide_entry?(child) %>
|
|
28
|
+
<li><a href="<%= child[:path] %>" class="<%= @navbar.active_entry?(child, request) ? 'active' : '' %> d-inline-flex text-decoration-none rounded"><%= child[:title] %></a></li>
|
|
29
|
+
<% end %>
|
|
30
|
+
</ul>
|
|
31
|
+
</div>
|
|
32
|
+
<% else %>
|
|
33
|
+
<a href="<%= entry[:path] %>" class="<%= @navbar.active_entry?(entry, request) ? 'active' : '' %> d-inline-flex text-decoration-none ms-4"><%= entry[:title] %></a>
|
|
34
|
+
<% end %>
|
|
35
|
+
</li>
|
|
36
|
+
<% end %>
|
|
37
|
+
</ul>
|
|
38
|
+
<hr>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<% end %>
|
|
42
|
+
</div>
|
data/pg_layout/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Controllers
|
|
2
|
+
import NavbarController from './app/javascript/navbar_controller'
|
|
3
|
+
window.Stimulus.register('navbar', NavbarController)
|
|
4
|
+
|
|
5
|
+
// Bootstrap's toasts
|
|
6
|
+
import * as bootstrap from 'bootstrap'
|
|
7
|
+
document.addEventListener('turbo:load', function () {
|
|
8
|
+
const toastElList = document.querySelectorAll('.toast:not(.hide):not(.show)')
|
|
9
|
+
Array.from(toastElList).map(toastEl => new bootstrap.Toast(toastEl).show())
|
|
10
|
+
|
|
11
|
+
// Select the node that will be observed for mutations
|
|
12
|
+
const targetNode = document.getElementById('flash')
|
|
13
|
+
|
|
14
|
+
// Options for the observer (which mutations to observe)
|
|
15
|
+
const config = { attributes: true, childList: true, subtree: true }
|
|
16
|
+
|
|
17
|
+
// Callback function to execute when mutations are observed
|
|
18
|
+
const callback = (mutationList, observer) => {
|
|
19
|
+
for (const mutation of mutationList) {
|
|
20
|
+
if (mutation.type === 'childList') {
|
|
21
|
+
console.log('A child node has been added or removed.')
|
|
22
|
+
const toastElList = document.querySelectorAll('.toast:not(.hide):not(.show)')
|
|
23
|
+
Array.from(toastElList).map(toastEl => new bootstrap.Toast(toastEl).show())
|
|
24
|
+
} else if (mutation.type === 'attributes') {
|
|
25
|
+
console.log(`The ${mutation.attributeName} attribute was modified.`)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Create an observer instance linked to the callback function
|
|
31
|
+
const observer = new MutationObserver(callback)
|
|
32
|
+
|
|
33
|
+
// Start observing the target node for configured mutations
|
|
34
|
+
observer.observe(targetNode, config)
|
|
35
|
+
})
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails/generators/active_record/model/model_generator'
|
|
4
|
+
|
|
5
|
+
module PgActiveRecord
|
|
6
|
+
class ModelGenerator < ActiveRecord::Generators::ModelGenerator
|
|
7
|
+
source_paths << File.expand_path('templates', __dir__)
|
|
8
|
+
|
|
9
|
+
class_option :paranoia, type: :boolean, default: false, desc: 'Paranoid y deleted_at.'
|
|
10
|
+
class_option :discard, type: :boolean, default: false, desc: 'Discard y discarded_at.'
|
|
11
|
+
class_option :trackeo_de_usuarios, type: :boolean, default: true,
|
|
12
|
+
desc: 'Genera campos creado_por y actualizado_por.'
|
|
13
|
+
class_option :activeadmin, type: :boolean, default: false, desc: 'ActiveAdmin file'
|
|
14
|
+
|
|
15
|
+
def create_activeadmin_file
|
|
16
|
+
return unless options[:activeadmin]
|
|
17
|
+
|
|
18
|
+
template 'admin.rb',
|
|
19
|
+
File.join('app/admin', "#{table_name}.rb")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# :doc:
|
|
23
|
+
def namespace
|
|
24
|
+
nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# :doc:
|
|
28
|
+
def class_path
|
|
29
|
+
[]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def create_module_file; end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
ActiveAdmin.register <%= class_name %> do
|
|
2
|
+
permit_params <%= attributes.map { |a| ":#{a.name}" }.join(', ') %>
|
|
3
|
+
|
|
4
|
+
index do
|
|
5
|
+
selectable_column
|
|
6
|
+
id_column<% attributes.each do |at| %>
|
|
7
|
+
column :<%= at.name %><% end %>
|
|
8
|
+
actions
|
|
9
|
+
end
|
|
10
|
+
<% attributes.each do |at| %>
|
|
11
|
+
filter :<%= at.name %><% end %>
|
|
12
|
+
|
|
13
|
+
form do |f|
|
|
14
|
+
f.inputs do<% attributes.each do |at| %>
|
|
15
|
+
f.input :<%= at.name %><% end %>
|
|
16
|
+
end
|
|
17
|
+
f.actions
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# generado con pg_rails
|
|
2
|
+
|
|
3
|
+
class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
|
|
4
|
+
def change
|
|
5
|
+
create_table :<%= table_name %><%= primary_key_type %> do |t|
|
|
6
|
+
<% attributes.each do |attribute| -%>
|
|
7
|
+
<% if attribute.password_digest? -%>
|
|
8
|
+
t.string :password_digest<%= attribute.inject_options %>
|
|
9
|
+
<% elsif attribute.token? -%>
|
|
10
|
+
t.string :<%= attribute.name %><%= attribute.inject_options %>
|
|
11
|
+
<% else -%>
|
|
12
|
+
t.<%= attribute.type %> :<%= attribute.name %><%= attribute.inject_options %>
|
|
13
|
+
<% end -%>
|
|
14
|
+
<% end -%>
|
|
15
|
+
|
|
16
|
+
<% if options[:trackeo_de_usuarios] %>
|
|
17
|
+
t.references :creado_por, index: true
|
|
18
|
+
t.references :actualizado_por, index: true
|
|
19
|
+
|
|
20
|
+
<% end -%>
|
|
21
|
+
<% if options[:paranoia] %>
|
|
22
|
+
t.datetime :deleted_at
|
|
23
|
+
<% end -%>
|
|
24
|
+
<% if options[:discard] %>
|
|
25
|
+
t.datetime :discarded_at
|
|
26
|
+
<% end -%>
|
|
27
|
+
<% if options[:timestamps] %>
|
|
28
|
+
t.timestamps
|
|
29
|
+
<% end -%>
|
|
30
|
+
end
|
|
31
|
+
<% attributes.select(&:token?).each do |attribute| -%>
|
|
32
|
+
add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>, unique: true
|
|
33
|
+
<% end -%>
|
|
34
|
+
<% attributes_with_index.each do |attribute| -%>
|
|
35
|
+
add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
|
|
36
|
+
<% end -%>
|
|
37
|
+
<% attributes.select(&:tiene_nombre_de_clase_explicito?).each do |attribute| -%>
|
|
38
|
+
add_foreign_key :<%= table_name %>, :<%= attribute.tabla_referenciada %>, column: '<%= attribute.name %>_id'
|
|
39
|
+
<% end -%>
|
|
40
|
+
|
|
41
|
+
<% if options[:trackeo_de_usuarios] %>
|
|
42
|
+
add_foreign_key :<%= table_name %>, :users, column: 'creado_por_id'
|
|
43
|
+
add_foreign_key :<%= table_name %>, :users, column: 'actualizado_por_id'
|
|
44
|
+
<% end -%>
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# generado con pg_rails
|
|
2
|
+
|
|
3
|
+
class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
|
|
4
|
+
<%- if migration_action == 'add' -%>
|
|
5
|
+
def change
|
|
6
|
+
<% attributes.each do |attribute| -%>
|
|
7
|
+
<%- if attribute.reference? -%>
|
|
8
|
+
add_reference :<%= table_name %>, :<%= attribute.name %><%= attribute.inject_options %>
|
|
9
|
+
<%- elsif attribute.token? -%>
|
|
10
|
+
add_column :<%= table_name %>, :<%= attribute.name %>, :string<%= attribute.inject_options %>
|
|
11
|
+
add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>, unique: true
|
|
12
|
+
<%- else -%>
|
|
13
|
+
add_column :<%= table_name %>, :<%= attribute.name %>, :<%= attribute.type %><%= attribute.inject_options %>
|
|
14
|
+
<%- if attribute.has_index? -%>
|
|
15
|
+
add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
|
|
16
|
+
<%- end -%>
|
|
17
|
+
<%- end -%>
|
|
18
|
+
<%- end -%>
|
|
19
|
+
end
|
|
20
|
+
<%- elsif migration_action == 'join' -%>
|
|
21
|
+
def change
|
|
22
|
+
create_join_table :<%= join_tables.first %>, :<%= join_tables.second %> do |t|
|
|
23
|
+
<%- attributes.each do |attribute| -%>
|
|
24
|
+
<%- if attribute.reference? -%>
|
|
25
|
+
t.references :<%= attribute.name %><%= attribute.inject_options %>
|
|
26
|
+
<%- else -%>
|
|
27
|
+
<%= '# ' unless attribute.has_index? -%>t.index <%= attribute.index_name %><%= attribute.inject_index_options %>
|
|
28
|
+
<%- end -%>
|
|
29
|
+
<%- end -%>
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
<%- else -%>
|
|
33
|
+
def change
|
|
34
|
+
<% attributes.each do |attribute| -%>
|
|
35
|
+
<%- if migration_action -%>
|
|
36
|
+
<%- if attribute.reference? -%>
|
|
37
|
+
remove_reference :<%= table_name %>, :<%= attribute.name %><%= attribute.inject_options %>
|
|
38
|
+
<%- else -%>
|
|
39
|
+
<%- if attribute.has_index? -%>
|
|
40
|
+
remove_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
|
|
41
|
+
<%- end -%>
|
|
42
|
+
remove_column :<%= table_name %>, :<%= attribute.name %>, :<%= attribute.type %><%= attribute.inject_options %>
|
|
43
|
+
<%- end -%>
|
|
44
|
+
<%- end -%>
|
|
45
|
+
<%- end -%>
|
|
46
|
+
end
|
|
47
|
+
<%- end -%>
|
|
48
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# generado con pg_rails
|
|
4
|
+
|
|
5
|
+
<% if namespaced? -%>
|
|
6
|
+
require_dependency "<%= namespaced_path %>/application_record"
|
|
7
|
+
|
|
8
|
+
<% end -%>
|
|
9
|
+
<% module_namespacing do -%>
|
|
10
|
+
class <%= class_name %> < <%= parent_class_name.classify %>
|
|
11
|
+
audited
|
|
12
|
+
<%- if options[:paranoia] -%>
|
|
13
|
+
acts_as_paranoid without_default_scope: true
|
|
14
|
+
<%- end -%>
|
|
15
|
+
<%- if options[:discard] -%>
|
|
16
|
+
include Discard::Model
|
|
17
|
+
<%- end -%>
|
|
18
|
+
<%- if attributes.any?(&:reference?) -%>
|
|
19
|
+
|
|
20
|
+
<%- attributes.select(&:reference?).each do |attribute| -%>
|
|
21
|
+
belongs_to :<%= attribute.name %><%= ', polymorphic: true' if attribute.polymorphic? %><%= ', optional: true' unless attribute.required? %><%= ", class_name: '#{attribute.clase_con_modulo}'" if attribute.tiene_nombre_de_clase_explicito? %>
|
|
22
|
+
<%- end -%>
|
|
23
|
+
<%- end -%>
|
|
24
|
+
<%- if options[:trackeo_de_usuarios] -%>
|
|
25
|
+
|
|
26
|
+
belongs_to :creado_por, optional: true, class_name: 'User'
|
|
27
|
+
belongs_to :actualizado_por, optional: true, class_name: 'User'
|
|
28
|
+
<%- end -%>
|
|
29
|
+
<%- if attributes.any?(&:es_enum?) -%>
|
|
30
|
+
|
|
31
|
+
<%- attributes.select(&:es_enum?).each do |attribute| -%>
|
|
32
|
+
enumerize :<%= attribute.name %>, in: { completar: 0, los: 1, valores: 2 }
|
|
33
|
+
<%- end -%>
|
|
34
|
+
<%- end -%>
|
|
35
|
+
|
|
36
|
+
<%- if attributes.any?(&:required?) -%>
|
|
37
|
+
|
|
38
|
+
validates <%= attributes.select(&:required?).map { |at| ":#{at.name}" }.join(', ') %>, presence: true
|
|
39
|
+
<%- end -%>
|
|
40
|
+
<%- attributes.select(&:token?).each do |attribute| -%>
|
|
41
|
+
has_secure_token<% if attribute.name != "token" %> :<%= attribute.name %><% end %>
|
|
42
|
+
<%- end -%>
|
|
43
|
+
<%- if attributes.any?(&:password_digest?) -%>
|
|
44
|
+
has_secure_password
|
|
45
|
+
<%- end -%>
|
|
46
|
+
end
|
|
47
|
+
<% end -%>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'generators/rails/decorator_generator'
|
|
4
|
+
|
|
5
|
+
class PgDecoratorGenerator < Rails::Generators::DecoratorGenerator
|
|
6
|
+
source_root File.expand_path('templates', __dir__)
|
|
7
|
+
|
|
8
|
+
remove_hook_for :test_framework
|
|
9
|
+
|
|
10
|
+
# :doc:
|
|
11
|
+
def namespace
|
|
12
|
+
nil
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# :doc:
|
|
16
|
+
def class_path
|
|
17
|
+
[]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_module_file; end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def class_path_original
|
|
25
|
+
@class_path.first
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def parent_class_name
|
|
29
|
+
'PgEngine::BaseDecorator'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# generado con pg_rails
|
|
4
|
+
|
|
5
|
+
<%- module_namespacing do -%>
|
|
6
|
+
<%- if parent_class_name.present? -%>
|
|
7
|
+
class <%= class_name %>Decorator < <%= parent_class_name %>
|
|
8
|
+
<%- else -%>
|
|
9
|
+
class <%= class_name %>
|
|
10
|
+
<%- end -%>
|
|
11
|
+
delegate_all
|
|
12
|
+
|
|
13
|
+
# Define presentation-specific methods here. Helpers are accessed through
|
|
14
|
+
# `helpers` (aka `h`). You can override attributes, for example:
|
|
15
|
+
#
|
|
16
|
+
# def created_at
|
|
17
|
+
# helpers.content_tag :span, class: 'time' do
|
|
18
|
+
# object.created_at.strftime("%a %m/%d/%y")
|
|
19
|
+
# end
|
|
20
|
+
# end
|
|
21
|
+
end
|
|
22
|
+
<% end -%>
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# este generator tiene que llamarse ModelGenerator para que funcione el hook_to
|
|
4
|
+
# del ModelGenerator de rails
|
|
5
|
+
|
|
6
|
+
require 'generators/factory_bot/model/model_generator'
|
|
7
|
+
|
|
8
|
+
module PgFactoryBot
|
|
9
|
+
module Generators
|
|
10
|
+
class ModelGenerator < FactoryBot::Generators::ModelGenerator
|
|
11
|
+
# piso el método de FactoryBot::Generators::Base con el método original
|
|
12
|
+
# de Rails::Generators::Base
|
|
13
|
+
|
|
14
|
+
# rubocop:disable Naming/MemoizedInstanceVariableName
|
|
15
|
+
def self.source_root(path = nil)
|
|
16
|
+
@_source_root = path if path
|
|
17
|
+
@_source_root ||= default_source_root
|
|
18
|
+
end
|
|
19
|
+
# rubocop:enable Naming/MemoizedInstanceVariableName
|
|
20
|
+
|
|
21
|
+
source_root File.expand_path('templates', __dir__)
|
|
22
|
+
|
|
23
|
+
class_option(
|
|
24
|
+
:dir,
|
|
25
|
+
type: :string,
|
|
26
|
+
default: 'spec/factories',
|
|
27
|
+
desc: 'The directory or file root where factories belong'
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# Los modelos nunca tienen modulo
|
|
31
|
+
def explicit_class_option; end
|
|
32
|
+
|
|
33
|
+
# :doc:
|
|
34
|
+
def namespace
|
|
35
|
+
nil
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# :doc:
|
|
39
|
+
def class_path
|
|
40
|
+
[]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def create_module_file; end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
# {factory_attributes.gsub(/^/, ' ')}#{los_traits.gsub(/^/, ' ')}
|
|
48
|
+
def factory_definition
|
|
49
|
+
<<~RUBY
|
|
50
|
+
factory :#{singular_table_name}#{explicit_class_option} do
|
|
51
|
+
#{factory_attributes}#{los_traits}
|
|
52
|
+
end
|
|
53
|
+
RUBY
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def los_traits
|
|
57
|
+
attributes.select(&:reference?).map do |atributo|
|
|
58
|
+
{
|
|
59
|
+
clase: atributo.clase_con_modulo,
|
|
60
|
+
atributo_name: atributo.name
|
|
61
|
+
}
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Genero los valores de las factories con los helpers de Faker
|
|
66
|
+
|
|
67
|
+
def factory_attributes
|
|
68
|
+
attributes.map do |attribute|
|
|
69
|
+
if attribute.reference?
|
|
70
|
+
# "association :#{attribute.name}, factory: :#{attribute.tabla_referenciada_singular}"
|
|
71
|
+
attribute.name
|
|
72
|
+
else
|
|
73
|
+
"#{attribute.name} { #{valor_atributo(attribute)} }"
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def valor_atributo(attribute)
|
|
79
|
+
if attribute.es_enum?
|
|
80
|
+
"#{nombre_clase_completo}.#{attribute.name}.values.sample"
|
|
81
|
+
elsif attribute.type == :string
|
|
82
|
+
'Faker::Lorem.sentence'
|
|
83
|
+
elsif attribute.type == :date
|
|
84
|
+
'Faker::Date.backward'
|
|
85
|
+
elsif attribute.type == :float || attribute.type == :decimal
|
|
86
|
+
'Faker::Number.decimal(l_digits: 3, r_digits: 2)'
|
|
87
|
+
elsif attribute.type == :integer
|
|
88
|
+
'rand(1..9999)'
|
|
89
|
+
else
|
|
90
|
+
attribute.default.inspect
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# generado con pg_rails
|
|
4
|
+
|
|
5
|
+
FactoryBot.define do
|
|
6
|
+
factory :<%= singular_table_name %> do<% factory_attributes.each do |a| %>
|
|
7
|
+
<%= a %><% end %><% los_traits.each do |trait| %>
|
|
8
|
+
|
|
9
|
+
trait :<%= trait[:atributo_name] %>_existente do
|
|
10
|
+
<%= trait[:atributo_name] %> { nil }
|
|
11
|
+
<%= trait[:atributo_name] %>_id { <%= trait[:clase] %>.pluck(:id).sample }
|
|
12
|
+
end<% end %>
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'generators/pundit/policy/policy_generator'
|
|
4
|
+
|
|
5
|
+
class PgPunditGenerator < Pundit::Generators::PolicyGenerator
|
|
6
|
+
source_root File.expand_path('templates', __dir__)
|
|
7
|
+
|
|
8
|
+
remove_hook_for :test_framework
|
|
9
|
+
|
|
10
|
+
# :doc:
|
|
11
|
+
def namespace
|
|
12
|
+
nil
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# :doc:
|
|
16
|
+
def class_path
|
|
17
|
+
[]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_module_file; end
|
|
21
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# generado con pg_rails
|
|
4
|
+
|
|
5
|
+
<% if namespaced? -%>
|
|
6
|
+
require_dependency "<%= namespaced_path %>/application_policy"
|
|
7
|
+
|
|
8
|
+
<% end -%>
|
|
9
|
+
<% module_namespacing do -%>
|
|
10
|
+
class <%= class_name %>Policy < ApplicationPolicy
|
|
11
|
+
class Scope < ApplicationPolicy::Scope
|
|
12
|
+
# def resolve
|
|
13
|
+
# if policy.acceso_total?
|
|
14
|
+
# scope.all
|
|
15
|
+
# else
|
|
16
|
+
# scope.none
|
|
17
|
+
# end
|
|
18
|
+
# end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# def puede_editar?
|
|
22
|
+
# acceso_total? && !record.readonly?
|
|
23
|
+
# end
|
|
24
|
+
|
|
25
|
+
# def puede_crear?
|
|
26
|
+
# acceso_total? || user.asesor?
|
|
27
|
+
# end
|
|
28
|
+
|
|
29
|
+
# def puede_borrar?
|
|
30
|
+
# acceso_total? && !record.readonly?
|
|
31
|
+
# end
|
|
32
|
+
|
|
33
|
+
# def acceso_total?
|
|
34
|
+
# user.admin?
|
|
35
|
+
# end
|
|
36
|
+
end
|
|
37
|
+
<% end -%>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PgRails
|
|
4
|
+
class InstalarGenerator < Rails::Generators::Base
|
|
5
|
+
source_root File.expand_path('templates', __dir__)
|
|
6
|
+
|
|
7
|
+
def copy_application_policy
|
|
8
|
+
template 'pg_rails.rb', 'config/initializers/pg_rails.rb'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def clase_aplicacion
|
|
14
|
+
'cosa'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|