Skip to content

Commit d9fcb77

Browse files
committed
Merge pull request #799 from wing328/perl_apiinvoker_instance
[Perl] Make API client more pluggable (ref: #778)
2 parents 05700a6 + ba227b7 commit d9fcb77

File tree

11 files changed

+415
-338
lines changed

11 files changed

+415
-338
lines changed

modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PerlClientCodegen.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public String getHelp() {
2727

2828
public PerlClientCodegen() {
2929
super();
30-
modelPackage = "Object";
31-
outputFolder = "generated-code/perl";
30+
modelPackage = File.separatorChar + "Object";
31+
outputFolder = "generated-code" + File.separatorChar + "perl";
3232
modelTemplateFiles.put("object.mustache", ".pm");
3333
apiTemplateFiles.put("api.mustache", ".pm");
3434
templateDir = "perl";
@@ -63,6 +63,7 @@ public PerlClientCodegen() {
6363
languageSpecificPrimitives.add("DateTime");
6464
languageSpecificPrimitives.add("ARRAY");
6565
languageSpecificPrimitives.add("HASH");
66+
languageSpecificPrimitives.add("object");
6667

6768
typeMapping.put("integer", "int");
6869
typeMapping.put("long", "int");
@@ -75,9 +76,11 @@ public PerlClientCodegen() {
7576
typeMapping.put("password", "string");
7677
typeMapping.put("array", "ARRAY");
7778
typeMapping.put("map", "HASH");
79+
typeMapping.put("object", "object");
7880

79-
supportingFiles.add(new SupportingFile("APIClient.mustache", "lib/WWW/" + invokerPackage, "APIClient.pm"));
80-
supportingFiles.add(new SupportingFile("BaseObject.mustache", "lib/WWW/" + invokerPackage, "Object/BaseObject.pm"));
81+
supportingFiles.add(new SupportingFile("ApiClient.mustache", ("lib/WWW/" + invokerPackage).replace('/', File.separatorChar), "ApiClient.pm"));
82+
supportingFiles.add(new SupportingFile("Configuration.mustache", ("lib/WWW/" + invokerPackage).replace('/', File.separatorChar), "Configuration.pm"));
83+
supportingFiles.add(new SupportingFile("BaseObject.mustache", ("lib/WWW/" + invokerPackage).replace('/', File.separatorChar), "Object/BaseObject.pm"));
8184
}
8285

8386
@Override
@@ -87,11 +90,11 @@ public String escapeReservedWord(String name) {
8790

8891
@Override
8992
public String apiFileFolder() {
90-
return outputFolder + "/lib/WWW/" + invokerPackage + apiPackage().replace('.', File.separatorChar);
93+
return (outputFolder + "/lib/WWW/" + invokerPackage + apiPackage()).replace('/', File.separatorChar);
9194
}
9295

9396
public String modelFileFolder() {
94-
return outputFolder + "/lib/WWW/" + invokerPackage + "/" + modelPackage().replace('.', File.separatorChar);
97+
return (outputFolder + "/lib/WWW/" + invokerPackage + modelPackage()).replace('/', File.separatorChar);
9598
}
9699

97100
@Override
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package WWW::{{invokerPackage}}::Configuration;
2+
3+
use strict;
4+
use warnings;
5+
use utf8;
6+
7+
use Log::Any qw($log);
8+
use Carp;
9+
10+
# class/static variables
11+
our $api_client;
12+
our $http_timeout = 180;
13+
our $http_user_agent = 'Perl-Swagger';
14+
15+
# authenticaiton setting
16+
our $api_key = {};
17+
our $api_key_prefix = {};
18+
our $username;
19+
our $password;
20+
21+
22+
1;

modules/swagger-codegen/src/main/resources/perl/api.mustache

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,18 @@ use Exporter;
2727
use Carp qw( croak );
2828
use Log::Any qw($log);
2929

30-
31-
#use WWW::Swagger::Model::Category;
32-
#use WWW::Swagger::Model::Pet;
30+
use WWW::{{invokerPackage}}::ApiClient;
31+
use WWW::{{invokerPackage}}::Configuration;
3332

3433
{{#operations}}
35-
36-
use WWW::{{invokerPackage}}::APIClient;
37-
3834
our @EXPORT_OK = qw(
3935
{{#operation}}{{{nickname}}}
4036
{{/operation}}
4137
);
4238

4339
sub new {
4440
my $class = shift;
45-
my $default_api_client = WWW::{{invokerPackage}}::APIClient->new;
41+
my $default_api_client = $WWW::{{invokerPackage}}::Configuration::api_client ? $WWW::{{invokerPackage}}::Configuration::api_client : WWW::{{invokerPackage}}::ApiClient->new;
4642
my (%self) = (
4743
'api_client' => $default_api_client,
4844
@_
@@ -92,49 +88,49 @@ sub new {
9288
}
9389
$header_params->{'Content-Type'} = $self->{api_client}->select_header_content_type({{#consumes}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/consumes}});
9490

95-
{{#queryParams}} # query params
91+
{{#queryParams}}# query params
9692
if ( exists $args{'{{paramName}}'}) {
97-
$query_params->{'{{baseName}}'} = WWW::{{invokerPacakge}}::APIClient::to_query_value($args{'{{paramName}}'});
93+
$query_params->{'{{baseName}}'} = $self->{api_client}->to_query_value($args{'{{paramName}}'});
9894
}{{/queryParams}}
99-
{{#headerParams}} # header params
95+
{{#headerParams}}# header params
10096
if ( exists $args{'{{paramName}}'}) {
101-
$header_params->{'{{baseName}}'} = WWW::{{invokerPackage}}::APIClient::to_header_value($args{'{{paramName}}'});
97+
$header_params->{'{{baseName}}'} = $self->{api_client}->to_header_value($args{'{{paramName}}'});
10298
}{{/headerParams}}
103-
{{#pathParams}} # path params
99+
{{#pathParams}}# path params
104100
if ( exists $args{'{{paramName}}'}) {
105101
my $_base_variable = "{" . "{{baseName}}" . "}";
106-
my $_base_value = WWW::{{invokerPackage}}::APIClient::to_path_value($args{'{{paramName}}'});
102+
my $_base_value = $self->{api_client}->to_path_value($args{'{{paramName}}'});
107103
$_resource_path =~ s/$_base_variable/$_base_value/g;
108104
}{{/pathParams}}
109-
{{#formParams}} # form params
105+
{{#formParams}}# form params
110106
if ( exists $args{'{{paramName}}'} ) {
111107
{{#isFile}}$form_params->{'{{baseName}}'} = [] unless defined $form_params->{'{{baseName}}'};
112108
push $form_params->{'{{baseName}}'}, $args{'{{paramName}}'};
113109
{{/isFile}}
114-
{{^isFile}}$form_params->{'{{baseName}}'} = WWW::{{invokerPackage}}::APIClient::to_form_value($args{'{{paramName}}'});
110+
{{^isFile}}$form_params->{'{{baseName}}'} = $self->{api_client}->to_form_value($args{'{{paramName}}'});
115111
{{/isFile}}
116112
}{{/formParams}}
117113
my $_body_data;
118-
{{#bodyParams}} # body params
114+
{{#bodyParams}}# body params
119115
if ( exists $args{'{{paramName}}'}) {
120116
$_body_data = $args{'{{paramName}}'};
121117
}{{/bodyParams}}
122118

123-
# for HTTP post (form)
124-
#$_body_data = $_body ? undef : $form_params;
119+
# authentication setting, if any
120+
my $auth_settings = [{{#authMethods}}'{{name}}'{{#hasMore}}, {{/hasMore}}{{/authMethods}}];
125121

126122
# make the API Call
127123
{{#returnType}}my $response = $self->{api_client}->call_api($_resource_path, $_method,
128124
$query_params, $form_params,
129-
$header_params, $_body_data);
125+
$header_params, $_body_data, $auth_settings);
130126
if (!$response) {
131127
return;
132128
}
133-
my $_response_object = $self->{api_client}->deserialize('{{returnType}}', $response);
134-
return $_response_object;{{/returnType}}
129+
my $_response_object = $self->{api_client}->deserialize('{{returnType}}', $response);
130+
return $_response_object;{{/returnType}}
135131
{{^returnType}}$self->{api_client}->call_api($_resource_path, $_method,
136132
$query_params, $form_params,
137-
$header_params, $_body_data);
133+
$header_params, $_body_data, $auth_settings);
138134
return;
139135
{{/returnType}}
140136
}

0 commit comments

Comments
 (0)