module RSpec::Core::Metadata::MetadataHash
def [](key)
def [](key) return super if has_key?(key) case key when :location store(:location, location) when :file_path, :line_number file_path, line_number = file_and_line_number store(:file_path, file_path) store(:line_number, line_number) super when :execution_result store(:execution_result, {}) when :describes store(:describes, described_class_for(self)) when :full_description store(:full_description, full_description_for(self)) when :description store(:description, build_description_from(*self[:description_args])) else super end end
def build_description_from(*parts)
def build_description_from(*parts) parts.map {|p| p.to_s}.reduce do |desc, p| p =~ /^(#|::|\.)/ ? "#{desc}#{p}" : "#{desc} #{p}" end || "" end
def described_class_for(m)
def described_class_for(m) m[:example_group][:describes] end
def file_and_line_number
def file_and_line_number first_caller_from_outside_rspec =~ /(.+?):(\d+)(|:\d+)/ return [$1, $2.to_i] end
def first_caller_from_outside_rspec
def first_caller_from_outside_rspec self[:caller].detect {|l| l !~ /\/lib\/rspec\/core/} end
def full_description_for(m)
def full_description_for(m) build_description_from(m[:example_group][:full_description], *m[:description_args]) end
def location
def location "#{self[:file_path]}:#{self[:line_number]}" end