rspec-core 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|