Module: RSpec::AdvancedSubject::InstanceMethodExampleGroup

Extended by:
CommonClassMethods
Includes:
CommonInstanceMethods
Defined in:
lib/rspec-advanced_subject/instance_method_example_group.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from CommonClassMethods

descriptee

Methods included from CommonInstanceMethods

#metadata, #subject_args, #subject_class_proc

Class Method Details

.included(base) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/rspec-advanced_subject/instance_method_example_group.rb', line 13

def self.included(base)
  set_subject_method_proc(base.)
  set_subject_method_name(base.)

  base.subject do
    raise NotImplementedError if [:with_args].nil?
    callee
  end
end

.instance_regexObject



40
41
42
# File 'lib/rspec-advanced_subject/instance_method_example_group.rb', line 40

def self.instance_regex
  /^#/
end

.set_subject_method_name(metadata) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/rspec-advanced_subject/instance_method_example_group.rb', line 31

def self.set_subject_method_name()
  case d = [:example_group][:description_args].first
  when is_a?(Class)
    [:subject_method_name] = d
  when instance_regex
    [:subject_method_name] = d.gsub instance_regex, ""
  end
end

.set_subject_method_proc(metadata) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/rspec-advanced_subject/instance_method_example_group.rb', line 23

def self.set_subject_method_proc()
  [:subject_method_proc] = Proc.new do |x|
    x.send(
      subject_method_name, *subject_args
    )
  end
end

Instance Method Details

#calleeObject



44
45
46
# File 'lib/rspec-advanced_subject/instance_method_example_group.rb', line 44

def callee
  instance_exec parent_callee, &subject_method_proc
end

#parent_calleeObject



48
49
50
# File 'lib/rspec-advanced_subject/instance_method_example_group.rb', line 48

def parent_callee
  instance_eval &subject_class_proc
end

#subject_method_nameObject



56
57
58
# File 'lib/rspec-advanced_subject/instance_method_example_group.rb', line 56

def subject_method_name
  [:subject_method_name]
end

#subject_method_procObject



52
53
54
# File 'lib/rspec-advanced_subject/instance_method_example_group.rb', line 52

def subject_method_proc
  [:subject_method_proc]
end