Class: VisualStudio::Install

Inherits:
Object
  • Object
show all
Defined in:
lib/visual_studio/install.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(desc = {}) ⇒ Install

Returns a new instance of Install.



8
9
10
11
12
13
# File 'lib/visual_studio/install.rb', line 8

def initialize(desc={})
  @name      = desc[:name]
  @version   = desc[:version]
  @root      = desc[:root]
  @products  = desc[:products]
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/visual_studio/install.rb', line 3

def name
  @name
end

#productsObject (readonly)

Returns the value of attribute products.



3
4
5
# File 'lib/visual_studio/install.rb', line 3

def products
  @products
end

#rootObject (readonly)

Returns the value of attribute root.



3
4
5
# File 'lib/visual_studio/install.rb', line 3

def root
  @root
end

#versionObject (readonly)

Returns the value of attribute version.



3
4
5
# File 'lib/visual_studio/install.rb', line 3

def version
  @version
end

Class Method Details

.available?(name_or_version) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/visual_studio/install.rb', line 15

def self.available?(name_or_version)
  !!(self.find(name_or_version))
end

.find(name_or_version) ⇒ Object



23
24
25
26
27
28
29
30
31
32
# File 'lib/visual_studio/install.rb', line 23

def self.find(name_or_version)
  if VisualStudio::NAMES.include?(name_or_version)
    self.find_by_name(name_or_version)
  elsif VisualStudio::VERSIONS.include?(name_or_version)
    self.find_by_version(name_or_version)
  else
    # TODO(mtwilliams): Raise an exception.
    # raise VisualStudio::InvalidCriteria.new("Expected a name or version")
  end
end

.find_by(criteria) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/visual_studio/install.rb', line 34

def self.find_by(criteria)
  if criteria.include?(:name)
    self.find_by_name(criteria[:name])
  elsif criteria.include?(:version)
    self.find_by_version(criteria[:version])
  else
    # TODO(mtwilliams): Raise an exception.
    # raise VisualStudio::InvalidCriteria.new("Expected 'name' or 'version' to be specified")
  end
end

.find_by_name(name) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/visual_studio/install.rb', line 45

def self.find_by_name(name)
  if VisualStudio::NAMES.include?(name)
    self.find_by_version(VisualStudio::NAME_TO_VERSION[name])
  else
    # TODO(mtwilliams): Raise an exception.
    # raise VisualStudio::InvalidName.new(...)
  end
end

.find_by_version(version) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/visual_studio/install.rb', line 54

def self.find_by_version(version)
  if VisualStudio::VERSIONS.include?(version)
    # Try to find any products (that we care about) for this version.
    c_and_cpp = VisualStudio::Product.find('VC', version)
    csharp    = VisualStudio::Product.find('VC#', version)

    # If no products (that we care about) for this version are installed,
    # then for all intents and purposes this version of Visual Studio
    # is "not installed". This might not be the truth, but who gives a fuck
    # about Visual Basic anymore?!
    return nil if [c_and_cpp, csharp].all?{|product| product.nil?}

    name = Helpers::PrettyString.new VisualStudio::VERSION_TO_NAME[version],
                                     pretty: VisualStudio::VERSION_TO_PRETTY_NAME[version]

    root = File.expand_path(File.join([c_and_cpp, csharp].compact.first.root, '..'))

    products = {c_and_cpp: c_and_cpp, csharp: csharp}
    products = products.reject{|_, v| v.nil?}

    VisualStudio::Install.new(name: name,
                              version: version,
                              root: root,
                              products: products)
  else
    # TODO(mtwilliams): Raise an exception.
    # raise VisualStudio::InvalidVersion.new(...)
  end
end

.latestObject



19
20
21
# File 'lib/visual_studio/install.rb', line 19

def self.latest
  VisualStudio::VERSIONS.map{|version| self.find_by_version(version)}.compact.first
end