Red.git | t/lib/ | Sentence.pm6


use Link;
use Red:api<2>;

model Sentence {
    has UInt $.id          is serial;
    has Str  $.lang        is column;
    has Str  $.sentence    is column;
    has      @.links-to    is relationship(*.id-to,   :model<Link>);
    has      @.links-from  is relationship(*.id-from, :model<Link>);

    multi method translate(::?CLASS:D: :to($lang)) {
        $.links-from.first(*.to-sentence.lang eq $lang).to-sentence
    }
    multi method translate(::?CLASS:U: $sentence, :from($lang) = "eng", :$to) {
        Link.^all.first({
            .from-sentence.sentence eq $sentence
                    && .from-sentence.lang eq $lang
                    && .to-sentence.lang eq $to
        })
                .to-sentence
    }

    method ^populate($model) {
        for "t/sentences.csv".IO.lines {
            $model.^create: |(<lang sentence> Z=> .split("\t").map({ /^\d+$/ ?? .Int !! .self })).Hash
        }
    }
}