File generated from /Users/batate/mastery/lib/mastery/core/question.ex by COVER 2019-03-16 at 12:03:51

****************************************************************************

        |  
        |  defmodule Mastery.Core.Question do
        |    alias Mastery.Core.Template
        |  
     0..|    defstruct ~w[asked substitutions template]a
        |  
        |  
        |  
        |  
        |    def new(%Template{ } = template) do
        |      template.generators
        |      |> Enum.map(&build_substitution/1)
        |      |> evaluate(template)
        |    end
        |  
        |  
        |  
        |    defp build_substitution({name, choices_or_generator}) do
        |      {name, choose(choices_or_generator)}
        |    end
        |  
        |    defp choose(choices) when is_list(choices) do
        |      Enum.random(choices)
        |    end
        |    defp choose(generator) when is_function(generator) do
        |      generator.()
        |    end
        |  
        |  
        |  
        |    defp compile(template, substitutions) do
        |      template.compiled
        |      |> Code.eval_quoted(assigns: substitutions)
        |      |> elem(0)
        |    end
        |  
        |    defp evaluate(substitutions, template) do
        |      %__MODULE__{
        |        asked: compile(template, substitutions),
        |        substitutions: substitutions, 
        |        template: template
        |      }
        |    end
        |  end
        |