Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions lib/chart/mapping.ex
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ defmodule Contex.Mapping do
end

defp check_required_columns!(expected_mappings, column_map) do

required_mappings = Enum.map(expected_mappings, fn {k, _v} -> k end)

provided_mappings = Map.keys(column_map)
Expand All @@ -159,13 +160,11 @@ defmodule Contex.Mapping do

defp confirm_columns_in_dataset!(dataset, column_map) do
available_columns = [nil | Dataset.column_names(dataset)]

missing_columns =
Map.values(column_map)
|> List.flatten()
|> missing_columns(available_columns)

case missing_columns do
|> Enum.filter(& not is_nil(&1))
|>case do
[] ->
:ok

Expand All @@ -176,8 +175,8 @@ defmodule Contex.Mapping do
end

defp missing_columns(required_columns, provided_columns) do
MapSet.new(required_columns)
|> MapSet.difference(MapSet.new(provided_columns))
MapSet.new(provided_columns)
|> MapSet.difference(MapSet.new(required_columns))
|> MapSet.to_list()
end

Expand Down
12 changes: 7 additions & 5 deletions lib/chart/pie_chart.ex
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ defmodule Contex.PieChart do

defstruct [
:dataset,
:total,
:mapping,
:options,
:colour_scale
Expand Down Expand Up @@ -67,11 +68,13 @@ defmodule Contex.PieChart do
options = check_options(options)
options = Keyword.merge(@default_options, options)
mapping = Mapping.new(@required_mappings, Keyword.get(options, :mapping), dataset)

val_accessor = dataset |> Dataset.value_fn(mapping.column_map[:value_col])
total = dataset.data |> Enum.reduce(0, fn col, acc -> val_accessor.(col) + acc end)
%PieChart{
dataset: dataset,
mapping: mapping,
options: options,
total: total,
colour_scale: Keyword.get(options, :colour_scale)
}
end
Expand Down Expand Up @@ -229,14 +232,13 @@ defmodule Contex.PieChart do
end

@spec scale_values(PieChart.t()) :: [{value :: number(), label :: any()}]
defp scale_values(%PieChart{dataset: dataset, mapping: mapping}) do
defp scale_values(%PieChart{dataset: dataset, mapping: mapping, total: 0}), do: raise ArithmeticError, message: "[Invalid dataset]#{inspect(dataset.data)} Sum of values should be a non-zero number"
defp scale_values(%PieChart{dataset: dataset, mapping: mapping, total: total}) do
val_accessor = dataset |> Dataset.value_fn(mapping.column_map[:value_col])
cat_accessor = dataset |> Dataset.value_fn(mapping.column_map[:category_col])

sum = dataset.data |> Enum.reduce(0, fn col, acc -> val_accessor.(col) + acc end)

dataset.data
|> Enum.map_reduce(sum, &{{val_accessor.(&1) / &2 * 100, cat_accessor.(&1)}, &2})
|> Enum.map_reduce(total, &{{val_accessor.(&1) / &2 * 100, cat_accessor.(&1)}, &2})
|> elem(0)
end
end