Originariamente inviato da weppos
I range di date non esistono, quel codice Ruby è invalido.
codice:
irb(main):001:0> require 'date'
=> true
irb(main):002:0> un_secolo = Date.new(1900)..Date.new(2000)
=> #<Date: 4830041/2,0,2299161>..#<Date: 4903089/2,0,2299161>
irb(main):003:0> un_secolo.include?(Date.new(1970))
=> true
Forse non esistono ma funzionano. Che io sappia con qualsiasi classe che include Comparable (o forse basta che definisca <=>, non sono sicuro) o che definisce il metodo succ si può formare un range; Date definisce succ e include anche Comparable e tutto funziona, o c'è qualcosa che non mi torna?
Il mio problema non è il range di per se, ma il fatto che serializzandolo con il metodo to_yaml nel frammento Erb, la stringa risultante è disposta su più righe e questo fatto scombina la sintassi del file dopo l'elaborazione di Erb, producendo l'errore. Succede la stessa cosa sostituendo al range un array o un hash (se hanno più di un elemento).
codice:
irb(main):007:0> puts (Date.new(1900)..Date.new(2000)).to_yaml
--- !ruby/range
begin: 1900-01-01
end: 2000-01-01
excl: false
irb(main):008:0> puts %W[qui quo qua].to_yaml
---
- qui
- quo
- qua