Remove decimal commas
pull/213/head
Andrew Cravenho 7 years ago committed by GitHub
commit 43a1ab161c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      apps/explorer_web/lib/explorer_web/exchange_rates/usd.ex
  2. 6
      apps/explorer_web/lib/explorer_web/templates/chain/show.html.eex
  3. 2
      apps/explorer_web/lib/explorer_web/views/address_view.ex
  4. 18
      apps/explorer_web/lib/explorer_web/views/chain_view.ex
  5. 6
      apps/explorer_web/lib/explorer_web/views/currency_helpers.ex
  6. 2
      apps/explorer_web/lib/explorer_web/views/transaction_view.ex
  7. 31
      apps/explorer_web/lib/explorer_web/views/wei_helpers.ex
  8. 9
      apps/explorer_web/priv/gettext/default.pot
  9. 9
      apps/explorer_web/priv/gettext/en/LC_MESSAGES/default.po
  10. 6
      apps/explorer_web/test/explorer_web/exchange_rates/usd_test.exs
  11. 2
      apps/explorer_web/test/explorer_web/features/viewing_addresses_test.exs
  12. 30
      apps/explorer_web/test/explorer_web/views/chain_view_test.exs
  13. 4
      apps/explorer_web/test/explorer_web/views/transaction_view_test.exs

@ -17,6 +17,12 @@ defmodule ExplorerWeb.ExchangeRates.USD do
alias Explorer.Chain.Wei alias Explorer.Chain.Wei
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
def from(nil), do: null()
def from(%Decimal{} = usd_decimal) do
%__MODULE__{value: usd_decimal}
end
def from(nil, _), do: null() def from(nil, _), do: null()
def from(_, nil), do: null() def from(_, nil), do: null()

@ -28,16 +28,16 @@
<div class="u-push-md-left"> <div class="u-push-md-left">
<div class="graph__squares graph__squares--price"></div> <div class="graph__squares graph__squares--price"></div>
<%= gettext "Price" %> </br> <%= gettext "Price" %> </br>
$<%= format_exchange_rate(@exchange_rate) %> <%= gettext "USD" %> <%= format_exchange_rate(@exchange_rate) %>
</div> </div>
<div> <div>
<div class="graph__squares graph__squares--mcap"></div> <div class="graph__squares graph__squares--mcap"></div>
<%= gettext "Market Cap" %> </br> <%= gettext "Market Cap" %> </br>
$<%= format_market_cap(@exchange_rate) %> <%= gettext "USD" %> <%= format_market_cap(@exchange_rate) %>
</div> </div>
<div class="u-push-md-right"> <div class="u-push-md-right">
<%= gettext "24h Volume" %> </br> <%= gettext "24h Volume" %> </br>
$<%= format_volume_24h(@exchange_rate) %> <%= gettext "USD" %> <%= format_volume_24h(@exchange_rate) %>
</div> </div>
</div> </div>
</div> </div>

@ -13,7 +13,7 @@ defmodule ExplorerWeb.AddressView do
Returns a formatted address balance and includes the unit. Returns a formatted address balance and includes the unit.
""" """
def balance(%Address{fetched_balance: balance}) do def balance(%Address{fetched_balance: balance}) do
format_wei_value(balance, :ether, fractional_digits: 18) format_wei_value(balance, :ether)
end end
def formatted_usd(%Address{fetched_balance: nil}, _), do: nil def formatted_usd(%Address{fetched_balance: nil}, _), do: nil

@ -2,6 +2,7 @@ defmodule ExplorerWeb.ChainView do
use ExplorerWeb, :view use ExplorerWeb, :view
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias ExplorerWeb.ExchangeRates.USD
def encode_market_history_data(market_history_data) do def encode_market_history_data(market_history_data) do
market_history_data market_history_data
@ -13,20 +14,21 @@ defmodule ExplorerWeb.ChainView do
end end
end end
def format_exchange_rate(%Token{usd_value: nil}), do: nil
def format_exchange_rate(%Token{usd_value: usd_value}) do def format_exchange_rate(%Token{usd_value: usd_value}) do
Cldr.Number.to_string!(usd_value, fractional_digits: 6) usd_value
|> USD.from()
|> format_usd_value()
end end
def format_volume_24h(%Token{volume_24h_usd: volume_24h}) do def format_volume_24h(%Token{volume_24h_usd: volume_24h}) do
format_number(volume_24h) volume_24h
|> USD.from()
|> format_usd_value()
end end
def format_market_cap(%Token{market_cap_usd: market_cap}) do def format_market_cap(%Token{market_cap_usd: market_cap}) do
format_number(market_cap) market_cap
|> USD.from()
|> format_usd_value()
end end
defp format_number(nil), do: nil
defp format_number(number), do: Cldr.Number.to_string!(number)
end end

