Class: ExercismFetcher::DataFetcher

Inherits:
Object
  • Object
show all
Defined in:
lib/exercism_fetcher/data_fetcher.rb

Instance Method Summary collapse

Constructor Details

#initializeDataFetcher

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_languagesObject

Raises:



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