Skip to content

Commit

Permalink
Merge pull request #112 from fcevado/0.4.3
Browse files Browse the repository at this point in the history
v0.4.3
  • Loading branch information
fcevado committed Mar 24, 2018
2 parents 6e45ed9 + 72906b0 commit a7707b6
Show file tree
Hide file tree
Showing 353 changed files with 2,109 additions and 1,437 deletions.
21 changes: 21 additions & 0 deletions .formatter.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[
inputs: [
"mix.exs",
"{config,lib,priv,test,bench}/**/*.{ex,exs}",
],

locals_without_parens: [
# Formatter tests
assert_format: 2,
assert_format: 3,
assert_same: 1,
assert_same: 2,

# Errors tests
assert_eval_raise: 3,

# Mix tests
in_fixture: 2,
in_tmp: 2
]
]
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
language: elixir

elixir:
- 1.4.5
- 1.5.1
- 1.6.4

otp_release:
- 19.3
- 20.0
- 20.3

script:
- MIX_ENV=test mix coveralls.travis --force
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog


## v0.4.3:
* Add Idaho, New York, Pennsylvania, Texas, Washington missing area codes.
* Fix typo on NANP Toll Free Number module.

## v0.4.2:
* Correct parsing for Angola numbers

Expand Down
40 changes: 20 additions & 20 deletions lib/helpers/area.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@ defmodule Helper.Area do
def area_type, do: ""
def area_abbreviation, do: ""

defoverridable [regex: 0, area_name: 0, area_type: 0, area_abbreviation: 0]
defoverridable regex: 0, area_name: 0, area_type: 0, area_abbreviation: 0

def builder(number) do
[_ | country] =
__MODULE__
|> Module.split
|> Enum.reverse
|> Module.split()
|> Enum.reverse()

country =
country
|> Enum.reverse
|> Module.concat
|> Enum.reverse()
|> Module.concat()

[[_, code, area, number]] = Regex.scan(regex(), number)

Expand All @@ -40,19 +40,23 @@ defmodule Helper.Area do
end

defp generate_codes(codes) do
[quote do
def codes, do: unquote(codes)
end]
[
quote do
def codes, do: unquote(codes)
end
]
end

defp generate_errors do
[quote do
def build(_number), do: {:error, "Not a valid phone number."}
[
quote do
def build(_number), do: {:error, "Not a valid phone number."}

def build!(_number), do: raise ArgumentError, message: "Not a valid phone number."
def build!(_number), do: raise(ArgumentError, message: "Not a valid phone number.")

def match?(_number), do: false
end]
def match?(_number), do: false
end
]
end

defp generate_matcher(code) do
Expand Down Expand Up @@ -80,13 +84,9 @@ defmodule Helper.Area do
end

defmacro matcher(codes) do
generate_codes(codes)
++
Enum.map(codes,
fn code ->
generate_codes(codes) ++
Enum.map(codes, fn code ->
generate_matcher(code)
end)
++
generate_errors()
end) ++ generate_errors()
end
end
55 changes: 25 additions & 30 deletions lib/helpers/country.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ defmodule Helper.Country do
def a2, do: ""
def a3, do: ""

defoverridable [regex: 0, country: 0, a2: 0, a3: 0]
defoverridable regex: 0, country: 0, a2: 0, a3: 0

def builder(number) do
[[_, code, area, number]] = Regex.scan(regex(), number)
Expand All @@ -27,19 +27,23 @@ defmodule Helper.Country do
end

defp generate_codes(codes) do
[quote do
def codes, do: unquote(codes)
end]
[
quote do
def codes, do: unquote(codes)
end
]
end

defp generate_errors do
[quote do
def match?(_number), do: false
[
quote do
def match?(_number), do: false

def build!(_number), do: raise ArgumentError, "Not a valid phone number."
def build!(_number), do: raise(ArgumentError, "Not a valid phone number.")

def build(_number), do: {:error, "Not a valid phone number."}
end]
def build(_number), do: {:error, "Not a valid phone number."}
end
]
end

def generate_matcher(:regex, code) do
Expand Down Expand Up @@ -83,34 +87,25 @@ defmodule Helper.Country do
end

defmacro matcher(:regex, codes) do
generate_codes(codes)
++
Enum.map(codes,
fn code ->
generate_codes(codes) ++
Enum.map(codes, fn code ->
generate_matcher(:regex, code)
end)
++
generate_errors()
end) ++ generate_errors()
end

defmacro matcher(:modules, modules) do
modules = Enum.map(modules, &(Macro.expand(&1, __CALLER__)))
modules = Enum.map(modules, &Macro.expand(&1, __CALLER__))

(modules
|> Enum.reduce([], fn m, acc -> acc ++ m.codes end)
|> generate_codes)
++
Enum.map(modules,
fn module ->
Enum.map(module.codes,
fn code ->
generate_matcher(:modules, module, code)
end)
end)
++
generate_errors()
|> Enum.reduce([], fn m, acc -> acc ++ m.codes end)
|> generate_codes) ++
Enum.map(modules, fn module ->
Enum.map(module.codes, fn code ->
generate_matcher(:modules, module, code)
end)
end) ++ generate_errors()
end

defmacro matcher(_, _),
do: raise ArgumentError, "You can only match against :regex or :modules"
do: raise(ArgumentError, "You can only match against :regex or :modules")
end
Loading

0 comments on commit a7707b6

Please sign in to comment.