diff options
Diffstat (limited to 'LedgerSMB/RESTXML/Document/Base.pm')
-rw-r--r-- | LedgerSMB/RESTXML/Document/Base.pm | 63 |
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; + |