module Camcorder
Provides similar functionality as the VCR gem but works on arbitrary objects. This is useful for things like Net::IMAP and Net::SMTP which cannot be captured by VCR.
Constants
- VERSION
Attributes
klass[R]
recorder[R]
Public Class Methods
config()
click to toggle source
# File lib/camcorder.rb, line 22 def self.config @config ||= Configuration.new end
default_recorder()
click to toggle source
# File lib/camcorder.rb, line 14 def self.default_recorder @default_recorder end
default_recorder=(value)
click to toggle source
# File lib/camcorder.rb, line 18 def self.default_recorder=(value) @default_recorder = value end
deintercept_constructor(klass)
click to toggle source
# File lib/camcorder.rb, line 67 def self.deintercept_constructor(klass) klass.class_eval do class << self alias_method :new, :_new remove_method :_new end end end
intercept_constructor(klass, recorder=nil, &block)
click to toggle source
Rewrites the `new` method on the passed in class to always return proxies.
# File lib/camcorder.rb, line 48 def self.intercept_constructor(klass, recorder=nil, &block) proxy_class = self.proxy_class(klass, recorder) do def _initialize @instance ||= klass._new(*@init_args) end self.class_eval &block if block end klass.class_eval do @proxy_class = proxy_class class << self alias_method :_new, :new def new(*args) @proxy_class.new(*args) end end end end
new(*args)
click to toggle source
Calls superclass method
# File lib/camcorder.rb, line 37 def initialize(*args) recorder = self.class.recorder || Camcorder.default_recorder super(recorder, self.class.klass, *args) end
Also aliased as: _new
new(*args)
click to toggle source
# File lib/camcorder.rb, line 60 def new(*args) @proxy_class.new(*args) end
proxy_class(klass, recorder=nil, &block)
click to toggle source
Creates a proxy subclass for the particular class
# File lib/camcorder.rb, line 29 def self.proxy_class(klass, recorder=nil, &block) Class.new(Proxy) do class << self attr_reader :klass attr_reader :recorder end @klass = klass @recorder = recorder def initialize(*args) recorder = self.class.recorder || Camcorder.default_recorder super(recorder, self.class.klass, *args) end self.class_eval &block if block end end
use_recordings(klass, name) { || ... }
click to toggle source
Similar to `VCR.use_cassette`
# File lib/camcorder.rb, line 79 def self.use_recordings(klass, name, &block) recorder = Recorder.new(File.join(self.config.recordings_dir, "#{name}.yaml")) begin self.intercept_constructor(klass, recorder) recorder.transaction do yield end ensure self.deintercept_constructor(klass) end end
Public Instance Methods
_initialize()
click to toggle source
# File lib/camcorder.rb, line 50 def _initialize @instance ||= klass._new(*@init_args) end