Skip to content

Commit d95c097

Browse files
authored
Merge pull request #21 from ipinfo/silvano/eng-532-fix-lite-api-country-data-parsing-in-erlang-library
Fix parsing of Lite API response
2 parents bd24c15 + 91913ba commit d95c097

File tree

3 files changed

+48
-59
lines changed

3 files changed

+48
-59
lines changed

src/ipinfo_lite.erl

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -212,17 +212,17 @@ enrich_details(Details, Countries, EuCountries, CountriesFlags,
212212
],
213213
lists:foldl(fun(F, Acc) -> F(Acc) end, Details, Enrichers).
214214

215-
put_country_name(#{country := CountryCode} = Details, Countries) ->
215+
put_country_name(#{country_code := CountryCode} = Details, Countries) ->
216216
case maps:find(CountryCode, Countries) of
217217
{ok, CountryName} ->
218-
maps:put(country_name, CountryName, Details);
218+
maps:put(country, CountryName, Details);
219219
error ->
220220
Details
221221
end;
222222
put_country_name(Details, _Countries) ->
223223
Details.
224224

225-
put_country_flag(#{country := CountryCode} = Details, CountriesFlags) ->
225+
put_country_flag(#{country_code := CountryCode} = Details, CountriesFlags) ->
226226
case maps:find(CountryCode, CountriesFlags) of
227227
{ok, CountryFlag} ->
228228
maps:put(country_flag, CountryFlag, Details);
@@ -232,13 +232,13 @@ put_country_flag(#{country := CountryCode} = Details, CountriesFlags) ->
232232
put_country_flag(Details, _CountriesFlags) ->
233233
Details.
234234

235-
put_country_flag_url(#{country := CountryCode} = Details, CountryFlagBaseUrl) ->
236-
CountryFlagUrl = filename:join(CountryFlagBaseUrl, binary_to_list(CountryCode) ++ ".svg"),
235+
put_country_flag_url(#{country_code := CountryCode} = Details, CountryFlagBaseUrl) ->
236+
CountryFlagUrl = <<CountryFlagBaseUrl/binary, CountryCode/binary, ".svg">>,
237237
maps:put(country_flag_url, CountryFlagUrl, Details);
238238
put_country_flag_url(Details, _CountryFlagBaseUrl) ->
239239
Details.
240240

241-
put_country_currency(#{country := CountryCode} = Details, CountriesCurrencies) ->
241+
put_country_currency(#{country_code := CountryCode} = Details, CountriesCurrencies) ->
242242
case maps:find(CountryCode, CountriesCurrencies) of
243243
{ok, CountryCurrency} ->
244244
maps:put(country_currency, CountryCurrency, Details);
@@ -248,7 +248,7 @@ put_country_currency(#{country := CountryCode} = Details, CountriesCurrencies) -
248248
put_country_currency(Details, _CountriesCurrencies) ->
249249
Details.
250250

251-
put_is_eu(#{country := CountryCode} = Details, EuCountries) ->
251+
put_is_eu(#{country_code := CountryCode} = Details, EuCountries) ->
252252
case lists:member(CountryCode, EuCountries) of
253253
true ->
254254
maps:put(is_eu, true, Details);
@@ -258,11 +258,13 @@ put_is_eu(#{country := CountryCode} = Details, EuCountries) ->
258258
put_is_eu(Details, _EuCountries) ->
259259
Details.
260260

261-
put_continent(#{country := CountryCode} = Details, Continents) ->
261+
put_continent(#{country_code := CountryCode} = Details, Continents) ->
262262
case maps:find(CountryCode, Continents) of
263-
{ok, Continent} ->
263+
{ok, #{<<"name">> := ContinentName}} ->
264+
maps:put(continent, ContinentName, Details);
265+
{ok, Continent} when is_binary(Continent) ->
264266
maps:put(continent, Continent, Details);
265-
error ->
267+
_ ->
266268
Details
267269
end;
268270
put_continent(Details, _Continents) ->

test/ipinfo_SUITE.erl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ details_test(Config) ->
6969
domain => <<"google.com">>,
7070
name => <<"Google LLC">>,
7171
type => <<"hosting">>,
72-
<<"asn">> => <<"AS15169">>,
73-
<<"route">> => <<"8.8.8.0/24">>
74-
}, maps:get(<<"asn">>, Details)),
72+
asn => <<"AS15169">>,
73+
route => <<"8.8.8.0/24">>
74+
}, maps:get(asn, Details)),
7575
Company = maps:get(<<"company">>, Details),
7676
?assertEqual(<<"google.com">>, maps:get(domain, Company)),
7777
?assertEqual(<<"Google LLC">>, maps:get(name, Company)),

test/ipinfo_lite_SUITE.erl

Lines changed: 33 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -39,57 +39,44 @@ end_per_suite(_Config) ->
3939
details_ip_v4_test(Config) ->
4040
Token = proplists:get_value(token, Config),
4141
{ok, IpInfoLite} = ipinfo_lite:create(Token),
42-
{ok, #{
43-
ip := <<"8.8.8.8">>,
44-
is_eu := false,
45-
country_flag_url := <<"https:/cdn.ipinfo.io/static/images/countries-flags/United States.svg">>,
46-
country := <<"United States">>,
47-
continent := <<"North America">>,
48-
<<"as_domain">> := <<"google.com">>,
49-
<<"as_name">> := <<"Google LLC">>,
50-
<<"asn">> := <<"AS15169">>,
51-
<<"continent_code">> := <<"NA">>,
52-
<<"country_code">> := <<"US">>}
53-
} = ipinfo_lite:details(IpInfoLite, <<"8.8.8.8">>).
42+
{ok, Details} = ipinfo_lite:details(IpInfoLite, <<"8.8.8.8">>),
43+
?assertEqual(<<"8.8.8.8">>, maps:get(ip, Details)),
44+
?assertEqual(<<"US">>, maps:get(country_code, Details)),
45+
?assertEqual(<<"United States">>, maps:get(country, Details)),
46+
?assertEqual(false, maps:get(is_eu, Details)),
47+
?assertEqual(<<"https://cdn.ipinfo.io/static/images/countries-flags/US.svg">>, maps:get(country_flag_url, Details)),
48+
?assertEqual(<<"North America">>, maps:get(continent, Details)),
49+
?assertEqual(<<"NA">>, maps:get(continent_code, Details)),
50+
?assertEqual(<<"AS15169">>, maps:get(asn, Details)),
51+
?assertEqual(<<"google.com">>, maps:get(<<"as_domain">>, Details)),
52+
?assertEqual(<<"Google LLC">>, maps:get(<<"as_name">>, Details)).
5453

5554
details_ip_v6_test(Config) ->
5655
Token = proplists:get_value(token, Config),
5756
{ok, IpInfoLite} = ipinfo_lite:create(Token),
58-
{ok, #{
59-
ip := <<"2001:4860:4860::8888">>,
60-
is_eu := false,
61-
country_flag_url := <<"https:/cdn.ipinfo.io/static/images/countries-flags/United States.svg">>,
62-
country := <<"United States">>,
63-
continent := <<"North America">>,
64-
<<"as_domain">> := <<"google.com">>,
65-
<<"as_name">> := <<"Google LLC">>,
66-
<<"asn">> := <<"AS15169">>,
67-
<<"continent_code">> := <<"NA">>,
68-
<<"country_code">> := <<"US">>}
69-
} = ipinfo_lite:details(IpInfoLite, <<"2001:4860:4860::8888">>).
57+
{ok, Details} = ipinfo_lite:details(IpInfoLite, <<"2001:4860:4860::8888">>),
58+
?assertEqual(<<"2001:4860:4860::8888">>, maps:get(ip, Details)),
59+
?assertEqual(<<"US">>, maps:get(country_code, Details)),
60+
?assertEqual(<<"United States">>, maps:get(country, Details)),
61+
?assertEqual(false, maps:get(is_eu, Details)),
62+
?assertEqual(<<"https://cdn.ipinfo.io/static/images/countries-flags/US.svg">>, maps:get(country_flag_url, Details)),
63+
?assertEqual(<<"North America">>, maps:get(continent, Details)),
64+
?assertEqual(<<"NA">>, maps:get(continent_code, Details)),
65+
?assertEqual(<<"AS15169">>, maps:get(asn, Details)),
66+
?assertEqual(<<"google.com">>, maps:get(<<"as_domain">>, Details)),
67+
?assertEqual(<<"Google LLC">>, maps:get(<<"as_name">>, Details)).
7068

7169
details_current_ip_test(Config) ->
7270
Token = proplists:get_value(token, Config),
7371
{ok, IpInfoLite} = ipinfo_lite:create(Token),
74-
{ok, #{
75-
ip := Ip,
76-
is_eu := IsEu,
77-
country_flag_url := CountryFlagUrl,
78-
country := Country,
79-
continent := Continent,
80-
<<"as_domain">> := AsDomain,
81-
<<"as_name">> := AsName,
82-
<<"asn">> := Asn,
83-
<<"continent_code">> := ContinentCode,
84-
<<"country_code">> := CountryCode}
85-
} = ipinfo_lite:details(IpInfoLite),
86-
?assertNotEqual(nil, Ip),
87-
?assertNotEqual(nil, IsEu),
88-
?assertNotEqual(nil, CountryFlagUrl),
89-
?assertNotEqual(nil, Country),
90-
?assertNotEqual(nil, Continent),
91-
?assertNotEqual(nil, AsDomain),
92-
?assertNotEqual(nil, AsName),
93-
?assertNotEqual(nil, Asn),
94-
?assertNotEqual(nil, ContinentCode),
95-
?assertNotEqual(nil, CountryCode).
72+
{ok, Details} = ipinfo_lite:details(IpInfoLite),
73+
?assertNotEqual(nil, maps:get(ip, Details)),
74+
?assertNotEqual(nil, maps:get(is_eu, Details)),
75+
?assertNotEqual(nil, maps:get(country_flag_url, Details)),
76+
?assertNotEqual(nil, maps:get(country, Details)),
77+
?assertNotEqual(nil, maps:get(continent, Details)),
78+
?assertNotEqual(nil, maps:get(<<"as_domain">>, Details)),
79+
?assertNotEqual(nil, maps:get(<<"as_name">>, Details)),
80+
?assertNotEqual(nil, maps:get(asn, Details)),
81+
?assertNotEqual(nil, maps:get(continent_code, Details)),
82+
?assertNotEqual(nil, maps:get(country_code, Details)).

0 commit comments

Comments
 (0)