pg_rails 7.0.1 → 7.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|