module ActiveFedora::Versionable

def bad_headers(response)

def bad_headers(response)
  "Unknown response format. Got '#{response.headers['content-type']}', but was expecting 'text/turtle'"
end

def create_version

def create_version
  resp = ActiveFedora.fedora.connection.post(versions_uri, nil, slug: version_name)
  @versions = nil
  resp.success?
end

def has_versions?

Queries Fedora to figure out if there are versions for the resource.
def has_versions?
  ActiveFedora.fedora.connection.head(versions_uri)
  true
rescue Ldp::NotFound
  false
end

def model_type

def model_type
  if respond_to?(:metadata)
    metadata.ldp_source.graph.query({ predicate: ::RDF.type }).objects
  else
    resource.query({ subject: resource.rdf_subject, predicate: ::RDF.type }).objects
  end
end

def restore_version(label)

def restore_version(label)
  resp = ActiveFedora.fedora.connection.patch(versions.with_label(label).uri, nil)
  @versions = nil
  reload
  refresh_attributes if respond_to?("refresh_attributes")
  resp.success?
end

def status_message(response)

def status_message(response)
  "Unexpected return value #{response.status} when retrieving datastream content at #{uri}\n\t#{response.body}"
end

def version_name

def version_name
  if versions.all.empty?
    "version1"
  else
    "version" + (versions.all.count + 1).to_s
  end
end

def versions(reload = false)

Excludes auto-snapshot versions from Fedora.
Returns an array of ActiveFedora::VersionsGraph::ResourceVersion objects.
def versions(reload = false)
  response = versions_request
  return ActiveFedora::VersionsGraph.new unless response
  if reload
    @versions = ActiveFedora::VersionsGraph.new << versions_request.reader
  else
    @versions ||= ActiveFedora::VersionsGraph.new << versions_request.reader
  end
end

def versions_request

def versions_request
  return false unless has_versions?
  ActiveFedora.fedora.connection.get(versions_uri)
end

def versions_uri

def versions_uri
  uri + '/fcr:versions'
end