KonoUtils¶ ↑
<img src=“https://badge.fury.io/rb/kono_utils.png” 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à - Bug -> Risoluzione problema - Improvement -> Migliorira ##Versioni ### XX.XX.XX - **Bug** lorem - **Improvement** lorem - **Feature** lorem </code>
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à contenete uno scope: search che può ricevere un hash di campi da ricercare, questo hash conterrà tutti i campi sotto definiti, volendo anche con casting passato attraverso il set_search_attributes set_search_attributes :name -> in questo modo settiamo i campi da ricercare, per maggiori informazioni guardare i commenti di questo metodo end end è possibile poi, una volta creata l'istanza della ricerca definirle uno scope preciso: @search = PariteticEntities::Search.new @search.scope = policy_scope(PariteticEntity) o @search.scope = PariteticEntity.where(:name=>10) quando si devono settare i parametri provenienti dalla form li carichiamo in questo modo: @search.update_attributes(params.require(:campo_della_ricerca).permit(:name)) Esempio di scope nel modello Admin::PariteticEntity ## # Ricerca # # * *Args* : # - search_query -> Hash of: # name: ricerca libera sul nome %nome% scope :search, ->(search_query) { unless search_query[:name].blank? where(self.arel_table[:name].matches("%#{search_query[:name]}%")) end }
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=>success_create_message(model) .., :notice=>success_update_message(model) .., :notice=>success_destroy_message(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à base generalizzate per la gestione di un modello
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 è nil
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 è il modello e value è il nome del campo enum
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: modal_edit_button 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') %> modal_delete_button(path, [options]) 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à presenti i settaggi corretti bs_readonly bs_file_download visualizza un campo per il caricamento dei files e il relativo bottone di download bs_image visualizza campo caricamento e in parte l'immagine caricata se caricata bs_label_with_container Rende possibile inserire dentro al contenitore della input un qualsiasi contenuto tramite una proc passata come opzione :content <code> content: Proc.new { bf = ActiveSupport::SafeBuffer.new bf<< f.file_field(:convenz_document) bf } </code> bs_timepicker serve includere anche la gemma: gem 'font-awesome-rails', '~> 4.3.0' #https://github.com/bokmann/font-awesome-rails
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à codice fiscale e partita iva dai rispettivi caratteri fi controllo
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 è stata aggiunta anche la gemma codice-fiscale https://github.com/topac/codice_fiscale Che permette di calcolare il codice fiscale partendo dai dati anagrafici di una persona.