class Kitchen::Directions::BakeNumberedExercise::V1

Public Instance Methods

bake(exercise:, number:, suppress_solution_if: false, note_suppressed_solutions: false, cases: false) click to toggle source
# File lib/kitchen/directions/bake_numbered_exercise/v1.rb, line 5
    def bake(exercise:, number:, suppress_solution_if: false,
             note_suppressed_solutions: false, cases: false)
      problem = exercise.problem
      solution = exercise.solution

      # Store label information
      label_number = "#{exercise.ancestor(:chapter).count_in(:book)}.#{number}"
      exercise.target_label(label_text: 'exercise', custom_content: label_number, cases: cases)

      problem_number = "<span class='os-number'>#{number}</span>"

      suppress_solution =
        case suppress_solution_if
        when Symbol
          number.send(suppress_solution_if)
        else
          suppress_solution_if
        end

      if solution.present?
        if suppress_solution
          solution.trash
          exercise.add_class('os-hasSolution-trashed') if note_suppressed_solutions
        else
          problem_number = "<a class='os-number' href='##{exercise.id}-solution'>#{number}</a>"
          bake_solution(exercise: exercise, number: number)
        end
      end

      problem.replace_children(with:
        <<~HTML
          #{problem_number}
          <span class='os-divider'>. </span>
          <div class="os-problem-container">#{problem.children}</div>
        HTML
      )
    end
bake_solution(exercise:, number:, divider: '. ') click to toggle source
# File lib/kitchen/directions/bake_numbered_exercise/v1.rb, line 43
    def bake_solution(exercise:, number:, divider: '. ')
      solution = exercise.solution
      solution.id = "#{exercise.id}-solution"
      exercise.add_class('os-hasSolution')

      solution.replace_children(with:
        <<~HTML
          <a class='os-number' href='##{exercise.id}'>#{number}</a>
          <span class='os-divider'>#{divider}</span>
          <div class="os-solution-container">#{solution.children}</div>
        HTML
      )
    end