Class: VisualStudio

Inherits:
Object
  • Object
show all
Defined in:
lib/visual_studio.rb,
lib/visual_studio/name.rb,
lib/visual_studio/gem/version.rb

Defined Under Namespace

Modules: Gem Classes: Name

Constant Summary collapse

NAMES =
['vs2015', 'vs2013', 'vs2012', 'vs2010', 'vs2008', 'vs2005', 'vs2003', 'vs2002', 'vs6']
PRETTY_NAMES =
['Visual Studio 2015', 'Visual Studio 2013', 'Visual Studio 2012', 'Visual Studio 2010',
'Visual Studio 2008', 'Visual Studio 2005', 'Visual Studio .NET 2003', 'Visual Studio 6.0']
VERSIONS =
['14.0', '12.0', '11.0', '10.0', '9.0', '8.0', '7.1', '7.0', '6.0']
NAME_TO_VERSION =
NAME_TO_PRETTY_NAME =
VERSION_TO_NAME =

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ VisualStudio

Returns a new instance of VisualStudio.



18
19
20
21
22
23
24
25
# File 'lib/visual_studio.rb', line 18

def initialize(opts={})
  require 'visual_studio/name'
  @name = VisualStudio::Name.new(opts[:name], pretty: NAME_TO_PRETTY_NAME[opts[:name]])
  @version = opts[:version]
  @install = opts[:install]
  @toolsets = opts[:toolsets]
  @sdks = opts[:sdks]
end

Instance Attribute Details

#installObject (readonly)

Returns the value of attribute install.



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

def install
  @install
end

#nameObject (readonly)

Returns the value of attribute name.



12
13
14
# File 'lib/visual_studio.rb', line 12

def name
  @name
end

#sdksObject (readonly)

Returns the value of attribute sdks.



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

def sdks
  @sdks
end

#toolsetsObject (readonly)

Returns the value of attribute toolsets.



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

def toolsets
  @toolsets
end

#versionObject (readonly)

Returns the value of attribute version.



13
14
15
# File 'lib/visual_studio.rb', line 13

def version
  @version
end

Class Method Details

.available?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/visual_studio.rb', line 27

def self.available?
  VERSIONS.any? { |version| installed?(version) }
end

.find(name_or_version) ⇒ Object



35
36
37
38
# File 'lib/visual_studio.rb', line 35

def self.find(name_or_version)
  return find_by_name(name_or_version) if NAMES.include?(name_or_version)
  return find_by_version(name_or_version) if VERSIONS.include?(name_or_version)
end

.find_by_name(name) ⇒ Object



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

def self.find_by_name(name)
  find_by_version(NAME_TO_VERSION[name]) if NAMES.include?(name)
end

.find_by_version(version) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/visual_studio.rb', line 44

def self.find_by_version(version)
  install = _find_install_via_registry(version)
  return if install.nil?

  # HACK(mtwilliams): Assume C/C++ is installed.

  c_and_cpp = File.join(install, 'VC')
  # TODO(mtwilliams): Search for other toolsets, notably C#.

  csharp = nil # File.join(install, 'VC#')


  # TODO(mtwilliams): Look for SDKs, including packaged ones.

  sdk = nil # ...


  # TODO(mtwilliams): Cache.

  VisualStudio.new(name: VERSION_TO_NAME[version],
                   version: version,
                   install: install,
                   toolsets: Hashie::Mash.new({
                     c: c_and_cpp,
                     cpp: c_and_cpp,
                     csharp: csharp }),
                   sdks: Hashie::Mash.new({
                     windows: nil }))
end

.installed?(name_or_version) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/visual_studio.rb', line 31

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