Skip to content

Commit 86ab73a

Browse files
committed
Implement described_by for RSpec
1 parent 6b847a1 commit 86ab73a

3 files changed

Lines changed: 36 additions & 12 deletions

File tree

lib/quickdraw/rspec.rb

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,7 @@ module Quickdraw::RSpec
1111
autoload :Expectation, "quickdraw/rspec/expectation"
1212
autoload :Spec, "quickdraw/rspec/spec"
1313

14-
def self.describe(description = nil, &block)
15-
Class.new(Spec) do
16-
if respond_to?(:set_temporary_name)
17-
case description
18-
when Class
19-
set_temporary_name "(#{description.name})"
20-
else
21-
set_temporary_name "(#{description})"
22-
end
23-
end
24-
class_exec(&block)
25-
end
14+
def self.describe(description = nil, &)
15+
Spec.describe(description, &)
2616
end
2717
end

lib/quickdraw/rspec/spec.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,17 @@ class Quickdraw::RSpec::Spec < Quickdraw::BasicTest
44
include Quickdraw::RSpec::Matchers
55

66
class << self
7+
def described_class
8+
@described_class || (superclass.described_class if superclass.respond_to?(:described_class))
9+
end
10+
711
def describe(description, &block)
812
Class.new(self) do
13+
case description
14+
when Class, Module
15+
@described_class = description
16+
end
17+
918
if respond_to?(:set_temporary_name)
1019
case description
1120
when Class
@@ -40,6 +49,10 @@ def let(name, &block)
4049
end
4150
end
4251

52+
def described_class
53+
self.class.described_class
54+
end
55+
4356
def expect(subject)
4457
Quickdraw::RSpec::Expectation.new(subject, context: self)
4558
end

test/rspec/described_class.test.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# frozen_string_literal: true
2+
3+
require "quickdraw/rspec"
4+
5+
Quickdraw::RSpec.describe String do
6+
it "provides described_class" do
7+
expect(described_class).to eq(String)
8+
end
9+
10+
describe "nested" do
11+
it "inherits described_class" do
12+
expect(described_class).to eq(String)
13+
end
14+
end
15+
16+
describe Array do
17+
it "overrides described_class" do
18+
expect(described_class).to eq(Array)
19+
end
20+
end
21+
end

0 commit comments

Comments
 (0)