lib/hs/loaders/course_loader.rb in hs-cli-0.2.2 vs lib/hs/loaders/course_loader.rb in hs-cli-0.3.0

- old
+ new

@@ -4,33 +4,35 @@ module HS module CourseLoader include HS::XMLParser + KNOWN_LOADERS = %i[title chapters].freeze + def load_course(xml, &block) create_course(parse_xml(xml), &block) end private - def create_course(data) # rubocop:disable Metrics/MethodLength - course = HS::Course.new(slug: data[:slug]) + def create_course(data, &block) + course = HS::Course.new(data.slice(:slug)) + data[:_children].each { |child| load_a_part(course, child, &block) } + course + end - data[:_children].each do |child| - case child[:_name] - when :title - course.title = get_text(child) - when :chapters - if block_given? - files = child[:_children].map { |c| c[:file] }.compact + def load_a_part(course, child, &block) + return unless KNOWN_LOADERS.include?(child[:_name]) + send("load_#{child[:_name]}", course, child, &block) + end - files.each do |file| - yield course, file - end - end - end - end + def load_title(course, child) + course.title = get_text(child) + end - course + def load_chapters(course, child) + return unless block_given? + files = child[:_children].map { |c| c[:file] }.compact + files.each { |file| yield course, file } end end end