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