package Object::Tiny::RW;

use strict 'vars', 'subs';
BEGIN {
	require 5.004;
	$Object::Tiny::RW::VERSION = '1.06';
}

sub import {
	return unless shift eq 'Object::Tiny::RW';
	my $pkg   = caller;
	my $child = !! @{"${pkg}::ISA"};
	eval join "\n",
		"package $pkg;",
		($child ? () : "\@${pkg}::ISA = 'Object::Tiny::RW';"),
		map {
			defined and ! ref and /^[^\W\d]\w*$/s
			or die "Invalid accessor name '$_'";
                        "sub $_ { if (defined \$_[1]) { \$_[0]->{$_} = \$_[1] } ; return \$_[0]->{$_} }\n"
		} @_;
	die "Failed to generate $pkg" if $@;
	return 1;
}

sub new {
	my $class = shift;
	bless { @_ }, $class;
}

1;

__END__

=pod

=head1 NAME

Object::Tiny::RW - Class building as simple as it gets (with rw accessors)

=head1 SYNOPSIS

  # Define a class
  package Foo;
  
  use Object::Tiny::RW qw{ bar baz };
  
  1;
  
  
  # Use the class
  my $object = Foo->new( bar => 1 );
  
  print "bar is " . $object->bar . "\n";       # 1
  $object->bar(2);
  print "bar is now " . $object->bar . "\n";   # 2

=head1 DESCRIPTION

This module is a fork of Object::Tiny. The only difference is that it
also accepts arguments to it's accessors to set the according value.

Please see L<Object::Tiny|Object::Tiny> for all the original ideas.

To use Object::Tiny::RW, just call it with a list of accessors to be
created.

  use Object::Tiny::RW 'foo', 'bar';

=head1 SUPPORT

Bugs should be reported via the CPAN bug tracker at

L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Object-Tiny-RW>

For other issues, contact the author.

=head1 AUTHOR

Adam Kennedy E<lt>adamk@cpan.orgE<gt> for original Object::Tiny.

Steffen Schwigon E<lt>ss5@renormalist.netE<gt> for the Object::Tiny::RW variant.

=head1 SEE ALSO

L<Config::Tiny>

=head1 COPYRIGHT

Copyright 2007 - 2008 Adam Kennedy.

Copyright 2009 Steffen Schwigon.

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

The full text of the license can be found in the
LICENSE file included with this module.

=cut
