[wellwell-devel] [wellwell] Add Vend::JSON module providing [json] tag.
Stefan Hornburg
wellwell-devel at rt.icdevgroup.org
Mon Nov 12 14:43:31 UTC 2012
commit 87ea7dc5cc532d41a3381c01d4cd8b4c56b8ba3b
Author: Stefan Hornburg (Racke) <racke at linuxia.de>
Date: Mon Nov 12 15:43:00 2012 +0100
Add Vend::JSON module providing [json] tag.
lib/Vend/JSON.pm | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 62 insertions(+), 0 deletions(-)
---
diff --git a/lib/Vend/JSON.pm b/lib/Vend/JSON.pm
new file mode 100644
index 0000000..6061a49
--- /dev/null
+++ b/lib/Vend/JSON.pm
@@ -0,0 +1,62 @@
+# Vend::JSON - Interchange JSON interface
+#
+# Copyright (C) 2012 Stefan Hornburg (Racke) <racke at linuxia.de>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with this program; if not, write to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+package Vend::JSON;
+
+use strict;
+use warnings;
+
+use Vend::Config;
+use Vend::File;
+use Vend::Tags;
+
+use JSON;
+
+our $VERSION = '0.0010';
+
+Vend::Config::parse_tag('UserTag', 'json Order function');
+Vend::Config::parse_tag('UserTag', 'json HasEndTag');
+Vend::Config::parse_tag('UserTag', 'json AddAttr');
+Vend::Config::parse_tag('UserTag', 'json MapRoutine Vend::JSON::json');
+
+sub json {
+ my ($function, $opt, $body) = @_;
+ my ($file, $file_content, $json);
+
+ if ($file = $opt->{file}) {
+ # read JSON from file
+ unless ($file_content = readfile($file)) {
+ die "Failed to retrieve file content from $file: $!\n";
+ }
+
+ $body = $file_content;
+
+ $json = decode_json($body);
+ }
+ elsif ($opt->{ref}) {
+ $json = encode_json($opt->{ref});
+ }
+
+ if ($function eq 'deliver') {
+ Vend::Tags->deliver({type => 'application/json', body => $json});
+ return;
+ }
+
+ return $json;
+}
More information about the wellwell-devel
mailing list