Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / Parse / Method / Signatures / Param / Named.pm
diff --git a/local-lib5/lib/perl5/Parse/Method/Signatures/Param/Named.pm b/local-lib5/lib/perl5/Parse/Method/Signatures/Param/Named.pm
new file mode 100644 (file)
index 0000000..280a2a0
--- /dev/null
@@ -0,0 +1,48 @@
+package Parse::Method::Signatures::Param::Named;
+
+use Moose::Role;
+use MooseX::Types::Moose qw/Str/;
+
+use namespace::clean -except => 'meta';
+
+has label => (
+    is         => 'ro',
+    isa        => Str,
+    lazy_build => 1,
+);
+
+sub _label_from_variable_name {
+    my ($self) = @_;
+    # strip sigil
+    return substr($self->variable_name, 1);
+}
+
+sub _build_label {
+    my ($self) = @_;
+    return $self->_label_from_variable_name;
+}
+
+sub _stringify_required {
+    my ($self) = @_;
+    return $self->required ? q{!} : q{};
+}
+
+around _stringify_variable_name => sub {
+    my $orig = shift;
+    my ($self) = @_;
+    my $ret = q{:};
+    my ($before, $after) = (q{}) x 2;
+
+    my $implicit_label = $self->_label_from_variable_name if $self->can('variable_name');
+
+    if (!$implicit_label || $self->label ne $implicit_label) {
+        $before = $self->label . q{(};
+        $after  = q{)};
+    }
+
+    $ret .= $before . $orig->(@_) . $after;
+
+    return $ret;
+};
+
+1;