travis-api/lib/travis/testing/stubs/stub.rb
Aakriti Gupta 65f1a29d86 Move travis-core files from /vendor to /lib.
- Re-factor
- Remove code for notifications
- Remove addons
- Remove travis-core gem.
- Ignore logs directory only
- Move core tests to spec/lib
2016-07-20 11:22:25 +02:00

46 lines
1.4 KiB
Ruby

module Travis
module Testing
module Stubs
module Stub
def stub(name, attributes)
Object.new.tap do |object|
meta_class = (class << object; self; end)
class_stub = stub_class(name.camelize)
attributes.each do |name, value|
meta_class.send(:define_method, name) { |*| value }
end
meta_class.send(:define_method, :class) do
class_stub
end
meta_class.send(:define_method, :is_a?) do |const|
const.name.to_s == name.to_s.camelize
end
meta_class.send(:define_method, :inspect) do
attrs = attributes.map { |name, value| [name, value.inspect].join('=') }.join(' ')
"#<#{name.camelize}:#{object.object_id} #{attrs}>"
end
end
end
# TODO needs to take care of nested namespaces, so we can pass 'job/test'
def stub_class(name)
if const_defined?(*method(:const_defined?).arity == 1 ? [name] : [name, false])
const_get(name)
else
Class.new.tap do |const|
const_set(name, const)
meta_class = (class << const; self; end)
meta_class.send(:define_method, :name) { name }
meta_class.send(:define_method, :inspect) { name }
end
end
end
end
end
end
end