Skip to content

Commit

Permalink
Fix route SETTINGS merging
Browse files Browse the repository at this point in the history
Fixes #77
  • Loading branch information
Artur Khabibullin committed Sep 14, 2019
1 parent 7e460ee commit 06d50a9
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 11 deletions.
3 changes: 2 additions & 1 deletion Build.PL
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ my %module_build_args = (
"Artur Khabibullin - rtkh\@cpan.org"
],
"dist_name" => "Raisin",
"dist_version" => "0.86",
"dist_version" => "0.87",
"license" => "perl",
"module_name" => "Raisin",
"recursive_test_files" => 1,
"requires" => {
"HTTP::Request::Common" => 0,
"HTTP::Status" => 0,
"Hash::Merge" => "0.300",
"JSON::MaybeXS" => "1.004000",
"Plack" => "1.0030",
"Plack::Middleware::CrossOrigin" => "0.009",
Expand Down
3 changes: 3 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
0.87
* Fix route SETTING hash merging (#77);

0.86
* Generate valid OpenAPI/Swagger spec:
- omit `tags` if none;
Expand Down
3 changes: 2 additions & 1 deletion META.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
"requires" : {
"HTTP::Request::Common" : "0",
"HTTP::Status" : "0",
"Hash::Merge" : "0.300",
"JSON::MaybeXS" : "1.004000",
"Plack" : "1.0030",
"Plack::Middleware::CrossOrigin" : "0.009",
Expand Down Expand Up @@ -72,7 +73,7 @@
"web" : "https://github.com/khrt/Raisin"
}
},
"version" : "0.86",
"version" : "0.87",
"x_contributors" : [
"Vladimir Lettiev <thecrux@gmail.com>",
"Dan Burke <dburke@addictmud.org>",
Expand Down
1 change: 1 addition & 0 deletions cpanfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ requires 'perl', '5.010000';

requires 'HTTP::Request::Common' => '0';
requires 'HTTP::Status' => '0';
requires 'Hash::Merge' => '0.300';
requires 'JSON::MaybeXS' => '1.004000';
requires 'Plack' => '1.0030';
requires 'Plack::Middleware::CrossOrigin' => '0.009';
Expand Down
2 changes: 1 addition & 1 deletion lib/Raisin.pm
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ use Plack::Util::Accessor qw(
encoder
);

our $VERSION = '0.86';
our $VERSION = '0.87';

sub new {
my ($class, %args) = @_;
Expand Down
5 changes: 4 additions & 1 deletion lib/Raisin/API.pm
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ use warnings;
use parent 'Exporter';

use Carp;
use Hash::Merge qw(merge);

use Raisin;
use Raisin::Entity;
# use Raisin::Util qw(merge);

my @APP_CONF_METHODS = qw(
app
Expand Down Expand Up @@ -92,7 +94,8 @@ sub resource {
}

my %prev_settings = %SETTINGS;
@SETTINGS{ keys %args } = values %args;
Hash::Merge::set_clone_behavior(undef);
%SETTINGS = %{ merge(\%SETTINGS, \%args) };

# Going deeper
$code->();
Expand Down
11 changes: 5 additions & 6 deletions lib/Raisin/Plugin/Swagger.pm
Original file line number Diff line number Diff line change
Expand Up @@ -368,11 +368,10 @@ sub _tags_object {
# get the name of a type
sub _type_name {
my $type = shift;

if ($type->can('display_name')) {
if ($type && $type->can('display_name')) {
return $type->display_name;
}
elsif ($type->can('name')) {
elsif ($type && $type->can('name')) {
# fall back to name() (e.g. Moose types do not have display_name)
return $type->name;
}
Expand Down Expand Up @@ -432,7 +431,7 @@ sub _param_type_object {

sub _param_type {
my $t = shift;
if ( $t->can('name') ) { # allow nested types as Str in ArrayRef[Str]
if ($t && $t->can('name')) { # allow nested types as Str in ArrayRef[Str]
if ($t->name =~ /int/i) { 'integer', 'int32' }
elsif ($t->name =~ /long/i) { 'integer', 'int64' }
elsif ($t->name =~ /num|float|real/i) { 'number', 'float' }
Expand All @@ -448,9 +447,9 @@ sub _param_type {
if (_type_name($t) =~ /ArrayRef/) { 'array', undef }
else { 'object', undef } # fallback
}
}
}
else {
{ $t, undef }
{ $t, undef }
}
}

Expand Down
1 change: 0 additions & 1 deletion lib/Raisin/Util.pm
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ sub iterate_params {
};
}


1;

__END__
Expand Down
29 changes: 29 additions & 0 deletions t/unit/api.t
Original file line number Diff line number Diff line change
Expand Up @@ -299,4 +299,33 @@ subtest 'resource_bad' => sub {
_clean_app();
};

subtest 'params nested route_param' => sub {
resource api => sub {
params requires => { name => 'id', type => undef };
route_param id => sub {
get sub { param };

params requires => { name => 'sub_id', type => undef };
route_param sub_id => sub {
get sub { param };
};
}
};

my $app = Raisin::API->app;
my $e = $app->routes->routes->[1];

my %params = map { $_->name => $_ } @{ $e->params };

ok $params{id}, 'id';
is $params{id}->named, 1, 'named';
is $params{id}->required, 1, 'required';

ok $params{sub_id}, 'sub_id';
is $params{sub_id}->named, 1, 'named';
is $params{sub_id}->required, 1, 'required';

_clean_app();
};

done_testing;

0 comments on commit 06d50a9

Please sign in to comment.