Arrowhead

Refactored to a better design. 
With the if/elsif construction you're right. What we had originally discussed, however, benefitted from the variable. That looked more like this:

```
def error_message
  @error_message ||= "Unknown region, please provide a valid region." unless CLASSIFICATIONS[@region]
  @error_message ||= "Unknown shape value. Are you sure you know what you're talking about?" unless CLASSIFICATIONS[@region][@shape]
end
```

The change to an if/elsif was a well meaning attempt to control line length I think. If that's a concern, I might do something like this:

```
ERROR_MESSAGES = {
  invalid_region: "Unknown region, please provide a valid region.",
  invalid_shape: "Unknown shape value. Are you sure you know what you're talking about?"
}

def initialize(region, shape)
  @region = region
  @shape = shape
  raise ERROR_MESSAGES[error_condition] unless valid?
end

def error_condition
  @error_condition ||= :invalid_region unless CLASSIFICATIONS[@region]
  @error_condition ||= :invalid_shape unless CLASSIFICATIONS[@region][@shape]
end

def valid?
  !error_condition
end
```

But this is really only a marginal improvement. As for the variable names, it's actually conventional to use an variable name that is the same as the method name when you're defining what is, essentially, a custom accessor. Since there's no value to setting `@error_message` there's not much point to adding it to the attributes explicitly.

It's worth mentioning that we're at the point where defining our own error classes is knocking at our door. That feels like over-engineering for this, but it might prove more comprehensible.