I have a method that sends a message when it triggers something. The signature is:
Sender.send(user, message_id, source)
The usage scenario is in the callbacks in active model. When some model is verified, we send a message through the template:
after_save if: 'verified_changed? && verified' do
Sender.send(user, :verified, self) # pass self as the template parameter
end
We pass self
. There are some solutions to make invoking simple as below:
after_save if: 'verified_changed? && verified' do
Sender.send(user, :verified) # not need to pass self, guess it when invoking
end
Is there a method that passes self
when a method is invoked?
More concrete examples are below:
#define a method, return the environment self
def guess
end
guess #=> main
class A
guess #=> A
def a
guess
end
end
A.new.a #=> #<A:0x000000026cd2f0>
I share my send method below (In class Sender
):
def send(*users, id, source = self)
desc = source.class.to_s
text = "There is a new process in your #{desc}: #{id}"
users.reject{|user| user.nil?}.each do |user|
send_message(user, tag: 'Process', text: text)
send_mail(user, subject: text, text: text)
send_sms(user, text: text)
end
end