Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263

    [Rails] Codice YAML all'interno di una fixture

    Dovrei inserire nel campo di un database un range di date (serializzato con YAML), per farlo ho scritto questa fixture
    codice:
    15  massively_parallel_computing:
    16    id: 3
    17    title: Proc. of the Workshop on Massively Parallel Computing
    18    date: <%= (Date.new(1992, 3, 9)..Date.new(1992, 3, 12)).to_yaml %>
    19    location: Leysin (Switzerland)
    che però mi restituisce un errore
    codice:
    The exact error was: ArgumentError: syntax error on line 23, col 11: `  location: Leysin (Switzerland)'
    ovvero, il codice YAML che ne viene fuori dalla serializzazione del range manda in pappa la sintassi. La stessa cosa succede per qualsiasi oggetto che serializzato produce del codice su più righe (un array o un hash per esempio) ma non succede per un oggetto che, serializzato, procude una sola riga di codice YAML (ad esempio una sola data).

    Detto questo, è possibile fare quello che voglio fare? E se è possibile, come si fa?

  2. #2
    I range di date non esistono, quel codice Ruby è invalido.
    Che tipo di risultato vuoi ottenere?

    Quel range a cosa corrisponde? Ore? Minuti? Anni? Stringa?

  3. #3
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    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

  4. #4
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Originariamente inviato da toraz
    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?
    Per dovere di cronaca ho detto una bestialità. Serve che la classe definisca il metodo <=>, e succ non centra una mazza.

  5. #5
    codice:
    date: |
    <%= (Date.new(1992, 3, 9)..Date.new(1992, 3, 12)).to_yaml %>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.