Dallycot

 view release on metacpan or  search on metacpan

lib/Dallycot/AST/Fetch.pm  view on Meta::CPAN

package Dallycot::AST::Fetch;
our $AUTHORITY = 'cpan:JSMITH';

# ABSTRACT: Find the value associated with an identifier

use strict;
use warnings;

use utf8;
use parent 'Dallycot::AST';

use Dallycot::Util qw(maybe_promise);

use Promises       qw(deferred);
use Scalar::Util   qw(blessed);

sub new {
  my ( $class, $identifier ) = @_;

  $class = ref $class || $class;

  return bless [$identifier] => $class;
}

sub to_rdf {
  my($self, $model) = @_;

  my $label;

  if(@$self > 1) {
    # need namespace resolution
    my $uri = $model -> uri(join(":", @$self));
    return $uri if blessed $uri;
  }
  else {
    $label = $self->[0];
  }
  my $val = $model -> fetch_symbol($label);

  return $val if blessed $val;

  my $bnode = $model -> bnode;
  $model -> add_type($bnode, 'loc:BindingReference');
  $model -> add_label($bnode, $label);
  return $bnode;
}

sub identifiers {
  my ($self) = @_;

  if ( @{$self} == 1 ) {
    return $self->[0];
  }
  else {
    return [ @{$self} ];
  }
}

sub to_string {
  my ($self) = @_;

  return $self->[0];
}

sub execute {
  my ( $self, $engine ) = @_;

  my $registry = Dallycot::Registry->instance;
  if ( @$self > 1 ) {
    if ( $engine->has_namespace( $self->[0] ) ) {
      my $ns = $engine->get_namespace( $self->[0] );
      if ( $registry->has_namespace($ns) ) {
        if ( $registry->has_assignment( $ns, $self->[1] ) ) {
          return maybe_promise( $registry->get_assignment( $ns, $self->[1] ) );
        }
        else {
          my $d = deferred;
          $d->reject( join( ":", @$self ) . " is undefined." );
          return $d->promise;
        }
      }
      else {

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.255 second using v1.00-cache-2.02-grep-82fe00e-cpan-48ebf85a1963 )