confluencer 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/VERSION +1 -1
- data/config/confluencer.yaml.example +7 -0
- data/confluencer.gemspec +4 -2
- data/lib/confluence/blog_entry.rb +17 -0
- data/lib/confluence/bookmark.rb +29 -6
- data/lib/confluencer.rb +1 -0
- data/lib/confluencer/app.rb +16 -12
- data/lib/confluencer/bookmarks.rb +32 -25
- metadata +5 -3
data/.gitignore
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/confluencer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{confluencer}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Gabor Ratky"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-04}
|
13
13
|
s.description = %q{ActiveRecord-like classes that map to Confluence entities and useful scripts that automate tasks}
|
14
14
|
s.email = %q{rgabo@rgabostyle.com}
|
15
15
|
s.executables = ["confluencer", "confluencer-bookmarks"]
|
@@ -27,8 +27,10 @@ Gem::Specification.new do |s|
|
|
27
27
|
"VERSION",
|
28
28
|
"bin/confluencer",
|
29
29
|
"bin/confluencer-bookmarks",
|
30
|
+
"config/confluencer.yaml.example",
|
30
31
|
"confluencer.gems",
|
31
32
|
"confluencer.gemspec",
|
33
|
+
"lib/confluence/blog_entry.rb",
|
32
34
|
"lib/confluence/bookmark.rb",
|
33
35
|
"lib/confluence/client.rb",
|
34
36
|
"lib/confluence/page.rb",
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Confluence
|
2
|
+
class BlogEntry < Record
|
3
|
+
record_attr_accessor :id => :entry_id
|
4
|
+
record_attr_accessor :space
|
5
|
+
record_attr_accessor :title, :content
|
6
|
+
record_attr_accessor :publishDate
|
7
|
+
record_attr_accessor :url
|
8
|
+
|
9
|
+
def self.find_by_id(entryid)
|
10
|
+
self.new(client.getBlogEntries(entryid))
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.find_by_space(spacekey)
|
14
|
+
client.getBlogEntries(spacekey).collect {|summary| BlogEntry.new(client.getBlogEntry(summary["id"]))}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/confluence/bookmark.rb
CHANGED
@@ -2,18 +2,35 @@ module Confluence
|
|
2
2
|
class Bookmark < Page
|
3
3
|
BOOKMARKS_PAGE_TITLE = ".bookmarks"
|
4
4
|
|
5
|
+
attr_reader :bookmark_url, :description
|
6
|
+
|
5
7
|
def initialize(hash)
|
6
8
|
super(hash)
|
9
|
+
|
10
|
+
# parse bookmark_url and description out of content
|
11
|
+
@bookmark_url = content[/\{bookmark:url=([^\}]+)\}/, 1] if content
|
12
|
+
@description = content[/\{bookmark.*\}([^\{]*)\{bookmark\}/, 1] if content
|
13
|
+
end
|
14
|
+
|
15
|
+
def bookmark_url=(value)
|
16
|
+
@bookmark_url = value
|
17
|
+
|
18
|
+
# update content with new bookmark_url
|
19
|
+
update_content
|
7
20
|
end
|
8
21
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
22
|
+
def description=(value)
|
23
|
+
@description = value
|
24
|
+
|
25
|
+
# update content with new description
|
26
|
+
update_content
|
12
27
|
end
|
13
28
|
|
14
|
-
def
|
15
|
-
#
|
16
|
-
|
29
|
+
def store
|
30
|
+
# always set .bookmarks as the parent page
|
31
|
+
parent_id = Page.find_by_title(space, BOOKMARKS_PAGE_TITLE).page_id
|
32
|
+
|
33
|
+
super
|
17
34
|
end
|
18
35
|
|
19
36
|
def self.find_by_space(spacekey)
|
@@ -23,5 +40,11 @@ module Confluence
|
|
23
40
|
# map each page to a Bookmark
|
24
41
|
bookmarks_page.children.collect {|page| Bookmark.new(page.attributes)}
|
25
42
|
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def update_content
|
47
|
+
self.content = "{bookmark:url=#{@bookmark_url}}#{@description}{bookmark}"
|
48
|
+
end
|
26
49
|
end
|
27
50
|
end
|
data/lib/confluencer.rb
CHANGED
data/lib/confluencer/app.rb
CHANGED
@@ -1,36 +1,40 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'thor'
|
3
|
+
require 'yaml'
|
3
4
|
|
4
5
|
module Confluencer
|
5
6
|
class App < Thor
|
6
7
|
attr_reader :token
|
7
|
-
|
8
|
+
|
8
9
|
# -v, --verbose
|
9
10
|
class_option :verbose, :desc => "Verbose output", :type => :boolean, :default => false, :aliases => "-v"
|
10
11
|
|
11
|
-
#
|
12
|
-
class_option :
|
13
|
-
class_option :
|
14
|
-
class_option :password, :type => :string, :required => false, :aliases => "-p", :group => "Confluence", :desc => "Confluence password"
|
15
|
-
|
12
|
+
# external configuration
|
13
|
+
class_option :config, :type => :string, :aliases => "-c", :desc => "Confluence configuration", :default => "config/confluencer.yaml"
|
14
|
+
class_option :instance, :type => :string, :aliases => "-i", :desc => "Name of the Confluence instance", :default => "confluence"
|
16
15
|
# explicitly specify default_task => :help
|
17
16
|
default_task :help
|
18
17
|
|
19
18
|
desc "login", "Logs in and verifies the Confluence account"
|
20
|
-
def login
|
19
|
+
def login
|
20
|
+
raise Thor::Error, "Required configuration 'username' missing." unless configuration.key? :username
|
21
|
+
raise Thor::Error, "Required configuration 'password' missing." unless configuration.key? :password
|
22
|
+
|
21
23
|
with_confluence do |confluence|
|
22
|
-
@token = confluence.login(
|
24
|
+
@token = confluence.login(configuration[:username], configuration[:password])
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
26
28
|
private
|
27
29
|
|
30
|
+
def configuration
|
31
|
+
@configuration ||= YAML::load(File.open(options[:config]))[options[:instance].to_sym]
|
32
|
+
end
|
33
|
+
|
28
34
|
def with_confluence(&block)
|
29
|
-
raise Thor::Error, "Required
|
30
|
-
raise Thor::Error, "Required option '--username' missing." unless options.username?
|
31
|
-
raise Thor::Error, "Required option '--password' missing." unless options.password?
|
35
|
+
raise Thor::Error, "Required configuration 'url' missing." unless configuration.key? :url
|
32
36
|
|
33
|
-
client = Confluence::Client.new(:url =>
|
37
|
+
client = Confluence::Client.new(:url => configuration[:url], :token => @token)
|
34
38
|
|
35
39
|
begin
|
36
40
|
# Record objects should use this clent
|
@@ -18,48 +18,55 @@ module Confluencer
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
method_option :parent, :type => :string, :default => "Bookmarks", :desc => "Parent page for the pages created"
|
22
|
-
method_option :template, :type => :string, :desc => "ERB template to use", :required => true
|
21
|
+
method_option :parent, :type => :string, :default => "Bookmarks", :desc => "Parent page for the pages created"
|
22
|
+
method_option :template, :type => :string, :desc => "ERB template to use", :required => :true
|
23
23
|
desc "create-pages SPACEKEY", "Creates pages for every bookmark"
|
24
24
|
def create_pages(spacekey)
|
25
25
|
invoke :login
|
26
|
-
|
26
|
+
|
27
27
|
with_confluence do
|
28
|
-
begin
|
29
|
-
# get parent page
|
30
|
-
parent_page = Confluence::Page.find_by_title(spacekey, options[:parent])
|
31
|
-
rescue RuntimeError
|
32
|
-
# page does not exist yet, create it
|
33
|
-
parent_page = Confluence::Page.new :space => spacekey, :title => options[:parent], :content => ""
|
34
|
-
parent_page.store
|
35
|
-
end
|
36
|
-
|
37
|
-
# grab the title of all existing pages
|
38
|
-
existing_titles = parent_page.children.collect {|page| page.title }
|
39
|
-
|
40
|
-
# grab all bookmarks from space
|
41
|
-
bookmarks = Confluence::Bookmark.find_by_space(spacekey)
|
42
|
-
|
43
|
-
# initialize ERB template
|
44
|
-
template = ERB.new(IO.read(options[:template])) unless bookmarks.empty?
|
45
|
-
|
46
28
|
# add a page for each bookmark, remove bookmark in the process
|
47
|
-
bookmarks.each do |bookmark|
|
29
|
+
bookmarks(spacekey).each do |bookmark|
|
48
30
|
puts bookmark.title
|
49
31
|
|
50
32
|
labels = bookmark.labels << "bookmark"
|
51
33
|
|
52
|
-
page = Confluence::Page.new :space => spacekey, :parentId => parent_page.page_id, :title => bookmark.title
|
34
|
+
page = Confluence::Page.new :space => spacekey, :parentId => parent_page(spacekey).page_id, :title => bookmark.title
|
53
35
|
page.content = template.result(binding)
|
54
36
|
|
55
37
|
# remove bookmark before storing page with same title
|
56
38
|
bookmark.remove
|
57
39
|
page.store
|
58
40
|
|
59
|
-
# update labels
|
60
|
-
page.labels = labels
|
41
|
+
# update labels, add bookmark
|
42
|
+
page.labels = labels << "bookmark"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def bookmarks(spacekey)
|
50
|
+
Confluence::Bookmark.find_by_space(spacekey)
|
51
|
+
end
|
52
|
+
|
53
|
+
def parent_page(spacekey)
|
54
|
+
@parent_pages[spacekey] ||= begin
|
55
|
+
unless @parent_pages[spacekey]
|
56
|
+
begin
|
57
|
+
# get parent page
|
58
|
+
@parent_pages[spacekey] = Confluence::Page.find_by_title(spacekey, options[:parent])
|
59
|
+
rescue RuntimeError
|
60
|
+
# page does not exist yet, create it
|
61
|
+
@parent_pages[spacekey] = Confluence::Page.new :space => spacekey, :title => options[:parent], :content => ""
|
62
|
+
@parent_pages[spacekey].store
|
63
|
+
end
|
61
64
|
end
|
62
65
|
end
|
63
66
|
end
|
67
|
+
|
68
|
+
def template
|
69
|
+
@template ||= ERB.new(IO.read(options[:template]))
|
70
|
+
end
|
64
71
|
end
|
65
72
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 3
|
9
|
+
version: 0.1.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Gabor Ratky
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-04 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -65,8 +65,10 @@ files:
|
|
65
65
|
- VERSION
|
66
66
|
- bin/confluencer
|
67
67
|
- bin/confluencer-bookmarks
|
68
|
+
- config/confluencer.yaml.example
|
68
69
|
- confluencer.gems
|
69
70
|
- confluencer.gemspec
|
71
|
+
- lib/confluence/blog_entry.rb
|
70
72
|
- lib/confluence/bookmark.rb
|
71
73
|
- lib/confluence/client.rb
|
72
74
|
- lib/confluence/page.rb
|