Skip to content

Instantly share code, notes, and snippets.

@ohadperry
Last active December 14, 2015 10:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ohadperry/5070783 to your computer and use it in GitHub Desktop.
Save ohadperry/5070783 to your computer and use it in GitHub Desktop.
Stack too deep
module Filter
def before_filter name
@@filter = name
end
def method_added name
return if @filtering # Don't add filters to original_ methods
return if @@filter == name # Don't filter filters
@filtering = true
alias_method :"original_#{name}", name
define_method name do |*args|
self.send @@filter, name
self.send :"original_#{name}", *args
end
@filtering = false
end
end
# base class for all GW's events
class GwEvent
extend Filter
before_filter :prefix_msgs
def prefix_msgs name
@msg_prefix = "#{self.class}::#{name}"
end
end
class SkrillEvent < GwEvent
include Participant
def initialize(event, ctx=nil)
@event = event
@step = event[:start_from_step].present? ? event[:start_from_step] : 0
@ctx = ctx
end
end
class SkrillProcessedEvent < SkrillEvent
include Participant
def baz
puts "#{@msg_prefix} message goes here"
end
def initialize(event)
super(event)
end
end
sk = SkrillProcessedEvent.new({})
sk.baz
I get
Uncaught exception: stack level too deep
/Users/ohad/.rvm/gems/ruby-1.9.3-p327@financial-service/gems/rack-1.4.1/lib/rack/builder.rb:40
Process finished with exit code 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment