confluencer 0.4.7 → 0.4.8

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/Rakefile CHANGED
@@ -29,6 +29,7 @@ Spec::Rake::SpecTask.new(:rcov) do |spec|
29
29
  spec.libs << 'lib' << 'spec'
30
30
  spec.pattern = 'spec/**/*_spec.rb'
31
31
  spec.rcov = true
32
+ spec.rcov_opts = ['--text-report', '--include-file lib/confluence/', '--exclude app,config,gems,lib,src,spec']
32
33
  end
33
34
 
34
35
  task :spec => :check_dependencies
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.7
1
+ 0.4.8
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{confluencer}
8
- s.version = "0.4.7"
8
+ s.version = "0.4.8"
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-17}
12
+ s.date = %q{2010-05-20}
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 = [
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "VERSION",
27
27
  "confluencer.gems",
28
28
  "confluencer.gemspec",
29
+ "lib/confluence/attachment.rb",
29
30
  "lib/confluence/blog_entry.rb",
30
31
  "lib/confluence/bookmark.rb",
31
32
  "lib/confluence/client.rb",
@@ -40,6 +41,7 @@ Gem::Specification.new do |s|
40
41
  "script/console",
41
42
  "script/console_init.rb",
42
43
  "spec/confluence.yaml.example",
44
+ "spec/confluence/attachment_spec.rb",
43
45
  "spec/confluence/bookmark_spec.rb",
44
46
  "spec/confluence/client_spec.rb",
45
47
  "spec/confluence/page_spec.rb",
@@ -57,7 +59,8 @@ Gem::Specification.new do |s|
57
59
  s.rubygems_version = %q{1.3.7}
58
60
  s.summary = %q{Useful classes to manage Confluence.}
59
61
  s.test_files = [
60
- "spec/confluence/bookmark_spec.rb",
62
+ "spec/confluence/attachment_spec.rb",
63
+ "spec/confluence/bookmark_spec.rb",
61
64
  "spec/confluence/client_spec.rb",
62
65
  "spec/confluence/page_spec.rb",
63
66
  "spec/confluence/record_spec.rb",
@@ -0,0 +1,36 @@
1
+ module Confluence
2
+ class Attachment < Record
3
+ extend Findable
4
+
5
+ record_attr_accessor :id => :attachment_id
6
+ record_attr_accessor :pageId => :page_id
7
+ record_attr_accessor :fileName => :filename
8
+ record_attr_accessor :fileSize => :filesize
9
+ record_attr_accessor :contentType => :content_type
10
+ record_attr_accessor :title, :creator, :created, :url, :comment
11
+
12
+ attr_writer :data
13
+
14
+ def data
15
+ @data ||= client.getAttachmentData(page_id, filename, "0")
16
+ end
17
+
18
+ def store
19
+ # reinitialize attachment after storing it
20
+ initialize(client.addAttachment(page_id, self.to_hash, XMLRPC::Base64.new(@data)))
21
+
22
+ # return self
23
+ self
24
+ end
25
+
26
+ def remove
27
+ client.removeAttachment(page_id, filename)
28
+ end
29
+
30
+ def self.find_criteria(args)
31
+ if args.key? :page_id and args.key? :filename
32
+ self.new(client.getAttachment(args[:page_id], args[:filename], args[:version] || "0"))
33
+ end
34
+ end
35
+ end
36
+ end
@@ -9,11 +9,7 @@ module Confluence
9
9
  record_attr_accessor :url
10
10
 
11
11
  private
12
-
13
- def self.find_all
14
- raise ArgumentError, "Cannot find all blog entries, find by id or title instead."
15
- end
16
-
12
+
17
13
  def self.find_criteria(args)
18
14
  if args.key? :id
19
15
  self.new(client.getBlogEntries(args[:id]))
@@ -7,7 +7,10 @@ module Confluence
7
7
  def find(args)
8
8
  begin
9
9
  case args
10
- when :all: find_all
10
+ when :all: begin
11
+ raise "Cannot find all #{self.class.name.downcase}s, find by criteria instead." unless respond_to? :find_all
12
+ find_all
13
+ end
11
14
  when Hash: find_criteria(args)
12
15
  end
13
16
  rescue Confluence::Error
@@ -80,7 +80,12 @@ module Confluence
80
80
 
81
81
  def children(klass = self.class)
82
82
  children = client.getChildren(page_id)
83
- children.collect { |child| klass.find(:id => child["id"]) } if children
83
+ children.collect { |hash| klass.find(:id => hash["id"]) } if children
84
+ end
85
+
86
+ def attachments
87
+ attachments = client.getAttachments(page_id)
88
+ attachments.collect { |hash| Attachment.new(hash) } if attachments
84
89
  end
85
90
 
86
91
  def store(args = {})
@@ -115,6 +120,12 @@ module Confluence
115
120
  def remove
116
121
  client.removePage(page_id)
117
122
  end
123
+
124
+ def add_attachment(filename, content_type, data = IO.read(filename), comment = "")
125
+ attachment = Attachment.new :pageId => page_id, :fileName => filename, :contentType => content_type, :comment => comment
126
+ attachment.data = data
127
+ attachment.store
128
+ end
118
129
 
119
130
  def to_hash
120
131
  # record hash
@@ -132,10 +143,6 @@ module Confluence
132
143
 
133
144
  private
134
145
 
135
- def self.find_all
136
- raise ArgumentError, "Cannot find all pages, find by id or title instead."
137
- end
138
-
139
146
  def self.find_criteria(args)
140
147
  if args.key? :id
141
148
  self.new(client.getPage(args[:id]))
@@ -16,7 +16,8 @@ require 'confluence/space'
16
16
  require 'confluence/page'
17
17
  require 'confluence/bookmark'
18
18
  require 'confluence/blog_entry'
19
+ require 'confluence/attachment'
19
20
 
20
21
  module Confluencer
21
- VERSION = "0.2.7"
22
+ VERSION = "0.4.8"
22
23
  end
@@ -0,0 +1,46 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
2
+
3
+ describe Confluence::Attachment do
4
+ include PageHelperMethods
5
+
6
+ FILENAME = File.basename(__FILE__)
7
+
8
+ it "should store an attachment" do
9
+ with_test_page do |page|
10
+ attachment = Confluence::Attachment.new :pageId => page.page_id, :fileName => FILENAME, :contentType => "text/plain", :comment => "Test upload"
11
+ attachment.data = IO.read(__FILE__)
12
+ attachment.store
13
+
14
+ attachment.attachment_id.should_not be_nil
15
+ attachment.filesize.should_not be_nil
16
+ attachment.url.should_not be_nil
17
+ end
18
+ end
19
+
20
+ it "should find an attachment and get its data" do
21
+ with_test_page do |page|
22
+ attachment = Confluence::Attachment.new :pageId => page.page_id, :fileName => FILENAME, :contentType => "text/plain", :comment => "Test upload"
23
+ attachment.data = IO.read(__FILE__)
24
+ attachment.store
25
+
26
+ attachment = Confluence::Attachment.find :page_id => page.page_id, :filename => FILENAME
27
+ attachment.should_not be_nil
28
+ attachment.filename.should == FILENAME
29
+ attachment.data.should == IO.read(__FILE__)
30
+ end
31
+ end
32
+
33
+ it "should remove an attachment" do
34
+ with_test_page do |page|
35
+ attachment = Confluence::Attachment.new :pageId => page.page_id, :fileName => FILENAME, :contentType => "text/plain", :comment => "Test upload"
36
+ attachment.data = IO.read(__FILE__)
37
+ attachment.store
38
+
39
+ # remove attachment
40
+ attachment.remove
41
+
42
+ # should not be able to find attachment
43
+ Confluence::Attachment.find(:page_id => page.page_id, :filename => FILENAME).should be_nil
44
+ end
45
+ end
46
+ end
@@ -46,8 +46,16 @@ describe Confluence::Bookmark do
46
46
 
47
47
  it "should find bookmarks by space" do
48
48
  new_session do
49
+ # add a test bookmark to the confluencer space
50
+ bookmark = Confluence::Bookmark.new :space => "confluencer", :bookmark_url => 'http://github.com/rgabo/confluencer', :description => 'Home sweet home', :title => "Page title"
51
+ bookmark.store
52
+
53
+ # find bookmarks in space
49
54
  bookmarks = Confluence::Bookmark.find :space => "confluencer"
50
55
  bookmarks.should_not be_empty
56
+
57
+ # remove test bookmark
58
+ bookmark.remove
51
59
  end
52
60
  end
53
61
  end
@@ -46,32 +46,9 @@ CONTENT
46
46
  end
47
47
 
48
48
  describe Confluence::Page do
49
- include SessionHelperMethods
50
-
51
- def create_test_page(content = "foobar")
52
- Confluence::Page.new :space => config[:space], :title => config[:page_title], :content => content
53
- end
54
-
55
- def store_test_page
56
- new_session do
57
- return create_test_page.store
58
- end
59
- end
60
-
61
- after :each do
62
- new_session do
63
- begin
64
- # check whether we need to remove the test page
65
- test_page = Confluence::Page.find :space => config[:space], :title => config[:page_title]
66
- test_page.remove if test_page
67
- rescue Confluence::Error
68
- end
69
- end
70
- end
49
+ include PageHelperMethods
71
50
 
72
51
  it "should add a new page in Confluence" do
73
- page = nil
74
-
75
52
  new_session do
76
53
  # initialize test page
77
54
  page = create_test_page
@@ -84,23 +61,21 @@ describe Confluence::Page do
84
61
 
85
62
  # check page_id
86
63
  page.page_id.should_not be_nil
87
- end
88
64
 
89
- # initialize new session
90
- new_session do
91
65
  # find page by id
92
66
  new_page = Confluence::Page.find :id => page.page_id
93
67
 
94
68
  # assert page
95
69
  new_page.should_not be_nil
96
70
  new_page.title.should == page.title
71
+
72
+ # remove page
73
+ new_page.remove
97
74
  end
98
75
  end
99
76
 
100
77
  it "should update an existing page in Confluence by id" do
101
- page = store_test_page
102
-
103
- new_session do
78
+ with_test_page do |page|
104
79
  # create test page with same id but updated content
105
80
  updated_page = create_test_page "updated content"
106
81
 
@@ -116,9 +91,7 @@ describe Confluence::Page do
116
91
  end
117
92
 
118
93
  it "should update an existing page in Confluence by space and title" do
119
- page = store_test_page
120
-
121
- new_session do
94
+ with_test_page do |page|
122
95
  # create test page with same title but updated content
123
96
  updated_page = create_test_page "updated content"
124
97
 
@@ -136,7 +109,7 @@ describe Confluence::Page do
136
109
  end
137
110
 
138
111
  it "should keep metadata for the page" do
139
- page = store_test_page
112
+ page = create_test_page
140
113
 
141
114
  # set :creator in {details:label=bender} to 'rgabo'
142
115
  page.details[:confluencer][:creator] = 'rgabo'
@@ -145,7 +118,7 @@ describe Confluence::Page do
145
118
  end
146
119
 
147
120
  it "should include metadata in content of the page" do
148
- page = store_test_page
121
+ page = create_test_page
149
122
 
150
123
  # set :creator in {details:label=bender} to 'rgabo'
151
124
  page.details[:confluencer][:creator] = 'rgabo'
@@ -168,5 +141,19 @@ describe Confluence::Page do
168
141
 
169
142
  page.details[:confluencer][:creator].should == "rgabo"
170
143
  end
144
+
145
+ it "should add an attachment" do
146
+ with_test_page do |page|
147
+ page.add_attachment(File.basename(__FILE__), "text/plain", IO.read(__FILE__), "test attachment comment")
148
+
149
+ page.attachments.count.should == 1
150
+
151
+ attachment = page.attachments.first
152
+
153
+ attachment.should_not be_nil
154
+ attachment.url.should_not be_nil
155
+ attachment.data.should == IO.read(__FILE__)
156
+ end
157
+ end
171
158
  end
172
159
 
@@ -34,4 +34,23 @@ module SessionHelperMethods
34
34
  end
35
35
  end
36
36
  end
37
+
38
+ module PageHelperMethods
39
+ include SessionHelperMethods
37
40
 
41
+ def create_test_page(content = "foobar")
42
+ Confluence::Page.new :space => config[:space], :title => config[:page_title], :content => content
43
+ end
44
+
45
+ def with_test_page
46
+ new_session do
47
+ begin
48
+ # yield created test page
49
+ yield page = create_test_page.store
50
+ ensure
51
+ # remove test page
52
+ page.remove
53
+ end
54
+ end
55
+ end
56
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: confluencer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 7
10
- version: 0.4.7
9
+ - 8
10
+ version: 0.4.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gabor Ratky
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-05-17 00:00:00 +02:00
18
+ date: 2010-05-20 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -69,6 +69,7 @@ files:
69
69
  - VERSION
70
70
  - confluencer.gems
71
71
  - confluencer.gemspec
72
+ - lib/confluence/attachment.rb
72
73
  - lib/confluence/blog_entry.rb
73
74
  - lib/confluence/bookmark.rb
74
75
  - lib/confluence/client.rb
@@ -83,6 +84,7 @@ files:
83
84
  - script/console
84
85
  - script/console_init.rb
85
86
  - spec/confluence.yaml.example
87
+ - spec/confluence/attachment_spec.rb
86
88
  - spec/confluence/bookmark_spec.rb
87
89
  - spec/confluence/client_spec.rb
88
90
  - spec/confluence/page_spec.rb
@@ -128,6 +130,7 @@ signing_key:
128
130
  specification_version: 3
129
131
  summary: Useful classes to manage Confluence.
130
132
  test_files:
133
+ - spec/confluence/attachment_spec.rb
131
134
  - spec/confluence/bookmark_spec.rb
132
135
  - spec/confluence/client_spec.rb
133
136
  - spec/confluence/page_spec.rb