From ab16f14308f8a3fafb1abe18ecef7c69d46dd783 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Wed, 6 Apr 2016 13:16:50 +0200 Subject: [PATCH] [SIGNED-OFF] Bug 16212: Add script minifySwagger.pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Olli-Antti Kivilahti My name is Olli-Antti Kivilahti and I approve this commit. We have been using the Swagger2.0-driven REST API on Mojolicious for 1 year now in production and I am certain we have a pretty good idea on how to work with the limitations of Swagger2.0 Signed-off-by: Johanna Raisa My name is Johanna Räisä and I approve this commit. We have been using Swagger2.0-driven REST API in production successfully. --- misc/devel/minifySwagger.pl | 98 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 misc/devel/minifySwagger.pl diff --git a/misc/devel/minifySwagger.pl b/misc/devel/minifySwagger.pl new file mode 100644 index 0000000..bf8ea41 --- /dev/null +++ b/misc/devel/minifySwagger.pl @@ -0,0 +1,98 @@ +#!/usr/bin/perl + +# Copyright 2016 KohaSuomi +# +# This file is part of Koha. +# +# Koha 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 3 of the License, or (at your option) any later +# version. +# +# Koha 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 Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Getopt::Long qw(:config no_ignore_case); + +my $help = 0; +my $verbose = 0; +my $swaggerFile = "swagger.json"; +my $swaggerMinifiedFile = "swagger.min.json"; + +GetOptions( + 'h|help' => \$help, + 'v|verbose:i' => \$verbose, + 's|source:s' => \$swaggerFile, + 'd|destination:s' => \$swaggerMinifiedFile, +); + +my $usage = < 0) { + $ENV{SWAGGER2_DEBUG} = $verbose; +} + + +require Swagger2; #When you import the Swagger2-libraries, the environment variables are checked and cannot be altered anymore. So set verbosity first, then load libs. +my $swagger = Swagger2->new($swaggerFile); +$swagger = $swagger->expand; #Fetch all JSON-Schema references + +my @errors = $swagger->validate; +print join("\n", "Swagger2: Invalid spec:", @errors)."\n" if @errors; +exit 1 if @errors; + +removeNonSwagger2Values($swagger); + +open(SWOUT, ">:encoding(UTF-8)", $swaggerMinifiedFile) or die "$0: Couldn't open the minified Swagger2 output file '$swaggerMinifiedFile':\n $!"; +print SWOUT $swagger->to_string(); +close(SWOUT); + +##For some reason stringifying the Swagger2-spec adds non-valid parameters, like "/id" +sub removeNonSwagger2Values { + my ($swagger) = @_; + + my $data = $swagger->api_spec->data; + delete($data->{id}); +} -- 1.9.1