class Dependabot::Elm::FileParser

Constants

DEPENDENCY_TYPES

Public Instance Methods

parse() click to toggle source
# File lib/dependabot/elm/file_parser.rb, line 16
def parse
  dependency_set = DependencySet.new

  dependency_set += elm_json_dependencies if elm_json

  dependency_set.dependencies.sort_by(&:name)
end

Private Instance Methods

build_elm_json_dependency(name:, group:, requirement:, direct:) click to toggle source
# File lib/dependabot/elm/file_parser.rb, line 58
def build_elm_json_dependency(name:, group:, requirement:, direct:)
  requirements = [{
    requirement: requirement,
    groups: [group],
    source: nil,
    file: "elm.json"
  }]

  Dependency.new(
    name: name,
    version: version_for(requirement)&.to_s,
    requirements: direct ? requirements : [],
    package_manager: "elm"
  )
end
check_required_files() click to toggle source
# File lib/dependabot/elm/file_parser.rb, line 78
def check_required_files
  return if elm_json

  raise "No elm.json"
end
elm_json() click to toggle source
# File lib/dependabot/elm/file_parser.rb, line 98
def elm_json
  @elm_json ||= get_original_file("elm.json")
end
elm_json_dependencies() click to toggle source

For docs on elm.json, see: github.com/elm/compiler/blob/master/docs/elm.json/application.md github.com/elm/compiler/blob/master/docs/elm.json/package.md

# File lib/dependabot/elm/file_parser.rb, line 29
def elm_json_dependencies
  dependency_set = DependencySet.new

  DEPENDENCY_TYPES.each do |dep_type|
    if repo_type == "application"
      dependencies_hash = parsed_elm_json.fetch(dep_type, {})
      dependencies_hash.fetch("direct", {}).each do |name, req|
        dependency_set << build_elm_json_dependency(
          name: name, group: dep_type, requirement: req, direct: true
        )
      end
      dependencies_hash.fetch("indirect", {}).each do |name, req|
        dependency_set << build_elm_json_dependency(
          name: name, group: dep_type, requirement: req, direct: false
        )
      end
    elsif repo_type == "package"
      parsed_elm_json.fetch(dep_type, {}).each do |name, req|
        dependency_set << build_elm_json_dependency(
          name: name, group: dep_type, requirement: req, direct: true
        )
      end
    else raise "Unexpected repo type for Elm repo: #{repo_type}"
    end
  end

  dependency_set
end
parsed_elm_json() click to toggle source
# File lib/dependabot/elm/file_parser.rb, line 92
def parsed_elm_json
  @parsed_elm_json ||= JSON.parse(elm_json.content)
rescue JSON::ParserError
  raise Dependabot::DependencyFileNotParseable, elm_json.path
end
repo_type() click to toggle source
# File lib/dependabot/elm/file_parser.rb, line 74
def repo_type
  parsed_elm_json.fetch("type")
end
version_for(version_requirement) click to toggle source
# File lib/dependabot/elm/file_parser.rb, line 84
def version_for(version_requirement)
  req = Dependabot::Elm::Requirement.new(version_requirement)

  return unless req.exact?

  req.requirements.first.last
end