Module: RSpec::Varys

Defined in:
lib/rspec/varys.rb,
lib/rspec/varys.rb

Defined Under Namespace

Modules: DSL Classes: RSpecGenerator

Class Method Summary collapse

Class Method Details

.arguments_if_any(call) ⇒ Object



135
136
137
# File 'lib/rspec/varys.rb', line 135

def self.arguments_if_any(call)
  call[:args].length > 0 ?  { arguments: call[:args] } : { }
end

.class_name_for(object) ⇒ Object



106
107
108
109
110
111
112
# File 'lib/rspec/varys.rb', line 106

def self.class_name_for(object)
  if object.kind_of? RSpec::Mocks::Double
    'Name'
  else
    object.kind_of?(Class) ? object.name : object.class.name
  end
end

.confirmed_messagesObject



78
79
80
# File 'lib/rspec/varys.rb', line 78

def self.confirmed_messages
  @confirmed_messages
end

.open_yaml_fileObject



139
140
141
142
143
# File 'lib/rspec/varys.rb', line 139

def self.open_yaml_file
  File.open("varys.yaml", 'w') do |io|
    yield io
  end
end


115
116
117
118
119
120
# File 'lib/rspec/varys.rb', line 115

def self.print_report
  open_yaml_file do |yaml_file|
    yaml_file.write YAML.dump(report)
  end
  puts "Specs have been generated based on mocks you aren't currently testing."
end

.record(object, message, args, block, return_value) ⇒ Object



92
93
94
95
96
97
98
99
100
# File 'lib/rspec/varys.rb', line 92

def self.record(object, message, args, block, return_value)
  @recorded_messages << {
    class_name: class_name_for(object),
    type:   type_for(object),
    message: message,
    args: args,
    return_value: return_value
  }
end

.recorded_messagesObject



82
83
84
# File 'lib/rspec/varys.rb', line 82

def self.recorded_messages
  @recorded_messages
end

.reportObject



122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/rspec/varys.rb', line 122

def self.report
  {
    untested_stubs: unconfirmed_messages.map do |call|
      {
        class_name:  call[:class_name],
        type:        call[:type],
        method:      call[:message].to_s,
        returns:     call[:return_value]
      }.merge(arguments_if_any(call))
    end
  }
end

.resetObject



86
87
88
89
90
# File 'lib/rspec/varys.rb', line 86

def self.reset
  @recorded_messages = []
  @generated_specs = nil
  @confirmed_messages = []
end

.type_for(object) ⇒ Object



102
103
104
# File 'lib/rspec/varys.rb', line 102

def self.type_for(object)
  object.kind_of?(Class) ? 'class' : 'instance'
end

.unconfirmed_messagesObject



146
147
148
# File 'lib/rspec/varys.rb', line 146

def self.unconfirmed_messages
  recorded_messages - confirmed_messages
end