Module-Generic
view release on metacpan or search on metacpan
lib/Module/Generic/Hash.pm view on Meta::CPAN
}
return( $self );
}
sub get { return( $_[0]->{ $_[1] } ); }
sub has { return( shift->exists( @_ ) ); }
sub is_empty { return( scalar( CORE::keys( %{$_[0]} ) ) ? 0 : 1 ); }
sub json
{
my $self = shift( @_ );
my $opts = {};
if( ref( $_[-1] ) eq 'HASH' )
{
$opts = pop( @_ );
}
elsif( @_ && !( @_ % 2 ) )
{
$opts = { @_ };
}
my $obj = $self->_tie_object;
my $flag = $obj->enable;
$obj->enable(0) if( $flag );
my $data = $self->{data};
# $opts->{utf8} = 1 if( !CORE::exists( $opts->{utf8} ) );
if( CORE::exists( $opts->{order} ) )
{
$opts->{canonical} = CORE::delete( $opts->{order} );
}
elsif( CORE::exists( $opts->{ordered} ) )
{
$opts->{canonical} = CORE::delete( $opts->{ordered} );
}
elsif( CORE::exists( $opts->{sort} ) )
{
$opts->{canonical} = CORE::delete( $opts->{sort} );
}
elsif( CORE::exists( $opts->{sorted} ) )
{
$opts->{canonical} = CORE::delete( $opts->{sorted} );
}
if( !CORE::exists( $opts->{canonical} ) && $opts->{pretty} )
{
$opts->{canonical} = 1;
}
if( !CORE::exists( $opts->{indent} ) && $opts->{pretty} )
{
$opts->{indent} = 1;
}
if( !CORE::exists( $opts->{relaxed} ) && $opts->{pretty} )
{
$opts->{relaxed} = 1;
}
my $j = JSON->new->allow_nonref;
my @keys = qw(
ascii latin1 utf8 pretty indent space_before space_after relaxed
canonical allow_nonref allow_unknown allow_blessed convert_blessed allow_tags
boolean_values filter_json_object filter_json_single_key_object max_depth max_size
);
foreach my $k ( @keys )
{
next unless( CORE::exists( $opts->{ $k } ) );
my $code = $j->can( $k );
if( defined( $code ) )
{
$code->( $j, $opts->{ $k } );
}
}
my $json = $j->encode( $data );
$obj->enable(1) if( $flag );
return( Module::Generic::Scalar->new( $json ) );
}
# Allow hash keys as object
sub key_object
{
my $self = shift( @_ );
if( @_ )
{
$self->_tie_object->key_object( shift( @_ ) );
}
return( $self->_tie_object->key_object );
}
# $h->keys->sort
sub keys
{
my $self = shift( @_ );
my $obj = $self->_tie_object;
my $flag = $obj->enable;
$obj->enable(1) if( !$flag );
my $rv = Module::Generic::Array->new( [ CORE::keys( %$self ) ] );
$obj->enable(0) if( !$flag );
return( $rv );
}
sub length { return( Module::Generic::Number->new( CORE::scalar( CORE::keys( %{$_[0]} ) ) ) ); }
sub map
{
my $self = shift( @_ );
my $code = CORE::shift( @_ );
return if( ref( $code ) ne 'CODE' );
return( CORE::map( $code->( $_, $self->{ $_ } ), CORE::keys( %$self ) ) );
}
sub map_array
{
my $self = shift( @_ );
my $code = CORE::shift( @_ );
return if( ref( $code ) ne 'CODE' );
return( Module::Generic::Array->new( [CORE::map( $code->( $_, $self->{ $_ } ), CORE::keys( %$self ) )] ) );
}
sub map_hash
{
my $self = shift( @_ );
my $code = CORE::shift( @_ );
( run in 1.803 second using v1.01-cache-2.11-cpan-5a3173703d6 )