class Richcss::RichSpecificationProvider

Attributes

part_name[RW]
specs[RW]
version[RW]

Public Class Methods

new(name, version) click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 12
def initialize(name, version)
  self.part_name = name
  self.version = version
  response = RestClient.get "http://www.cssparts.com/api/part/#{name}/dependency", {:params => {'version' => version}}
  if response.code == 200
    self.specs = JSON.load(response.body).reduce(Hash.new([])) do |specs_by_name, (dep_name, dep_versions)|
      specs_by_name.tap do |specs|
        specs[dep_name] = dep_versions.map { |s| Richcss::TestSpecification.new s }.sort_by(&:version)
      end
    end
  end
end

Public Instance Methods

dependencies_for(dependency) click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 52
def dependencies_for(dependency)
  dependency.dependencies
end
name_for(dependency) click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 40
def name_for(dependency)
  dependency.name
end
name_for_explicit_dependency_source() click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 44
def name_for_explicit_dependency_source
  'Partfile'
end
name_for_locking_dependency_source() click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 48
def name_for_locking_dependency_source
  'Partfile.lock'
end
requirement_satisfied_by?(requirement, _activated, spec) click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 25
def requirement_satisfied_by?(requirement, _activated, spec)
  requirement.satisfied_by?(spec.version)
end
search_for(dependency) click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 29
def search_for(dependency)
  @search_for ||= {}
  @search_for[dependency] ||= begin
    pre_release = dependency_pre_release?(dependency)
    specs[dependency.name].select do |spec|
      (pre_release ? true : !spec.version.pre_release?) &&
        dependency.satisfied_by?(spec.version)
    end
  end
end
sort_dependencies(dependencies, activated, conflicts) click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 56
def sort_dependencies(dependencies, activated, conflicts)
  dependencies.sort_by do |d|
    [
      activated.vertex_named(d.name).payload ? 0 : 1,
      dependency_pre_release?(d) ? 0 : 1,
      conflicts[d.name] ? 0 : 1,
      activated.vertex_named(d.name).payload ? 0 : search_for(d).count,
    ]
  end
end

Private Instance Methods

dependency_pre_release?(dependency) click to toggle source
# File lib/richcss/richcss_specification_provider.rb, line 69
def dependency_pre_release?(dependency)
  dependency.requirement_list.requirements.any? do |r|
    VersionKit::Version.new(r.reference_version).pre_release?
  end
end