class Pod::Source::HealthReporter

Checks a source for errors and warnings.

Attributes

report[R]

@return [HealtReport] The report produced by the analysis.

source[R]

@return [Source] the source to check.

Public Class Methods

new(repo) click to toggle source

@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

analyze() click to toggle source

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
pre_check(&block) click to toggle source

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

check_spec_path(name, version, spec) click to toggle source

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
check_stray_specs() click to toggle source

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
lint_spec(name, version, spec_path) click to toggle source

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