Class: RubyLint::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby-lint/configuration.rb

Overview

The Configuration class is used for storing configuration information used when running the CLI of ruby-lint. It contains information such as the available analysis classes and report levels.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Configuration

Returns a new instance of Configuration

Parameters:

  • options (Hash) (defaults to: {})


104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/ruby-lint/configuration.rb', line 104

def initialize(options = {})
  @debug = false

  options.each do |key, value|
    setter = "#{key}="

    send(setter, value) if respond_to?(setter)
  end

  @analysis_classes ||= default_analysis_classes
  @report_levels    ||= default_report_levels
  @presenter        ||= default_presenter
  @directories      ||= default_directories
  @ignore_paths     ||= []
end

Instance Attribute Details

#analysis_classesArray

Returns:

  • (Array)


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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/ruby-lint/configuration.rb', line 25

class Configuration
  attr_reader :analysis_classes, :report_levels, :presenter, :directories

  attr_accessor :debug, :ignore_paths

  ##
  # Returns an Array of locations from which to load configuration files.
  #
  # @return [Array]
  #
  def self.configuration_files
    return [
      File.join(Dir.pwd, 'ruby-lint.yml'),
      File.expand_path('~/.ruby-lint.yml', __FILE__)
    ]
  end

  ##
  # Creates a new configuration instance by loading a configuration file.
  #
  # @param [Array] paths The Array of configuration files to process. Only
  #  the first existing file will be loaded.
  # @return [RubyLint::Configuration]
  #
  def self.load_from_file(paths = configuration_files)
    paths.each do |path|
      if File.file?(path)
        options       = YAML.load_file(path)
        configuration = new(options)

        return configuration
      end
    end

    return new
  end

  ##
  # Returns the available analysis classes. See
  # {RubyLint::Analysis::Base.register} for more information on registering
  # analysis classes.
  #
  # @return [Hash]
  #
  def self.available_analysis_classes
    return @available_analysis_classes ||= {}
  end

  ##
  # Returns the available report levels.
  #
  # @return [Hash]
  #
  def self.available_report_levels
    unless @available_report_levels
      @available_report_levels = {}

      RubyLint::Report::DEFAULT_LEVELS.each do |level|
        @available_report_levels[level.to_s] = level
      end
    end

    return @available_report_levels
  end

  ##
  # Returns the available presenter classes. See
  # {RubyLint::Presenter::Base.register} for more information on registering
  # presenters.
  #
  # @return [Hash]
  #
  def self.available_presenters
    return @available_presenters ||= {}
  end

  ##
  # @param [Hash] options
  #
  def initialize(options = {})
    @debug = false

    options.each do |key, value|
      setter = "#{key}="

      send(setter, value) if respond_to?(setter)
    end

    @analysis_classes ||= default_analysis_classes
    @report_levels    ||= default_report_levels
    @presenter        ||= default_presenter
    @directories      ||= default_directories
    @ignore_paths     ||= []
  end

  ##
  # Requires a list of files.
  #
  # @param [Array] files
  #
  def requires=(files)
    files.each { |file| require(file) }
  end

  ##
  # Sets a list of the enabled report levels.
  #
  # @param [Array] given The report levels specified by the user.
  # @return [Array]
  #
  def report_levels=(given)
    available = self.class.available_report_levels
    levels    = []

    given.each do |level|
      levels << available[level] if available[level]
    end

    if levels.empty?
      levels = default_report_levels
    end

    @report_levels = levels
  end

  ##
  # Sets the presenter to use.
  #
  # @param [String] name The friendly name of the presenter as set by the
  #  user.
  # @return [RubyLint::Presenter]
  # @raise ArgumentError Raised when an invalid presenter is specified.
  #
  def presenter=(name)
    found = self.class.available_presenters[name]

    if found
      @presenter = found
    else
      raise ArgumentError, "Invalid presenter: #{name}"
    end
  end

  ##
  # Sets a collection of the analysis constants to use.
  #
  # @param [Array] names The analysis names as given by the user.
  # @return [Array]
  #
  def analysis_classes=(names)
    classes   = []
    available = self.class.available_analysis_classes

    names.each do |name|
      classes << available[name] if available[name]
    end

    if classes.empty?
      classes = default_analysis_classes
    end

    @analysis_classes = classes
  end

  ##
  # Sets the directories to scan for external Ruby files using
  # {RubyLint::FileLoader}.
  #
  # @param [Array] directories
  #
  def directories=(directories)
    valid = []

    if directories
      directories.each do |dir|
        unless File.directory?(dir)
          raise ArgumentError, "The directory #{dir} does not exist"
        end

        valid << File.expand_path(dir)
      end
    end

    @directories = valid
  end

  ##
  # Returns the default (= all) analysis classes to use.
  #
  # @return [Array]
  #
  def default_analysis_classes
    return self.class.available_analysis_classes.values
  end

  ##
  # @return [Array]
  #
  def default_report_levels
    return self.class.available_report_levels.values
  end

  ##
  # @return [Class]
  #
  def default_presenter
    return RubyLint::Presenter::Text
  end

  ##
  # @return [Array]
  #
  def default_directories
    return FileScanner.default_directories
  end
