La if e' case sensitive?

se il contenuto della variabile attivo e’ TRUE o FALSE in maiuscolo e se
faccio
if(attivo)
spedisci
end

dovrebbe funzionare oppure la if non tiene conto del TRUE o FALSE se
sono in maiuscolo?
No perche’ se e’ FALSE a quanto pare mi spedisce lo stesso.

Ciao Mauro,

 attenzione: la stringa 'false', o il simbolo :false NON

corrispondono al valore booleano false, ovvero l’ istanza di FalseClass:
“false”.class => String
:false.class => Symbol
false.class => FalseClass
quindi , se la tua variabile attivo è ‘FALSE’ o ‘false’,
indipendentemente dal casing, verrà sempre valutata true - gli unici
valori in ruby che vengono valutati come false sono appunto false e nil,
tutto il resto è true, anche il numero 0 (zero).

Il 09/07/2010 13:22, Mauro ha scritto:

[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Andrea D.

2010/7/9 Andrea D. [email protected]:

tutto il resto è true, anche il numero 0 (zero).
Ho provato con
if attivo == “TRUE”
spedisci
end

qui succede il contrario cioe’ non spedisce anche se il contenuto di
attivo e’ TRUE.
Qualcosa mi sfugge.

Ciao Mauro,

  • Come valorizzi ‘attivo’?
  • Se stampi attivo.class cosa ti restituisce ? :slight_smile:

Paolo

2010/7/9 Mauro [email protected]:

valori in ruby che vengono valutati come false sono appunto false e nil,


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


“… static analysis is fun, again!”

OWASP Orizon project leader, http://github.com/owasp-orizon
Owasp Italy R&D director

2010/7/9 Paolo P. [email protected]:

Ciao Mauro,

  • Come valorizzi ‘attivo’?
  • Se stampi attivo.class cosa ti restituisce ? :slight_smile:

Hai ragione, mi restituisce Array.
Ho risolto con attivo.to_s == “TRUE”

2010/7/9 Paolo P. [email protected]:

di codice.
La variabile ‘attivo’ così come l’hai proposta è un flag boolean,
mentre in realtà è un vettore contenente dei dati.

Come imposti il valore della variabile attivo? :slight_smile:

E’ uno script per aggiornare dei valori in un server LDAP:
def inserisci(account)
newentry = {
“objectClass” =>
[“top”,“person”,“organizationalPerson”,“inetOrgPerson”,“posixAccount”,“VirtualMailAccount”,“VirtualForward”,“Vacation”],
“sn” => [“#{account[“cognome”]}”],
“cn” => [“#{account[“nome”]}
#{account[“cognome”]}”],
“mail” => [“#{account[“uid”]}#@dominio”],
“homeDirectory” =>
[“/var/vmail/#{account[“uid”]}”],
“vdHome” => [“/var/vmail/#{account[“uid”]}”],
“mailbox” =>
[“/var/vmail/#{account[“uid”]}/Maildir”],
“forwardActive” => [“FALSE”],
“vacationActive” => [“FALSE”],
“delete” => [“FALSE”],
“lastChange” => [“1275397200”],
“accountActive” => [“#{account[“accAttivo”]}”],
“uidNumber” => [“1004”],
“gidNumber” => [“1004”],
“uid” => [“#{account[“uid”]}”],
“userPassword” => [“#{hash}”],
“employeeNumber” => [“#{account[“codice”]}”],
“employeeType” => [“#{account[“profilo”]}”],
“description” => [“#{account[“descrizione”]}”],
“givenName” => [“#{account[“nome”]}”]

            }

poi passo i parametri alla funzione sendMail.

2010/7/9 Mauro [email protected]:

2010/7/9 Paolo P. [email protected]:

Ciao Mauro,

  • Come valorizzi ‘attivo’?
  • Se stampi attivo.class cosa ti restituisce ? :slight_smile:

Hai ragione, mi restituisce Array.
Ho risolto con attivo.to_s == “TRUE”
Giusto così per ragionare assieme però nn riesco a capire il tuo pezzo
di codice.
La variabile ‘attivo’ così come l’hai proposta è un flag boolean,
mentre in realtà è un vettore contenente dei dati.

Come imposti il valore della variabile attivo? :slight_smile:

Paolo

“… static analysis is fun, again!”

OWASP Orizon project leader, http://github.com/owasp-orizon
Owasp Italy R&D director

2010/7/9 Mauro [email protected]:

Come imposti il valore della variabile attivo? :slight_smile:

E’ uno script per aggiornare dei valori in un server LDAP:
def inserisci(account)
[snip]
probabilmente è un mio errore, ma continuo a non capire cosa ci metti
in quella variabile attivo.

Vabbè, forse poco importa visto che sembra tu abbia risolto il problema.
Occhio però, per la manutenibilità del tuo codice che stai trattando
un Array come un flag boolean e solo tramite un workarount (col
to_s==‘TRUE’) lo stai facendo andare.

Potresti valutare l’idea di un refactor di quella porzione di codice
Just my 0.02€

Paolo

“… static analysis is fun, again!”

OWASP Orizon project leader, http://github.com/owasp-orizon
Owasp Italy R&D director

Paolo P. wrote:

2010/7/9 Mauro [email protected]:

Come imposti il valore della variabile attivo? :slight_smile:

E’ uno script per aggiornare dei valori in un server LDAP:
def inserisci(account)
[snip]
probabilmente è un mio errore, ma continuo a non capire cosa ci metti
in quella variabile attivo.

Probabilmente gli arriva da questa linea dell’hash

“accountActive” => [“#{account[“accAttivo”]}”],

ma se così fosse si potrebbe rendere tutto più comprensibile al prossimo
manutentore dello script modificando il codice in modo simile a questo.

new_entry = inserisci(account)
if attivo?(new_entry)
spedisci(new_entry)
end

def attivo?(new_entry)
new_entry[“accountActive”] == [“TRUE”]
end

Ho usato la convenzione ruby di aggiungere un ? in fondo al nome dei
metodi che ritornano un boolean.

Domanda: account[“accAttivo”] ritorna un boolean che viene convertito a
stringa oppure una stringa? In quest’ultimo caso basterebbe scrivere

“accountActive” => [account[“accAttivo”]],

sempre che siano davvero necessari gli array e non basti

“accountActive” => account[“accAttivo”],
Paolo

2010/7/10 Paolo M. [email protected]:

Probabilmente gli arriva da questa linea dell’hash

“accountActive” => [“#{account[“accAttivo”]}”],

Esattamente.

end

Ho usato la convenzione ruby di aggiungere un ? in fondo al nome dei
metodi che ritornano un boolean.

Domanda: account[“accAttivo”] ritorna un boolean che viene convertito a
stringa oppure una stringa? In quest’ultimo caso basterebbe scrivere

E’ una stringa.

“accountActive” => [account[“accAttivo”]],

sempre che siano davvero necessari gli array e non basti

“accountActive” => account[“accAttivo”],

Di questo non sono sicuro, devo controllare quali sono le modalita’ in
ruby per valorizzare attributi di un albero LDAP.

In ruby tutte le espressioni restituiscono un valore. Quindi,

 attivo

è un’ espressione, come lo è

 attivo == "true"

l’ espressione

 attivo

restituisce false se attivo è false o nil, true se attivo è qualsiasi
altra cosa

l’ espressione

 attivo == "true"

restituisce true se attivo è la stringa “true”, altrimenti false.

Si tratta di capire cosa stai assegnando alla variabile attivo. Dal nome
e dall’ utilizzo che stai cercando di farne sembra che debba essere una
variabile booleana (true o false), però dalla tua risposta pare che tu
gli stia assegnando altri valori (stringa? array?). Controlla dove fai
l’assegnamento di attivo.

Il 09/07/2010 13:50, Mauro ha scritto:

valori in ruby che vengono valutati come false sono appunto false e nil,
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Andrea D.