I'm very new to ruby. I have to code in ruby at work and a coworker gave me some tests he wrote in ruby. I have some difficulties to understand a line he wrote.

We have a class like this:

class Port
    attr_accessor :nature, :name

    def initialize(name)
        @name = name

The test consists in:

x_port = Port.new("x")
x_port.nature = :sampling
x_port.nature.name.must_equal :sampling

I have some trouble to understand the last line, the nature.name. I understand that we are demanding the name of the symbol but this method doesn't exist and I can't create a method name name because of the symbol :name already there. Can someone enlighten me of how to resolve this problem?

Thanks a lot


Sorry but this 'problem' doesn't make much sense. It is either intentionally confusing or there is just some kind of typo.

It is possible in Ruby to open a class and add new methods, like

class Symbol
  def name

which would basically allow x_port.nature to return its current value as seems expected in the tests.

This as such would be well worth learning. But putting it into an example where there is another name method even if not directly related seems not very smart. So either it's a stupid 'trick' or as said just a typo and the test should look like

x_port.nature.must_equal :sampling

and then there should be more tests that run on x_port.name which is also defined in parallel to nature and its value set to "x" in the initializer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.