summaryrefslogtreecommitdiff
path: root/LedgerSMB/RESTXML/Document/Base.pm
diff options
context:
space:
mode:
Diffstat (limited to 'LedgerSMB/RESTXML/Document/Base.pm')
-rw-r--r--LedgerSMB/RESTXML/Document/Base.pm63
1 files changed, 63 insertions, 0 deletions
diff --git a/LedgerSMB/RESTXML/Document/Base.pm b/LedgerSMB/RESTXML/Document/Base.pm
new file mode 100644
index 00000000..e8feaa96
--- /dev/null
+++ b/LedgerSMB/RESTXML/Document/Base.pm
@@ -0,0 +1,63 @@
+package LedgerSMB::RESTXML::Document::Base;
+use strict;
+use warnings;
+use XML::Twig;
+use LedgerSMB::Log;
+use Carp;
+
+sub handle_post {
+ my ($self, $args) = @_;
+
+ return $args->{handler}->unsupported('the POST method is not implemented.');
+}
+
+sub handle_put {
+ my ($self, $args) = @_;
+ return $self->{handler}->unsupported('the PUT method is not implemented.');
+}
+
+sub handle_delete {
+ my ($self, $args) = @_;
+ return $self->{handler}->unsupported('the DELETE method is not implemented.');
+}
+
+sub handle_get {
+ my ($self, $args) = @_;
+
+ return $self->{handler}->unsupported('the GET method is not implemented.');
+}
+
+=head3 hash_to_twig
+
+Convinenve function to convert a hashref to a XML::Twig structure.
+
+passed a hashref, required arguments:
+
+hash - the hash to convert
+
+name - the name of the root element.
+
+optional arguments:
+
+sort - by default, on set to 0 to disable. toggles whether or not hash keys are sorted
+in the resulting xml node created. Disabling this may save some performance if converting a lot of
+nodes at once.
+
+=cut
+
+sub hash_to_twig {
+ my ($self, $args) = @_;
+
+ my $hash = $args->{hash} || croak "Need a hash to convert to use hash_to_twig";
+ my $name = $args->{name} || croak "Need a root element name to use hash_to_twig";
+ my @keyorder = keys %$hash;
+
+ @keyorder = sort @keyorder unless defined($args->{sort}) and $args->{sort} == 0;
+
+ return XML::Twig::Elt->new($name,$args->{root_attr}||{}, map {
+ XML::Twig::Elt->new($_, {'#CDATA'=>1}, $hash->{$_})
+ } @keyorder );
+}
+
+1;
+