Class: RubyCritic::Cli::Options::Argv

Inherits:
Object
  • Object
show all
Defined in:
lib/rubycritic/cli/options/argv.rb

Overview

rubocop:disable Metrics/ClassLength

Instance Method Summary collapse

Constructor Details

#initialize(argv) ⇒ Argv

Returns a new instance of Argv.


10
11
12
13
# File 'lib/rubycritic/cli/options/argv.rb', line 10

def initialize(argv)
  @argv = argv
  self.parser = OptionParser.new
end

Instance Method Details

#parseObject

rubocop:disable Metrics/MethodLength,Metrics/AbcSize


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/rubycritic/cli/options/argv.rb', line 16

def parse
  parser.new do |opts|
    opts.banner = 'Usage: rubycritic [options] [paths]'

    opts.on('-p', '--path [PATH]', 'Set path where report will be saved (tmp/rubycritic by default)') do |path|
      @root = path
    end

    opts.on('-b', '--branch BRANCH', 'Set branch to compare') do |branch|
      self.base_branch = String(branch)
      set_current_branch
      self.mode = :compare_branches
    end

    opts.on(
      '-t',
      '--maximum-decrease [MAX_DECREASE]',
      'Set a threshold for score difference between two branches (works only with -b)'
    ) do |threshold_score|
      self.threshold_score = Integer(threshold_score)
    end

    formats = []
    self.formats = formats
    opts.on(
      '-f', '--format [FORMAT]',
      %i[html json console lint],
      'Report smells in the given format:',
      '  html (default; will open in a browser)',
      '  json',
      '  console',
      '  lint',
      'Multiple formats are supported.'
    ) do |format|
      formats << format
    end

    formatters = []
    self.formatters = formatters
    opts.on(
      '--custom-format [REQUIREPATH]:[CLASSNAME]|[CLASSNAME]',
      'Instantiate a given class as formatter and call report for reporting.',
      'Two ways are possible to load the formatter.',
      'If the class is not autorequired the REQUIREPATH can be given together',
      'with the CLASSNAME to be loaded seperated by a :.',
      'Example: rubycritic/markdown/reporter.rb:RubyCritic::MarkDown::Reporter',
      'or if the file is already required the CLASSNAME is enough',
      'Example: RubyCritic::MarkDown::Reporter',
      'Multiple formatters are supported.'
    ) do |formatter|
      formatters << formatter
    end

    opts.on('-s', '--minimum-score [MIN_SCORE]', 'Set a minimum score') do |min_score|
      self.minimum_score = Float(min_score)
    end

    opts.on('--churn-after [DATE]', 'Only count churn from a certain date.',
            'The date is passed through to version control (currently git only).',
            'Example: 2017-01-01') do |churn_after|
      self.churn_after = churn_after
    end

    opts.on('-m', '--mode-ci [BASE_BRANCH]',
            'Use CI mode (faster, analyses diffs w.r.t base_branch (default: master))') do |branch|
      self.base_branch = branch || 'master'
      set_current_branch
      self.mode = :ci
    end

    opts.on('--deduplicate-symlinks', 'De-duplicate symlinks based on their final target') do
      self.deduplicate_symlinks = true
    end

    opts.on('--suppress-ratings', 'Suppress letter ratings') do
      self.suppress_ratings = true
    end

    opts.on('--no-browser', 'Do not open html report with browser') do
      self.no_browser = true
    end

    opts.on_tail('-v', '--version', "Show gem's version") do
      self.mode = :version
    end

    opts.on_tail('-h', '--help', 'Show this message') do
      self.mode = :help
    end
  end.parse!(@argv)
end

#to_hObject


108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/rubycritic/cli/options/argv.rb', line 108

def to_h
  {
    mode: mode,
    root: root,
    formats: formats,
    formatters: formatters,
    deduplicate_symlinks: deduplicate_symlinks,
    paths: paths,
    suppress_ratings: suppress_ratings,
    help_text: parser.help,
    minimum_score: minimum_score,
    churn_after: churn_after,
    no_browser: no_browser,
    base_branch: base_branch,
    feature_branch: feature_branch,
    threshold_score: threshold_score
  }
end