Class: Richcss::RichSpecificationProvider

Inherits:
Object
  • Object
show all
Includes:
Molinillo::SpecificationProvider
Defined in:
lib/richcss/richcss_specification_provider.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, version) ⇒ RichSpecificationProvider

Returns a new instance of RichSpecificationProvider.



12
13
14
15
16
17
18
19
20
21
22
23
# 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

Instance Attribute Details

#part_nameObject

Returns the value of attribute part_name.



7
8
9
# File 'lib/richcss/richcss_specification_provider.rb', line 7

def part_name
  @part_name
end

#specsObject

Returns the value of attribute specs.



6
7
8
# File 'lib/richcss/richcss_specification_provider.rb', line 6

def specs
  @specs
end

#versionObject

Returns the value of attribute version.



8
9
10
# File 'lib/richcss/richcss_specification_provider.rb', line 8

def version
  @version
end

Instance Method Details

#dependencies_for(dependency) ⇒ Object



52
53
54
# File 'lib/richcss/richcss_specification_provider.rb', line 52

def dependencies_for(dependency)
  dependency.dependencies
end

#name_for(dependency) ⇒ Object



40
41
42
# File 'lib/richcss/richcss_specification_provider.rb', line 40

def name_for(dependency)
  dependency.name
end

#name_for_explicit_dependency_sourceObject



44
45
46
# File 'lib/richcss/richcss_specification_provider.rb', line 44

def name_for_explicit_dependency_source
  'Partfile'
end

#name_for_locking_dependency_sourceObject



48
49
50
# File 'lib/richcss/richcss_specification_provider.rb', line 48

def name_for_locking_dependency_source
  'Partfile.lock'
end

#requirement_satisfied_by?(requirement, _activated, spec) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
# 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) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# 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) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# 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