BaseEditingBootstrap
WIP
Installation
Add this line to your application's Gemfile:
gem "base_editing_bootstrap"
And then execute:
$ bundle
Or install it yourself as:
$ gem install base_editing_bootstrap
Then run installer:
$ bundle exec rails g base_editing_bootstrap:install
Generators
Then Install dependency (if you run base_editing_bootstrap:install you are good to go):
bundle exec rails g pundit:install
Aggiungere ad ApplicationController
include Pundit::Authorization
Installare bootstrap e questo dipende dal sistema scelto di assets bundling.
La versione più semplice è attraverso: https://github.com/rails/cssbundling-rails
Una volta installato basta lanciare bin/rails css:install:bootstrap come da
documentazione e avrete la vostra versione di boostrap installata.
Installare gem "factory_bot_rails"
,
Optional configurarlo correttamente in application.rb
config.generators do |g|
g.test_framework :rspec
g.fixture_replacement :factory_bot
g.factory_bot dir: 'spec/factories'
end
Initializers
E' possibile configurare BaseEditingBootstrap con alcune impostazioni:
BaseEditingBootstrap.configure do |config|
##
# Controller da cui derivare poi il BaseEditingController da cui derivano
# tutti i controller sottostanti
# @default "ApplicationController"
# config.inherited_controller = 'ApplicationController'
##
# Configurazione per alterare lo standard di azione post aggiornamento record
# il default è andare nella pagina di editing del record
# possibili valori :edit , :index
# config_accessor :after_success_update_redirect, default: :edit
##
# Configurazione per alterare lo standard di azione post creazione record
# il default è andare nella pagina di editing del record
# possibili valori :edit , :index
# config_accessor :after_success_create_redirect, default: :edit
end
Usage
Utilizzo per modello base, in questo esempio prendiamo come modello Post come esempio del dummy.
-
Creare il Modello ed includere
include BaseEditingBootstrap::BaseModel
-
La factory nelle spec deve contenere il trait
with_invalid_attributes
per definire la situazione di dati per record non valido. ES:trait :with_invalid_attributes do name {nil} # name dovrebbe essere obbligatorio nel modello end
-
Creare Controller:
class PostsController < BaseEditingController end
-
Aggiungere la rotta:
resources :posts
-
Creare la policy:
class PostPolicy < BaseModelPolicy def editable_attributes [ :title, :description ] end def permitted_attributes [ :title, :description ] end def search_result_fields [:title] end end
-
[OPTIONAL] nel caso si volesse fare override dei campi della form:
Per il campo che si vuole fare override creare un nuovo file nella cartella del modelloapp/views/posts/post/form_field/_NOME_CAMPO.html.erb
al cui interno renderizzare il campo come si preferisce:<%# locals: (form:, field:) -%> <%= form.text_field(field) %>
-
[OPTIONAL] la medesima cosa è possibile fare con il rendering dei campi delle celle della tabella della pagina index.
La cartella da generare in questo caso sarà:app/views/posts/post/cell_field/_NOME_CAMPO.html.erb
<%# locals: (obj:,field:) -%> <td><%= obj.read_attribute(field) %></td>
-
[OPTIONAL] Base overrides:
E' possibile anche fare un override generico dei campi, sono previsti questi tipi di partial legati al tipo di dati:
Cell Field:- created_at => timestamps.html.erb
- updated_at => timestamps.html.erb
- default => base.html.erb Form Field
- Integer => _integer.html.erb
- Float => _decimal.html.erb
- Decimal => _decimal.html.erb
- DateTime => _detetime.html.erb
- Date => _date.html.erb
- Enum => _enum.html.erb
Per gli enum, le traduzioni dei labels di ogni valore provvengono da i18n
attraverso l'helper:
Utilities::EnumHelper#enum_translation
il quale utilizza il nome dell'attributo con - Default/String => _base.html.erb
In futuro si prevede di aggiungere automatismi per renderizzare senza l'intervento dell'utente dei campi.
-
[OPTIONAL] Search Form:
Per poter aggiungere una form di ricerca basta aggiungere alla policy del modello in questione i campi di ricerca che verranno poi utilizzati da ransack per eseguire le ricerche
ES:# file app/policies/post_policy.rb #... def search_fields [:title_i_cont] end #...
Contributing
Contribution directions go here.
License
The gem is available as open source under the terms of the MIT License.