def method_missing(method_name, *args)
      setter    = method_name.to_s.ends_with?('=')
      attr_name = method_name.to_s.gsub(/=$/, "")
      if setter
        attributes[attr_name] = args.first
      else
        attributes[attr_name]
      end
    end
def method_missing(method_name, *args)
      setter    = method_name.to_s.ends_with?('=')
      attr_name = method_name.to_s.gsub(/=$/, "")
      if setter
        attributes[attr_name] = args.first
      else
        attributes[attr_name]
      end
    end
Overrides method missing to catch undefined methods. If +method_name+ is one
 of the keys on +attributes+, returns the value of that attribute. If +method_name+
 is not one of +attributes+, passes up the chain to super.

 method_name - Symbol of the name of the method we're testing for.
 args        - Array of arguments send with the original mesage.
 block       - Proc of code passed with original message.