tquill
tquill

Reputation: 389

How to wrap ruby variable in parenthesis if it exists

I have a function returning a string of interpolated ruby values.

def test_field_name
  "#{self.test_field.test.name} #{self.result.position if self.result.sequence.results.count > 1} - #{self.test_field.name}"
end

I can't figure out how to wrap the self.result.position in parentheses if it exists, but leave the parentheses out when it doesn't.

I'd like the two possible outputs to be:

TestName - TestFieldName

or

TestName (2) - TestFieldName

Upvotes: 1

Views: 604

Answers (2)

Lucas Costa
Lucas Costa

Reputation: 1129

Do you really need to do this in a single line?
You could do something like the following:

def test_field_name
  arr = [self.test_field.test.name]
  arr << "(#{self.result.position})" if self.result.sequence.results.count > 1
  arr << "- #{self.test_field.name}"
  arr.join(' ')
end

But if you really want to do it in a single line, a solution could be:

def test_field_name
  "#{self.test_field.test.name}#{(' (' + self.result.position + ')') if self.result.sequence.results.count > 1} - #{self.test_field.name}"
end

Upvotes: 1

m. simon borg
m. simon borg

Reputation: 2575

Add another method to encapsulate the logic with an if...else branch.

def test_field_name
  "#{self.test_field.test.name} #{self.result_position}- #{self.test_field.name}"
end

def result_position
  self.result.sequence.results.count > 1 ? "(#{self.result.position}) " : ""
end

Upvotes: 0

Related Questions