Con la fantasia e originalità che sempre mi contraddistingue (colpo di
tosse), l’ho chiamato leonardo come il famoso genio tutto fare del tardo
rinascimento. Sul mio blog un breve tutorial:
Mi sembra interessante, pensi di sviluppare una interfaccia web anche
per le migrazioni e gestione automatica delle gem? Se usi Isolate invece
di Bundler ti installa le dipendenze lui, senza dover dare nessun
comando.
Io avevo iniziato a fare un programma, con sinatra, per generare una
applicazione da una ‘metadescrizione’, cioe` una Hash strutturata con i
model, l’aspetto di visualizzazione dei dati (campo -> controllo form)
etc…
Quello che hai fatto te eun approccio diverso, e un generatore di
codice RoR il quale, quando il programma ha raggiunto il limite delle
flessibilitapuo essere sviluppato ulteriormente do uno sviluppatore
Rails.
Ciao,
il progetto è rivolto agli sviluppatori quindi credo rimarrà un
generatore da console. Non genera un applicazione finita ma uno
scheletro di partenza da sviluppare, meno nudo dello scaffold ma
richiede la mano finale. Non ho molta fede negli altri tipi di prodotti
perchè poco flessibili anche se sarei felice di cambiare opinione.
Ciao,
il progetto rivolto agli sviluppatori quindi credo rimarr un
generatore da console. Non genera un applicazione finita ma uno
scheletro di partenza da sviluppare, meno nudo dello scaffold ma
richiede la mano finale. Non ho molta fede negli altri tipi di prodotti
perch poco flessibili anche se sarei felice di cambiare opinione.
io sono riuscito a raggiungere i limit di rails_admin activeadmin (che
comunque fatto discretamente imho) e mezza dozzina di altri in due
ore, avessi rilasciato il tuo generatore due mesi fa ti avrei dato pi
feedback
Domanda veloce: come gestisci le associazioni?
E gli upload?
Per qualche ragione a me ignota tutte le interfacce di
amministrazione automatica tendono a
a) usare una select per le associazioni. Bello, finch hai < 100
record possibili da associare…
b) scordarsi che possibile fare upload di file
gabriele renzi wrote in post #1018084:
Per non avere select con troppi dati, in genere io
uso qualche filtro per proporre scelte pi piccole ad es. se devi
scegliere la provincia puoi prima chiedere la regione e ridimensionare
la select via ajax. Tu avevi qualche idea?
io preferisco input box + autosuggest (sta in jquery ui o tools, non
mi ricordo mai) + callback che include un hidden field, anche non
avendo un sistema particolarmente smart per la search (es: “like
‘foo%’” in sql ok).
Questo per l’associazione singola, bottoncino “add more” per quelle
multiple.
E’ relativamente semplice da automatizzare come generazione, rispetto
alla select richiede un po’ di aiuto dal controller, ma imo una
soluzione ok.
Sto rilasciando un fix ma dopo di questo volevo migliorare qualcosina
come
la sezione test nella quale manca ancora l’autenticazione e la sezione
ajax che pensavo di colmare con capibara+selenium. Volevo anche
introdurre jquery ui.
io sono riuscito a raggiungere i limit di rails_admin activeadmin (che
comunque fatto discretamente imho) e mezza dozzina di altri in due
ore, avessi rilasciato il tuo generatore due mesi fa ti avrei dato pi
feedback
Domanda veloce: come gestisci le associazioni?
E gli upload?
Per qualche ragione a me ignota tutte le interfacce di
amministrazione automatica tendono a
a) usare una select per le associazioni. Bello, finch hai < 100
record possibili da associare…
b) scordarsi che possibile fare upload di file
PS: il passato di “choose” “chose” non “chosed”
Ops, grazie per la segnalazione
Riguardo le associazioni: al momento non le gestisco ma di default viene
incluso formtastic che le gestisce tramite select. Non è semplice
trovare un sistema che vada bene per tutto, per questo scrivevo che
serve la mano finale. Per non avere select con troppi dati, in genere io
uso qualche filtro per proporre scelte più piccole ad es. se devi
scegliere la provincia puoi prima chiedere la regione e ridimensionare
la select via ajax. Tu avevi qualche idea?
Sto rilasciando un fix ma dopo di questo volevo migliorare qualcosina
come
la sezione test nella quale manca ancora l’autenticazione e la sezione
ajax che pensavo di colmare con capibara+selenium. Volevo anche
introdurre jquery ui.
Mi sembra una buona soluzione, è molto più complessa di una select ma è
anche più vantaggioso ottenerla “gratis” dal generatore ed eventualmente
sostituirla con una select quando conviene quella. Ci penso, grazie per
il consiglio
Stavo implementando il supporto per rspec ed aggiornare i test per
l’autenticazione. Per testare la sezione ajax utilizzo
capybara+selenium, il driver funziona molto bene con firefox anche su
windows (cosa abbastanza rara) per cui ho scelto questa accoppiata. Ho
qualche indecisione se utilizzare le fixtures o factory girl che non ho
mai usato ma sembra molto valido, che dite?
Sembra molto comodo ma il dubbio che ho è quando si ha a che fare con
tanti dati e tante tabelle. Rimane gestibile o sono più leggibili dati
sistemati dentro files yaml ?
assolutamente, ti incollo un pezzo di codice per renderti l’idea:
genera sequenze, es: user1, user2, etc…
Factory.sequence :username do |n|
“user#{n}”
end
models
Factory.define :user do |u|
u.name { Factory.next :username }
end
Factory.define :project do |p|
p.name { Factory.next :name } # => genero un nome univoco
p.user { Factory :user }
end
Factory.define :unit do |u|
u.project { Factory :project }
u.description { “bla bla bla” }
u.started_at { Time.now }
end
come, puoi vedere, in un solo file ho inserito dati e tabelle senza
particolari
problemi, con tanto di generatore di sequenze. c’ chi usa file separati,
ma
dipende da gusti ed esigenze.
posso sovrascrivere le impostazioni durante i test, per esempio:
@user = Factory.create(:user, :name => ‘pippo’) @project = Factory(:project, :user => @user) # => stessa cosa, senza
chiamare il
metodo #create
genero un’istanza non salvata, utile per testare le validazioni
@modello = Factory.build :user
sinceramente, farsi gli YAML a mano lo trovo noioso e poco leggibile (a
prescindere che vengono creati dai generatori di rails). preferisco
scrivere
codice ruby
Grazie per gli esempi, in effetti semplifica la vita e per questo motivo
l’ho inserito.
Ora invece un problemino sul quale mi sono scontrato già in un passato
recente:
qualche idea su come si possa estendere un generatore senza doverlo per
forza sostituire?
Per modificare le spec delle viste spec/views/risorsa/*_rspec.rb devo
modificare la def value_for nel generatore per cui, come al solito, le
cose si complicano.
Per modificare rspec riesco solo modificando l’intero generatore
dedicato allo scaffold (o leosca nel mio caso) che però è abbastanza
invasivo e mi costringe a continui allineamenti. Io vorrei solo fare
l’override di quella def come una comune classe e con un qualcosa del
genere:
module Rspec
module Generators
class ScaffoldGenerator
(quà c'era la parte che non volevo modificare, sotto la def
modificata)
protected
def value_for(attribute)
case attribute.type
when :string
"#{attribute.name.titleize}".inspect
when :boolean
"Ico_x".inspect
else
attribute.default.inspect
end
end
end
end
end
Non viene trovato il generatore
error rspec [not found]
Se eredita da Base lo trova ma lo sostituisce ed ovviamente non funziona
più una fava.
class RspecGenerator < Rails::Generator::Base
[... tuo codice .. ]
end
quando chiami il generatore di rspec, dovrebbe caricare anche il tuo
file per
ultimo, che a sua volta dovrebbe riaprire la classe ed inserire il
codice che ti
serve.
un altro approccio pi semplice potrebbe essere quello di scriverti un
modulo
separato, ed estendere il generatore di rspec. in questo caso stai
ribaltando la
logica che avevi adottato: anzich estendere il tuo generatore con quello
di
rspec, fai il contrario
Grazie Andrea per la pazienza ma non funziona, ho provato anche i
percorsi che mi hai suggerito ma l’unico che rileva è
/[app path]/lib/generators/rspec/scaffold/scaffold_generator.rb
nella vista utilizzo il metodo pippo ma non viene nemmeno elaborata
perchè sembra che il generatore venga sostituito con la mia estensione
ed in pratica risulta vuoto.
Se invece eseguo il generatore originale viene sollevato l’errore del
metodo pippo che non rileva.
Purtroppo non ho altro tempo, creo la def dentro la vista e vada via il
ciapet
avendo un sistema particolarmente smart per la search (es: “like
‘foo%’” in sql ok).
Questo per l’associazione singola, bottoncino “add more” per quelle multiple.
E’ relativamente semplice da automatizzare come generazione, rispetto
alla select richiede un po’ di aiuto dal controller, ma imo una
soluzione ok.
Per fare questo con le select singole e multiple uso recordselect, nelle
versioni rails 2.x e 3.x manutenute da scambra e vhochstein, la versione
di
vhochstein usa jquery.
Per le associazioni multiple con subform faccio come dice ryanb:
Ma non sono molto soddisfatto, se qualcuno avesse qualche idea
aggiuntiva da
esaminare sarei interessato.
Per il discorso sulle interfacce di amministrazioni automatiche nomino
activescaffold: come altri non genera codice e personalmente lo uso
dagli albori
di rails 2 quando aveva appena spesso di chiamarsi ajaxscaffold.
Si: supporta gli upload e tutte le relazioni di activerecord pi o meno
facilmente, secondo me scritto molto bene e meriterebbe uno sforzo
comunitario
maggiore, prima c’era ma adesso mi sembra si sia perso con il fork di
vhochstein
che per l’unico che funziona su 3.x
Link all’API per i curiosi:
Le mie 2 monetine.
Saluti,
Antonio B.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
sto provando il generatore di applicazioni leonardo . mi è piaciuto
molto perchè genera tantissimo codice, un’ interfaccia accattivante
etc .
Ho trovato un modo “semplice” per ordinare i campi di una view al
sito : http://it.asciicasts.com/episodes/228-colonne-di-tabelle-ordinabili.
sono molto grato se potessi capire dove inserire queste poche righe di
codice per poterle utilizzare in ogni view generata da leonardo.
Grazie per il consiglio sulle associazioni, a breve gli darò
un’occhiata. Attualmente sto implementando le risorse nidificate e sto
anche rivedendo tutto il codice.
Io non amo le interfacce da amministrazione, introducono una doppia
manutenzione che spesso causa disallineamenti e le versioni “attive” che
lavorano “al volo” tipo activescaffold (anche se una delle prime
versioni) vanno bene fin quando non ci devi mettere mano. Forse non è
sempre fattibile, ma io preferisco le integrazioni in un’unica
interfaccia con un’unica gestione dei ruoli.