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