class Pod::Source::HealthReporter
Checks a source for errors and warnings.
Attributes
@return [HealtReport] The report produced by the analysis.
@return [Source] the source to check.
Public Class Methods
@param [Pathname] repo @see Source#repo
.
# File lib/cocoapods-core/source/health_reporter.rb, line 12 def initialize(repo) @source = Source.new(repo) @errors = {} @linter_results = {} end
Public Instance Methods
Analyzes all the specification files in the source.
@return [HealthReport] A report which contains the information about the
state of the source.
# File lib/cocoapods-core/source/health_reporter.rb, line 46 def analyze @report = HealthReport.new(source) source.pods.each do |name| source.versions(name).each do |version| @pre_check_callback.call(name, version) if @pre_check_callback spec_path = source.specification_path(name, version) spec = lint_spec(name, version, spec_path) check_spec_path(name, version, spec) if spec report.analyzed_paths << spec_path end end check_stray_specs report end
Allows to specify an optional callback which is called before analysing every spec. Suitable for UI.
@param [Proc] A callback which is called before checking any
specification. It receives the name and the version of the spec.
@return [void]
# File lib/cocoapods-core/source/health_reporter.rb, line 32 def pre_check(&block) @pre_check_callback = block end
Private Instance Methods
Ensures that the name and the version of the specification correspond to the ones expected by the repo given its path.
@param [String] name
The name of the Pod.
@param [Version] version
The version of the specification.
@param [Specification] spec
The specification to check.
@return [void]
# File lib/cocoapods-core/source/health_reporter.rb, line 110 def check_spec_path(name, version, spec) unless spec.name == name && spec.version.to_s == version.to_s message = "Incorrect path #{spec.defined_in_file}" report.add_message(:error, message, name, spec.version) end end
Checks for any stray specification in the repo.
@param [Array<Pathname>] analyzed_paths
The specification to check.
@return [void]
# File lib/cocoapods-core/source/health_reporter.rb, line 124 def check_stray_specs all_paths = Pathname.glob(source.repo + '**/*.podspec{,.json}') stray_specs = all_paths - report.analyzed_paths stray_specs.each do |path| report.add_message(:error, 'Stray spec', path) end end
Checks the validity of the specification with the linter.
@param [String] name
The name of the Pod.
@param [Version] version
The version of the specification.
@param [Pathname] spec_path
The path of the specification to check.
@return [Specification] The specification loaded by the linter. @return [Nil] If the specifications raised during evaluation.
# File lib/cocoapods-core/source/health_reporter.rb, line 86 def lint_spec(name, version, spec_path) linter = Specification::Linter.new(spec_path) linter.lint linter.results.each do |result| next if result.public_only? report.add_message(result.type, result.message, name, version) end linter.spec end