lib/trackler/problem.rb in trackler-2.1.0.24 vs lib/trackler/problem.rb in trackler-2.1.0.25

- old
+ new

@@ -1,101 +1,7 @@ -require 'yaml' -require_relative 'metadata' -require_relative 'description' -require_relative 'null_track' +require_relative 'specification' module Trackler # Problem is a language-independent definition of an exercise. - class Problem - attr_reader :slug, :root, :metadata - def initialize(slug, root, track = NullTrack.new) - @slug = slug - @root = root - @file_root = File.join(root, 'common', 'exercises', self.slug) - @repo_root = "https://github.com/exercism/x-common/blob/master/exercises/%s/" % self.slug - - @metadata = Metadata.for(problem: self, track: track) - self.description_object = Description.for(problem: self, track: track) - end - - def exists? - description_object.exists? && metadata.exists? - end - - def deprecated? - @deprecated ||= File.exists?(file_path(deprecation_file_name, @file_root)) - end - - def active? - exists? && !deprecated? - end - - def name - slug.split('-').map(&:capitalize).join(' ') - end - - def description - description_object.to_s - end - - def source_markdown - text = [source, markdown_link(source_url)].reject(&:empty?).join(" ") - text.empty? ? text : "## Source\n\n#{text}" - end - - def description_url - description_object.url - end - - def canonical_data_url - repo_url(canonical_data_file_name) if File.exists?(file_path(canonical_data_file_name, @file_root)) - end - - def metadata_url - metadata.url - end - - def blurb - metadata.blurb - end - - def source - metadata.source - end - - def source_url - metadata.source_url - end - - private - - attr_accessor :description_object - - def canonical_data_file_name - "canonical-data.json" - end - - def description_file_name - "description.md" - end - - def metadata_file_name - "metadata.yml" - end - - def deprecation_file_name - ".deprecated" - end - - def repo_url(filename) - @repo_root + filename - end - - def file_path(filename, root = @file_root) - File.join(root, filename) - end - - def markdown_link(url) - url.empty? ? url : format("[%s](%s)", url, url) - end + class Problem < Trackler::Specification end end