YAML: Versionsupdate
[kivitendo-erp.git] / modules / override / YAML / Any.pm
diff --git a/modules/override/YAML/Any.pm b/modules/override/YAML/Any.pm
new file mode 100644 (file)
index 0000000..c2d35ee
--- /dev/null
@@ -0,0 +1,122 @@
+use strict; use warnings;
+package YAML::Any;
+our $VERSION = '1.14';
+
+use Exporter ();
+
+@YAML::Any::ISA       = 'Exporter';
+@YAML::Any::EXPORT    = qw(Dump Load);
+@YAML::Any::EXPORT_OK = qw(DumpFile LoadFile);
+
+my @dump_options = qw(
+    UseCode
+    DumpCode
+    SpecVersion
+    Indent
+    UseHeader
+    UseVersion
+    SortKeys
+    AnchorPrefix
+    UseBlock
+    UseFold
+    CompressSeries
+    InlineSeries
+    UseAliases
+    Purity
+    Stringify
+);
+
+my @load_options = qw(
+    UseCode
+    LoadCode
+);
+
+my @implementations = qw(
+    YAML::XS
+    YAML::Syck
+    YAML::Old
+    YAML
+    YAML::Tiny
+);
+
+sub import {
+    __PACKAGE__->implementation;
+    goto &Exporter::import;
+}
+
+sub Dump {
+    no strict 'refs';
+    no warnings 'once';
+    my $implementation = __PACKAGE__->implementation;
+    for my $option (@dump_options) {
+        my $var = "$implementation\::$option";
+        my $value = $$var;
+        local $$var;
+        $$var = defined $value ? $value : ${"YAML::$option"};
+    }
+    return &{"$implementation\::Dump"}(@_);
+}
+
+sub DumpFile {
+    no strict 'refs';
+    no warnings 'once';
+    my $implementation = __PACKAGE__->implementation;
+    for my $option (@dump_options) {
+        my $var = "$implementation\::$option";
+        my $value = $$var;
+        local $$var;
+        $$var = defined $value ? $value : ${"YAML::$option"};
+    }
+    return &{"$implementation\::DumpFile"}(@_);
+}
+
+sub Load {
+    no strict 'refs';
+    no warnings 'once';
+    my $implementation = __PACKAGE__->implementation;
+    for my $option (@load_options) {
+        my $var = "$implementation\::$option";
+        my $value = $$var;
+        local $$var;
+        $$var = defined $value ? $value : ${"YAML::$option"};
+    }
+    return &{"$implementation\::Load"}(@_);
+}
+
+sub LoadFile {
+    no strict 'refs';
+    no warnings 'once';
+    my $implementation = __PACKAGE__->implementation;
+    for my $option (@load_options) {
+        my $var = "$implementation\::$option";
+        my $value = $$var;
+        local $$var;
+        $$var = defined $value ? $value : ${"YAML::$option"};
+    }
+    return &{"$implementation\::LoadFile"}(@_);
+}
+
+sub order {
+    return @YAML::Any::_TEST_ORDER
+        if @YAML::Any::_TEST_ORDER;
+    return @implementations;
+}
+
+sub implementation {
+    my @order = __PACKAGE__->order;
+    for my $module (@order) {
+        my $path = $module;
+        $path =~ s/::/\//g;
+        $path .= '.pm';
+        return $module if exists $INC{$path};
+        eval "require $module; 1" and return $module;
+    }
+    croak("YAML::Any couldn't find any of these YAML implementations: @order");
+}
+
+sub croak {
+    require Carp;
+    Carp::croak(@_);
+}
+
+1;