add a couple bits and pieces
Matt S Trout [Wed, 20 Jan 2010 11:04:08 +0000 (11:04 +0000)]
lib/DBIx/Data/Collection/Set.pm
lib/DBIx/Data/Store/CRUD.pm

index a6188f4..3e965ba 100644 (file)
@@ -3,6 +3,7 @@ package DBIx::Data::Collection::Set;
 use Moose;
 use Method::Signatures::Simple;
 use Data::Perl::Stream::Array;
+use Data::Perl::Collection::Set;
 use Scalar::Util qw(weaken refaddr);
 
 has _store => (is => 'ro', required => 1, init_arg => 'store');
@@ -212,6 +213,20 @@ method as_stream {
   Data::Perl::Stream::Array->new(array => $self->_member_cache);
 }
 
+# theoretically inefficient except that if we're being asked this then
+# either the data should have been pre-loaded or we're going to get all
+# elements anyway
+
+method count {
+  scalar $self->flatten
+}
+
+method map ($sub) {
+  Data::Perl::Collection::Set->new(
+    members => [ map $sub->($_), $self->flatten ]
+  )
+}
+
 method _set_caches ($members) {
   $self->_set_member_cache($members);
   $self->_set_key_cache_members($members);
index c81dd0b..836f872 100644 (file)
@@ -14,6 +14,8 @@ has 'insert_command_constructor' => (is => 'ro');
 
 has "select_column_order" => (is => 'ro');
 
+has implicit_arguments => (is => 'ro');
+
 method new_select_command ($args) {
   die "$self->has_select_sql" unless $self->has_select_sql;
   $self->raw_store->new_stream_command(
@@ -33,6 +35,9 @@ method new_select_single_command ($args) {
 }
 
 method _unwrap_args_for ($type, $args) {
+  if (my $implicit = $self->implicit_arguments) {
+    $args = { %$implicit, %$args };
+  }
   [ @{$args}{@{$self->${\"${type}_argument_order"}}} ]
 }