Class: RSpec::Core::Formatters::Loader Private

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/core/formatters.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

`RSpec::Core::Formatters::Loader` is an internal class for managing formatters used by a particular configuration. It is not expected to be used directly, but only through the configuration interface.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reporter) ⇒ Loader

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Loader



103
104
105
106
107
# File 'lib/rspec/core/formatters.rb', line 103

def initialize(reporter)
  @formatters = []
  @reporter = reporter
  self.default_formatter = 'progress'
end

Instance Attribute Details

#default_formatterString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the default formatter to setup, defaults to `progress`

Returns:

  • (String)

    the default formatter to setup, defaults to `progress`



116
117
118
# File 'lib/rspec/core/formatters.rb', line 116

def default_formatter
  @default_formatter
end

#formattersArray (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the loaded formatters

Returns:

  • (Array)

    the loaded formatters



110
111
112
# File 'lib/rspec/core/formatters.rb', line 110

def formatters
  @formatters
end

#reporterReporter (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the reporter

Returns:



113
114
115
# File 'lib/rspec/core/formatters.rb', line 113

def reporter
  @reporter
end

Class Method Details

.formattersObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Internal formatters are stored here when loaded.



98
99
100
# File 'lib/rspec/core/formatters.rb', line 98

def self.formatters
  @formatters ||= {}
end

Instance Method Details

#add(formatter_to_use, *paths) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



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
# File 'lib/rspec/core/formatters.rb', line 142

def add(formatter_to_use, *paths)
  # If a formatter instance was passed, we can register it directly,
  # with no need for any of the further processing that happens below.
  if Loader.formatters.key?(formatter_to_use.class)
    register formatter_to_use, notifications_for(formatter_to_use.class)
    return
  end

  formatter_class = find_formatter(formatter_to_use)

  args = paths.map { |p| p.respond_to?(:puts) ? p : open_stream(p) }

  if !Loader.formatters[formatter_class].nil?
    formatter = formatter_class.new(*args)
    register formatter, notifications_for(formatter_class)
  elsif defined?(RSpec::LegacyFormatters)
    formatter = RSpec::LegacyFormatters.load_formatter formatter_class, *args
    register formatter, formatter.notifications
  else
    call_site = "Formatter added at: #{::RSpec::CallerFilter.first_non_rspec_line}"

    RSpec.warn_deprecation "|The \#{formatter_class} formatter uses the deprecated formatter\n|interface not supported directly by RSpec 3.\n|\n|To continue to use this formatter you must install the\n|`rspec-legacy_formatters` gem, which provides support\n|for legacy formatters or upgrade the formatter to a\n|compatible version.\n|\n|\#{call_site}\n".gsub(/\s*\|/, ' ')
  end
end

#prepare_default(output_stream, deprecation_stream) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



119
120
121
# File 'lib/rspec/core/formatters.rb', line 119

def prepare_default(output_stream, deprecation_stream)
  reporter.prepare_default(self, output_stream, deprecation_stream)
end

#setup_default(output_stream, deprecation_stream) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/rspec/core/formatters.rb', line 124

def setup_default(output_stream, deprecation_stream)
  add default_formatter, output_stream if @formatters.empty?

  unless @formatters.any? { |formatter| DeprecationFormatter === formatter }
    add DeprecationFormatter, deprecation_stream, output_stream
  end

  unless existing_formatter_implements?(:message)
    add FallbackMessageFormatter, output_stream
  end

  return unless RSpec.configuration.profile_examples?
  return if existing_formatter_implements?(:dump_profile)

  add RSpec::Core::Formatters::ProfileFormatter, output_stream
end