File-KDBX
view release on metacpan or search on metacpan
lib/File/KDBX/Object.pm view on Meta::CPAN
package File::KDBX::Object;
# ABSTRACT: A KDBX database object
use warnings;
use strict;
use Devel::GlobalDestruction;
use File::KDBX::Constants qw(:bool);
use File::KDBX::Error;
use File::KDBX::Util qw(:uuid);
use Hash::Util::FieldHash qw(fieldhashes);
use List::Util qw(any first);
use Ref::Util qw(is_arrayref is_plain_arrayref is_plain_hashref is_ref);
use Scalar::Util qw(blessed weaken);
use namespace::clean;
our $VERSION = '0.906'; # VERSION
fieldhashes \my (%KDBX, %PARENT, %TXNS, %REFS, %SIGNALS);
sub new {
my $class = shift;
# copy constructor
return $_[0]->clone if @_ == 1 && blessed $_[0] && $_[0]->isa($class);
my $data;
$data = shift if is_plain_hashref($_[0]);
my $kdbx;
$kdbx = shift if @_ % 2 == 1;
my %args = @_;
$args{kdbx} //= $kdbx if defined $kdbx;
my $self = bless $data // {}, $class;
$self->init(%args);
$self->_set_nonlazy_attributes if !$data;
return $self;
}
sub _set_nonlazy_attributes { die 'Not implemented' }
sub init {
my $self = shift;
my %args = @_;
while (my ($key, $val) = each %args) {
if (my $method = $self->can($key)) {
$self->$method($val);
}
}
return $self;
}
sub wrap {
my $class = shift;
my $object = shift;
return $object if blessed $object && $object->isa($class);
return $class->new(@_, @$object) if is_arrayref($object);
return $class->new($object, @_);
}
sub label { die 'Not implemented' }
my %CLONE = (entries => 1, groups => 1, history => 1);
sub clone {
( run in 0.734 second using v1.01-cache-2.11-cpan-39bf76dae61 )