end

#debugTrueClass|FalseClass

Returns:

  • (TrueClass|FalseClass)


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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/ruby-lint/configuration.rb', line 25

class Configuration
  attr_reader :analysis_classes, :report_levels, :presenter, :directories

  attr_accessor :debug, :ignore_paths

  ##
  # Returns an Array of locations from which to load configuration files.
  #
  # @return [Array]
  #
  def self.configuration_files
    return [
      File.join(Dir.pwd, 'ruby-lint.yml'),
      File.expand_path('~/.ruby-lint.yml', __FILE__)
    ]
  end

  ##
  # Creates a new configuration instance by loading a configuration file.
  #
  # @param [Array] paths The Array of configuration files to process. Only
  #  the first existing file will be loaded.
  # @return [RubyLint::Configuration]
  #
  def self.load_from_file(paths = configuration_files)
    paths.each do |path|
      if File.file?(path)
        options       = YAML.load_file(path)
        configuration = new(options)

        return configuration
      end
    end

    return new
  end

  ##
  # Returns the available analysis classes. See
  # {RubyLint::Analysis::Base.register} for more information on registering
  # analysis classes.
  #
  # @return [Hash]
  #
  def self.available_analysis_classes
    return @available_analysis_classes ||= {}
  end

  ##
  # Returns the available report levels.
  #
  # @return [Hash]
  #
  def self.available_report_levels
    unless @available_report_levels
      @available_report_levels = {}

      RubyLint::Report::DEFAULT_LEVELS.each do |level|
        @available_report_levels[level.to_s] = level
      end
    end

    return @available_report_levels
  end

  ##
  # Returns the available presenter classes. See
  # {RubyLint::Presenter::Base.register} for more information on registering
  # presenters.
  #
  # @return [Hash]
  #
  def self.available_presenters
    return @available_presenters ||= {}
  end

  ##
  # @param [Hash] options
  #
  def initialize(options = {})
    @debug = false

    options.each do |key, value|
      setter = "#{key}="

      send(setter, value) if respond_to?(setter)
    end

    @analysis_classes ||= default_analysis_classes
    @report_levels    ||= default_report_levels
    @presenter        ||= default_presenter
    @directories      ||= default_directories
    @ignore_paths     ||= []
  end

  ##
  # Requires a list of files.
  #
  # @param [Array] files
  #
  def requires=(files)
    files.each { |file| require(file) }
  end

  ##
  # Sets a list of the enabled report levels.
  #
  # @param [Array] given The report levels specified by the user.
  # @return [Array]
  #
  def report_levels=(given)
    available = self.class.available_report_levels
    levels    = []

    given.each do |level|
      levels << available[level] if available[level]
    end

    if levels.empty?
      levels = default_report_levels
    end

    @report_levels = levels
  end

  ##
  # Sets the presenter to use.
  #
  # @param [String] name The friendly name of the presenter as set by the
  #  user.
  # @return [RubyLint::Presenter]
  # @raise ArgumentError Raised when an invalid presenter is specified.
  #
  def presenter=(name)
    found = self.class.available_presenters[name]

    if found
      @presenter = found
    else
      raise ArgumentError, "Invalid presenter: #{name}"
    end
  end

  ##
  # Sets a collection of the analysis constants to use.
  #
  # @param [Array] names The analysis names as given by the user.
  # @return [Array]
  #
  def analysis_classes=(names)
    classes   = []
    available = self.class.available_analysis_classes

    names.each do |name|
      classes << available[name] if available[name]
    end

    if classes.empty?
      classes = default_analysis_classes
    end

    @analysis_classes = classes
  end

  ##
  # Sets the directories to scan for external Ruby files using
  # {RubyLint::FileLoader}.
  #
  # @param [Array] directories
  #
  def directories=(directories)
    valid = []

    if directories
      directories.each do |dir|
        unless File.directory?(dir)
          raise ArgumentError, "The directory #{dir} does not exist"
        end

        valid << File.expand_path(dir)
      end
    end

    @directories = valid
  end

  ##
  # Returns the default (= all) analysis classes to use.
  #
  # @return [Array]
  #
  def default_analysis_classes
    return self.class.available_analysis_classes.values
  end

  ##
  # @return [Array]
  #
  def default_report_levels
    return self.class.available_report_levels.values
  end

  ##
  # @return [Class]
  #
  def default_presenter
    return RubyLint::Presenter::Text
  end

  ##
  # @return [Array]
  #
  def default_directories
    return FileScanner.default_directories
  end
