rspec-core 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +16 -11
- data/History.markdown +22 -0
- data/License.txt +2 -1
- data/{README.markdown → README.md} +11 -3
- data/Rakefile +1 -0
- data/Upgrade.markdown +35 -2
- data/features/hooks/around_hooks.feature +18 -2
- data/lib/rspec/core/configuration.rb +38 -36
- data/lib/rspec/core/configuration_options.rb +2 -1
- data/lib/rspec/core/deprecation.rb +1 -1
- data/lib/rspec/core/example.rb +19 -9
- data/lib/rspec/core/example_group.rb +14 -26
- data/lib/rspec/core/extensions/kernel.rb +23 -3
- data/lib/rspec/core/formatters/base_text_formatter.rb +43 -30
- data/lib/rspec/core/formatters/documentation_formatter.rb +1 -1
- data/lib/rspec/core/formatters/html_formatter.rb +10 -8
- data/lib/rspec/core/hooks.rb +2 -2
- data/lib/rspec/core/metadata.rb +46 -34
- data/lib/rspec/core/option_parser.rb +2 -2
- data/lib/rspec/core/rake_task.rb +1 -1
- data/lib/rspec/core/ruby_project.rb +2 -2
- data/lib/rspec/core/runner.rb +2 -2
- data/lib/rspec/core/subject.rb +4 -3
- data/lib/rspec/core/version.rb +1 -1
- data/rspec-core.gemspec +1 -1
- data/spec/rspec/core/configuration_options_spec.rb +7 -5
- data/spec/rspec/core/configuration_spec.rb +58 -69
- data/spec/rspec/core/example_group_spec.rb +22 -7
- data/spec/rspec/core/example_spec.rb +1 -1
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +2 -2
- data/spec/rspec/core/kernel_extensions_spec.rb +6 -3
- data/spec/rspec/core/metadata_spec.rb +13 -0
- data/spec/rspec/core/pending_example_spec.rb +1 -1
- data/spec/rspec/core/rake_task_spec.rb +2 -3
- data/spec/spec_helper.rb +1 -0
- metadata +9 -11
- data/.treasure_map.rb +0 -23
- data/specs.watchr +0 -58
data/Gemfile
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
3
|
%w[rspec-core rspec-expectations rspec-mocks].each do |lib|
|
4
|
-
|
4
|
+
library_path = File.expand_path("../../#{lib}", __FILE__)
|
5
|
+
if File.exist?(library_path)
|
6
|
+
gem lib, :path => library_path
|
7
|
+
else
|
8
|
+
gem lib
|
9
|
+
end
|
5
10
|
end
|
6
11
|
|
7
12
|
gem "rake"
|
8
|
-
gem "cucumber", "0.
|
13
|
+
gem "cucumber", "0.9.4"
|
9
14
|
gem "aruba", "0.2.2"
|
10
15
|
gem "autotest"
|
11
|
-
gem "watchr"
|
12
16
|
gem "rcov"
|
13
17
|
gem "mocha"
|
14
18
|
gem "rr"
|
@@ -18,14 +22,15 @@ gem "syntax"
|
|
18
22
|
gem "relish", "~> 0.0.3"
|
19
23
|
gem "guard-rspec"
|
20
24
|
gem "growl"
|
21
|
-
gem "rb-fsevent"
|
22
25
|
|
23
|
-
|
26
|
+
gem "ruby-debug", :platforms => :ruby_18
|
27
|
+
gem "ruby-debug19", :platforms => :ruby_19
|
28
|
+
|
29
|
+
platforms :ruby_18, :ruby_19 do
|
30
|
+
gem "rb-fsevent"
|
24
31
|
gem "ruby-prof"
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
gem "ruby-debug"
|
30
|
-
end
|
32
|
+
end
|
33
|
+
|
34
|
+
platforms :jruby do
|
35
|
+
gem "jruby-openssl"
|
31
36
|
end
|
data/History.markdown
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
## rspec-core release history (incomplete)
|
2
2
|
|
3
|
+
### 2.2.0 / 2010-11-28
|
4
|
+
|
5
|
+
[full changelog](http://github.com/rspec/rspec-core/compare/v2.1.0...v2.2.0)
|
6
|
+
|
7
|
+
* Deprecations/changes
|
8
|
+
* --debug/-d on command line is deprecated and now has no effect
|
9
|
+
* win32console is now ignored; Windows users must use ANSICON for color support
|
10
|
+
(Bosko Ivanisevic)
|
11
|
+
|
12
|
+
* Enhancements
|
13
|
+
* When developing locally rspec-core now works with the rspec-dev setup or your local gems
|
14
|
+
* Raise exception with helpful message when rspec-1 is loaded alongside
|
15
|
+
rspec-2 (Justin Ko)
|
16
|
+
* debugger statements _just work_ as long as ruby-debug is installed
|
17
|
+
* otherwise you get warned, but not fired
|
18
|
+
* Expose example.metadata in around hooks
|
19
|
+
* Performance improvments (see [Upgrade.markdown](https://github.com/rspec/rspec-core/blob/master/Upgrade.markdown))
|
20
|
+
|
21
|
+
* Bug fixes
|
22
|
+
* Make sure --fail-fast makes it across drb
|
23
|
+
* Pass -Ilib:spec to rcov
|
24
|
+
|
3
25
|
### 2.1.0 / 2010-11-07
|
4
26
|
|
5
27
|
[full changelog](http://github.com/rspec/rspec-core/compare/v2.0.1...v2.1.0)
|
data/License.txt
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
(The MIT License)
|
2
2
|
|
3
|
-
Copyright (c) 2009
|
3
|
+
Copyright (c) 2009 Chad Humphries, David Chelimsky
|
4
|
+
Copyright (c) 2005 The RSpec Development Team
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
6
7
|
a copy of this software and associated documentation files (the
|
@@ -4,8 +4,16 @@ Behaviour Driven Development for Ruby
|
|
4
4
|
|
5
5
|
## Documentation
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
The [Cucumber features](http://relishapp.com/rspec/rspec-core/v/2-1) are the
|
8
|
+
most comprehensive and up-to-date docs for end-users.
|
9
|
+
|
10
|
+
The [RDoc](http://rubydoc.info/gems/rspec-core/2.1/frames) provides
|
11
|
+
additional information for contributors and/or extenders.
|
12
|
+
|
13
|
+
All of the documentation is open source and a work in progress. If you find it
|
14
|
+
lacking or confusing, you can help improve it by submitting requests and
|
15
|
+
patches to the [rspec-core issue
|
16
|
+
tracker](https://github.com/rspec/rspec-core/issues).
|
9
17
|
|
10
18
|
## Install
|
11
19
|
|
@@ -54,7 +62,7 @@ Be sure to require the implementation file in the spec:
|
|
54
62
|
require "calculator"
|
55
63
|
|
56
64
|
Now run the spec again, and watch it pass:
|
57
|
-
|
65
|
+
|
58
66
|
$ rspec spec/calculator_spec.rb
|
59
67
|
.
|
60
68
|
|
data/Rakefile
CHANGED
data/Upgrade.markdown
CHANGED
@@ -1,4 +1,37 @@
|
|
1
|
-
#
|
1
|
+
# rspec-core-2.2 (in development)
|
2
|
+
|
3
|
+
## FASTER!
|
4
|
+
|
5
|
+
Made several small optimizations that all add up to a considerable improvement
|
6
|
+
in performance. Using a simple benchmark:
|
7
|
+
|
8
|
+
generate 5000 example groups,
|
9
|
+
each with one example,
|
10
|
+
each with one passing expectation
|
11
|
+
|
12
|
+
Run using ruby-1.9.2 on Mac OS X w/ 3.06 G
|
13
|
+
|
14
|
+
* rspec-2.1
|
15
|
+
* loaded in 0.85 on avg
|
16
|
+
* ran in 2.61 on avg
|
17
|
+
* rspec-2.2
|
18
|
+
* loaded in 0.73 on avg (~15% improvement)
|
19
|
+
* ran in 0.94 on avg (~64% improvement**)
|
20
|
+
|
21
|
+
** this does _not_ mean your suite will be 64% faster, but it does mean that
|
22
|
+
the overhead incurred by RSpec in your suite should be roughly 64% less.
|
23
|
+
|
24
|
+
## Command line
|
25
|
+
|
26
|
+
### --debug/-d is now deprecated
|
27
|
+
|
28
|
+
This command line option is now has no effect (other than a deprecation
|
29
|
+
warning). To use the debugger, just add a `debugger` statement anywhere in your
|
30
|
+
code. As long as you have ruby-debug installed, it will just work. If you
|
31
|
+
don't, then you'll get a friendly warning telling you what's going on, but
|
32
|
+
execution will continue.
|
33
|
+
|
34
|
+
# rspec-core-2.1
|
2
35
|
|
3
36
|
## Command line
|
4
37
|
|
@@ -61,7 +94,7 @@ JRuby installation to a newer release that allows the example to pass, RSpec
|
|
61
94
|
will report it as a failure (`Expected pending '...' to fail. No Error was raised.`),
|
62
95
|
so that know that you can remove the call to `pending`.
|
63
96
|
|
64
|
-
#
|
97
|
+
# rspec-core-2.0
|
65
98
|
|
66
99
|
### Runner
|
67
100
|
|
@@ -9,7 +9,7 @@ Feature: around hooks
|
|
9
9
|
example, if your database library offers a transaction method that receives
|
10
10
|
a block, you can use an around hook as described in the first scenario:
|
11
11
|
|
12
|
-
Scenario: use the example as a
|
12
|
+
Scenario: use the example as a proc within the block passed to around()
|
13
13
|
Given a file named "example_spec.rb" with:
|
14
14
|
"""
|
15
15
|
class Database
|
@@ -41,7 +41,7 @@ Feature: around hooks
|
|
41
41
|
Scenario: invoke the example using run()
|
42
42
|
Given a file named "example_spec.rb" with:
|
43
43
|
"""
|
44
|
-
describe "around
|
44
|
+
describe "around hook" do
|
45
45
|
around(:each) do |example|
|
46
46
|
puts "around each before"
|
47
47
|
example.run
|
@@ -61,6 +61,22 @@ Feature: around hooks
|
|
61
61
|
around each after
|
62
62
|
"""
|
63
63
|
|
64
|
+
Scenario: access the example metadata
|
65
|
+
Given a file named "example_spec.rb" with:
|
66
|
+
"""
|
67
|
+
describe "something" do
|
68
|
+
around(:each) do |example|
|
69
|
+
puts example.metadata[:foo]
|
70
|
+
example.run
|
71
|
+
end
|
72
|
+
|
73
|
+
it "does something", :foo => "this should show up in the output" do
|
74
|
+
end
|
75
|
+
end
|
76
|
+
"""
|
77
|
+
When I run "rspec example_spec.rb"
|
78
|
+
Then the output should contain "this should show up in the output"
|
79
|
+
|
64
80
|
Scenario: define a global around hook
|
65
81
|
Given a file named "example_spec.rb" with:
|
66
82
|
"""
|
@@ -13,7 +13,7 @@ module RSpec
|
|
13
13
|
else
|
14
14
|
define_method("#{name}=") {|val| settings[name] = val}
|
15
15
|
define_method(name) { settings.has_key?(name) ? settings[name] : opts[:default] }
|
16
|
-
define_method("#{name}?") {
|
16
|
+
define_method("#{name}?") { send name }
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -34,7 +34,7 @@ module RSpec
|
|
34
34
|
add_setting :files_to_run
|
35
35
|
add_setting :include_or_extend_modules
|
36
36
|
add_setting :backtrace_clean_patterns
|
37
|
-
add_setting :
|
37
|
+
add_setting :tty
|
38
38
|
|
39
39
|
def initialize
|
40
40
|
@color_enabled = false
|
@@ -68,7 +68,7 @@ module RSpec
|
|
68
68
|
#
|
69
69
|
# RSpec.configuration.foo=(value)
|
70
70
|
# RSpec.configuration.foo()
|
71
|
-
# RSpec.configuration.foo?() # returns
|
71
|
+
# RSpec.configuration.foo?() # returns true if foo returns anything but nil or false
|
72
72
|
#
|
73
73
|
# Intended for extension frameworks like rspec-rails, so they can add config
|
74
74
|
# settings that are domain specific. For example:
|
@@ -149,25 +149,19 @@ module RSpec
|
|
149
149
|
end
|
150
150
|
|
151
151
|
def color_enabled
|
152
|
-
@color_enabled &&
|
152
|
+
@color_enabled && output_to_tty?
|
153
153
|
end
|
154
154
|
|
155
155
|
def color_enabled?
|
156
|
-
|
156
|
+
color_enabled
|
157
157
|
end
|
158
158
|
|
159
159
|
def color_enabled=(bool)
|
160
160
|
return unless bool
|
161
161
|
@color_enabled = true
|
162
162
|
if bool && ::RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
|
163
|
-
|
164
|
-
|
165
|
-
begin
|
166
|
-
require 'Win32/Console/ANSI'
|
167
|
-
settings[:output_stream] = $stdout if using_stdout
|
168
|
-
settings[:error_stream] = $stderr if using_stderr
|
169
|
-
rescue LoadError
|
170
|
-
warn "You must 'gem install win32console' to use colour on Windows"
|
163
|
+
unless ENV['ANSICON']
|
164
|
+
warn "You must use ANSICON 1.31 or later (http://adoxa.110mb.com/ansicon/) to use colour on Windows"
|
171
165
|
@color_enabled = false
|
172
166
|
end
|
173
167
|
end
|
@@ -182,21 +176,11 @@ module RSpec
|
|
182
176
|
end
|
183
177
|
|
184
178
|
def debug=(bool)
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
#{'*'*50}
|
192
|
-
You must install ruby-debug to run rspec with the --debug option.
|
193
|
-
|
194
|
-
If you have ruby-debug installed as a ruby gem, then you need to either
|
195
|
-
require 'rubygems' or configure the RUBYOPT environment variable with
|
196
|
-
the value 'rubygems'.
|
197
|
-
#{'*'*50}
|
198
|
-
EOM
|
199
|
-
end
|
179
|
+
RSpec.warn_deprecation <<-WARNING
|
180
|
+
The debug option (config.debug = true or --debug/-d on the command line)
|
181
|
+
is deprecated and no longer has any effect. This message will be removed
|
182
|
+
from future versions of RSpec.
|
183
|
+
WARNING
|
200
184
|
end
|
201
185
|
|
202
186
|
def line_number=(line_number)
|
@@ -217,7 +201,7 @@ EOM
|
|
217
201
|
end
|
218
202
|
|
219
203
|
def formatter=(formatter_to_use)
|
220
|
-
self.formatter_class =
|
204
|
+
self.formatter_class =
|
221
205
|
built_in_formatter(formatter_to_use) ||
|
222
206
|
custom_formatter(formatter_to_use) ||
|
223
207
|
(raise ArgumentError, "Formatter '#{formatter_to_use}' unknown - maybe you meant 'documentation' or 'progress'?.")
|
@@ -308,14 +292,13 @@ EOM
|
|
308
292
|
|
309
293
|
def configure_group(group)
|
310
294
|
modules = {
|
311
|
-
:include =>
|
312
|
-
:extend =>
|
295
|
+
:include => group.included_modules.dup,
|
296
|
+
:extend => group.ancestors.dup
|
313
297
|
}
|
314
298
|
|
315
299
|
include_or_extend_modules.each do |include_or_extend, mod, filters|
|
316
|
-
next unless group.apply?(:
|
317
|
-
next if
|
318
|
-
modules[include_or_extend] << mod
|
300
|
+
next unless filters.empty? || group.apply?(:any?, filters)
|
301
|
+
next if self.class < mod
|
319
302
|
group.send(include_or_extend, mod)
|
320
303
|
end
|
321
304
|
end
|
@@ -332,13 +315,32 @@ EOM
|
|
332
315
|
|
333
316
|
def load_spec_files
|
334
317
|
files_to_run.map {|f| load File.expand_path(f) }
|
318
|
+
raise_if_rspec_1_is_loaded
|
319
|
+
end
|
320
|
+
|
321
|
+
private
|
322
|
+
|
323
|
+
def raise_if_rspec_1_is_loaded
|
324
|
+
if defined?(Spec) && defined?(Spec::VERSION::MAJOR) && Spec::VERSION::MAJOR == 1
|
325
|
+
raise <<-MESSAGE
|
326
|
+
|
327
|
+
#{'*'*80}
|
328
|
+
You are running rspec-2, but it seems as though rspec-1 has been loaded as
|
329
|
+
well. This is likely due to a statement like this somewhere in the specs:
|
330
|
+
|
331
|
+
require 'spec'
|
332
|
+
|
333
|
+
Please locate that statement, remove it, and try again.
|
334
|
+
#{'*'*80}
|
335
|
+
MESSAGE
|
336
|
+
end
|
335
337
|
end
|
336
338
|
|
337
339
|
private
|
338
340
|
|
339
341
|
def output_to_tty?
|
340
342
|
begin
|
341
|
-
|
343
|
+
output_stream.tty? || tty?
|
342
344
|
rescue NoMethodError
|
343
345
|
false
|
344
346
|
end
|
@@ -383,7 +385,7 @@ EOM
|
|
383
385
|
end
|
384
386
|
|
385
387
|
def underscore_with_fix_for_non_standard_rspec_naming(string)
|
386
|
-
underscore(string).sub(%r{(^|/)r_spec($|/)}, '\\1rspec\\2')
|
388
|
+
underscore(string).sub(%r{(^|/)r_spec($|/)}, '\\1rspec\\2')
|
387
389
|
end
|
388
390
|
|
389
391
|
# activesupport/lib/active_support/inflector/methods.rb, line 48
|
@@ -28,7 +28,8 @@ module RSpec
|
|
28
28
|
argv << "--color" if options[:color_enabled]
|
29
29
|
argv << "--profile" if options[:profile_examples]
|
30
30
|
argv << "--backtrace" if options[:full_backtrace]
|
31
|
-
argv << "--
|
31
|
+
argv << "--tty" if options[:tty]
|
32
|
+
argv << "--fail-fast" if options[:fail_fast]
|
32
33
|
argv << "--format" << options[:formatter] if options[:formatter]
|
33
34
|
argv << "--line_number" << options[:line_number] if options[:line_number]
|
34
35
|
argv << "--example" << options[:full_description].source if options[:full_description]
|
data/lib/rspec/core/example.rb
CHANGED
@@ -10,7 +10,7 @@ module RSpec
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
delegate_to_metadata :description, :full_description, :execution_result, :file_path, :pending
|
13
|
+
delegate_to_metadata :description, :full_description, :execution_result, :file_path, :pending, :location
|
14
14
|
|
15
15
|
def initialize(example_group_class, desc, options, example_block=nil)
|
16
16
|
@example_group_class, @options, @example_block = example_group_class, options, example_block
|
@@ -23,9 +23,7 @@ module RSpec
|
|
23
23
|
@example_group_class
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
!!pending
|
28
|
-
end
|
26
|
+
alias_method :pending?, :pending
|
29
27
|
|
30
28
|
def run(example_group_instance, reporter)
|
31
29
|
@example_group_instance = example_group_instance
|
@@ -68,17 +66,29 @@ module RSpec
|
|
68
66
|
finish(reporter)
|
69
67
|
end
|
70
68
|
|
69
|
+
class Procsy < Proc
|
70
|
+
attr_reader :metadata
|
71
|
+
alias_method :run, :call
|
72
|
+
def initialize(metadata)
|
73
|
+
@metadata = metadata
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
71
77
|
private
|
72
78
|
|
73
|
-
def with_pending_capture
|
79
|
+
def with_pending_capture
|
74
80
|
@pending_declared_in_example = catch(:pending_declared_in_example) do
|
75
|
-
|
81
|
+
yield
|
76
82
|
throw :pending_declared_in_example, false
|
77
83
|
end
|
78
84
|
end
|
79
85
|
|
80
|
-
def with_around_hooks
|
81
|
-
@example_group_class.
|
86
|
+
def with_around_hooks
|
87
|
+
if @example_group_class.around_hooks.empty?
|
88
|
+
yield
|
89
|
+
else
|
90
|
+
@example_group_class.eval_around_eachs(@example_group_instance, Procsy.new(metadata)).call
|
91
|
+
end
|
82
92
|
end
|
83
93
|
|
84
94
|
def start(reporter)
|
@@ -88,7 +98,7 @@ module RSpec
|
|
88
98
|
|
89
99
|
def finish(reporter)
|
90
100
|
if @exception
|
91
|
-
record_finished 'failed', :
|
101
|
+
record_finished 'failed', :exception => @exception
|
92
102
|
reporter.example_failed self
|
93
103
|
false
|
94
104
|
elsif @pending_declared_in_example
|
@@ -177,10 +177,11 @@ module RSpec
|
|
177
177
|
store_before_all_ivars(example_group_instance)
|
178
178
|
end
|
179
179
|
|
180
|
-
def self.eval_around_eachs(example_group_instance,
|
181
|
-
around_hooks.reverse.inject(
|
182
|
-
|
183
|
-
|
180
|
+
def self.eval_around_eachs(example_group_instance, procsy)
|
181
|
+
around_hooks.reverse.inject(procsy) do |procsy, around_hook|
|
182
|
+
Example::Procsy.new(procsy.metadata) do
|
183
|
+
example_group_instance.instance_eval_with_args(procsy, &around_hook)
|
184
|
+
end
|
184
185
|
end
|
185
186
|
end
|
186
187
|
|
@@ -223,18 +224,17 @@ An error occurred in an after(:all) hook.
|
|
223
224
|
RSpec.clear_remaining_example_groups if top_level?
|
224
225
|
return
|
225
226
|
end
|
226
|
-
example_group_instance = new
|
227
227
|
reporter.example_group_started(self)
|
228
228
|
|
229
229
|
begin
|
230
|
-
eval_before_alls(
|
231
|
-
result_for_this_group = run_examples(
|
230
|
+
eval_before_alls(new)
|
231
|
+
result_for_this_group = run_examples(reporter)
|
232
232
|
results_for_descendants = children.map {|child| child.run(reporter)}.all?
|
233
233
|
result_for_this_group && results_for_descendants
|
234
234
|
rescue Exception => ex
|
235
235
|
fail_filtered_examples(ex, reporter)
|
236
236
|
ensure
|
237
|
-
eval_after_alls(
|
237
|
+
eval_after_alls(new)
|
238
238
|
reporter.example_group_finished(self)
|
239
239
|
end
|
240
240
|
end
|
@@ -253,18 +253,14 @@ An error occurred in an after(:all) hook.
|
|
253
253
|
RSpec.configuration.fail_fast?
|
254
254
|
end
|
255
255
|
|
256
|
-
def self.run_examples(
|
256
|
+
def self.run_examples(reporter)
|
257
257
|
filtered_examples.map do |example|
|
258
258
|
next if RSpec.wants_to_quit
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
ensure
|
265
|
-
clear_ivars(instance)
|
266
|
-
clear_memoized(instance)
|
267
|
-
end
|
259
|
+
instance = new
|
260
|
+
set_ivars(instance, before_all_ivars)
|
261
|
+
succeeded = example.run(instance, reporter)
|
262
|
+
RSpec.wants_to_quit = true if fail_fast? && !succeeded
|
263
|
+
succeeded
|
268
264
|
end.all?
|
269
265
|
end
|
270
266
|
|
@@ -286,14 +282,6 @@ An error occurred in an after(:all) hook.
|
|
286
282
|
ivars.each {|name, value| instance.instance_variable_set(name, value)}
|
287
283
|
end
|
288
284
|
|
289
|
-
def self.clear_ivars(instance)
|
290
|
-
instance.instance_variables.each { |ivar| instance.send(:remove_instance_variable, ivar) }
|
291
|
-
end
|
292
|
-
|
293
|
-
def self.clear_memoized(instance)
|
294
|
-
instance.__memoized.clear
|
295
|
-
end
|
296
|
-
|
297
285
|
def described_class
|
298
286
|
self.class.described_class
|
299
287
|
end
|