class Tutorial

Attributes

current_step[R]
name[R]

Public Class Methods

load(name, current_step, current_product = nil, code_language = nil) click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 163
def self.load(name, current_step, current_product = nil, code_language = nil)
  new(
    name: name,
    current_step: current_step,
    current_product: current_product,
    code_language: code_language
  )
end
load_prerequisites(prerequisites, current_step) click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 107
def self.load_prerequisites(prerequisites, current_step)
  return [] unless prerequisites

  prerequisites.map do |t|
    t_path = Nexmo::Markdown::DocFinder.find(
      root: task_content_path,
      document: t,
      language: ::I18n.locale
    ).path
    raise "Prerequisite not found: #{t}" unless File.exist? t_path

    content = File.read(t_path)
    prereq = YAML.safe_load(content)
    {
      'path' => t,
      'title' => prereq['title'],
      'description' => prereq['description'],
      'is_active' => t == current_step,
      'content' => content,
    }
  end
end
new(name:, current_step:, current_product: nil, code_language: nil) click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 9
def initialize(name:, current_step:, current_product: nil, code_language: nil)
  @name         = name
  @current_step = current_step
  @product      = current_product
  @language     = code_language
  @file_loader  = load_file!
end
task_content_path() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 180
def self.task_content_path
  "#{Nexmo::Markdown::Config.docs_base_path}/_tutorials"
end
tutorials_path() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 184
def self.tutorials_path
  "#{Nexmo::Markdown::Config.docs_base_path}/config/tutorials"
end

Public Instance Methods

code_language() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 25
def code_language
  @code_language ||= @language || metadata.code_language
end
conclusion_task() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 152
def conclusion_task
  return unless yaml['conclusion']

  Task.new(
    name: 'conclusion',
    title: yaml['conclusion']['title'],
    description: yaml['conclusion']['description'],
    current_step: current_step
  )
end
content_for(step_name) click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 47
def content_for(step_name)
  if ['introduction', 'conclusion'].include? step_name
    raise "Invalid step: #{step_name}" unless yaml[step_name]

    return yaml[step_name]['content']
  end

  path = Nexmo::Markdown::DocFinder.find(
    root: self.class.task_content_path,
    document: step_name,
    language: ::I18n.locale,
    code_language: code_language
  ).path

  File.read(path)
end
current_product() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 21
def current_product
  @current_product ||= @product || metadata.default_product
end
description() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 33
def description
  @description ||= yaml['description'] || metadata.description
end
first_step() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 64
def first_step
  subtasks.first&.name
end
introduction_task() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 141
def introduction_task
  return unless yaml['introduction']

  Task.new(
    name: 'introduction',
    title: yaml['introduction']['title'],
    description: yaml['introduction']['description'],
    current_step: current_step
  )
end
load_file!() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 172
def load_file!
  Tutorial::FileLoader.new(
    root: self.class.tutorials_path,
    code_language: code_language,
    doc_name: name
  )
end
metadata() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 17
def metadata
  @metadata ||= Metadata.new(name: name)
end
next_step() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 72
def next_step
  current_task_index = subtasks.map(&:name).index(@current_step)
  return nil unless current_task_index

  subtasks[current_task_index + 1]
end
prerequisite?() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 68
def prerequisite?
  prerequisites.map(&:name).include?(@current_step)
end
prerequisite_task() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 130
def prerequisite_task
  return if prerequisites.empty?

  Task.new(
    name: 'prerequisites',
    title: 'Prerequisites',
    description: 'Everything you need to complete this task',
    current_step: current_step
  )
end
prerequisites() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 41
def prerequisites
  @prerequisites ||= (yaml['prerequisites'] || []).map do |prereq|
    Prerequisite.new(name: prereq, code_language: code_language, current_step: current_step)
  end
end
previous_step() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 79
def previous_step
  current_task_index = subtasks.map(&:name).index(@current_step)
  return nil unless current_task_index
  return nil if current_task_index <= 0

  subtasks[current_task_index - 1]
end
products() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 37
def products
  @products ||= yaml['products'] || metadata.products
end
subtasks() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 97
def subtasks
  @subtasks ||= begin
    tasks.unshift(prerequisite_task)
    tasks.unshift(introduction_task)
    tasks.push(conclusion_task)

    tasks.compact
  end
end
tasks() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 87
def tasks
  @tasks ||= (yaml['tasks'] || []).map do |t|
    Task.make_from(
      name: t,
      code_language: code_language,
      current_step: current_step
    )
  end
end
title() click to toggle source
# File lib/nexmo_developer/app/models/tutorial.rb, line 29
def title
  @title ||= yaml['title'] || metadata.title
end