end

#directoriesArray

Returns:

  • (Array)


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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/ruby-lint/configuration.rb', line 25

class Configuration
  attr_reader :analysis_classes, :report_levels, :presenter, :directories

  attr_accessor :debug, :ignore_paths

  ##
  # Returns an Array of locations from which to load configuration files.
  #
  # @return [Array]
  #
  def self.configuration_files
    return [
      File.join(Dir.pwd, 'ruby-lint.yml'),
      File.expand_path('~/.ruby-lint.yml', __FILE__)
    ]
  end

  ##
  # Creates a new configuration instance by loading a configuration file.
  #
  # @param [Array] paths The Array of configuration files to process. Only
  #  the first existing file will be loaded.
  # @return [RubyLint::Configuration]
  #
  def self.load_from_file(paths = configuration_files)
    paths.each do |path|
      if File.file?(path)
        options       = YAML.load_file(path)
        configuration = new(options)

        return configuration
      end
    end

    return new
  end

  ##
  # Returns the available analysis classes. See
  # {RubyLint::Analysis::Base.register} for more information on registering
  # analysis classes.
  #
  # @return [Hash]
  #
  def self.available_analysis_classes
    return @available_analysis_classes ||= {}
  end

  ##
  # Returns the available report levels.
  #
  # @return [Hash]
  #
  def self.available_report_levels
    unless @available_report_levels
      @available_report_levels = {}

      RubyLint::Report::DEFAULT_LEVELS.each do |level|
        @available_report_levels[level.to_s] = level
      end
    end

    return @available_report_levels
  end

  ##
  # Returns the available presenter classes. See
  # {RubyLint::Presenter::Base.register} for more information on registering
  # presenters.
  #
  # @return [Hash]
  #
  def self.available_presenters
    return @available_presenters ||= {}
  end

  ##
  # @param [Hash] options
  #
  def initialize(options = {})
    @debug = false

    options.each do |key, value|
      setter = "#{key}="

      send(setter, value) if respond_to?(setter)
    end

    @analysis_classes ||= default_analysis_classes
    @report_levels    ||= default_report_levels
    @presenter        ||= default_presenter
    @directories      ||= default_directories
    @ignore_paths     ||= []
  end

  ##
  # Requires a list of files.
  #
  # @param [Array] files
  #
  def requires=(files)
    files.each { |file| require(file) }
  end

  ##
  # Sets a list of the enabled report levels.
  #
  # @param [Array] given The report levels specified by the user.
  # @return [Array]
  #
  def report_levels=(given)
    available = self.class.available_report_levels
    levels    = []

    given.each do |level|
      levels << available[level] if available[level]
    end

    if levels.empty?
      levels = default_report_levels
    end

    @report_levels = levels
  end

  ##
  # Sets the presenter to use.
  #
  # @param [String] name The friendly name of the presenter as set by the
  #  user.
  # @return [RubyLint::Presenter]
  # @raise ArgumentError Raised when an invalid presenter is specified.
  #
  def presenter=(name)
    found = self.class.available_presenters[name]

    if found
      @presenter = found
    else
      raise ArgumentError, "Invalid presenter: #{name}"
    end
  end

  ##
  # Sets a collection of the analysis constants to use.
  #
  # @param [Array] names The analysis names as given by the user.
  # @return [Array]
  #
  def analysis_classes=(names)
    classes   = []
    available = self.class.available_analysis_classes

    names.each do |name|
      classes << available[name] if available[name]
    end

    if classes.empty?
      classes = default_analysis_classes
    end

    @analysis_classes = classes
  end

  ##
  # Sets the directories to scan for external Ruby files using
  # {RubyLint::FileLoader}.
  #
  # @param [Array] directories
  #
  def directories=(directories)
    valid = []

    if directories
      directories.each do |dir|
        unless File.directory?(dir)
          raise ArgumentError, "The directory #{dir} does not exist"
        end

        valid << File.expand_path(dir)
      end
    end

    @directories = valid
  end

  ##
  # Returns the default (= all) analysis classes to use.
  #
  # @return [Array]
  #
  def default_analysis_classes
    return self.class.available_analysis_classes.values
  end

  ##
  # @return [Array]
  #
  def default_report_levels
    return self.class.available_report_levels.values
  end

  ##
  # @return [Class]
  #
  def default_presenter
    return RubyLint::Presenter::Text
  end

  ##
  # @return [Array]
  #
  def default_directories
    return FileScanner.default_directories
  end
