confluencer 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +2 -4
- data/{README.rdoc → README} +0 -0
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/confluencer.gems +2 -1
- data/confluencer.gemspec +7 -4
- data/lib/confluence/bookmark.rb +36 -25
- data/lib/confluence/page.rb +53 -1
- data/lib/confluence/record.rb +12 -2
- data/spec/confluence/bookmark_spec.rb +31 -0
- data/spec/confluence/page_spec.rb +29 -11
- data/spec/confluence/record_spec.rb +20 -0
- metadata +19 -5
data/.document
CHANGED
data/{README.rdoc → README}
RENAMED
File without changes
|
data/Rakefile
CHANGED
@@ -11,6 +11,7 @@ begin
|
|
11
11
|
gem.homepage = "http://github.com/rgabo/confluencer"
|
12
12
|
gem.authors = ["Gabor Ratky"]
|
13
13
|
gem.add_development_dependency "rspec", ">= 1.3.0"
|
14
|
+
gem.add_runtime_dependency "log4r", ">= 1.1.7"
|
14
15
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
16
|
end
|
16
17
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.1
|
data/confluencer.gems
CHANGED
data/confluencer.gemspec
CHANGED
@@ -5,23 +5,23 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{confluencer}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.1"
|
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-13}
|
13
13
|
s.description = %q{ActiveRecord-like classes to access Confluence through XMLRPC.}
|
14
14
|
s.email = %q{rgabo@rgabostyle.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
"README
|
17
|
+
"README"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
21
|
".gitignore",
|
22
22
|
".rvmrc",
|
23
23
|
"LICENSE",
|
24
|
-
"README
|
24
|
+
"README",
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"confluencer.gems",
|
@@ -71,11 +71,14 @@ Gem::Specification.new do |s|
|
|
71
71
|
|
72
72
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
73
73
|
s.add_development_dependency(%q<rspec>, [">= 1.3.0"])
|
74
|
+
s.add_runtime_dependency(%q<log4r>, [">= 1.1.7"])
|
74
75
|
else
|
75
76
|
s.add_dependency(%q<rspec>, [">= 1.3.0"])
|
77
|
+
s.add_dependency(%q<log4r>, [">= 1.1.7"])
|
76
78
|
end
|
77
79
|
else
|
78
80
|
s.add_dependency(%q<rspec>, [">= 1.3.0"])
|
81
|
+
s.add_dependency(%q<log4r>, [">= 1.1.7"])
|
79
82
|
end
|
80
83
|
end
|
81
84
|
|
data/lib/confluence/bookmark.rb
CHANGED
@@ -1,33 +1,32 @@
|
|
1
1
|
module Confluence
|
2
2
|
class Bookmark < Page
|
3
|
-
|
3
|
+
attr_accessor :bookmark_url, :description
|
4
4
|
|
5
5
|
def initialize(hash)
|
6
|
-
|
6
|
+
# set and delete bookmark_url and description
|
7
|
+
@bookmark_url = hash.delete :bookmark_url
|
8
|
+
@description = hash.delete :description
|
7
9
|
|
8
|
-
#
|
9
|
-
|
10
|
-
self.bookmark_url = attributes.delete :bookmark_url
|
11
|
-
self.description = attributes.delete :description
|
12
|
-
else
|
13
|
-
# parse bookmark_url and description out of content
|
14
|
-
@bookmark_url = content[/\{bookmark:url=([^\}]+)\}/, 1]
|
15
|
-
@description = content[/\{bookmark.*\}([^\{]*)\{bookmark\}/, 1]
|
16
|
-
end
|
10
|
+
# initialize page
|
11
|
+
super(hash)
|
17
12
|
end
|
18
13
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
def [](attr)
|
15
|
+
case attr
|
16
|
+
when :bookmark_url: @bookmark_url
|
17
|
+
when :description: @description
|
18
|
+
else
|
19
|
+
super(attr)
|
20
|
+
end
|
24
21
|
end
|
25
22
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
23
|
+
def []=(attr, value)
|
24
|
+
case attr
|
25
|
+
when :bookmark_url: @bookmark_url = value
|
26
|
+
when :description: @description = value
|
27
|
+
else
|
28
|
+
super(attr, value)
|
29
|
+
end
|
31
30
|
end
|
32
31
|
|
33
32
|
def store
|
@@ -38,8 +37,24 @@ module Confluence
|
|
38
37
|
super
|
39
38
|
end
|
40
39
|
|
40
|
+
def to_hash
|
41
|
+
page_hash = super
|
42
|
+
|
43
|
+
if page_hash.key? "content"
|
44
|
+
page_hash["content"] << "\n" << bookmark_content
|
45
|
+
else
|
46
|
+
page_hash["content"] = bookmark_content
|
47
|
+
end
|
48
|
+
|
49
|
+
page_hash
|
50
|
+
end
|
51
|
+
|
41
52
|
private
|
42
53
|
|
54
|
+
def bookmark_content
|
55
|
+
"{bookmark:url=#{@bookmark_url}}#{@description}{bookmark}"
|
56
|
+
end
|
57
|
+
|
43
58
|
def self.find_criteria(args)
|
44
59
|
result = super(args) || begin
|
45
60
|
if args.key? :space
|
@@ -50,9 +65,5 @@ module Confluence
|
|
50
65
|
|
51
66
|
result
|
52
67
|
end
|
53
|
-
|
54
|
-
def update_content
|
55
|
-
self.content = "{bookmark:url=#{@bookmark_url}}#{@description}{bookmark}"
|
56
|
-
end
|
57
68
|
end
|
58
69
|
end
|
data/lib/confluence/page.rb
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
module Confluence
|
2
2
|
class Page < Record
|
3
|
+
class Details < Hash
|
4
|
+
attr_reader :label
|
5
|
+
|
6
|
+
def initialize(label)
|
7
|
+
@label = label
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
# details macro
|
12
|
+
content = "{details:label=#{label}}\n"
|
13
|
+
|
14
|
+
each_pair do |key, value|
|
15
|
+
content << "#{key}=#{value}\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
# end of details macro
|
19
|
+
content << "{details}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
3
23
|
extend Findable
|
4
24
|
|
5
25
|
record_attr_accessor :id => :page_id
|
@@ -8,7 +28,21 @@ module Confluence
|
|
8
28
|
record_attr_accessor :title, :creator, :modifier, :content
|
9
29
|
record_attr_accessor :created, :modified, :version
|
10
30
|
record_attr_accessor :url
|
31
|
+
|
32
|
+
def initialize(hash)
|
33
|
+
super(hash)
|
34
|
+
|
35
|
+
@details = []
|
36
|
+
end
|
37
|
+
|
38
|
+
def details(label)
|
39
|
+
unless result = @details.find {|d| d.label == label}
|
40
|
+
@details << (result = Details.new(label))
|
41
|
+
end
|
11
42
|
|
43
|
+
result
|
44
|
+
end
|
45
|
+
|
12
46
|
def children(klass = self.class)
|
13
47
|
children = client.getChildren(page_id)
|
14
48
|
children.collect { |child| klass.find(:id => child["id"]) } if children
|
@@ -31,7 +65,7 @@ module Confluence
|
|
31
65
|
end
|
32
66
|
|
33
67
|
# reinitialize page after storing it
|
34
|
-
initialize(client.storePage(
|
68
|
+
initialize(client.storePage(self.to_hash))
|
35
69
|
|
36
70
|
# return self
|
37
71
|
self
|
@@ -41,8 +75,26 @@ module Confluence
|
|
41
75
|
client.removePage(page_id)
|
42
76
|
end
|
43
77
|
|
78
|
+
def to_hash
|
79
|
+
# record hash
|
80
|
+
record_hash = super
|
81
|
+
|
82
|
+
# always include content in hash
|
83
|
+
record_hash['content'] ||= ''
|
84
|
+
|
85
|
+
# prepend details sections before content
|
86
|
+
record_hash['content'].insert(0, details_content + "\n") if details_content
|
87
|
+
|
88
|
+
# result
|
89
|
+
record_hash
|
90
|
+
end
|
91
|
+
|
44
92
|
private
|
45
93
|
|
94
|
+
def details_content
|
95
|
+
@details.join("\n") unless @details.empty?
|
96
|
+
end
|
97
|
+
|
46
98
|
def self.find_all
|
47
99
|
raise ArgumentError, "Cannot find all pages, find by id or title instead."
|
48
100
|
end
|
data/lib/confluence/record.rb
CHANGED
@@ -44,12 +44,12 @@ module Confluence
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
# Returns the the Confluence API client.
|
48
|
+
#
|
47
49
|
def client
|
48
50
|
Record.client
|
49
51
|
end
|
50
52
|
|
51
|
-
attr_accessor :attributes
|
52
|
-
|
53
53
|
# Initializes a new record.
|
54
54
|
#
|
55
55
|
# ==== Parameters
|
@@ -77,10 +77,14 @@ module Confluence
|
|
77
77
|
self[:id]
|
78
78
|
end
|
79
79
|
|
80
|
+
# Retrieves the labels of the record.
|
81
|
+
#
|
80
82
|
def labels
|
81
83
|
@labels ||= client.getLabelsById(record_id).collect {|label| label["name"]}
|
82
84
|
end
|
83
85
|
|
86
|
+
# Sets the labels of the record.
|
87
|
+
#
|
84
88
|
def labels=(value)
|
85
89
|
removed_labels = labels - value
|
86
90
|
added_labels = value - labels
|
@@ -90,5 +94,11 @@ module Confluence
|
|
90
94
|
|
91
95
|
@labels = value
|
92
96
|
end
|
97
|
+
|
98
|
+
def to_hash
|
99
|
+
hash = Hash.new
|
100
|
+
@attributes.each { |key, value| hash[key.to_s] = value }
|
101
|
+
hash
|
102
|
+
end
|
93
103
|
end
|
94
104
|
end
|
@@ -1,4 +1,35 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
2
2
|
|
3
3
|
describe Confluence::Bookmark do
|
4
|
+
it "should initialize bookmark_url and description from hash" do
|
5
|
+
bookmark = Confluence::Bookmark.new :bookmark_url => 'http://github.com/rgabo/confluencer', :description => 'Home sweet home'
|
6
|
+
|
7
|
+
bookmark.bookmark_url.should == 'http://github.com/rgabo/confluencer'
|
8
|
+
bookmark.description.should == 'Home sweet home'
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should get and set bookmark_url and description using #[]" do
|
12
|
+
bookmark = Confluence::Bookmark.new :bookmark_url => 'http://github.com/rgabo/confluencer', :description => 'Home sweet home'
|
13
|
+
|
14
|
+
# bookmark_url and description should not be available as ordinary attributes in the hash
|
15
|
+
bookmark[:bookmark_url].should == 'http://github.com/rgabo/confluencer'
|
16
|
+
bookmark[:description].should == 'Home sweet home'
|
17
|
+
|
18
|
+
bookmark[:bookmark_url] = 'http://github.com/rgabo'
|
19
|
+
bookmark[:description] = 'rgabo @ Github'
|
20
|
+
|
21
|
+
bookmark[:bookmark_url].should == 'http://github.com/rgabo'
|
22
|
+
bookmark[:description].should == 'rgabo @ Github'
|
23
|
+
|
24
|
+
bookmark.bookmark_url.should == 'http://github.com/rgabo'
|
25
|
+
bookmark.description.should == 'rgabo @ Github'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should not include bookmark_url and description in to_hash" do
|
29
|
+
bookmark = Confluence::Bookmark.new :bookmark_url => 'http://github.com/rgabo/confluencer', :description => 'Home sweet home', :title => "Page title"
|
30
|
+
|
31
|
+
bookmark.to_hash.key?('bookmark_url').should be_false
|
32
|
+
bookmark.to_hash.key?('description').should be_false
|
33
|
+
bookmark.to_hash.key?('title').should be_true
|
34
|
+
end
|
4
35
|
end
|
@@ -74,19 +74,37 @@ describe Confluence::Page do
|
|
74
74
|
page = store_test_page
|
75
75
|
|
76
76
|
new_session do
|
77
|
-
|
78
|
-
|
77
|
+
# create test page with same title but updated content
|
78
|
+
updated_page = create_test_page "updated content"
|
79
|
+
|
80
|
+
updated_page.page_id.should be_nil
|
81
|
+
updated_page.title.should == page.title
|
82
|
+
updated_page.space.should == page.space
|
79
83
|
|
80
|
-
|
81
|
-
|
82
|
-
updated_page.space.should == page.space
|
84
|
+
# store page
|
85
|
+
updated_page.store
|
83
86
|
|
84
|
-
|
85
|
-
|
87
|
+
# assert version
|
88
|
+
updated_page.version.should > page.version
|
89
|
+
updated_page.content.should == "updated content"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should keep metadata for the page" do
|
94
|
+
page = store_test_page
|
95
|
+
|
96
|
+
# set :creator in {details:label=bender} to 'rgabo'
|
97
|
+
page.details(:confluencer)[:creator] = 'rgabo'
|
98
|
+
|
99
|
+
page.details(:confluencer)[:creator].should == 'rgabo'
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should include metadata in content of the page" do
|
103
|
+
page = store_test_page
|
86
104
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
105
|
+
# set :creator in {details:label=bender} to 'rgabo'
|
106
|
+
page.details(:confluencer)[:creator] = 'rgabo'
|
107
|
+
|
108
|
+
page.to_hash['content'].should include("{details:label=confluencer}\ncreator=rgabo\n{details}")
|
91
109
|
end
|
92
110
|
end
|
@@ -15,9 +15,29 @@ describe Confluence::Record do
|
|
15
15
|
record[:string].should == 'works'
|
16
16
|
end
|
17
17
|
|
18
|
+
it "should return attribute values" do
|
19
|
+
record = Confluence::Record.new(:key => 'value', 'string_key' => 'string_value')
|
20
|
+
|
21
|
+
record[:key].should == 'value'
|
22
|
+
record[:string_key].should == 'string_value' # attributes with string keys should be accessible with symbols
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should set attribute values" do
|
26
|
+
record = Confluence::Record.new
|
27
|
+
record[:key] = 'value'
|
28
|
+
|
29
|
+
record[:key].should == 'value'
|
30
|
+
end
|
31
|
+
|
18
32
|
it "should return the id of the record" do
|
19
33
|
record = Confluence::Record.new 'id' => '12345'
|
20
34
|
|
21
35
|
record.record_id.should == '12345'
|
22
36
|
end
|
37
|
+
|
38
|
+
it "should return a string-keyed hash of its attributes" do
|
39
|
+
record = Confluence::Record.new :key => 'value'
|
40
|
+
|
41
|
+
record.to_hash.should == {'key' => 'value'}
|
42
|
+
end
|
23
43
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 1
|
9
|
-
version: 0.
|
9
|
+
version: 0.4.1
|
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-13 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -31,6 +31,20 @@ dependencies:
|
|
31
31
|
version: 1.3.0
|
32
32
|
type: :development
|
33
33
|
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: log4r
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 1
|
43
|
+
- 1
|
44
|
+
- 7
|
45
|
+
version: 1.1.7
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
34
48
|
description: ActiveRecord-like classes to access Confluence through XMLRPC.
|
35
49
|
email: rgabo@rgabostyle.com
|
36
50
|
executables: []
|
@@ -39,13 +53,13 @@ extensions: []
|
|
39
53
|
|
40
54
|
extra_rdoc_files:
|
41
55
|
- LICENSE
|
42
|
-
- README
|
56
|
+
- README
|
43
57
|
files:
|
44
58
|
- .document
|
45
59
|
- .gitignore
|
46
60
|
- .rvmrc
|
47
61
|
- LICENSE
|
48
|
-
- README
|
62
|
+
- README
|
49
63
|
- Rakefile
|
50
64
|
- VERSION
|
51
65
|
- confluencer.gems
|