Skip to content

Commit

Permalink
Merge pull request #2718 from rspec/remove-klass-exec-in-favour-of-rs…
Browse files Browse the repository at this point in the history
…pec-support-class-exec

Use shared class_exec fallback from rspec-support
  • Loading branch information
JonRowe committed Apr 8, 2020
2 parents 0ca4fa2 + ef4f54b commit ddbb436
Showing 1 changed file with 3 additions and 22 deletions.
25 changes: 3 additions & 22 deletions lib/rspec/core/shared_example_group.rb
@@ -1,3 +1,5 @@
RSpec::Support.require_rspec_support "with_keywords_when_needed"

module RSpec
module Core
# Represents some functionality that is shared with multiple example groups.
Expand Down Expand Up @@ -33,31 +35,10 @@ def include_in(klass, inclusion_line, args, customization_block)
klass.update_inherited_metadata(@metadata) unless @metadata.empty?

SharedExampleGroupInclusionStackFrame.with_frame(@description, inclusion_line) do
klass_exec(klass, *args, &@definition)
RSpec::Support::WithKeywordsWhenNeeded.class_exec(klass, *args, &@definition)
klass.class_exec(&customization_block) if customization_block
end
end

private

if RSpec::Support::RubyFeatures.kw_args_supported?
# Remove this in RSpec 4 in favour of explictly passed in kwargs down the entire
# stack, e.g. rspec/rspec-core#2711
binding.eval(<<-CODE, __FILE__, __LINE__)
def klass_exec(klass, *args, &definition)
if RSpec::Support::MethodSignature.new(definition).has_kw_args_in?(args)
kwargs = args.pop
klass.class_exec(*args, **kwargs, &definition)
else
klass.class_exec(*args, &definition)
end
end
CODE
else
def klass_exec(klass, *args, &definition)
klass.class_exec(*args, &definition)
end
end
end

# Shared example groups let you define common context and/or common
Expand Down

0 comments on commit ddbb436

Please sign in to comment.