Class: ExercismFetcher::DataFetcher
- Inherits:
-
Object
- Object
- ExercismFetcher::DataFetcher
- Defined in:
- lib/exercism_fetcher/data_fetcher.rb
Instance Method Summary collapse
- #fetch_exercises(language) ⇒ Object
- #fetch_languages ⇒ Object
-
#initialize ⇒ DataFetcher
constructor
A new instance of DataFetcher.
- #write_language_json(language, exercises, output_dir) ⇒ Object
Constructor Details
#initialize ⇒ DataFetcher
Returns a new instance of DataFetcher.
9 10 11 |
# File 'lib/exercism_fetcher/data_fetcher.rb', line 9 def initialize check_gh_installation end |
Instance Method Details
#fetch_exercises(language) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/exercism_fetcher/data_fetcher.rb', line 27 def fetch_exercises(language) exercises = [] %w[concept practice].each do |type| dir_content = fetch_directory_content(language, type) exercises += dir_content.reject { |exercise| exercise.start_with?(".") } .map { |exercise| { name: exercise, type: type } } end exercises end |
#fetch_languages ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/exercism_fetcher/data_fetcher.rb', line 13 def fetch_languages stdout, stderr, status = Open3.capture3( "gh repo list exercism -L 1000 --json name,description" ) raise Error, "Failed to fetch repositories: #{stderr}" unless status.success? repos = JSON.parse(stdout) repos.filter_map do |repo| next unless repo["description"]&.match?(/Exercism exercises in/i) repo["name"].downcase end end |
#write_language_json(language, exercises, output_dir) ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/exercism_fetcher/data_fetcher.rb', line 37 def write_language_json(language, exercises, output_dir) FileUtils.mkdir_p(output_dir) File.write( File.join(output_dir, "#{language}.json"), JSON.pretty_generate(exercises) ) end |