Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Meta::Builder(3)      User Contributed Perl Documentation     Meta::Builder(3)

NAME
       Meta::Builder - Tools for creating Meta objects to track	custom
       metrics.

DESCRIPTION
       Meta programming	is becomming more and more popular. The	popularity of
       Meta programming	comes from the fact that many problems are made
       significantly easier. There are a few specialized Meta tools out	there,
       for instance <Class:MOP>	which is used by Moose to track	class
       metadata.

       Meta::Builder is	designed to be a generic tool for writing Meta
       objects.	Unlike specialized tools, Meta::Builder	makes no assumptions
       about what metrics you will care	about. Meta::Builder also mkaes	it
       simple for others to extend your	meta-object based tools	by providing
       hooks for other packages	to add metrics to your meta object.

       If a specialized	Meta object tool is available ot meet your needs
       please use it. However if you need a simple Meta	object to track	a
       couple metrics, use Meta::Builder.

       Meta::Builder is	also low-sugar and low-dep. In most cases you will not
       want a class that needs a meta object to	use your meta-object class
       directly. Rather	you will usually want to create	a sugar	class that
       exports enhanced	API functions that manipulate the meta object.

SYNOPSIS
       My/Meta.pm:

	   package My::Meta;
	   use strict;
	   use warnings;

	   use Meta::Builder;

	   # Name the accessor that will be defined in the class that uses the meta object
	   # It	is used	to retrieve the	classes	meta object.
	   accessor "mymeta";

	   # Add a metric with two actions
	   metric mymetric => sub { [] },
		  pop => sub {
		      my $self = shift;
		      my ( $data ) = @_;
		      pop @$data;
		  },
		  push => sub {
		      my $self = shift;
		      my ( $data, $metric, $action, @args ) = @_;
		      push @$data => @args;
		  };

	   # Add an additional action to the metric
	   action mymetric => (	get_ref	=> sub { shift });

	   # Add some predefined metric	types +	actions
	   hash_metric 'my_hashmetric';
	   lists_metric	'my_listsmetric';

       My.pm:

	   package My;
	   use strict;
	   use warnings;

	   use My::Meta;

	   My::Meta->new( __PACKAGE__ );

	   # My::Meta defines mymeta() as the accessor we use to get our meta object.
	   # this is the ONLY way to get the meta object for this class.

	   mymeta()->mymetric_push( "some data"	);
	   mymeta()->my_hashmetric_add(	key => 'value' );
	   mymeta()->my_listsmetric_push( list => qw/valueA valueB/ );

	   # It	works fine as an object/class method as	well.
	   __PACKAGE__->mymeta->do_thing(...);

	   ...;

USING
       When you	use Meta::Builder your class is	automatically turned into a
       subclass	of Meta::Builder::Base.	In addition several "sugar" functions
       are exported into your namespace. To avoid the "sugar" functions	you
       can simply sublass Meta::Builder::Base directly.

EXPORTS
       metric( $name, \&generator, %actions )
	   Wraper around "caller-"add_metric()>. See Meta::Builder::Base.

       action( $metric,	$name, $code )
	   Wraper around "caller-"add_action()>. See Meta::Builder::Base.

       hash_metric( $name, %additional_actions )
	   Wraper around "caller-"add_hash_metric()>. See Meta::Builder::Base.

       lists_metric( $name, %additional_actions	)
	   Wraper around "caller-"add_lists_metric()>. See
	   Meta::Builder::Base.

       before( $metric,	$action, $code )
	   Wraper around "caller-"hook_before()>. See Meta::Builder::Base.

       after( $metric, $action,	$code )
	   Wraper around "caller-"hook_after()>. See Meta::Builder::Base.

       accessor( $name )
	   Wraper around "caller-"set_accessor()>. See Meta::Builder::Base.

       make_immutable()
	   Overrides all functions/methods that	alter the meta objects meta-
	   data. This in effect	prevents anything from adding new metrics,
	   actions, or hooks without directly editing the metadata.

AUTHORS
       Chad Granum exodist7@gmail.com

COPYRIGHT
       Copyright (C) 2010 Chad Granum

       Meta-Builder is free software; Standard perl licence.

       Meta-Builder is distributed in the hope that it will be useful, but
       WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A	PARTICULAR PURPOSE.  See the license
       for more	details.

perl v5.32.0			  2020-08-08		      Meta::Builder(3)

NAME | DESCRIPTION | SYNOPSIS | USING | EXPORTS | AUTHORS | COPYRIGHT

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Meta::Builder&sektion=3&manpath=FreeBSD+12.2-RELEASE+and+Ports>

home | help