@ -14,10 +14,10 @@ defmodule ExplorerWeb.CurrencyHelpers do
## Examples ## Examples
iex> format_usd_value(%USD{value: Decimal.new(5)}) iex> format_usd_value(%USD{value: Decimal.new(5)})
"$5 USD" "$5.00 USD"
iex> format_usd_value(%USD{value: Decimal.new(5000)}) iex> format_usd_value(%USD{value: Decimal.new(5000)})
"$5,000 USD" "$5,000.00 USD"
iex> format_usd_value(%USD{value: Decimal.new(0.000005)}) iex> format_usd_value(%USD{value: Decimal.new(0.000005)})
"$0.000005 USD" "$0.000005 USD"
@ -28,7 +28,7 @@ defmodule ExplorerWeb.CurrencyHelpers do
def format_usd_value(%USD{value: nil}), do: nil def format_usd_value(%USD{value: nil}), do: nil
def format_usd_value(%USD{value: value}) do def format_usd_value(%USD{value: value}) do
case Number.to_string(value, format: "#,##0.##################") do case Number.to_string(value, format: "#,##0.00################") do
{:ok, formatted} -> "$#{formatted} " <> gettext("USD") {:ok, formatted} -> "$#{formatted} " <> gettext("USD")
_ -> nil _ -> nil
end end

@ -34,7 +34,7 @@ defmodule ExplorerWeb.TransactionView do
end end
defp fee_to_currency({fee_type, fee}, denomination: denomination) do defp fee_to_currency({fee_type, fee}, denomination: denomination) do
{fee_type, format_wei_value(Wei.from(fee, :wei), denomination, fractional_digits: 18)} {fee_type, format_wei_value(Wei.from(fee, :wei), denomination)}
end end
defp fee_to_currency({fee_type, fee}, exchange_rate: %Token{} = exchange_rate) do defp fee_to_currency({fee_type, fee}, exchange_rate: %Token{} = exchange_rate) do

@ -9,7 +9,7 @@ defmodule ExplorerWeb.WeiHelpers do
@valid_units ~w(wei gwei ether)a @valid_units ~w(wei gwei ether)a
@type format_option :: {:fractional_digits, pos_integer()} | {:include_unit_label, boolean()} @type format_option :: {:include_unit_label, boolean()}
@type format_options :: [format_option()] @type format_options :: [format_option()]
@ -22,7 +22,6 @@ defmodule ExplorerWeb.WeiHelpers do
The third argument allows for keyword options to be passed for formatting the The third argument allows for keyword options to be passed for formatting the
converted number. converted number.
* `:fractional_digits` - Integer. Number of fractional digits to include
* `:include_unit_label` - Boolean (Defaults to `true`). Flag for if the unit * `:include_unit_label` - Boolean (Defaults to `true`). Flag for if the unit
label should be included in the returned string label should be included in the returned string
@ -40,11 +39,10 @@ defmodule ExplorerWeb.WeiHelpers do
# With formatting options # With formatting options
iex> format_wei_value( iex> format_wei_value(
...> %Wei{value: Decimal.new(1)}, ...> %Wei{value: Decimal.new(1000500000000000000)},
...> :wei, ...> :ether
...> fractional_digits: 3
...> ) ...> )
"1.000 Wei" "1.0005 POA"
iex> format_wei_value( iex> format_wei_value(
...> %Wei{value: Decimal.new(10)}, ...> %Wei{value: Decimal.new(10)},
@ -55,12 +53,10 @@ defmodule ExplorerWeb.WeiHelpers do
""" """
@spec format_wei_value(Wei.t(), Wei.unit(), format_options()) :: String.t() @spec format_wei_value(Wei.t(), Wei.unit(), format_options()) :: String.t()
def format_wei_value(%Wei{} = wei, unit, options \\ []) when unit in @valid_units do def format_wei_value(%Wei{} = wei, unit, options \\ []) when unit in @valid_units do
number_format_options = build_number_format_options(options)
converted_value = converted_value =
wei wei
|> Wei.to(unit) |> Wei.to(unit)
|> Cldr.Number.to_string!(number_format_options) |> Cldr.Number.to_string!(format: "#,##0.##################")
if Keyword.get(options, :include_unit_label, true) do if Keyword.get(options, :include_unit_label, true) do
display_unit = display_unit(unit) display_unit = display_unit(unit)
@ -70,24 +66,7 @@ defmodule ExplorerWeb.WeiHelpers do
end end
end end
defp build_number_format_options(options) do
Enum.reduce(options, [], fn option, formatted_options ->
case parse_number_format_option(option) do
nil -> formatted_options
{key, value} -> Keyword.put(formatted_options, key, value)
end
end)
end
defp display_unit(:wei), do: gettext("Wei") defp display_unit(:wei), do: gettext("Wei")
defp display_unit(:gwei), do: gettext("Gwei") defp display_unit(:gwei), do: gettext("Gwei")
defp display_unit(:ether), do: gettext("Ether") defp display_unit(:ether), do: gettext("Ether")
defguardp is_fractional_digit(digits) when is_integer(digits) and digits > 0
defp parse_number_format_option({:fractional_digits, digits}) when is_fractional_digit(digits) do
{:fractional_digits, digits}
end
defp parse_number_format_option(_), do: nil
end end

@ -330,12 +330,12 @@ msgstr ""
#: lib/explorer_web/templates/pending_transaction/index.html.eex:40 #: lib/explorer_web/templates/pending_transaction/index.html.eex:40
#: lib/explorer_web/templates/transaction/index.html.eex:38 #: lib/explorer_web/templates/transaction/index.html.eex:38
#: lib/explorer_web/templates/transaction_internal_transaction/index.html.eex:30 #: lib/explorer_web/templates/transaction_internal_transaction/index.html.eex:30
#: lib/explorer_web/views/wei_helpers.ex:84 #: lib/explorer_web/views/wei_helpers.ex:71
msgid "Ether" msgid "Ether"
msgstr "" msgstr ""
#: lib/explorer_web/views/block_view.ex:22 #: lib/explorer_web/views/block_view.ex:22
#: lib/explorer_web/views/wei_helpers.ex:83 #: lib/explorer_web/views/wei_helpers.ex:70
msgid "Gwei" msgid "Gwei"
msgstr "" msgstr ""
@ -376,7 +376,7 @@ msgid "Type"
msgstr "" msgstr ""
#: lib/explorer_web/templates/transaction/overview.html.eex:145 #: lib/explorer_web/templates/transaction/overview.html.eex:145
#: lib/explorer_web/views/wei_helpers.ex:82 #: lib/explorer_web/views/wei_helpers.ex:69
msgid "Wei" msgid "Wei"
msgstr "" msgstr ""
@ -422,9 +422,6 @@ msgstr ""
msgid "Price" msgid "Price"
msgstr "" msgstr ""
#: lib/explorer_web/templates/chain/show.html.eex:31
#: lib/explorer_web/templates/chain/show.html.eex:36
#: lib/explorer_web/templates/chain/show.html.eex:40
#: lib/explorer_web/views/currency_helpers.ex:32 #: lib/explorer_web/views/currency_helpers.ex:32
msgid "USD" msgid "USD"
msgstr "" msgstr ""

@ -342,12 +342,12 @@ msgstr ""
#: lib/explorer_web/templates/pending_transaction/index.html.eex:40 #: lib/explorer_web/templates/pending_transaction/index.html.eex:40
#: lib/explorer_web/templates/transaction/index.html.eex:38 #: lib/explorer_web/templates/transaction/index.html.eex:38
#: lib/explorer_web/templates/transaction_internal_transaction/index.html.eex:30 #: lib/explorer_web/templates/transaction_internal_transaction/index.html.eex:30
#: lib/explorer_web/views/wei_helpers.ex:84 #: lib/explorer_web/views/wei_helpers.ex:71
msgid "Ether" msgid "Ether"
msgstr "POA" msgstr "POA"
#: lib/explorer_web/views/block_view.ex:22 #: lib/explorer_web/views/block_view.ex:22
#: lib/explorer_web/views/wei_helpers.ex:83 #: lib/explorer_web/views/wei_helpers.ex:70
msgid "Gwei" msgid "Gwei"
msgstr "" msgstr ""
@ -388,7 +388,7 @@ msgid "Type"
msgstr "" msgstr ""
#: lib/explorer_web/templates/transaction/overview.html.eex:145 #: lib/explorer_web/templates/transaction/overview.html.eex:145
#: lib/explorer_web/views/wei_helpers.ex:82 #: lib/explorer_web/views/wei_helpers.ex:69
msgid "Wei" msgid "Wei"
msgstr "" msgstr ""
@ -434,9 +434,6 @@ msgstr ""
msgid "Price" msgid "Price"
msgstr "" msgstr ""
#: lib/explorer_web/templates/chain/show.html.eex:31
#: lib/explorer_web/templates/chain/show.html.eex:36
#: lib/explorer_web/templates/chain/show.html.eex:40
#: lib/explorer_web/views/currency_helpers.ex:32 #: lib/explorer_web/views/currency_helpers.ex:32
msgid "USD" msgid "USD"
msgstr "" msgstr ""

@ -38,5 +38,11 @@ defmodule ExplorerWeb.ExchangeRates.USDTest do
assert %USD{value: Decimal.new(0.000005)} == USD.from(wei, token) assert %USD{value: Decimal.new(0.000005)} == USD.from(wei, token)
end end
test "returns USD struct from decimal usd value" do
value = Decimal.new(0.000005)
assert %USD{value: ^value} = USD.from(value)
end
end end
end end

@ -41,7 +41,7 @@ defmodule ExplorerWeb.ViewingAddressesTest do
session session
|> AddressPage.visit_page(address) |> AddressPage.visit_page(address)
|> assert_text(AddressPage.balance(), "0.000,000,000,000,000,500 POA") |> assert_text(AddressPage.balance(), "0.0000000000000005 POA")
end end
describe "viewing transactions" do describe "viewing transactions" do

@ -1,3 +1,33 @@
defmodule ExplorerWeb.ChainViewTest do defmodule ExplorerWeb.ChainViewTest do
use ExplorerWeb.ConnCase, async: true use ExplorerWeb.ConnCase, async: true
alias Explorer.ExchangeRates.Token
alias ExplorerWeb.ChainView
describe "format_exchange_rate/1" do
test "returns a formatted usd value from a `Token`'s usd_value" do
token = %Token{usd_value: Decimal.new(5.45)}
assert "$5.45 USD" == ChainView.format_exchange_rate(token)
assert nil == ChainView.format_exchange_rate(%Token{usd_value: nil})
end
end
describe "format_volume_24h/1" do
test "returns a formatted usd value from a `Token`'s volume_24h_usd" do
token = %Token{volume_24h_usd: Decimal.new(5.456)}
assert "$5.456 USD" == ChainView.format_volume_24h(token)
assert nil == ChainView.format_volume_24h(%Token{volume_24h_usd: nil})
end
end
describe "format_market_cap/1" do
test "returns a formatted usd value from a `Token`'s market_cap_usd" do
token = %Token{market_cap_usd: Decimal.new(5.4)}
assert "$5.40 USD" == ChainView.format_market_cap(token)
assert nil == ChainView.format_market_cap(%Token{market_cap_usd: nil})
end
end
end end

@ -20,7 +20,7 @@ defmodule ExplorerWeb.TransactionViewTest do
token = %Token{usd_value: Decimal.new(0.50)} token = %Token{usd_value: Decimal.new(0.50)}
expected_value = "<= 0.009,000,000,000,000,000 POA" expected_value = "<= 0.009 POA"
assert expected_value == TransactionView.formatted_fee(transaction, denomination: :ether) assert expected_value == TransactionView.formatted_fee(transaction, denomination: :ether)
assert "<= $0.0045 USD" == TransactionView.formatted_fee(transaction, exchange_rate: token) assert "<= $0.0045 USD" == TransactionView.formatted_fee(transaction, exchange_rate: token)
end end
@ -31,7 +31,7 @@ defmodule ExplorerWeb.TransactionViewTest do
transaction = build(:transaction, gas_price: gas_price, receipt: receipt) transaction = build(:transaction, gas_price: gas_price, receipt: receipt)
token = %Token{usd_value: Decimal.new(0.50)} token = %Token{usd_value: Decimal.new(0.50)}
expected_value = "0.003,102,702,000,000,000 POA" expected_value = "0.003102702 POA"
assert expected_value == TransactionView.formatted_fee(transaction, denomination: :ether) assert expected_value == TransactionView.formatted_fee(transaction, denomination: :ether)
assert "$0.001551351 USD" == TransactionView.formatted_fee(transaction, exchange_rate: token) assert "$0.001551351 USD" == TransactionView.formatted_fee(transaction, exchange_rate: token)
end end

Loading…
Cancel
Save