KonoUtils
<img src=“
” alt=“Gem Version” />
Progetto contenente una serie di classi, debitamente documentata che debbono servire da libreria di utilità per i vari progetti utilizzati da Archimedia.
Installazione
aggiungere nel proprio gemfile
gem 'kono_utils'
bundle
Generatore:
bin/rails g kono_utils:install
che istalla le dipendenze con yarn e aggiunge il:
require kono_utils/utilities
Upgrade From 0.x
After bundle update make
bin/rails g kono_utils:install
so you have the yarn packages appended
Controllers/Views
ChangeLog
Aggungere una rotta all'applicativo
get '/changelog', to: 'kono_utils/change_log#index', as: :changelog
Aggiungere un file nella root del progetto:
CHANGELOG.md
contenuto esempio:
<code>
##Legenda:
- Feature -> Novit
BaseSearch
Classe per semplificare il sistema di organizzazione dei modelli di ricerca, unendo anche la
configurazione della form di ricerca utilizzando l'helper search_form
Utilizzo
TODO completare spiegazione utilizzo(vedi commenti classe)
Creare una classe modello per gestire la ricerca partendo da BaseSearch
module Admin::PariteticEntities
class Search < KonoUtils::BaseSearch
set_search_model Admin::PariteticEntity -> settare il modello a cui si vuole eseguire effettivamente la ricerca
dovr
Concerns
ActiveRecordTranslation
Serve per aggiungere ad Active Record funzioni corte per la traduzione, includere in un'inizializzatore
ActiveRecord::Base.include KonoUtils::Concerns::ActiveRecordTranslation
SuccessMessage
Include 3 funzioni da poter utilizzare per stampare il messaggio di default di conferma
salvataggio,cancellazione,aggiornamento di un modello come notice in un controller:
.., :notice=>(model)
.., :notice=>(model)
.., :notice=>(model)
Base Modals
Un Concern per poter semplificare la vita al controller di salvataggio dati da modals
Utilizzo
class Buildings::FloorsController < ApplicationController
include KonoUtils::Concerns::BaseModals
def create
@obj = @parent_model.floors.build(update_params)
super
end
private
def load_obj
@obj = @parent_model.floors.find(params[:id])
end
def update_params
params.require(:floor).permit(:name)
end
def save_response
respond_to do |f|
if @obj.valid?
@obj.save
f.json do
render_part_to_json('buildings/floors/panel.html', {:piano => @obj})
end
else
f.json do
render_part_to_json('buildings/floors/modal_form.html', {:piano => @obj, :id => ''}, 400)
end
end
end
end
def load_parent_assoc
@parent_model = Building.find(params[:building_id])
end
end
#TODO inserire documentazione o generatori per creare codice velocemente, con javascript (Kn.utilities.BasePannel)
# e viste con row modal ecc
Base Editing
Un Concern che racchiude tutte le funzionalit
Utilizzo
Includere in un controller da cui derivare tutti i controller dei modelli da editare questo concern chiamandolo BaseEditingController
include KonoUtils::Concerns::BaseEditing
creare un helper per questo controller e inserirci il modulo degli helper
include KonoUtils::BaseEditingHelper
nelle policies poi creare una policy che includa KonoUtils::BaseEditingPolicyConcern
da cui poi derivare tutte le altre
Application Helper
Modulo che include varie utilities da poter utilizzare:
Utilizzo
will_paginate_bst
esegue will_paginate con il renderer per bootstrap
<%=will_paginate_bst(collection)%>
namespace_content
genera un div contenitore con la classi derivate da controller e azione
<%= namespace_content do %>
<%= yield %>
<% end %>
true_false_label
stampa un label per bootstrap con true o false rispetto al valore passato
<%= true_false_label(true) %> =>
bootstrap_please_wait
Genera una modal da riutilizzare per far aspettare determinate operazioni al client
<%= bootstrap_please_wait %>
Ricordarsi di aggiungere nel JS:
$('#processing_wait').modal() -> per visualizzarlo
$('#processing_wait').modal('hide') -> per nasconderlo
search_form
Genera una form di ricerca con bootstrap, utilizzando la classe BaseSearch.
TODO completare spiegazione utilizzo(vedi commenti classe)
print_rescue_date
Stampa la data standard se questa non
title_mod(model)
Scrive il titolo per modifica del modello
title_new(model)
Scrive il titolo per new del modello
title_newa(model)
Scrive il titolo per il modello al femminile
enum_collection
Genera l'hash da passare come collection alle selectbox, esegue anche la traduzione con locale
enum_translation
Si occupa di tradurre un determinato valore di un enum
Le traduzioni dentro al locale devono essere fatte in questo modo:
it:
activerecord:
attributes:
estimate_before/value:
na: NA
very_insufficient: 1
insufficient: 2
sufficient: 3
excellent: 4
dove in questo caso estimate_before
modal_form_generator
Si occupa di gnerare una modal di bootstrap con all'interno una form
ES:
<%= modal_form_generator(id: id, title: student.mn, form_cfgs: [[school_turn, student]]) do |f| %>
<%= f.input :person, as: :select, collection: school_turn.possible_students.collect { |p| [p.nominativo, p.id] } %>
<%= f.input :year, as: :bs_readonly, :display_field => :nome %>
<%= render 'tikal_dish_core/school_turns/turns_row.html', f: f %>
<% end %>
possibile anche passare una proc per generare i bottoni della modal in modo differente dallo standard, vedere documentazione
modal_edit_button
Genera il bottone per editazione con una modal del contenuto,
gli viene passato un block contenente la modal da lanciare per l'editazione,
solitamente generata con modal_form_generator.
come parametri viene passato l'id del target che si aspetta di richiamare
<code>
ES:
do |id|
render 'tikal_core/people/person_contacts/modal_form', :contact => contact, :id => id %>
end
Options:
- align: left|rigth
- updatable_content: elemento da rimpiazzare con il partial restituito
- class: classi aggiuntive per selezionare meglio il bottone
- bnt_icon: Symbol che identifica che icona utilizzare per il bottone
</code>
modal_delete_button
Genera il bottone per la cancellazione di un record, viene creata una relativa modal
per la conferma
<code>
ES:
<%= modal_delete_button(cliente_referente_path(referente.cliente, referente, :json),
callback_remove: "##{id}",
:bnt_icon => 'times fw') %>
(path, [])
path -> resource to delete
options:
* confirm : Text to display in modal
* align : left|right
* callback_remove : id dell'elemento da rimuove una volta avuto successo il javascript di cancellazione
* bnt_icon : Symbol che identifica che icona utilizzare per il bottone [:times]
</code>
multiple_elements_table
Genera la struttura di una tabella per la gestione dei campi nested multipli.
multiple_elements_table( "form di formtastic","relazione nel modello nested","elenco campi da visualizzare")
possibile blocco: vedi docs
<code>
<%= f.inputs :name => PriceRange.mnp, class: 'form-inline CLASSE_CONTAINER' do %>
<%= multiple_elements_table(f, :price_ranges, [:from_val, :to_val, :price]) %>
<% end %>
</code>
Ricordarsi poi di aggiungere negli assets anche la funzione per duplicare le righe e per cancellarle
<code>
$('.CLASSE_CONTAINER').multiple_table()
</code>
Nel modello dobbiamo inserire i comandi per il nested:
<code>
has_many :price_ranges, :dependent => :destroy
accepts_nested_attributes_for :price_ranges, allow_destroy: true
validates_associated :price_ranges
</code>
Nella policy/controller dobbiamo preoccuparci di avere anche i permitted attributes corretti
<code>
:price_ranges_attributes => [:from_val, :to_val, :price, :id, :_destroy]
</code>
bs_tree
Genera un'albero con bootstrap-tree
deve ricevere un array di dati da trasformare in json.
per come scrivere il parametro data vedi
https://github.com/jonmiles/bootstrap-treeview
<code>
bs_tree(
[
{
:text => 'ciao',
state:
{
expanded: false
},
nodes:
[
{
text: 'pipo'
}
]
},
{
:text => 'marino'
}
]
)
</code>
Inputs Formtastic per bootstrap
Una serie di inputs per formtastic con bootstrap
Utilizzo
Ricordiamo di mettere kono_utils come gemma sucessivamente a formtastic.
se si vogliono anche gli input :
bs_aceeditor
bs_datetimepicker inject_js => True|False|Hash per ozioni js
- server_format: 'YYYY-MM-DD',
- server_match: '/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/',
- format: 'DD/MM/YYYY HH:mm'
bs_datepicker Come il bs_datetimepicker_input ma con gi
Utilities Style CSS
Spacer
classi per una spaziatura verticale , utilizzare
passando la classe generale v-space e poi il valore scelto: space-x1
ogni valore dello spacer rappresente 0.2em
da 1 a 20 come valore di moltiplicatore
Utilizzo
<div class="kono-v-spacer space-x2"></div> => 0.4em
Fiscal code
Classe KonoUtils::FiscalCode per verificare validit
Utilizzo
KonoUtils::FiscalCode::ControllaCF(codice_fiscale, strict = false) Controllo dell'esattezza del codice fiscale
verificando il carattere di controllo
KonoUtils::FiscalCode::ControllaPI(partita_iva) Controllo dell'esattezza della partita iva dal carattere di controllo
Inoltre rispetto a questo argomento