Class: HybridPlatformsConductor::Confluence

Inherits:
Object
  • Object
show all
Includes:
LoggerHelpers
Defined in:
lib/hybrid_platforms_conductor/confluence.rb

Overview

Object used to access Confluence API

Constant Summary

Constants included from LoggerHelpers

LoggerHelpers::LEVELS_MODIFIERS, LoggerHelpers::LEVELS_TO_STDERR

Class Method Summary collapse

Instance Method Summary collapse

Methods included from LoggerHelpers

#err, #init_loggers, #log_component=, #log_debug?, #log_level=, #out, #section, #set_loggers_format, #stderr_device, #stderr_device=, #stderr_displayed?, #stdout_device, #stdout_device=, #stdout_displayed?, #stdouts_to_s, #with_progress_bar

Constructor Details

#initialize(confluence_url, confluence_user_name, confluence_password, logger: Logger.new(STDOUT), logger_stderr: Logger.new(STDERR)) ⇒ Confluence

Constructor

Parameters
  • confluence_url (String): The Confluence URL

  • confluence_user_name (String): Confluence user name to be used when querying the API

  • confluence_password (String): Confluence password to be used when querying the API

  • logger (Logger): Logger to be used [default = Logger.new(STDOUT)]

  • logger_stderr (Logger): Logger to be used for stderr [default = Logger.new(STDERR)]



37
38
39
40
41
42
# File 'lib/hybrid_platforms_conductor/confluence.rb', line 37

def initialize(confluence_url, confluence_user_name, confluence_password, logger: Logger.new(STDOUT), logger_stderr: Logger.new(STDERR))
  init_loggers(logger, logger_stderr)
  @confluence_url = confluence_url
  @confluence_user_name = confluence_user_name
  @confluence_password = confluence_password
end

Class Method Details

.with_confluence(confluence_url, logger, logger_stderr) ⇒ Object

Provide a Confluence connector, and make sure the password is being cleaned when exiting.

Parameters
  • confluence_url (String): The Confluence URL

  • logger (Logger): Logger to be used

  • logger_stderr (Logger): Logger to be used for stderr

  • Proc: Code called with the Confluence instance.

    • confluence (Confluence): The Confluence instance to use.



23
24
25
26
27
# File 'lib/hybrid_platforms_conductor/confluence.rb', line 23

def self.with_confluence(confluence_url, logger, logger_stderr)
  Credentials.with_credentials_for(:confluence, logger, logger_stderr, url: confluence_url) do |confluence_user, confluence_password|
    yield Confluence.new(confluence_url, confluence_user, confluence_password, logger: logger, logger_stderr: logger_stderr)
  end
end

Instance Method Details

#page_info(page_id) ⇒ Object

Return some info of a given page ID

Parameters
  • page_id (String): Confluence page ID

Result
  • Hash: Page information, as returned by the Confluence API



60
61
62
# File 'lib/hybrid_platforms_conductor/confluence.rb', line 60

def page_info(page_id)
  JSON.parse(call_api("rest/api/content/#{page_id}").body)
end

#page_storage_format(page_id) ⇒ Object

Return a Confluence storage format content from a page ID

Parameters
  • page_id (String): Confluence page ID

Result
  • Nokogiri::HTML: Storage format content, as a Nokogiri object



50
51
52
# File 'lib/hybrid_platforms_conductor/confluence.rb', line 50

def page_storage_format(page_id)
  Nokogiri::HTML(call_api("plugins/viewstorage/viewpagestorage.action?pageId=#{page_id}").body)
end

#update_page(page_id, content, version: nil) ⇒ Object

Update a Confluence page to a new content.

Parameters
  • page_id (String): Confluence page ID

  • content (String): New content

  • version (String or nil): New version, or nil to automatically increase last existing version [default: nil]



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/hybrid_platforms_conductor/confluence.rb', line 70

def update_page(page_id, content, version: nil)
  info = page_info(page_id)
  version = info['version']['number'] + 1 if version.nil?
  log_debug "Update Confluence page #{page_id}..."
  call_api("rest/api/content/#{page_id}", :put) do |request|
    request['Content-Type'] = 'application/json'
    request.body = {
      type: 'page',
      title: info['title'],
      body: {
        storage: {
          value: content,
          representation: 'storage'
        }
      },
      version: { number: version }
    }.to_json
  end
end