lib/helix/modules/variable_boolean_router_module.ex

defmodule Helix.Modules.VariableBooleanRouterModule do

    use Helix.Modules.Module

    def handle_cast({:convey, event}, state) do
      ui_event(state)
      state = update_input_history(state, event)

      sets = String.split(Map.get(state, :Toggle, ""), ",")
      source = String.replace(event.source_id, "_" <> state.graph_id, "")

      cond do
        Enum.member?(sets, source) ->
          # Update and Convey Value
          new_state = %{state | default: to_s(!to_bool(state.default))}
          {:noreply, convey(event.value, new_state)}

        true ->
          # Convey Value
          if to_bool(state.default) do
            {:noreply, convey(event.value, state)}
          else
            {:noreply, convey_alt(event.value, state, :False)}
          end

      end
    end

    defp to_bool(s) do
      if s == "true" do
        true
      else
        false
      end
    end

    defp to_s(b) do
      if b == true do
        "true"
      else
        "false"
      end
    end

  end