Shlomi Fish avatar Shlomi Fish committed a012f59 Merge

Merge commit.

Comments (0)

Files changed (3)

XML-GrammarBase/MANIFEST

 scripts/bump-version-number.pl
 t/00-load.t
 t/01libxml-basic.t
+t/data_dir.t
 t/data/fiction-xml-invalid-test.xml
 t/data/fiction-xml-test-docbook-xslt-output.docbook.xml
 t/data/fiction-xml-test-html-xslt-output.xhtml

XML-GrammarBase/lib/XML/GrammarBase/Role/DataDir.pm

-package XML::GrammarBase::Role::RelaxNG;
+package XML::GrammarBase::Role::DataDir;
 
 use strict;
 use warnings;
 
 our $VERSION = '0.1.2';
 
-has 'module_base' => (isa => 'Str', is => 'rw');
+my $_component_re = qr/[A-Za-z_]\w*/;
+
+has 'module_base' => (isa => sub {
+        my ($dist_name) = @_;
+        if (not (
+                (ref($dist_name) eq '')
+                &&
+                ($dist_name =~ m/\A$_component_re(?:-$_component_re)*\z/)
+            )
+        )
+        {
+            die "module_base must be a distribution string of components separated by dashes";
+        }
+    },
+    , is => 'rw');
 has 'data_dir' => (isa => 'Str', is => 'rw',
     default => sub { return shift->_calc_default_data_dir(); },
     lazy => 1,
 
     with ('XML::GrammarBase::Role::DataDir');
 
-    has '+module_base' => (default => 'XML::Grammar::MyGrammar');
+    has '+module_base' => (default => 'XML-Grammar-MyGrammar');
 
     package main;
 
 
 =head2 module_base
 
-The basename of the module - used for dist dir.
+The basename of the distribution - used for dist dir.
 
 =head2 data_dir
 

XML-GrammarBase/t/data_dir.t

+#!/usr/bin/perl
+
+package MyClass::WithDataDir;
+
+use MooX 'late';
+
+with ('XML::GrammarBase::Role::DataDir');
+
+has '+module_base' => (default => 'XML::Grammar::MyGrammar');
+
+package main;
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+{
+    my $obj;
+    eval
+    {
+        # TEST
+        $obj = MyClass::WithDataDir->new;
+        my $test = $obj->module_base;
+    };
+
+    my $Err = $@;
+
+    # TEST
+    like ($Err, qr/isa check for "module_base" failed/,
+        "Accessing module_base threw an exception",
+    );
+}
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2013 by Shlomi Fish
+
+This program is distributed under the MIT (X11) License:
+L<http://www.opensource.org/licenses/mit-license.php>
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+=cut
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.