NAME

DSL::Tiny::InstanceEval - Add DSL features to your class.

VERSION

version 0.001

SYNOPSIS

use Test::More;
use Test::Deep;

# put together class with a simple dsl
{
  package MyClassWithDSL;
  use Moo;                      # or Moose
  with qw(DSL::Tiny::Role DSL::Tiny::InstanceEval);

  sub _build_dsl_keywords { [ qw(add_values) ] };

  has values => (is => 'ro',
                 default => sub { [] },
                );

  sub add_values {
      my $self = shift;
      push @{$self->values}, @_;
  }
}

# make a new instance
my $dsl = MyClassWithDSL->new();

my $code = <<EOC;
add_values(qw(2 1));
add_values(qw(3));
EOC

my $return_value = $dsl->instance_eval($code);
cmp_deeply($dsl->values, bag(qw(1 2 3)), "Values were added");

done_testing;

DESCRIPTION

This is an initial release. It's all subject to rethinking. Comments welcome.

This package provides a simple interface, "instance_eval", for evaluating snippets of a DSL (implemented with DSL::Tiny::Role) with respect to a particular instance of a class that consumes the role.

ATTRIBUTES

_anon_pkg_name

Private attribute, used to set up a package to stash private stuff.

_instance_evalator

PRIVATE

There is no 'u' in _instance_evalator. That means there should be no you in there either....

Returns a coderef that is used by the instance_eval() method.

METHODS

instance_eval

Something kind-a-similar to Ruby's instance_eval. Takes a string and evaluates it using eval(), The evaluation happens in a package that has been populated with a set of functions that map to methods in this class with the instance curried out.

See the synopsis for an example.

REQUIRES

_build_dsl_keywords

Requires _build_dsl_keywords, as a proxy for being used in a class that consumes DSL::Tiny::Role.

AUTHOR

George Hartzell <hartzell@alerce.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by George Hartzell.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.