blob: 15e052e50c137ea6de4b6c8ef9ab9efb36551b70 [file] [log] [blame]
package Krawfish::Koral::Document::FieldString;
use warnings;
use strict;
use Krawfish::Util::String qw/squote/;
use Krawfish::Util::Constants ':PREFIX';
use Role::Tiny::With;
with 'Krawfish::Koral::Document::FieldBase';
# Class for string fields
sub type {
'string';
};
sub identify {
my ($self, $dict) = @_;
# This will check, if the field is
# sortable
return $self if $self->{key_id} && $self->{key_value_id};
# Get or introduce new key term_id
my $key = KEY_PREF . $self->{key};
$self->{key_id} = $dict->add_term($key);
# Set sortable
if (my $collation = $dict->collation($self->{key_id})) {
$self->{sortable} = 1;
};
# Get or introduce new key term_id
my $term = FIELD_PREF . $self->{key} . ':' . $self->{value};
$self->{key_value_id} = $dict->add_term($term);
return $self;
};
# Inflate field
sub inflate {
my ($self, $dict) = @_;
# Key id not available
return unless $self->{key_value_id};
# Get term from term id
my $field = $dict->term_by_term_id($self->{key_value_id});
if ($field =~ /^([^:]+):(.+)$/) {
$self->{key} = substr($1, 1); # Remove prefix
$self->{value} = $2;
}
else {
warn 'Field has no valid attribute';
};
return $self;
};
# Stringification
sub to_string {
my ($self, $id) = @_;
if (!$self->{key} || ($id && $self->{key_id})) {
return '#' . $self->key_id . '=' . '#' . $self->term_id;
};
return squote($self->key) . '=' . squote($self->value);
};
1;