NAME

Venus::Role::Encaseable - Encaseable Role

ABSTRACT

Encaseable Role for Perl 5

SYNOPSIS

package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->encase('count', 1);
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# 1

DESCRIPTION

This package modifies the consuming package and provides methods for storing, retrieving, and removing private instance variables, via the private (masked) attribute. Note: A pre-existing attribute or routine named private in the consuming package may cause unexpected issues. This role differs from Venus::Role::Stashable in that it provides getters and setters to help obscure the private instance data, whereas Stashable does not.

METHODS

This package provides the following methods:

clone

clone() (object)

The clone method clones the invocant and returns the result.

Since 4.15

clone example 1
# given: synopsis

package main;

my $clone = $example->clone;

# bless(..., "Example")

encase

encase(string $key, any $value) (any)

The encase method associates and stashes the key and value provided with the class instance and returns the value provided. If the key is already associated the value is not overwritten.

Since 4.15

encase example 1
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->encase;
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# undef
encase example 2
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->encase('count');
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# undef
encase example 3
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->encase('count', 1);
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# 1
encase example 4
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $count = $self->encase('count', $count);

  $count = $self->encase('count', $count + 1);

  $count = $self->encase('count', $count + 1);

  return $count;
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# 1
encase example 5
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $count = $self->encase('count', $count);

  return $count;
}

package main;

my $execute = Example->execute;

# Exception! Venus::Fault
encase example 6
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $count = $self->encase('count', $count);

  return $count;
}

package main;

my $example = Example->new;

$example->encase('count', 1);

# Exception! Venus::Fault

encased

encased(string $key) (any)

The encased method retrieves the value associated with the key provided, associated and stashed with the class instance.

Since 4.15

encased example 1
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->encased;
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# undef
encased example 2
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->encased('count');
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# undef
encased example 3
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  $self->encase('count', 1);

  return $self->encased('count');
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# 1
encased example 4
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $count = $self->recase('count', $count);

  $count = $self->recase('count', $count + 1);

  $count = $self->recase('count', $count + 1);

  return $self->encased('count');
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# 3
encased example 5
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->encased('count');
}

package main;

my $execute = Example->execute;

# Exception! Venus::Fault
encased example 6
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->encased('count');
}

package main;

my $example = Example->new;

$example->encased('count');

# Exception! Venus::Fault

recase

recase(string $key, any $value) (any)

The recase method associates and stashes the key and value provided with the class instance and returns the value provided. The value is always overwritten.

Since 4.15

recase example 1
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->recase;
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# undef
recase example 2
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $count = $self->encase('count', $count);

  return $self->recase('count', $count + 1);
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# 2
recase example 3
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $count = $self->recase('count', $count);

  $count = $self->recase('count', $count + 1);

  $count = $self->recase('count', $count + 1);

  return $self->recase('count', $count + 1);
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# 4
recase example 5
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $count = $self->recase('count', $count);

  return $count;
}

package main;

my $execute = Example->execute;

# Exception! Venus::Fault

uncase

uncase(string $key) (any)

The uncase method dissociatesthe key and its corresponding value from the class instance and returns the value.

Since 4.15

uncase example 1
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->uncase;
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# undef
uncase example 2
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->uncase('count');
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# undef
uncase example 3
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $self->encase('count', $count);

  return $self->uncase('count');
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# 1
uncase example 4
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  my $count = 1;

  $self->encase('count', $count);

  $count = $self->uncase('count');

  return $self->uncase('count');
}

package main;

my $example = Example->new;

# bless({}, 'Example')

# $example->execute;

# undef
uncase example 5
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->uncase('count');
}

package main;

my $execute = Example->execute;

# Exception! Venus::Fault
uncase example 6
package Example;

use Venus::Class 'with';

with 'Venus::Role::Encaseable';

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

  return $self->uncase('count');
}

package main;

my $example = Example->new;

$example->uncase('count');

# Exception! Venus::Fault

AUTHORS

Awncorp, awncorp@cpan.org

LICENSE

Copyright (C) 2022, Awncorp, awncorp@cpan.org.

This program is free software, you can redistribute it and/or modify it under the terms of the Apache license version 2.0.