def update_attributes!(attributes)
      @api.patch(url, attributes.to_json)
      attributes.each do |method_name, value|
        invoke_name = "#{override_raw_attributes[method_name] || method_name}="
        if respond_to?(invoke_name)
          send(invoke_name, value)
        else
          AnsibleTowerClient.logger.warn("Unknown attribute/method: #{invoke_name}. Skip updating it ...")
        end
      end
      true
    end
def update_attributes!(attributes)
      @api.patch(url, attributes.to_json)
      attributes.each do |method_name, value|
        invoke_name = "#{override_raw_attributes[method_name] || method_name}="
        if respond_to?(invoke_name)
          send(invoke_name, value)
        else
          AnsibleTowerClient.logger.warn("Unknown attribute/method: #{invoke_name}. Skip updating it ...")
        end
      end
      true
    end
Persist changes passed in as a Hash and return a
 representation of that object to the caller.

 Example:
    project = connection.api.projects.find 2
    project.update_attributes!(:name => 'test')

    # The values passed to update_attributes! are available in calling object
    project.name            # => 'test'
 Errors:
    Any error raised by the API will be returned and logged