GemRequirement   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 55
rs 10
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __init__() 0 22 1
A install_command() 0 15 2
A is_installed() 0 10 2
1
from coalib.bears.requirements.PackageRequirement import PackageRequirement
2
from coalib.misc.Shell import call_without_output
3
import platform
4
5
6
class GemRequirement(PackageRequirement):
7
    """
8
    This class is a subclass of ``PackageRequirement``, and helps specifying
9
    requirements from ``gem``, without using the manager name.
10
    """
11
12
    def __init__(self, package, version="", require=""):
13
        """
14
        Constructs a new ``GemRequirement``, using the ``PackageRequirement``
15
        constructor.
16
17
        >>> pr = GemRequirement('setuptools', '19.2', 'flag')
18
        >>> pr.manager
19
        'gem'
20
        >>> pr.package
21
        'setuptools'
22
        >>> pr.version
23
        '19.2'
24
        >>> pr.require
25
        'flag'
26
27
        :param package: A string with the name of the package to be installed.
28
        :param version: A version string. Leave empty to specify latest version.
29
        :param require: A string that specifies any additional flags, that
30
                        would be used with ``require``.
31
        """
32
        PackageRequirement.__init__(self, 'gem', package, version)
33
        self.require = require
34
35
    def install_command(self):
36
        """
37
        Creates the installation command for the instance of the class.
38
39
        >>> GemRequirement('rubocop').install_command()
40
        ['gem', 'install', 'rubocop']
41
42
        >>> GemRequirement('scss_lint', '', 'false').install_command()
43
        ['gem', 'install', 'scss_lint, require: false']
44
45
        :param return: A string with the installation command.
46
        """
47
        result = ['gem', 'install', self.package + ', require: ' + self.require
48
                  if self.require else self.package]
49
        return result
50
51
    def is_installed(self):
52
        """
53
        Checks if the dependency is installed.
54
55
        :param return: True if dependency is installed, false otherwise.
56
        """
57
        cmd = ['gem', 'list', '-i', self.package]
58
        if platform.system() == 'Windows':  # pragma: no cover
59
            cmd = ['cmd', '/c'] + cmd
60
        return not call_without_output(cmd)
61