The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Text::Zilla::Dir::DBIC::ResultSet;
BEGIN {
  $Text::Zilla::Dir::DBIC::ResultSet::AUTHORITY = 'cpan:GETTY';
}
BEGIN {
  $Text::Zilla::Dir::DBIC::ResultSet::VERSION = '0.002';
}
# ABSTRACT: Generate a directory based on a L<DBIx::Class::ResultSet>

use Text::Zilla;
use Text::Zilla::File;
use DBIx::Class::ResultClass::HashRefInflator;
use JSON;

tzil_dir;

around BUILDARGS => sub {
	my $orig  = shift;
	my $class = shift;
	my $resultset = shift;

	die __PACKAGE__." requires a DBIx::Class::ResultSet as first parameter" if !$resultset->isa('DBIx::Class::ResultSet');

	return $class->$orig( tzil_dir_entries => $class->generate_tzil_entries($resultset) );
};

sub generate_tzil_entries {
	my ( $self, $resultset ) = @_;

	my @pri_cols = $resultset->result_source->primary_columns;
	my @cols = $resultset->result_source->columns;
	
	my %entries;

	my $rs = $resultset->search ({}, { columns => \@cols });
	
	while (my @row = $rs->cursor->next) {
		my $data = { map { $_ => shift @row } @cols };
		my @pri_vals;
		for (@pri_cols) {
			push @pri_vals, $data->{$_};
		}
		my $pri_key = join('-',@pri_vals);
		$entries{$pri_key} = Text::Zilla::File->new(encode_json($data));
	}

	return \%entries;	
}

1;

__END__
=pod

=head1 NAME

Text::Zilla::Dir::DBIC::ResultSet - Generate a directory based on a L<DBIx::Class::ResultSet>

=head1 VERSION

version 0.002

=head1 AUTHOR

Torsten Raudssus <torsten@raudssus.de>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Torsten Raudssus.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut