Packages

Elixir HTTP/Websockets client library for official Steemit API and standard steemd JSONRPC interface. Includes module for pseudo realtime streaming of block, transaction and operation events.

Current section

Files

Jump to
steemex lib cleaner.ex
Raw

lib/cleaner.ex

defmodule Steemex.Cleaner do
def strip_token_names_and_convert_to_number(data) do
to_clean = ~w(max_accepted_payout promoted total_payout_value pending_payout_value total_pending_payout_value
curator_payout_value promoted balance vesting_withdraw_rate
savings_balance savings_sbd_balance sbd_balance vesting_balance vesting_shares)a
for {k,v} <- data, into: %{} do
{k, (if k in to_clean, do: v |> Float.parse |> elem(0), else: v)}
end
end
def parse_empty_strings(data) do
data
|> Map.update!(:parent_author, &(if &1 == "", do: nil, else: &1) )
|> Map.update!(:author, &(if &1 == "", do: nil, else: &1))
|> Map.update!(:permlink, &(if &1 == "", do: nil, else: &1))
end
def parse_timedate_strings(data) do
to_parse = ~w(created last_payout cashout_time max_cashout_time active last_update)a
for {k, v} <- data, into: %{} do
{k, (if k in to_parse, do: NaiveDateTime.from_iso8601!(v), else: v)}
end
end
def prepare_tags(data) do
update_in(data.tags, &List.wrap/1)
end
def parse_json_strings(x, key) do
if is_map(x[key]) do
x
else
val = x[key] || "{}"
val = if is_boolean(val), do: val, else: "{}" # some comments have boolean values instead of json
case Poison.Parser.parse(val) do
{:ok, map} -> put_in(x, [key], map)
{:error, _, _} -> put_in(x, [key], %{})
end
end
end
def extract_fields(data = %{json_metadata: ""}) do
data
|> Map.put(:json_metadata, %{})
|> Map.put(:tags, [])
|> Map.put(:tags, nil)
end
def extract_fields(data) do
data
|> (&Map.put(&1, :tags, &1.json_metadata[:tags] || [])).()
|> (&Map.put(&1, :app, &1.json_metadata[:app] || nil)).()
end
end