package Collection::Mem; =head1 NAME Collection::Mem - class for collections of data, stored in memory. =head1 SYNOPSIS use Collection::Mem; my $meta = new Collection::Mem:: mem=>$hash1; =head1 DESCRIPTION Class for collection of data, stored in memory. =head1 METHODS =cut use Collection; use Collection::Utl::Base; use Collection::Utl::Item; use Data::Dumper; use Test::More; use Collection::Utl::ActiveRecord; use strict; use warnings; our @ISA = qw(Collection); our $VERSION = '0.01'; attributes qw/ _mem_cache /; sub _init { my $self = shift; my %args = @_; $self->_mem_cache( $args{mem} || {} ); $self->SUPER::_init(); return 1; } sub _delete { my $self = shift; my @ids = @_; my $coll = $self->_mem_cache; delete @{$coll}{@ids}; [@ids]; } sub _create { my $self = shift; my $coll = $self->_mem_cache; if ( @_ > 1 ) { my %new_keys_vals = @_; my %res = (); # resolve hash refs to new hashes while ( my ( $key, $val ) = each %new_keys_vals ) { %{ $coll->{$key} } = %$val; $res{$key} = $coll->{$key}; } return \%res; } my %res = (); my $attrs = shift; if ( ref($attrs) eq 'HASH' ) { #merge with already exists # resolve hash refs to new hashes while ( my ( $key, $val ) = each %$attrs ) { %{ $coll->{$key} } = %$val; $res{$key} = $coll->{$key}; } } else { foreach my $value (@$attrs) { my ($max) = sort { $b <=> $a } keys %$coll; $coll->{ ++$max } = $value; $res{$max} = $value; } } return \%res; } sub _fetch { my $self = shift; my @ids = @_; my $coll = $self->_mem_cache; my %res; for (@ids) { $res{$_} = $coll->{$_} if exists $coll->{$_}; } return \%res; } sub _prepare_record { my ( $self, $key, $ref ) = @_; my %hash; tie %hash, 'Collection::Utl::ActiveRecord', hash => $ref; return \%hash; } sub _fetch_all { my $self = shift; return [ keys %{ $self->_mem_cache } ]; } sub _store { my $self = shift; } sub commit { my $self = shift; } sub list_ids { my $self = shift; return [ keys %{ $self->_mem_cache } ]; } 1; __END__ =head1 SEE ALSO MetaStore, Collection,README =head1 AUTHOR Zahatski Aliaksandr, Ezag@cpan.orgE =head1 COPYRIGHT AND LICENSE Copyright (C) 2005-2008 by Zahatski Aliaksandr This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available. =cut