diff --git a/README.md b/README.md index 1211a50..a0ea4fb 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,10 @@ What is, what isnt and what will be about Phone: ## Area Codes Countries that already has area code info: -* United States. -* Canada. -* Brazil. + * United States. + * Canada. + * Brazil. + * Spain. ## Vocabulary * a2: Alpha-2, two letters code for country names. diff --git a/lib/phone/countries.ex b/lib/phone/countries.ex index 9c539fc..11fe847 100644 --- a/lib/phone/countries.ex +++ b/lib/phone/countries.ex @@ -55,6 +55,7 @@ defmodule Phone.Countries do Phone.EG, Phone.ER, Phone.ES, + Phone.ES.IntelligentNumbers, Phone.ET, Phone.FI, Phone.FJ, diff --git a/lib/phone/es.ex b/lib/phone/es.ex index cc5afda..2076c99 100644 --- a/lib/phone/es.ex +++ b/lib/phone/es.ex @@ -1,12 +1,67 @@ defmodule Phone.ES do - @moduledoc false + @doc """ + Telephone Numbers rules based in a government file called + "El Plan Nacional de Numeración - Guía práctica de usuario" + + Provincies and acronyms from ISO 3166-2:ES + """ use Helper.Country - def regex, do: ~r/^(34)()(.{9})/ def country, do: "Spain" def a2, do: "ES" def a3, do: "ESP" - matcher(:regex, ["34"]) + matcher(:modules, [ + Phone.ES.A, + Phone.ES.AB, + Phone.ES.AL, + Phone.ES.AV, + Phone.ES.B, + Phone.ES.BA, + Phone.ES.BI, + Phone.ES.BU, + Phone.ES.C, + Phone.ES.CA, + Phone.ES.CC, + Phone.ES.CO, + Phone.ES.CR, + Phone.ES.CS, + Phone.ES.CU, + Phone.ES.GC, + Phone.ES.GI, + Phone.ES.GR, + Phone.ES.GU, + Phone.ES.H, + Phone.ES.HU, + Phone.ES.J, + Phone.ES.L, + Phone.ES.LE, + Phone.ES.LO, + Phone.ES.LU, + Phone.ES.M, + Phone.ES.MA, + Phone.ES.MU, + Phone.ES.NA, + Phone.ES.O, + Phone.ES.OR, + Phone.ES.P, + Phone.ES.PM, + Phone.ES.PO, + Phone.ES.S, + Phone.ES.SA, + Phone.ES.SE, + Phone.ES.SG, + Phone.ES.SO, + Phone.ES.SS, + Phone.ES.T, + Phone.ES.TE, + Phone.ES.TF, + Phone.ES.TO, + Phone.ES.V, + Phone.ES.VA, + Phone.ES.VI, + Phone.ES.Z, + Phone.ES.ZA, + ]) end diff --git a/lib/phone/es/a.ex b/lib/phone/es/a.ex new file mode 100644 index 0000000..a42867e --- /dev/null +++ b/lib/phone/es/a.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.A do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(96[5-6]|86[5-6])(.{6})/ + def area_name, do: "Alicante" + def area_type, do: "province" + def area_abbreviation, do: "A" + + matcher(["34965", "34966", "34865", "34866"]) +end diff --git a/lib/phone/es/ab.ex b/lib/phone/es/ab.ex new file mode 100644 index 0000000..9ddca26 --- /dev/null +++ b/lib/phone/es/ab.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.AB do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(967|867)(.{6})/ + def area_name, do: "Albacete" + def area_type, do: "province" + def area_abbreviation, do: "AB" + + matcher(["34967", "34867"]) +end diff --git a/lib/phone/es/al.ex b/lib/phone/es/al.ex new file mode 100644 index 0000000..2fd2074 --- /dev/null +++ b/lib/phone/es/al.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.AL do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(950|850)(.{6})/ + def area_name, do: "Almería" + def area_type, do: "province" + def area_abbreviation, do: "AL" + + matcher(["34950", "34850"]) +end diff --git a/lib/phone/es/av.ex b/lib/phone/es/av.ex new file mode 100644 index 0000000..ee56a40 --- /dev/null +++ b/lib/phone/es/av.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.AV do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(920|820)(.{6})/ + def area_name, do: "Ávila" + def area_type, do: "province" + def area_abbreviation, do: "AV" + + matcher(["34920", "34820"]) +end diff --git a/lib/phone/es/b.ex b/lib/phone/es/b.ex new file mode 100644 index 0000000..759c3e5 --- /dev/null +++ b/lib/phone/es/b.ex @@ -0,0 +1,34 @@ +defmodule Phone.ES.B do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(93[0-9]|83[0-9])(.{6})/ + def area_name, do: "Barcelona" + def area_type, do: "province" + def area_abbreviation, do: "B" + + matcher([ + "34930", + "34931", + "34932", + "34933", + "34934", + "34935", + "34936", + "34937", + "34938", + "34939", + "34830", + "34831", + "34832", + "34833", + "34834", + "34835", + "34836", + "34837", + "34838", + "34839" + ]) +end + diff --git a/lib/phone/es/ba.ex b/lib/phone/es/ba.ex new file mode 100644 index 0000000..2ab1801 --- /dev/null +++ b/lib/phone/es/ba.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.BA do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(924|824)(.{6})/ + def area_name, do: "Badajoz" + def area_type, do: "province" + def area_abbreviation, do: "BA" + + matcher(["34924", "34824"]) +end diff --git a/lib/phone/es/bi.ex b/lib/phone/es/bi.ex new file mode 100644 index 0000000..84efbc1 --- /dev/null +++ b/lib/phone/es/bi.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.BI do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(944|946|844|846)(.{6})/ + def area_name, do: "Bizkaia" + def area_type, do: "province" + def area_abbreviation, do: "BI" + + matcher(["34944", "34946", "34844", "34846"]) +end diff --git a/lib/phone/es/bu.ex b/lib/phone/es/bu.ex new file mode 100644 index 0000000..aeb3e6e --- /dev/null +++ b/lib/phone/es/bu.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.BU do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(947|847)(.{6})/ + def area_name, do: "Burgos" + def area_type, do: "province" + def area_abbreviation, do: "BU" + + matcher(["34947", "34847"]) +end diff --git a/lib/phone/es/c.ex b/lib/phone/es/c.ex new file mode 100644 index 0000000..1faac0d --- /dev/null +++ b/lib/phone/es/c.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.C do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(981|881)(.{6})/ + def area_name, do: "A Coruña" + def area_type, do: "province" + def area_abbreviation, do: "C" + + matcher(["34981", "34881"]) +end diff --git a/lib/phone/es/ca.ex b/lib/phone/es/ca.ex new file mode 100644 index 0000000..7b794a2 --- /dev/null +++ b/lib/phone/es/ca.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.CA do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(956|856)(.{6})/ + def area_name, do: "Cádiz" + def area_type, do: "province" + def area_abbreviation, do: "CA" + + matcher(["34956", "34856"]) +end diff --git a/lib/phone/es/cc.ex b/lib/phone/es/cc.ex new file mode 100644 index 0000000..08723bc --- /dev/null +++ b/lib/phone/es/cc.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.CC do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(927|827)(.{6})/ + def area_name, do: "Cáceres" + def area_type, do: "province" + def area_abbreviation, do: "CC" + + matcher(["34927", "34827"]) +end diff --git a/lib/phone/es/co.ex b/lib/phone/es/co.ex new file mode 100644 index 0000000..83b7e56 --- /dev/null +++ b/lib/phone/es/co.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.CO do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(957|857)(.{6})/ + def area_name, do: "Córdoba" + def area_type, do: "province" + def area_abbreviation, do: "CO" + + matcher(["34957", "34857"]) +end diff --git a/lib/phone/es/cr.ex b/lib/phone/es/cr.ex new file mode 100644 index 0000000..01c8441 --- /dev/null +++ b/lib/phone/es/cr.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.CR do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(926|826)(.{6})/ + def area_name, do: "Ciudad Real" + def area_type, do: "province" + def area_abbreviation, do: "CR" + + matcher(["34926", "34826"]) +end diff --git a/lib/phone/es/cs.ex b/lib/phone/es/cs.ex new file mode 100644 index 0000000..9f096d4 --- /dev/null +++ b/lib/phone/es/cs.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.CS do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(964|864)(.{6})/ + def area_name, do: "Castellón" + def area_type, do: "province" + def area_abbreviation, do: "CS" + + matcher(["34964", "34864"]) +end diff --git a/lib/phone/es/cu.ex b/lib/phone/es/cu.ex new file mode 100644 index 0000000..38684ad --- /dev/null +++ b/lib/phone/es/cu.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.CU do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(969|869)(.{6})/ + def area_name, do: "Cuenca" + def area_type, do: "province" + def area_abbreviation, do: "CU" + + matcher(["34969", "34869"]) +end diff --git a/lib/phone/es/gc.ex b/lib/phone/es/gc.ex new file mode 100644 index 0000000..c30b409 --- /dev/null +++ b/lib/phone/es/gc.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.GC do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(928|828)(.{6})/ + def area_name, do: "Las Palmas" + def area_type, do: "province" + def area_abbreviation, do: "GC" + + matcher(["34928", "34828"]) +end diff --git a/lib/phone/es/gi.ex b/lib/phone/es/gi.ex new file mode 100644 index 0000000..803dcb9 --- /dev/null +++ b/lib/phone/es/gi.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.GI do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(972|872)(.{6})/ + def area_name, do: "Girona" + def area_type, do: "province" + def area_abbreviation, do: "GI" + + matcher(["34972", "34872"]) +end diff --git a/lib/phone/es/gr.ex b/lib/phone/es/gr.ex new file mode 100644 index 0000000..8b16b2e --- /dev/null +++ b/lib/phone/es/gr.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.GR do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(958|858)(.{6})/ + def area_name, do: "Granada" + def area_type, do: "province" + def area_abbreviation, do: "GR" + + matcher(["34958", "34858"]) +end diff --git a/lib/phone/es/gu.ex b/lib/phone/es/gu.ex new file mode 100644 index 0000000..5b48f2c --- /dev/null +++ b/lib/phone/es/gu.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.GU do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(949|849)(.{6})/ + def area_name, do: "Guadalajara" + def area_type, do: "province" + def area_abbreviation, do: "GU" + + matcher(["34949", "34849"]) +end diff --git a/lib/phone/es/h.ex b/lib/phone/es/h.ex new file mode 100644 index 0000000..a9e72e6 --- /dev/null +++ b/lib/phone/es/h.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.H do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(959|859)(.{6})/ + def area_name, do: "Huelva" + def area_type, do: "province" + def area_abbreviation, do: "H" + + matcher(["34959", "34859"]) +end diff --git a/lib/phone/es/hu.ex b/lib/phone/es/hu.ex new file mode 100644 index 0000000..bb031ae --- /dev/null +++ b/lib/phone/es/hu.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.HU do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(974|874)(.{6})/ + def area_name, do: "Huesca" + def area_type, do: "province" + def area_abbreviation, do: "HU" + + matcher(["34974", "34874"]) +end diff --git a/lib/phone/es/intelligent_numbers.ex b/lib/phone/es/intelligent_numbers.ex new file mode 100644 index 0000000..87c92fe --- /dev/null +++ b/lib/phone/es/intelligent_numbers.ex @@ -0,0 +1,31 @@ +defmodule Phone.ES.IntelligentNumbers do + @moduledoc false + + use Helper.Country + + def regex, do: ~r/^(34)(90[0-2]|905|800|803|80[6-7]|70[0-9])(.{6})$/ + def country, do: "Spain intelligent-number" + def a2, do: "ES" + def a3, do: "ESP" + + matcher(:regex, [ + "34900", + "34901", + "34902", + "34905", + "34800", + "34803", + "34806", + "34807", + "34700", + "34701", + "34702", + "34703", + "34704", + "34705", + "34706", + "34707", + "34708", + "34709", + ]) +end \ No newline at end of file diff --git a/lib/phone/es/j.ex b/lib/phone/es/j.ex new file mode 100644 index 0000000..72e2de4 --- /dev/null +++ b/lib/phone/es/j.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.J do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(953|853)(.{6})/ + def area_name, do: "Jaen" + def area_type, do: "province" + def area_abbreviation, do: "J" + + matcher(["34953", "34853"]) +end diff --git a/lib/phone/es/l.ex b/lib/phone/es/l.ex new file mode 100644 index 0000000..a16ed11 --- /dev/null +++ b/lib/phone/es/l.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.L do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(973|873)(.{6})/ + def area_name, do: "Lleida" + def area_type, do: "province" + def area_abbreviation, do: "L" + + matcher(["34973", "34873"]) +end diff --git a/lib/phone/es/le.ex b/lib/phone/es/le.ex new file mode 100644 index 0000000..88b143a --- /dev/null +++ b/lib/phone/es/le.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.LE do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(987|887)(.{6})/ + def area_name, do: "León" + def area_type, do: "province" + def area_abbreviation, do: "LE" + + matcher(["34987", "34887"]) +end diff --git a/lib/phone/es/lo.ex b/lib/phone/es/lo.ex new file mode 100644 index 0000000..79d3a17 --- /dev/null +++ b/lib/phone/es/lo.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.LO do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(941|841)(.{6})/ + def area_name, do: "La Rioja" + def area_type, do: "province" + def area_abbreviation, do: "LO" + + matcher(["34941", "34841"]) +end diff --git a/lib/phone/es/lu.ex b/lib/phone/es/lu.ex new file mode 100644 index 0000000..7fbe2be --- /dev/null +++ b/lib/phone/es/lu.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.LU do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(982|882)(.{6})/ + def area_name, do: "Lugo" + def area_type, do: "province" + def area_abbreviation, do: "LU" + + matcher(["34982", "34882"]) +end diff --git a/lib/phone/es/m.ex b/lib/phone/es/m.ex new file mode 100644 index 0000000..bf1b281 --- /dev/null +++ b/lib/phone/es/m.ex @@ -0,0 +1,33 @@ +defmodule Phone.ES.M do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(91[0-9]|81[0-9])(.{6})/ + def area_name, do: "Comunidad de Madrid" + def area_type, do: "province" + def area_abbreviation, do: "M" + + matcher([ + "34910", + "34911", + "34912", + "34913", + "34914", + "34915", + "34916", + "34917", + "34918", + "34919", + "34810", + "34811", + "34812", + "34813", + "34814", + "34815", + "34816", + "34817", + "34818", + "34819" + ]) +end \ No newline at end of file diff --git a/lib/phone/es/ma.ex b/lib/phone/es/ma.ex new file mode 100644 index 0000000..6bf08dd --- /dev/null +++ b/lib/phone/es/ma.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.MA do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(95[1-2]|85[1-2])(.{6})/ + def area_name, do: "Málaga" + def area_type, do: "province" + def area_abbreviation, do: "MA" + + matcher(["34951", "34952", "34851", "34852"]) +end diff --git a/lib/phone/es/mu.ex b/lib/phone/es/mu.ex new file mode 100644 index 0000000..c154a16 --- /dev/null +++ b/lib/phone/es/mu.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.MU do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(968|868)(.{6})/ + def area_name, do: "Murcia" + def area_type, do: "province" + def area_abbreviation, do: "MU" + + matcher(["34968", "34868"]) +end \ No newline at end of file diff --git a/lib/phone/es/na.ex b/lib/phone/es/na.ex new file mode 100644 index 0000000..d5080a3 --- /dev/null +++ b/lib/phone/es/na.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.NA do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(948|848)(.{6})/ + def area_name, do: "Navarra" + def area_type, do: "province" + def area_abbreviation, do: "NA" + + matcher(["34948", "34848"]) +end \ No newline at end of file diff --git a/lib/phone/es/o.ex b/lib/phone/es/o.ex new file mode 100644 index 0000000..8110f39 --- /dev/null +++ b/lib/phone/es/o.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.O do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(98[4-5]|88[4-5])(.{6})/ + def area_name, do: "Asturias" + def area_type, do: "province" + def area_abbreviation, do: "O" + + matcher(["34984", "34985", "34884", "34885"]) +end \ No newline at end of file diff --git a/lib/phone/es/or.ex b/lib/phone/es/or.ex new file mode 100644 index 0000000..1bcdcba --- /dev/null +++ b/lib/phone/es/or.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.OR do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(988|888)(.{6})/ + def area_name, do: "Ourense" + def area_type, do: "province" + def area_abbreviation, do: "OR" + + matcher(["34988", "34888"]) +end \ No newline at end of file diff --git a/lib/phone/es/p.ex b/lib/phone/es/p.ex new file mode 100644 index 0000000..14afda7 --- /dev/null +++ b/lib/phone/es/p.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.P do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(979|879)(.{6})/ + def area_name, do: "Palencia" + def area_type, do: "province" + def area_abbreviation, do: "P" + + matcher(["34979", "34879"]) +end \ No newline at end of file diff --git a/lib/phone/es/pm.ex b/lib/phone/es/pm.ex new file mode 100644 index 0000000..12daf89 --- /dev/null +++ b/lib/phone/es/pm.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.PM do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(971|871)(.{6})/ + def area_name, do: "Illes Balears" + def area_type, do: "province" + def area_abbreviation, do: "PM" + + matcher(["34971", "34871"]) +end \ No newline at end of file diff --git a/lib/phone/es/po.ex b/lib/phone/es/po.ex new file mode 100644 index 0000000..a85b47e --- /dev/null +++ b/lib/phone/es/po.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.PO do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(986|886)(.{6})/ + def area_name, do: "Pontevedra" + def area_type, do: "province" + def area_abbreviation, do: "PO" + + matcher(["34986", "34886"]) +end \ No newline at end of file diff --git a/lib/phone/es/s.ex b/lib/phone/es/s.ex new file mode 100644 index 0000000..4c4144a --- /dev/null +++ b/lib/phone/es/s.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.S do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(942|842)(.{6})/ + def area_name, do: "Cantabria" + def area_type, do: "province" + def area_abbreviation, do: "S" + + matcher(["34942", "34842"]) +end \ No newline at end of file diff --git a/lib/phone/es/sa.ex b/lib/phone/es/sa.ex new file mode 100644 index 0000000..b5786fd --- /dev/null +++ b/lib/phone/es/sa.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.SA do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(923|823)(.{6})/ + def area_name, do: "Salamanca" + def area_type, do: "province" + def area_abbreviation, do: "SA" + + matcher(["34923", "34823"]) +end \ No newline at end of file diff --git a/lib/phone/es/se.ex b/lib/phone/es/se.ex new file mode 100644 index 0000000..0efabf7 --- /dev/null +++ b/lib/phone/es/se.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.SE do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(95[4-5]|85[4-5])(.{6})/ + def area_name, do: "Sevilla" + def area_type, do: "province" + def area_abbreviation, do: "SE" + + matcher(["34954", "34955", "34854", "34855"]) +end \ No newline at end of file diff --git a/lib/phone/es/sg.ex b/lib/phone/es/sg.ex new file mode 100644 index 0000000..570390d --- /dev/null +++ b/lib/phone/es/sg.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.SG do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(921|821)(.{6})/ + def area_name, do: "Segovia" + def area_type, do: "province" + def area_abbreviation, do: "SG" + + matcher(["34921", "34821"]) +end \ No newline at end of file diff --git a/lib/phone/es/so.ex b/lib/phone/es/so.ex new file mode 100644 index 0000000..2e6d7bd --- /dev/null +++ b/lib/phone/es/so.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.SO do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(975|875)(.{6})/ + def area_name, do: "Soria" + def area_type, do: "province" + def area_abbreviation, do: "SO" + + matcher(["34975", "34875"]) +end \ No newline at end of file diff --git a/lib/phone/es/ss.ex b/lib/phone/es/ss.ex new file mode 100644 index 0000000..3f37882 --- /dev/null +++ b/lib/phone/es/ss.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.SS do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(943|843)(.{6})/ + def area_name, do: "Guipúzcoa" + def area_type, do: "province" + def area_abbreviation, do: "SS" + + matcher(["34943", "34843"]) +end \ No newline at end of file diff --git a/lib/phone/es/t.ex b/lib/phone/es/t.ex new file mode 100644 index 0000000..9507d77 --- /dev/null +++ b/lib/phone/es/t.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.T do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(977|877)(.{6})/ + def area_name, do: "Tarragona" + def area_type, do: "province" + def area_abbreviation, do: "T" + + matcher(["34977", "34877"]) +end \ No newline at end of file diff --git a/lib/phone/es/te.ex b/lib/phone/es/te.ex new file mode 100644 index 0000000..7b97c2c --- /dev/null +++ b/lib/phone/es/te.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.TE do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(978|878)(.{6})/ + def area_name, do: "Teruel" + def area_type, do: "province" + def area_abbreviation, do: "TE" + + matcher(["34978", "34878"]) +end \ No newline at end of file diff --git a/lib/phone/es/tf.ex b/lib/phone/es/tf.ex new file mode 100644 index 0000000..8b2f864 --- /dev/null +++ b/lib/phone/es/tf.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.TF do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(922|822)(.{6})/ + def area_name, do: "Santa Cruz de Tenerife" + def area_type, do: "province" + def area_abbreviation, do: "TF" + + matcher(["34922", "34822"]) +end \ No newline at end of file diff --git a/lib/phone/es/to.ex b/lib/phone/es/to.ex new file mode 100644 index 0000000..46948c8 --- /dev/null +++ b/lib/phone/es/to.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.TO do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(925|825)(.{6})/ + def area_name, do: "Toledo" + def area_type, do: "province" + def area_abbreviation, do: "TO" + + matcher(["34925", "34825"]) +end \ No newline at end of file diff --git a/lib/phone/es/v.ex b/lib/phone/es/v.ex new file mode 100644 index 0000000..1445a16 --- /dev/null +++ b/lib/phone/es/v.ex @@ -0,0 +1,21 @@ +defmodule Phone.ES.V do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(96[0-3]|86[0-3])(.{6})/ + def area_name, do: "Valencia" + def area_type, do: "province" + def area_abbreviation, do: "V" + + matcher([ + "34960", + "34961", + "34962", + "34963", + "34860", + "34861", + "34862", + "34863" + ]) +end \ No newline at end of file diff --git a/lib/phone/es/va.ex b/lib/phone/es/va.ex new file mode 100644 index 0000000..9002a9f --- /dev/null +++ b/lib/phone/es/va.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.VA do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(983|883)(.{6})/ + def area_name, do: "Valladolid" + def area_type, do: "province" + def area_abbreviation, do: "VA" + + matcher(["34983", "34883"]) +end \ No newline at end of file diff --git a/lib/phone/es/vi.ex b/lib/phone/es/vi.ex new file mode 100644 index 0000000..2b4074a --- /dev/null +++ b/lib/phone/es/vi.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.VI do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(945|845)(.{6})/ + def area_name, do: "Álava" + def area_type, do: "province" + def area_abbreviation, do: "VI" + + matcher(["34945", "34845"]) +end \ No newline at end of file diff --git a/lib/phone/es/z.ex b/lib/phone/es/z.ex new file mode 100644 index 0000000..3a30b37 --- /dev/null +++ b/lib/phone/es/z.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.Z do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(976|876)(.{6})/ + def area_name, do: "Zaragoza" + def area_type, do: "province" + def area_abbreviation, do: "Z" + + matcher(["34976", "34876"]) +end \ No newline at end of file diff --git a/lib/phone/es/za.ex b/lib/phone/es/za.ex new file mode 100644 index 0000000..4448928 --- /dev/null +++ b/lib/phone/es/za.ex @@ -0,0 +1,12 @@ +defmodule Phone.ES.ZA do + @moduledoc false + + use Helper.Area + + def regex, do: ~r/^(34)(980|880)(.{6})/ + def area_name, do: "Zamora" + def area_type, do: "province" + def area_abbreviation, do: "ZA" + + matcher(["34980", "34880"]) +end \ No newline at end of file diff --git a/test/phone/e_countries/es_test.exs b/test/phone/e_countries/es_test.exs new file mode 100644 index 0000000..e250dcd --- /dev/null +++ b/test/phone/e_countries/es_test.exs @@ -0,0 +1,132 @@ +defmodule Phone.ESTest do + use ExUnit.Case, async: true + + main_module = Phone.ES + + all_modules = [ + Phone.ES.A, + Phone.ES.AB, + Phone.ES.AL, + Phone.ES.AV, + Phone.ES.B, + Phone.ES.BA, + Phone.ES.BI, + Phone.ES.BU, + Phone.ES.C, + Phone.ES.CA, + Phone.ES.CC, + Phone.ES.CO, + Phone.ES.CR, + Phone.ES.CS, + Phone.ES.CU, + Phone.ES.GC, + Phone.ES.GI, + Phone.ES.GR, + Phone.ES.GU, + Phone.ES.H, + Phone.ES.HU, + Phone.ES.J, + Phone.ES.L, + Phone.ES.LE, + Phone.ES.LO, + Phone.ES.LU, + Phone.ES.M, + Phone.ES.MA, + Phone.ES.MU, + Phone.ES.NA, + Phone.ES.O, + Phone.ES.OR, + Phone.ES.P, + Phone.ES.PM, + Phone.ES.PO, + Phone.ES.S, + Phone.ES.SA, + Phone.ES.SE, + Phone.ES.SG, + Phone.ES.SO, + Phone.ES.SS, + Phone.ES.T, + Phone.ES.TE, + Phone.ES.TF, + Phone.ES.TO, + Phone.ES.V, + Phone.ES.VA, + Phone.ES.VI, + Phone.ES.Z, + Phone.ES.ZA, + ] + + Enum.map(main_module.codes, fn code -> + test "#{inspect(main_module)} parses area code #{code}" do + assert Phone.valid?(unquote("#{code}555555")) + assert {:ok, parsed} = Phone.parse(unquote("#{code}555555")) + + assert parsed.country == unquote(main_module).country + assert parsed.a2 == unquote(main_module).a2 + assert parsed.a3 == unquote(main_module).a3 + end + + test "#{inspect(main_module)} cant parse wrong number with code #{code}" do + refute Phone.valid?(unquote("#{code}555")) + assert {:error, _} = Phone.parse(unquote("#{code}555")) + + refute unquote(main_module).match?(unquote("#{code}555")) + assert {:error, _} = unquote(main_module).build(unquote("#{code}555")) + + assert_raise ArgumentError, "Not a valid phone number.", fn -> + unquote(main_module).build!(unquote("#{code}555")) + end + end + end) + + Enum.map(all_modules, fn module -> + Enum.map(module.codes, fn code -> + test "#{inspect(module)} parses area code #{code}" do + assert Phone.valid?(unquote("#{code}555555")) + assert {:ok, parsed} = Phone.parse(unquote("#{code}555555")) + + assert parsed.country == unquote(main_module).country + assert parsed.a2 == unquote(main_module).a2 + assert parsed.a3 == unquote(main_module).a3 + assert parsed.area_type == unquote(module).area_type + assert parsed.area_name == unquote(module).area_name + assert parsed.area_abbreviation == unquote(module).area_abbreviation + end + + test "#{inspect(module)} cant parse wrong number with code #{code}" do + refute Phone.valid?(unquote("#{code}555")) + assert {:error, _} = Phone.parse(unquote("#{code}555")) + + refute unquote(module).match?(unquote("#{code}555")) + assert {:error, _} = unquote(module).build(unquote("#{code}555")) + + assert_raise ArgumentError, "Not a valid phone number.", fn -> + unquote(module).build!(unquote("#{code}555")) + end + end + end) + end) + + describe "Spanish intelligent numbers" do + test "it can recognize Spanish intelligent numbers" do + sample_number = "+34701023456" + assert Phone.valid?(sample_number) + assert {:ok, parsed} = Phone.parse(sample_number) + + assert parsed.country == Phone.ES.IntelligentNumbers.country + assert parsed.a2 == Phone.ES.IntelligentNumbers.a2 + assert parsed.a3 == Phone.ES.IntelligentNumbers.a3 + end + + test "it won't accept a Spanish intelligent numbers that seems implausibly long" do + bad_number = "+34701023456789" + refute Phone.valid?(bad_number) + assert {:error, _} = Phone.parse(bad_number) + + assert_raise ArgumentError, "Not a valid phone number.", fn -> + Phone.ES.IntelligentNumbers.build!(bad_number) + end + end + end + +end