RW
Shawn M Moore [Fri, 10 Jul 2009 06:00:32 +0000 (02:00 -0400)]
lib/MooseX/IsDefaults/Meta/IsRW.pm [new file with mode: 0644]
lib/MooseX/IsDefaults/RW.pm [new file with mode: 0644]

diff --git a/lib/MooseX/IsDefaults/Meta/IsRW.pm b/lib/MooseX/IsDefaults/Meta/IsRW.pm
new file mode 100644 (file)
index 0000000..ce692e6
--- /dev/null
@@ -0,0 +1,25 @@
+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;
+
diff --git a/lib/MooseX/IsDefaults/RW.pm b/lib/MooseX/IsDefaults/RW.pm
new file mode 100644 (file)
index 0000000..515da3c
--- /dev/null
@@ -0,0 +1,25 @@
+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;
+