The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Articulate::Syntax - Common functions and syntactic sugar for Articulate

FUNCTIONS

new_response

See Artciulate::Response.

new_request

See Artciulate::Request.

new_credentials

See Artciulate::Credentials.

new_permission

See Artciulate::Permission.

new_location

See Artciulate::Location.

new_location_specification

See Artciulate::LocationSpecification.

instantiate_array

instantiate_array accepts an arrayref of values which represent objects. For each value, if it is not an object, it will attempt to instantiate one using instantiate.

If you pass instantiate_array a value which is not an arrayref, it will assume you meant to give it an arrayref with a single item; or, if you pass it undef, it will return an empty arrayref.

The purpose of this function is to enable the following:

    package Articulate::SomeDelegatingComponent;
    use Moo;
    has delegates_to =>
      is      => 'rw',
      default => sub { [] },
      coerce  => sub{ instantiate_array(@_) };

Which means given config like the following:

    Articulate::SomeDelegatingComponent:
      delegates_to:
        - My::Validation::For::Articles
        - class: My::Validation::For::Images
          args:
            - max_width: 1024
              max_height: 768
        - class: My::Validation::For::Documents
          constructor: preset
          args: pdf

You can be guaranteed that looping through @{ $self->delegates_to } will always produce objects.

instantiate

Attempts to create an object from the hashref or class name provided.

If the value is a string, it will treat as a class name, and perform $class->new, or, if the method exists, $class->instance will be preferred (for instance, as provided by MooX::Singleton).

If the value is a hashref, it will look at the values for the keys class, constructor, and args. It will then attempt to perform $class->$constructor(@$args), unless the constructor is absent (in which case instance or new will be supplied), or if args is not an arrayref, in which case it will be passed to the constructor as a single argument (or the empty list will be passed if args is undefined).

If the value is an object, the object will simply be returned.

from_meta

  sub email_address { from_meta (shift, 'schema/user/email_address'); }

This method uses Data::DPath to retrieve a field from the metadata structure.

dpath_get

  my $value = dpath_get($structure, '/path/in/structure');

dpath_set

  dpath_set($structure, '/path/in/structure', $value);

instantiate_selection

  # in config:

  rules:
    default:
      alias: main_schema
    main_schema:
      dsn: 'csv:main.csv'
      utf8: 1

  has schemata =>
    is      => 'rw',
    default => sub { {} },
    coerce  => sub { instantiate_selection @_ };

Expects a hash. If any of the values are single-key hashes with the key 'alias' then the alias is resolved. Otherwise the value is instantiated.

If a value other than a hash is given, returns a hash with the key 'default' and the original value instantiated.

instantiate_array_selection

  rules:
    default:
      alias: two_rules
    two_rules:
      - Some::Rule
      - Some::Other::Rule

  has rules =>
    is      => 'rw',
    default => sub { {} },
    coerce  => sub { instantiate_array_selection @_ };

Expects a hash. If any of the values are single-key hashes with the key 'alias' then the alias is resolved. Otherwise the value is instantiated as an array (see instantiate_aray).

If a value other than a hash is given, returns a hash with the key 'default' and the original value instantiated as an array.

select_from

  # given this config:

  schemata:
    default:
      "[Complicated] configuration: can_be->[string, hash, whatever]"
    schema_generic:
      alias: default

  # if your class has
  sub schema { select_from schemata => @_ }

  # then you can do
  $self->schema;
  $self->schema('default'); # same thing
  $self->schema('schema_generic'); # same thing, because of alias
  $self->schemata->{default}; # This is what they all do in practice

Implements a user-friendly selection mechanism like the one implemented by Dancer::Plugin::DBIC::schema.

is_single_key_hash

  is_single_key_hash ( { foo => 123 } ); # returns 1
  is_single_key_hash ( { foo => 123 }, 'foo' ); # returns 1
  is_single_key_hash ( { foo => 123 }, 'bar' ); # returns 0

Returns 1 if the first argument is a hashref with exactly one key. If a second argument is provided, then the key, if it exists, must be equal to that argument, or the return value will be 0.

hash_merge

  my $merged = hash_merge ($parent, $child)

Returns a new hashref whose values represent a union of the parent's and the child's. The child's values overwrite the parent, in case of conflict. The merge is deep (i.e. it handles nested hashes), using Hash::Merge with right precedence.