Add 'PERL_VERSION' foldable constant, switch lib-ish things over
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / _Util.pm
index d7b1ce2..76f9b35 100644 (file)
@@ -6,8 +6,6 @@ use DBIx::Class::StartupCheck;  # load es early as we can, usually a noop
 use warnings;
 use strict;
 
-use constant SPURIOUS_VERSION_CHECK_WARNINGS => ( "$]" < 5.010 ? 1 : 0);
-
 my $mro_recursor_stack;
 
 BEGIN {
@@ -17,18 +15,23 @@ BEGIN {
   use Config;
 
   use constant {
+    PERL_VERSION => "$]",
+    OS_NAME => "$^O",
+  };
+
+  use constant {
 
     # but of course
-    BROKEN_FORK => ($^O eq 'MSWin32') ? 1 : 0,
+    BROKEN_FORK => (OS_NAME eq 'MSWin32') ? 1 : 0,
 
-    BROKEN_GOTO => ( "$]" < 5.008003 ) ? 1 : 0,
+    BROKEN_GOTO => ( PERL_VERSION < 5.008003 ) ? 1 : 0,
 
     # perl -MScalar::Util=weaken -e 'weaken( $hash{key} = \"value" )'
-    BROKEN_WEAK_SCALARREF_VALUES => ( "$]" < 5.008003 ) ? 1 : 0,
+    BROKEN_WEAK_SCALARREF_VALUES => ( PERL_VERSION < 5.008003 ) ? 1 : 0,
 
     HAS_ITHREADS => $Config{useithreads} ? 1 : 0,
 
-    UNSTABLE_DOLLARAT => ( "$]" < 5.013002 ) ? 1 : 0,
+    UNSTABLE_DOLLARAT => ( PERL_VERSION < 5.013002 ) ? 1 : 0,
 
     ( map
       #
@@ -47,11 +50,9 @@ BEGIN {
     ),
 
     IV_SIZE => $Config{ivsize},
-
-    OS_NAME => $^O,
   };
 
-  if ( "$]" < 5.009_005) {
+  if ( PERL_VERSION < 5.009_005) {
     require MRO::Compat;
     constant->import( OLD_MRO => 1 );
 
@@ -149,6 +150,8 @@ BEGIN {
   sub PEEPEENESS () { &$sigh }
 }
 
+use constant SPURIOUS_VERSION_CHECK_WARNINGS => ( DBIx::Class::_ENV_::PERL_VERSION < 5.010 ? 1 : 0);
+
 # FIXME - this is not supposed to be here
 # Carp::Skip to the rescue soon
 use DBIx::Class::Carp '^DBIx::Class|^DBICTest';
@@ -178,16 +181,10 @@ our @EXPORT_OK = qw(
 
 use constant UNRESOLVABLE_CONDITION => \ '1 = 0';
 
-BEGIN {
-  # add preliminary attribute support
-  # FIXME FIXME FIXME
-  # To be revisited when Moo with proper attr support ships
-  Sub::Quote->VERSION(2.002);
-}
 # Override forcing no_defer, and adding naming consistency checks
 our %refs_closed_over_by_quote_sub_installed_crefs;
 sub quote_sub {
-  Carp::confess( "Anonymous quoting not supported by the DBIC sub_quote override - supply a sub name" ) if
+  Carp::confess( "Anonymous quoting not supported by the DBIC quote_sub override - supply a sub name" ) if
     @_ < 2
       or
     ! defined $_[1]
@@ -195,16 +192,27 @@ sub quote_sub {
     length ref $_[1]
   ;
 
-  Carp::confess( "The DBIC sub_quote override expects sub name '$_[0]' to be fully qualified" )
-    unless $_[0] =~ /::/;
+  Carp::confess( "The DBIC quote_sub override expects sub name '$_[0]' to be fully qualified" )
+    unless (my $stash) = $_[0] =~ /^(.+)::/;
 
-  Carp::confess( "The DBIC sub_quote override expects the sub name '$_[0]' to match the supplied 'package' argument" ) if
+  Carp::confess(
+    "The DBIC sub_quote override does not support 'no_install'"
+  ) if (
+    $_[3]
+      and
+    $_[3]->{no_install}
+  );
+
+  Carp::confess(
+    'The DBIC quote_sub override expects the namespace-part of sub name '
+  . "'$_[0]' to match the supplied package argument '$_[3]->{package}'"
+  ) if (
     $_[3]
       and
     defined $_[3]->{package}
       and
-    index( $_[0], $_[3]->{package} ) != 0
-  ;
+    $stash ne $_[3]->{package}
+  );
 
   my @caller = caller(0);
   my $sq_opts = {
@@ -234,28 +242,7 @@ sub quote_sub {
     )
   } values %{ $_[2] || {} };
 
-  my $cref = Sub::Quote::quote_sub( $_[0], $_[1], $_[2]||{}, $sq_opts );
-
-  # FIXME FIXME FIXME
-  # To be revisited when Moo with proper attr support ships
-  if(
-    # external application does not work on things like :prototype(...), :lvalue, etc
-    my @attrs = grep {
-      $_ !~ /^[a-z]/
-        or
-      Carp::confess( "The DBIC sub_quote override does not support applying of reserved attribute '$_'" )
-    } @{ $sq_opts->{attributes} || []}
-  ) {
-    Carp::confess( "The DBIC sub_quote override does not allow mixing 'attributes' with 'no_install'" )
-      if $sq_opts->{no_install};
-
-    # might be different from $sq_opts->{package};
-    my ($install_into) = $_[0] =~ /(.+)::[^:]+$/;
-
-    attributes->import( $install_into, $cref, @attrs );
-  }
-
-  $cref;
+  Sub::Quote::quote_sub( $_[0], $_[1], $_[2]||{}, $sq_opts );
 }
 
 sub sigwarn_silencer ($) {