end

#ignore_pathsArray

Returns:

  • (Array)


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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/ruby-lint/configuration.rb', line 25

class Configuration
  attr_reader :analysis_classes, :report_levels, :presenter, :directories

  attr_accessor :debug, :ignore_paths

  ##
  # Returns an Array of locations from which to load configuration files.
  #
  # @return [Array]
  #
  def self.configuration_files
    return [
      File.join(Dir.pwd, 'ruby-lint.yml'),
      File.expand_path('~/.ruby-lint.yml', __FILE__)
    ]
  end

  ##
  # Creates a new configuration instance by loading a configuration file.
  #
  # @param [Array] paths The Array of configuration files to process. Only
  #  the first existing file will be loaded.
  # @return [RubyLint::Configuration]
  #
  def self.load_from_file(paths = configuration_files)
    paths.each do |path|
      if File.file?(path)
        options       = YAML.load_file(path)
        configuration = new(options)

        return configuration
      end
    end

    return new
  end

  ##
  # Returns the available analysis classes. See
  # {RubyLint::Analysis::Base.register} for more information on registering
  # analysis classes.
  #
  # @return [Hash]
  #
  def self.available_analysis_classes
    return @available_analysis_classes ||= {}
  end

  ##
  # Returns the available report levels.
  #
  # @return [Hash]
  #
  def self.available_report_levels
    unless @available_report_levels
      @available_report_levels = {}

      RubyLint::Report::DEFAULT_LEVELS.each do |level|
        @available_report_levels[level.to_s] = level
      end
    end

    return @available_report_levels
  end

  ##
  # Returns the available presenter classes. See
  # {RubyLint::Presenter::Base.register} for more information on registering
  # presenters.
  #
  # @return [Hash]
  #
  def self.available_presenters
    return @available_presenters ||= {}
  end

  ##
  # @param [Hash] options
  #
  def initialize(options = {})
    @debug = false

    options.each do |key, value|
      setter = "#{key}="

      send(setter, value) if respond_to?(setter)
    end

    @analysis_classes ||= default_analysis_classes
    @report_levels    ||= default_report_levels
    @presenter        ||= default_presenter
    @directories      ||= default_directories
    @ignore_paths     ||= []
  end

  ##
  # Requires a list of files.
  #
  # @param [Array] files
  #
  def requires=(files)
    files.each { |file| require(file) }
  end

  ##
  # Sets a list of the enabled report levels.
  #
  # @param [Array] given The report levels specified by the user.
  # @return [Array]
  #
  def report_levels=(given)
    available = self.class.available_report_levels
    levels    = []

    given.each do |level|
      levels << available[level] if available[level]
    end

    if levels.empty?
      levels = default_report_levels
    end

    @report_levels = levels
  end

  ##
  # Sets the presenter to use.
  #
  # @param [String] name The friendly name of the presenter as set by the
  #  user.
  # @return [RubyLint::Presenter]
  # @raise ArgumentError Raised when an invalid presenter is specified.
  #
  def presenter=(name)
    found = self.class.available_presenters[name]

    if found
      @presenter = found
    else
      raise ArgumentError, "Invalid presenter: #{name}"
    end
  end

  ##
  # Sets a collection of the analysis constants to use.
  #
  # @param [Array] names The analysis names as given by the user.
  # @return [Array]
  #
  def analysis_classes=(names)
    classes   = []
    available = self.class.available_analysis_classes

    names.each do |name|
      classes << available[name] if available[name]
    end

    if classes.empty?
      classes = default_analysis_classes
    end

    @analysis_classes = classes
  end

  ##
  # Sets the directories to scan for external Ruby files using
  # {RubyLint::FileLoader}.
  #
  # @param [Array] directories
  #
  def directories=(directories)
    valid = []

    if directories
      directories.each do |dir|
        unless File.directory?(dir)
          raise ArgumentError, "The directory #{dir} does not exist"
        end

        valid << File.expand_path(dir)
      end
    end

    @directories = valid
  end

  ##
  # Returns the default (= all) analysis classes to use.
  #
  # @return [Array]
  #
  def default_analysis_classes
    return self.class.available_analysis_classes.values
  end

  ##
  # @return [Array]
  #
  def default_report_levels
    return self.class.available_report_levels.values
  end

  ##
  # @return [Class]
  #
  def default_presenter
    return RubyLint::Presenter::Text
  end

  ##
  # @return [Array]
  #
  def default_directories
    return FileScanner.default_directories
  end
