Dallycot
view release on metacpan or search on metacpan
lib/Dallycot/Value/String.pm view on Meta::CPAN
package Dallycot::Value::String;
our $AUTHORITY = 'cpan:JSMITH';
# ABSTRACT: A string with an associated language
use strict;
use warnings;
use utf8;
use parent 'Dallycot::Value::Any';
use experimental qw(switch);
use Promises qw(deferred);
sub new {
my ( $class, $value, $lang ) = @_;
$class = ref $class || $class;
return bless [ $value // '', $lang // 'en' ] => $class;
}
sub to_rdf {
my ( $self, $model ) = @_;
return $model -> string( $self -> value, $self -> lang );
}
sub lang { return shift->[1] }
sub id {
my ($self) = @_;
return $self->[0] . "@" . $self->[1] . "^^String";
}
sub fetch_property {
my ( $self, $engine, $prop ) = @_;
my $d = deferred;
given ($prop) {
when ('@lang') {
$d->resolve( Dallycot::Value::String->new( $self->lang, '' ) );
}
default {
$d->resolve( Dallycot::Value::Undefined->new );
}
}
return $d->promise;
}
sub as_text {
my ($self) = @_;
my $val = $self->value;
$val =~ s{\\}{\\\\}g;
$val =~ s{\n}{\\n}g;
$val =~ s{"}{\\"}g;
if ( $self->[1] eq 'en' ) {
return qq{"$val"};
}
else {
return qq{"$val"\@} . $self->[1];
}
}
sub is_defined {
my ($self) = @_;
return length( $self->value ) != 0;
}
sub prepend {
my ( $self, @things ) = @_;
return __PACKAGE__->new( join( "", ( map { $_->value } reverse @things ), $self->value ) );
}
( run in 2.096 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )