I have a strange need that I can't find a good solution to.
I've got a method that I will pass either an object, hash, or array to. And I want to be able to get the name of that object, hash, or array that i'm passing.
Here is an example:
@user = User.find(5)
log_info(@user)
def log_info(obj)
Rails.logger.debug(obj.to_s)
Rails.logger.debug(obj.inspect)
end
That would log something like:
@user
{"active"=>true, "address1"=>"something", "address2"=>"", "city"=>"somewhere"}
This would just prevent me from having to do this:
@user = User.find(5)
log_info("@user", @user)
def log_info(heading, obj)
Rails.logger.debug(heading)
Rails.logger.debug(obj.inspect)
end
Any ideas on how to accomplish this?
You can do that with a little hackery - i'll just leave this here:
class Reference
def initialize(var_name, vars)
@var_name = var_name
@getter = eval "lambda { #{var_name} }", vars
end
def name
@var_name
end
def value
@getter.call
end
end
def log_info(ref)
Rails.logger.debug(ref.name.to_s)
Rails.logger.debug(ref.value.inspect)
end
def ref(&block)
Reference.new(block.call, block.binding)
end
@user = "something";
log_info(ref{:@user}) # -> @user - "something"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With