end

#presenterClass

Returns:

  • (Class)


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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/ruby-lint/configuration.rb', line 25

class Configuration
  attr_reader :analysis_classes, :report_levels, :presenter, :directories

  attr_accessor :debug, :ignore_paths

  ##
  # Returns an Array of locations from which to load configuration files.
  #
  # @return [Array]
  #
  def self.configuration_files
    return [
      File.join(Dir.pwd, 'ruby-lint.yml'),
      File.expand_path('~/.ruby-lint.yml', __FILE__)
    ]
  end

  ##
  # Creates a new configuration instance by loading a configuration file.
  #
  # @param [Array] paths The Array of configuration files to process. Only
  #  the first existing file will be loaded.
  # @return [RubyLint::Configuration]
  #
  def self.load_from_file(paths = configuration_files)
    paths.each do |path|
      if File.file?(path)
        options       = YAML.load_file(path)
        configuration = new(options)

        return configuration
      end
    end

    return new
  end

  ##
  # Returns the available analysis classes. See
  # {RubyLint::Analysis::Base.register} for more information on registering
  # analysis classes.
  #
  # @return [Hash]
  #
  def self.available_analysis_classes
    return @available_analysis_classes ||= {}
  end

  ##
  # Returns the available report levels.
  #
  # @return [Hash]
  #
  def self.available_report_levels
    unless @available_report_levels
      @available_report_levels = {}

      RubyLint::Report::DEFAULT_LEVELS.each do |level|
        @available_report_levels[level.to_s] = level
      end
    end

    return @available_report_levels
  end

  ##
  # Returns the available presenter classes. See
  # {RubyLint::Presenter::Base.register} for more information on registering
  # presenters.
  #
  # @return [Hash]
  #
  def self.available_presenters
    return @available_presenters ||= {}
  end

  ##
  # @param [Hash] options
  #
  def initialize(options = {})
    @debug = false

    options.each do |key, value|
      setter = "#{key}="

      send(setter, value) if respond_to?(setter)
    end

    @analysis_classes ||= default_analysis_classes
    @report_levels    ||= default_report_levels
    @presenter        ||= default_presenter
    @directories      ||= default_directories
    @ignore_paths     ||= []
  end

  ##
  # Requires a list of files.
  #
  # @param [Array] files
  #
  def requires=(files)
    files.each { |file| require(file) }
  end

  ##
  # Sets a list of the enabled report levels.
  #
  # @param [Array] given The report levels specified by the user.
  # @return [Array]
  #
  def report_levels=(given)
    available = self.class.available_report_levels
    levels    = []

    given.each do |level|
      levels << available[level] if available[level]
    end

    if levels.empty?
      levels = default_report_levels
    end

    @report_levels = levels
  end

  ##
  # Sets the presenter to use.
  #
  # @param [String] name The friendly name of the presenter as set by the
  #  user.
  # @return [RubyLint::Presenter]
  # @raise ArgumentError Raised when an invalid presenter is specified.
  #
  def presenter=(name)
    found = self.class.available_presenters[name]

    if found
      @presenter = found
    else
      raise ArgumentError, "Invalid presenter: #{name}"
    end
  end

  ##
  # Sets a collection of the analysis constants to use.
  #
  # @param [Array] names The analysis names as given by the user.
  # @return [Array]
  #
  def analysis_classes=(names)
    classes   = []
    available = self.class.available_analysis_classes

    names.each do |name|
      classes << available[name] if available[name]
    end

    if classes.empty?
      classes = default_analysis_classes
    end

    @analysis_classes = classes
  end

  ##
  # Sets the directories to scan for external Ruby files using
  # {RubyLint::FileLoader}.
  #
  # @param [Array] directories
  #
  def directories=(directories)
    valid = []

    if directories
      directories.each do |dir|
        unless File.directory?(dir)
          raise ArgumentError, "The directory #{dir} does not exist"
        end

        valid << File.expand_path(dir)
      end
    end

    @directories = valid
  end

  ##
  # Returns the default (= all) analysis classes to use.
  #
  # @return [Array]
  #
  def default_analysis_classes
    return self.class.available_analysis_classes.values
  end

  ##
  # @return [Array]
  #
  def default_report_levels
    return self.class.available_report_levels.values
  end

  ##
  # @return [Class]
  #
  def default_presenter
    return RubyLint::Presenter::Text
  end

  ##
  # @return [Array]
  #
  def default_directories
    return FileScanner.default_directories
  end
end

#report_levelsArray

Returns:

  • (Array)


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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/ruby-lint/configuration.rb', line 25

class Configuration
  attr_reader :analysis_classes, :report_levels, :presenter, :directories

  attr_accessor :debug, :ignore_paths

  ##
  # Returns an Array of locations from which to load configuration files.
  #
  # @return [Array]
  #
  def self.configuration_files
    return [
      File.join(Dir.pwd, 'ruby-lint.yml'),
      File.expand_path('~/.ruby-lint.yml', __FILE__)
    ]
  end

  ##
  # Creates a new configuration instance by loading a configuration file.
  #
  # @param [Array] paths The Array of configuration files to process. Only
  #  the first existing file will be loaded.
  # @return [RubyLint::Configuration]
  #
  def self.load_from_file(paths = configuration_files)
    paths.each do |path|
      if File.file?(path)
        options       = YAML.load_file(path)
        configuration = new(options)

        return configuration
      end
    end

    return new
  end

  ##
  # Returns the available analysis classes. See
  # {RubyLint::Analysis::Base.register} for more information on registering
  # analysis classes.
  #
  # @return [Hash]
  #
  def self.available_analysis_classes
    return @available_analysis_classes ||= {}
  end

  ##
  # Returns the available report levels.
  #
  # @return [Hash]
  #
  def self.available_report_levels
    unless @available_report_levels
      @available_report_levels = {}

      RubyLint::Report::DEFAULT_LEVELS.each do |level|
        @available_report_levels[level.to_s] = level
      end
    end

    return @available_report_levels
  end

  ##
  # Returns the available presenter classes. See
  # {RubyLint::Presenter::Base.register} for more information on registering
  # presenters.
  #
  # @return [Hash]
  #
  def self.available_presenters
    return @available_presenters ||= {}
  end

  ##
  # @param [Hash] options
  #
  def initialize(options = {})
    @debug = false

    options.each do |key, value|
      setter = "#{key}="

      send(setter, value) if respond_to?(setter)
    end

    @analysis_classes ||= default_analysis_classes
    @report_levels    ||= default_report_levels
    @presenter        ||= default_presenter
    @directories      ||= default_directories
    @ignore_paths     ||= []
  end

  ##
  # Requires a list of files.
  #
  # @param [Array] files
  #
  def requires=(files)
    files.each { |file| require(file) }
  end

  ##
  # Sets a list of the enabled report levels.
  #
  # @param [Array] given The report levels specified by the user.
  # @return [Array]
  #
  def report_levels=(given)
    available = self.class.available_report_levels
    levels    = []

    given.each do |level|
      levels << available[level] if available[level]
    end

    if levels.empty?
      levels = default_report_levels
    end

    @report_levels = levels
  end

  ##
  # Sets the presenter to use.
  #
  # @param [String] name The friendly name of the presenter as set by the
  #  user.
  # @return [RubyLint::Presenter]
  # @raise ArgumentError Raised when an invalid presenter is specified.
  #
  def presenter=(name)
    found = self.class.available_presenters[name]

    if found
      @presenter = found
    else
      raise ArgumentError, "Invalid presenter: #{name}"
    end
  end

  ##
  # Sets a collection of the analysis constants to use.
  #
  # @param [Array] names The analysis names as given by the user.
  # @return [Array]
  #
  def analysis_classes=(names)
    classes   = []
    available = self.class.available_analysis_classes

    names.each do |name|
      classes << available[name] if available[name]
    end

    if classes.empty?
      classes = default_analysis_classes
    end

    @analysis_classes = classes
  end

  ##
  # Sets the directories to scan for external Ruby files using
  # {RubyLint::FileLoader}.
  #
  # @param [Array] directories
  #
  def directories=(directories)
    valid = []

    if directories
      directories.each do |dir|
        unless File.directory?(dir)
          raise ArgumentError, "The directory #{dir} does not exist"
        end

        valid << File.expand_path(dir)
      end
    end

    @directories = valid
  end

  ##
  # Returns the default (= all) analysis classes to use.
  #
  # @return [Array]
  #
  def default_analysis_classes
    return self.class.available_analysis_classes.values
  end

  ##
  # @return [Array]
  #
  def default_report_levels
    return self.class.available_report_levels.values
  end

  ##
  # @return [Class]
  #
  def default_presenter
    return RubyLint::Presenter::Text
  end

  ##
  # @return [Array]
  #
  def default_directories
    return FileScanner.default_directories
  end
