lib/how_is/fetcher.rb in how_is-18.0.3 vs lib/how_is/fetcher.rb in how_is-18.0.4
- old
+ new
@@ -1,59 +1,67 @@
+# frozen_string_literal: true
+
require 'contracts'
require 'github_api'
require 'how_is/pulse'
##
# Fetches data from GitHub.
-class HowIs::Fetcher
- include Contracts::Core
-
- ##
- # Standardized representation for fetcher results.
- #
- # Implemented as a class instead of passing around a Hash so that it can
- # be more easily referenced by Contracts.
- class Results < Struct.new(:repository, :issues, :pulls, :pulse)
+class HowIs
+ class Fetcher
include Contracts::Core
- Contract String, C::ArrayOf[Hash], C::ArrayOf[Hash], String => nil
- def initialize(repository, issues, pulls, pulse)
- super(repository, issues, pulls, pulse)
+ ##
+ # Standardized representation for fetcher results.
+ #
+ # Implemented as a class instead of passing around a Hash so that it can
+ # be more easily referenced by Contracts.
+ class Results < Struct.new(:repository, :issues, :pulls, :pulse)
+ include Contracts::Core
+
+ Contract String, C::ArrayOf[Hash], C::ArrayOf[Hash], String => nil
+ def initialize(repository, issues, pulls, pulse)
+ super(repository, issues, pulls, pulse)
+ end
+
+ # Struct defines #to_h, but not #to_hash, so we alias them.
+ alias_method :to_hash, :to_h
end
- # Struct defines #to_h, but not #to_hash, so we alias them.
- alias_method :to_hash, :to_h
- end
+ ##
+ # Fetches repository information from GitHub and returns a Results object.
+ Contract String,
+ C::Or[C::RespondTo[:issues, :pulls], nil],
+ C::Or[C::RespondTo[:html_summary], nil] => Results
+ def call(repository,
+ github = nil,
+ pulse = nil)
+ github ||= Github.new(auto_pagination: true)
+ pulse ||= HowIs::Pulse.new(repository)
+ user, repo = repository.split('/', 2)
+ unless user && repo
+ raise HowIs::CLI::OptionsError, 'To generate a report from GitHub, ' \
+ 'provide the repository ' \
+ 'username/project. Quitting!'
+ end
- ##
- # Fetches repository information from GitHub and returns a Results object.
- Contract String,
- C::Or[C::RespondTo[:issues, :pulls], nil],
- C::Or[C::RespondTo[:html_summary], nil] => Results
- def call(repository,
- github = nil,
- pulse = nil)
- github ||= Github.new(auto_pagination: true)
- pulse ||= HowIs::Pulse.new(repository)
- user, repo = repository.split('/', 2)
- raise HowIs::CLI::OptionsError, 'To generate a report from GitHub, ' \
- 'provide the repository username/project. ' \
- 'Quitting!' unless user && repo
- issues = github.issues.list user: user, repo: repo
- pulls = github.pulls.list user: user, repo: repo
+ issues = github.issues.list user: user, repo: repo
+ pulls = github.pulls.list user: user, repo: repo
- summary = pulse.html_summary
+ summary = pulse.html_summary
- Results.new(
- repository,
- obj_to_array_of_hashes(issues),
- obj_to_array_of_hashes(pulls),
- summary,
- )
- end
+ Results.new(
+ repository,
+ obj_to_array_of_hashes(issues),
+ obj_to_array_of_hashes(pulls),
+ summary
+ )
+ end
-private
- def obj_to_array_of_hashes(object)
- object.to_a.map(&:to_h)
+ private
+
+ def obj_to_array_of_hashes(object)
+ object.to_a.map(&:to_h)
+ end
end
end