Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby Object name to string

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?

like image 395
Sean Avatar asked Feb 04 '26 22:02

Sean


1 Answers

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"
like image 75
krichard Avatar answered Feb 06 '26 13:02

krichard



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!