module DuckPuncher::Ducks::Object
Public Instance Methods
clone!()
click to toggle source
# File lib/duck_puncher/ducks/object.rb, line 4 def clone! Marshal.load Marshal.dump self end
echo(trace = nil)
click to toggle source
@param [Integer] trace The number of lines from the stack trace to print (nil)
# File lib/duck_puncher/ducks/object.rb, line 36 def echo(trace = nil) p self puts caller_locations.take(trace).map { |l| l.to_s.prepend('* ') }.join("\n") if trace self end
punch()
click to toggle source
@description Returns a new decorated version of ourself with the punches mixed in (adds ancestors decorators) @return [<self.class>Delegator]
# File lib/duck_puncher/ducks/object.rb, line 23 def punch DuckPuncher.decorate self, DuckPuncher.undecorate(self).class end
punch!()
click to toggle source
@description Adds the duck punches to the current object (meant to be used on instances, careful with nil and numbers!) @return self
# File lib/duck_puncher/ducks/object.rb, line 29 def punch! target = DuckPuncher.undecorate(self).class DuckPuncher::Ducks.load_mods(target).each { |mod| self.extend mod } self end
require!(file_or_gem, version = '', patience: 1)
click to toggle source
# File lib/duck_puncher/ducks/object.rb, line 8 def require!(file_or_gem, version = '', patience: 1) if DuckPuncher::GemInstaller.new.perform(file_or_gem, version) if require file_or_gem.tr('-', '/') true elsif patience > 0 sleep 0.005 require!(file_or_gem, version, patience: patience - 1) end end rescue ::LoadError require!(file_or_gem, version, patience: patience - 1) unless patience.zero? end
track!(patience: 1)
click to toggle source
# File lib/duck_puncher/ducks/object.rb, line 42 def track!(patience: 1) begin require 'object_tracker' || raise(::LoadError) rescue ::LoadError DuckPuncher.(Object, only: :require!) unless respond_to? :require! require! 'object_tracker' end ::ObjectTracker.(self) rescue ::Exception sleep 0.005 track!(patience: patience - 1) unless patience.zero? end