Class: Asciidoctor::Confluence::ConfluenceAPI

Inherits:
Object
  • Object
show all
Defined in:
lib/asciidoctor/confluence_api.rb

Constant Summary collapse

DEFAULT_CONTENT_TYPE =
'application/json'
API_CONTENT =
'rest/api/content'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(confluence_options, page) ⇒ ConfluenceAPI

Returns a new instance of ConfluenceAPI.



12
13
14
15
16
# 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

Instance Attribute Details

#urlObject (readonly)

Returns the value of attribute url.



8
9
10
# File 'lib/asciidoctor/confluence_api.rb', line 8

def url
  @url
end

Instance Method Details

#build_api_content_url(confluence_options) ⇒ Object



18
19
20
21
22
# 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_connectionObject



24
25
26
27
28
29
30
31
32
# 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) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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_pageObject



62
63
64
65
66
67
68
69
# 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) ⇒ Object



90
91
92
93
94
95
96
# 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) ⇒ Object



82
83
84
85
86
87
88
# 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) ⇒ Object



71
72
73
74
75
76
77
78
79
80
# 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