Initial commit
[webservice-foaas.git] / lib / WebService / FOAAS / Codegen.pm
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__
This page took 0.023365 seconds and 4 git commands to generate.