--- /dev/null
+package MooseX::IsDefaults::Meta::IsRW;
+use Moose::Role;
+
+# This does not actually do anything but lie less in the attribute's metadata.
+has '+is' => (
+ default => 'rw',
+);
+
+around _process_options => sub {
+ my $orig = shift;
+ my (undef, undef, $options) = @_;
+
+ if (!exists($options->{is})) {
+ $options->{is} = 'rw';
+ }
+ # They want no accessor, but Moose doesn't like "is => undef"
+ elsif (!defined($options->{is})) {
+ delete $options->{is};
+ }
+
+ $orig->(@_);
+};
+
+1;
+
--- /dev/null
+package MooseX::IsDefaults::RW;
+use Moose ();
+use Moose::Exporter;
+use Moose::Util::MetaRole;
+
+use MooseX::IsDefaults::Meta::IsRW;
+
+Moose::Exporter->setup_import_methods(also => 'Moose');
+
+sub init_meta {
+ shift;
+ my %options = @_;
+
+ Moose->init_meta(%options);
+
+ Moose::Util::MetaRole::apply_metaclass_roles(
+ for_class => $options{for_class},
+ attribute_metaclass_roles => ['MooseX::IsDefaults::Meta::IsRW'],
+ );
+
+ return $options{for_class}->meta;
+}
+
+1;
+