]>
Commit | Line | Data |
---|---|---|
943f1904 MG |
1 | package WebService::FOAAS::Codegen; |
2 | ||
3 | use 5.014000; | |
4 | use strict; | |
5 | use warnings; | |
6 | ||
7 | use HTTP::Tiny; | |
8 | use JSON::MaybeXS qw/decode_json/; | |
9 | ||
10 | sub run { | |
11 | my $ht = HTTP::Tiny->new; | |
12 | my $result = $ht->get('https://foaas.com/operations'); | |
13 | die $result->{reason} unless $result->{success}; | |
14 | ||
15 | my @export; | |
16 | ||
17 | print <<"EOF"; | |
18 | ### Start of code generated by WebService::FOAAS::Codegen->run | |
19 | ||
20 | \=head1 AVAILABLE METHODS | |
21 | ||
22 | \=over | |
23 | EOF | |
24 | ||
25 | my @ops = map { $_->{url} =~ y/-/_/r } @{decode_json $result->{content}}; | |
26 | for my $op (@ops) { | |
27 | my (undef, $name, @args) = split '/', $op; | |
28 | my $nargs = @args; | |
29 | push @export, "foaas_$name"; | |
30 | print <<"EOF" | |
31 | ||
32 | \=item foaas_$name @{[join ', ', map { y/:/$/r } @args]} | |
33 | ||
34 | \=cut | |
35 | ||
36 | sub foaas_$name { | |
37 | die "Expected $nargs arguments" unless \@_ == $nargs || \@_ == @{[$nargs + 1]}; | |
38 | request '$name', \@_; | |
39 | } | |
40 | ||
41 | BEGIN { \*$name = \\&foaas_$name } | |
42 | EOF | |
43 | } | |
44 | ||
45 | my @export_ok = (@export, map { substr $_, 6 } @export); | |
46 | print <<"EOF" | |
47 | ||
48 | BEGIN { | |
49 | our \@EXPORT = qw/@export/; | |
50 | our \@EXPORT_OK = qw/@export_ok/; | |
51 | } | |
52 | ||
53 | \=back | |
54 | ||
55 | \=cut | |
56 | ||
57 | ### End of code generated by WebService::FOAAS::Codegen->run | |
58 | EOF | |
59 | } | |
60 | ||
61 | 1; | |
62 | __END__ |