class Asciidoctor::Confluence::ConfluenceAPI

Constants

API_CONTENT
DEFAULT_CONTENT_TYPE

Attributes

url[R]

Public Class Methods

new(confluence_options, page) click to toggle source
# File lib/asciidoctor/confluence_api.rb, line 12
def initialize(confluence_options, page)
  @url = build_api_content_url(confluence_options)
  @auth = confluence_options[:auth] unless confluence_options[:auth].nil?
  @page = page
end

Public Instance Methods

build_api_content_url(confluence_options) click to toggle source
# File lib/asciidoctor/confluence_api.rb, line 18
def build_api_content_url(confluence_options)
  host = confluence_options[:host]
  host = host + '/' unless confluence_options[:host].end_with?('/')
  host+ API_CONTENT
end
create_connection() click to toggle source
# File lib/asciidoctor/confluence_api.rb, line 24
def create_connection
  conn = Faraday.new do |faraday|
    faraday.request :url_encoded
    faraday.adapter Faraday.default_adapter
  end

  conn.basic_auth(@auth[:username], @auth[:password]) unless @auth.nil?
  conn
end
create_or_update_page(update=false, page_id=nil) click to toggle source
# File lib/asciidoctor/confluence_api.rb, line 34
def create_or_update_page(update=false, page_id=nil)
  if update
    if page_id.nil?
      confluence_page = find_page_by_title_and_space(@page.space_key, @page.title)
      response_body = JSON.parse confluence_page.body
      results = response_body['results']

      length = results.length

      if length == 1
        page_id = results[0]['id']
        current_revision = results[0]['version']['number']
      else
        plural = length > 0 ? 's' : ''
        raise Exception, "Error: #{length} page#{plural} entitled '#{@page.title}' found in the space '#{@page.space_key}'"
      end
    else
      confluence_page = find_page page_id
      response_body = JSON.parse confluence_page.body
      current_revision = response_body['version']['number']
    end

    update_page page_id, current_revision
  else
    create_page
  end
end
create_page() click to toggle source
# File lib/asciidoctor/confluence_api.rb, line 62
def create_page
  conn = create_connection
  conn.post do |req|
    req.url @url
    req.headers['Content-Type'] = DEFAULT_CONTENT_TYPE
    req.body = @page.to_json
  end
end
find_page(page_id) click to toggle source
# File lib/asciidoctor/confluence_api.rb, line 90
def find_page(page_id)
  conn = create_connection
  conn.get do |req|
    req.url "#{@url}/#{page_id}"
    req.headers['Content-Type'] = DEFAULT_CONTENT_TYPE
  end
end
find_page_by_title_and_space(space_key, title) click to toggle source
# File lib/asciidoctor/confluence_api.rb, line 82
def find_page_by_title_and_space(space_key, title)
  conn = create_connection
  conn.get do |req|
    req.url "#{@url}/?spaceKey=#{space_key}&title=#{title}&expand=version"
    req.headers['Content-Type'] = DEFAULT_CONTENT_TYPE
  end
end
update_page(page_id, current_revision) click to toggle source
# File lib/asciidoctor/confluence_api.rb, line 71
def update_page(page_id, current_revision)
  @page.revision = current_revision.to_i+1

  conn = create_connection
  conn.put do |req|
    req.url "#{@url}/#{page_id}"
    req.headers['Content-Type'] = DEFAULT_CONTENT_TYPE
    req.body = @page.to_json
  end
end