end

Class Method Details

.available_analysis_classesHash

Returns the available analysis classes. See Analysis::Base.register for more information on registering analysis classes.

Returns:

  • (Hash)


69
70
71
# File 'lib/ruby-lint/configuration.rb', line 69

def self.available_analysis_classes
  return @available_analysis_classes ||= {}
end

.available_presentersHash

Returns the available presenter classes. See Presenter::Base.register for more information on registering presenters.

Returns:

  • (Hash)


97
98
99
# File 'lib/ruby-lint/configuration.rb', line 97

def self.available_presenters
  return @available_presenters ||= {}
end

.available_report_levelsHash

Returns the available report levels.

Returns:

  • (Hash)


78
79
80
81
82
83
84
85
86
87
88
# File 'lib/ruby-lint/configuration.rb', line 78

def self.available_report_levels
  unless @available_report_levels
    @available_report_levels = {}

    RubyLint::Report::DEFAULT_LEVELS.each do |level|
      @available_report_levels[level.to_s] = level
    end
  end

  return @available_report_levels
end

.configuration_filesArray

Returns an Array of locations from which to load configuration files.

Returns:

  • (Array)


35
36
37
38
39
40
# File 'lib/ruby-lint/configuration.rb', line 35

def self.configuration_files
  return [
    File.join(Dir.pwd, 'ruby-lint.yml'),
    File.expand_path('~/.ruby-lint.yml', __FILE__)
  ]
end

.load_from_file(paths = configuration_files) ⇒ RubyLint::Configuration

Creates a new configuration instance by loading a configuration file.

Parameters:

  • paths (Array) (defaults to: configuration_files)

    The Array of configuration files to process. Only the first existing file will be loaded.

Returns:



49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ruby-lint/configuration.rb', line 49

def self.load_from_file(paths = configuration_files)
  paths.each do |path|
    if File.file?(path)
      options       = YAML.load_file(path)
      configuration = new(options)

      return configuration
    end
  end

  return new
end

Instance Method Details

#default_analysis_classesArray

Returns the default (= all) analysis classes to use.

Returns:

  • (Array)


216
217
218
# File 'lib/ruby-lint/configuration.rb', line 216

def default_analysis_classes
  return self.class.available_analysis_classes.values
end

#default_directoriesArray

Returns:

  • (Array)


237
238
239
# File 'lib/ruby-lint/configuration.rb', line 237

def default_directories
  return FileScanner.default_directories
end

#default_presenterClass

Returns:

  • (Class)


230
231
232
# File 'lib/ruby-lint/configuration.rb', line 230

def default_presenter
  return RubyLint::Presenter::Text
end

#default_report_levelsArray

Returns:

  • (Array)


223
224
225
# File 'lib/ruby-lint/configuration.rb', line 223

def default_report_levels
  return self.class.available_report_levels.values
end

#requires=(files) ⇒ Object

Requires a list of files.

Parameters:

  • files (Array)


125
126
127
# File 'lib/ruby-lint/configuration.rb', line 125

def requires=(files)
  files.each { |file| require(file) }
end