confluencer 0.2.8 → 0.3.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.8
1
+ 0.3.0
data/confluencer.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{confluencer}
8
- s.version = "0.2.8"
8
+ s.version = "0.3.0"
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"]
@@ -30,9 +30,11 @@ Gem::Specification.new do |s|
30
30
  "lib/confluence/bookmark.rb",
31
31
  "lib/confluence/client.rb",
32
32
  "lib/confluence/error.rb",
33
+ "lib/confluence/findable.rb",
33
34
  "lib/confluence/page.rb",
34
35
  "lib/confluence/record.rb",
35
36
  "lib/confluence/session.rb",
37
+ "lib/confluence/space.rb",
36
38
  "lib/confluencer.rb",
37
39
  "script/console",
38
40
  "script/console_init.rb",
@@ -42,6 +44,7 @@ Gem::Specification.new do |s|
42
44
  "spec/confluence/page_spec.rb",
43
45
  "spec/confluence/record_spec.rb",
44
46
  "spec/confluence/session_spec.rb",
47
+ "spec/confluence/space_spec.rb",
45
48
  "spec/confluencer_spec.rb",
46
49
  "spec/spec.opts",
47
50
  "spec/spec_helper.rb"
@@ -57,6 +60,7 @@ Gem::Specification.new do |s|
57
60
  "spec/confluence/page_spec.rb",
58
61
  "spec/confluence/record_spec.rb",
59
62
  "spec/confluence/session_spec.rb",
63
+ "spec/confluence/space_spec.rb",
60
64
  "spec/confluencer_spec.rb",
61
65
  "spec/spec_helper.rb"
62
66
  ]
@@ -1,17 +1,23 @@
1
1
  module Confluence
2
2
  class BlogEntry < Record
3
+ extend Findable
4
+
3
5
  record_attr_accessor :id => :entry_id
4
6
  record_attr_accessor :space
5
7
  record_attr_accessor :title, :content
6
8
  record_attr_accessor :publishDate
7
9
  record_attr_accessor :url
8
10
 
9
- def self.find_by_id(entryid)
10
- self.new(client.getBlogEntries(entryid))
11
+ private
12
+
13
+ def self.find_all
14
+ raise ArgumentError, "Cannot find all blog entries, find by id or title instead."
11
15
  end
12
16
 
13
- def self.find_by_space(spacekey)
14
- client.getBlogEntries(spacekey).collect {|summary| BlogEntry.new(client.getBlogEntry(summary["id"]))}
17
+ def self.find_criteria(args)
18
+ if args.key? :id
19
+ self.new(client.getBlogEntries(args[:id]))
20
+ end
15
21
  end
16
22
  end
17
23
  end
@@ -1,7 +1,5 @@
1
1
  module Confluence
2
2
  class Bookmark < Page
3
- BOOKMARKS_PAGE_TITLE = ".bookmarks"
4
-
5
3
  attr_reader :bookmark_url, :description
6
4
 
7
5
  def initialize(hash)
@@ -34,22 +32,25 @@ module Confluence
34
32
 
35
33
  def store
36
34
  # always set .bookmarks as the parent page
37
- self.parent_id = Page.find_by_title(space, BOOKMARKS_PAGE_TITLE).page_id
35
+ self.parent_id = Page.find(:space => space, :title => Space::BOOKMARKS_PAGE_TITLE).page_id
38
36
 
39
37
  # continue with storing the page
40
38
  super
41
39
  end
42
40
 
43
- def self.find_by_space(spacekey)
44
- # get the .bookmarks page for the space
45
- bookmarks_page = Page.find_by_title(spacekey, BOOKMARKS_PAGE_TITLE)
41
+ private
42
+
43
+ def self.find_criteria(args)
44
+ result = super(args) || begin
45
+ if args.key? :space
46
+ space = Space.find :space => args[:space]
47
+ space.bookmarks
48
+ end
49
+ end
46
50
 
47
- # map each page to a Bookmark
48
- bookmarks_page.children.collect {|page| Bookmark.new(page.attributes)}
51
+ result
49
52
  end
50
53
 
51
- private
52
-
53
54
  def update_content
54
55
  self.content = "{bookmark:url=#{@bookmark_url}}#{@description}{bookmark}"
55
56
  end
@@ -81,7 +81,7 @@ module Confluence
81
81
  if args.empty?
82
82
  log.debug "#{method_name}"
83
83
  else
84
- log.debug "#{method_name}(#{args.join(', ')})"
84
+ log.debug "#{method_name}(#{(args.collect {|a| a.inspect}).join(', ')})"
85
85
  end
86
86
  result = proxy.send(method_name, *([@token] + args))
87
87
  log.debug(result.inspect)
@@ -0,0 +1,17 @@
1
+ module Confluence
2
+ module Findable
3
+ # Finds records by the given criteria.
4
+ #
5
+ # ==== Parameters
6
+ # args<Hash>:: The search arguments.
7
+ def find(args)
8
+ begin
9
+ case args
10
+ when :all: find_all
11
+ when Hash: find_criteria(args)
12
+ end
13
+ rescue Confluence::Error
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,7 @@
1
1
  module Confluence
2
2
  class Page < Record
3
+ extend Findable
4
+
3
5
  record_attr_accessor :id => :page_id
4
6
  record_attr_accessor :parentId => :parent_id
5
7
  record_attr_accessor :space
@@ -7,18 +9,18 @@ module Confluence
7
9
  record_attr_accessor :created, :modified, :version
8
10
  record_attr_accessor :url
9
11
 
10
- def children
12
+ def children(klass = self.class)
11
13
  children = client.getChildren(page_id)
12
- children.collect { |child| Page.find_by_id(child["id"]) } if children
14
+ children.collect { |child| klass.find(:id => child["id"]) } if children
13
15
  end
14
16
 
15
17
  def store
16
18
  unless self.version
17
19
  # check for existing page by id or title
18
20
  existing_page = if page_id
19
- Page.find_by_id(page_id)
21
+ Page.find :id => page_id
20
22
  else
21
- Page.find_by_title(space, title)
23
+ Page.find :space => space, :title => title
22
24
  end
23
25
 
24
26
  # take page_id and version from existing page if available
@@ -38,18 +40,18 @@ module Confluence
38
40
  def remove
39
41
  client.removePage(page_id)
40
42
  end
41
-
42
- def self.find_by_id(page_id)
43
- begin
44
- self.new(client.getPage(page_id))
45
- rescue Confluence::Error
46
- end
43
+
44
+ private
45
+
46
+ def self.find_all
47
+ raise ArgumentError, "Cannot find all pages, find by id or title instead."
47
48
  end
48
49
 
49
- def self.find_by_title(space, title)
50
- begin
51
- self.new(client.getPage(space, title))
52
- rescue Confluence::Error
50
+ def self.find_criteria(args)
51
+ if args.key? :id
52
+ self.new(client.getPage(args[:id]))
53
+ elsif args.key?(:space) && args.key?(:title)
54
+ self.new(client.getPage(args[:space], args[:title]))
53
55
  end
54
56
  end
55
57
  end
@@ -1,15 +1,23 @@
1
1
  module Confluence
2
+ # Base class for working with Confluence records.
3
+ #
2
4
  class Record
3
5
  class << self
6
+ # The client used for Confluence API calls.
7
+ #
4
8
  def client
5
9
  raise "Confluence client is unavailable. Did you forget to use Confluence::Session.new?" unless @@client
6
10
  @@client
7
11
  end
8
12
 
13
+ # Sets the client.
14
+ #
9
15
  def client=(value)
10
16
  @@client = value
11
17
  end
12
18
 
19
+ # Defines an attr_accessor for a Record attribute.
20
+ #
13
21
  def record_attr_accessor(*args)
14
22
  attributes = {}
15
23
 
@@ -38,6 +46,10 @@ module Confluence
38
46
 
39
47
  attr_accessor :attributes
40
48
 
49
+ # Initializes a new record.
50
+ #
51
+ # ==== Parameters
52
+ # hash<Hash>:: A hash containing the attributes and its values. Keys can be Strings or Symbols.
41
53
  def initialize(hash)
42
54
  @attributes = {}
43
55
 
@@ -46,7 +58,7 @@ module Confluence
46
58
  self[key.to_sym] = value
47
59
  end
48
60
  end
49
-
61
+
50
62
  def [](attr)
51
63
  @attributes[attr]
52
64
  end
@@ -54,7 +66,9 @@ module Confluence
54
66
  def []=(attr, value)
55
67
  @attributes[attr] = value
56
68
  end
57
-
69
+
70
+ # Returns the id of the record.
71
+ #
58
72
  def record_id
59
73
  self[:id]
60
74
  end
@@ -73,6 +87,8 @@ module Confluence
73
87
  @labels = value
74
88
  end
75
89
 
90
+ private
91
+
76
92
  def client
77
93
  Record.client
78
94
  end
@@ -0,0 +1,41 @@
1
+ module Confluence
2
+ # A Confluence space.
3
+ class Space < Record
4
+ extend Findable
5
+
6
+ BOOKMARKS_PAGE_TITLE = ".bookmarks"
7
+
8
+ record_attr_accessor :key, :name, :url, :description
9
+ record_attr_accessor :homePage => :homepage
10
+
11
+ def bookmark_page
12
+ @bookmark_page ||= Page.find :space => self.key, :title => BOOKMARKS_PAGE_TITLE
13
+ end
14
+
15
+ def bookmarks
16
+ bookmark_page ? bookmark_page.children(Bookmark) : []
17
+ end
18
+
19
+ def blog_entries
20
+ client.getBlogEntries(self.key).collect {|summary| BlogEntry.new(client.getBlogEntry(summary["id"]))}
21
+ end
22
+
23
+ def find_page(args)
24
+ if args.key? :title
25
+ Page.find :space => self.key, :title => args[:title]
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def self.find_all
32
+ client.getSpaces.collect { |summary| Space.find(:key => summary["key"]) }
33
+ end
34
+
35
+ def self.find_criteria(args)
36
+ if args.key? :key
37
+ Space.new(client.getSpace(args[:key]))
38
+ end
39
+ end
40
+ end
41
+ end
data/lib/confluencer.rb CHANGED
@@ -9,7 +9,9 @@ require 'confluence/error'
9
9
  require 'confluence/client'
10
10
  require 'confluence/session'
11
11
 
12
+ require 'confluence/findable'
12
13
  require 'confluence/record'
14
+ require 'confluence/space'
13
15
  require 'confluence/page'
14
16
  require 'confluence/bookmark'
15
17
  require 'confluence/blog_entry'
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
2
2
 
3
- module PageHelperMethods
3
+ describe Confluence::Page do
4
4
  include SessionHelperMethods
5
5
 
6
6
  def create_test_page(content = "foobar")
@@ -12,16 +12,12 @@ module PageHelperMethods
12
12
  return create_test_page.store
13
13
  end
14
14
  end
15
- end
16
-
17
- describe Confluence::Page do
18
- include PageHelperMethods
19
15
 
20
16
  after :each do
21
17
  new_session do
22
18
  begin
23
19
  # check whether we need to remove the test page
24
- test_page = Confluence::Page.find_by_title config[:space], config[:page_title]
20
+ test_page = Confluence::Page.find :space => config[:space], :title => config[:page_title]
25
21
  test_page.remove if test_page
26
22
  rescue Confluence::Error
27
23
  end
@@ -31,7 +27,7 @@ describe Confluence::Page do
31
27
  it "should add a new page in Confluence" do
32
28
  page = nil
33
29
 
34
- new_session do |client|
30
+ new_session do
35
31
  # initialize test page
36
32
  page = create_test_page
37
33
 
@@ -48,7 +44,7 @@ describe Confluence::Page do
48
44
  # initialize new session
49
45
  new_session do
50
46
  # find page by id
51
- new_page = Confluence::Page.find_by_id page.page_id
47
+ new_page = Confluence::Page.find :id => page.page_id
52
48
 
53
49
  # assert page
54
50
  new_page.should_not be_nil
@@ -0,0 +1,49 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
2
+
3
+ describe Confluence::Space do
4
+ include SessionHelperMethods
5
+
6
+ def test_space
7
+ @test_space ||= Confluence::Space.find(:key => config[:space])
8
+ end
9
+
10
+ it "should find all spaces" do
11
+ new_session do
12
+ spaces = Confluence::Space.find(:all)
13
+
14
+ spaces.should_not be_empty
15
+ end
16
+ end
17
+
18
+ it "should find a space by its key" do
19
+ new_session do
20
+ space = Confluence::Space.find(:key => config[:space])
21
+
22
+ space.should_not be_nil
23
+ space.key.should == config[:space]
24
+ end
25
+ end
26
+
27
+ it "should find a page in the space" do
28
+ new_session do
29
+ page = test_space.find_page :title => "Home"
30
+
31
+ page.should_not be_nil
32
+ page.space.should == test_space.key
33
+ end
34
+ end
35
+
36
+ it "should return all bookmarks in the space" do
37
+ new_session do
38
+ # create a bookmark in the test_space
39
+ bookmark = Confluence::Bookmark.new :space => test_space.key, :title => "Atlassian", :bookmark_url => "http://atlassian.com"
40
+ bookmark.store
41
+
42
+ bookmarks = test_space.bookmarks
43
+ bookmarks.should_not be_empty
44
+
45
+ # delete test bookmark
46
+ bookmark.remove
47
+ end
48
+ end
49
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 2
8
- - 8
9
- version: 0.2.8
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Gabor Ratky
@@ -54,9 +54,11 @@ files:
54
54
  - lib/confluence/bookmark.rb
55
55
  - lib/confluence/client.rb
56
56
  - lib/confluence/error.rb
57
+ - lib/confluence/findable.rb
57
58
  - lib/confluence/page.rb
58
59
  - lib/confluence/record.rb
59
60
  - lib/confluence/session.rb
61
+ - lib/confluence/space.rb
60
62
  - lib/confluencer.rb
61
63
  - script/console
62
64
  - script/console_init.rb
@@ -66,6 +68,7 @@ files:
66
68
  - spec/confluence/page_spec.rb
67
69
  - spec/confluence/record_spec.rb
68
70
  - spec/confluence/session_spec.rb
71
+ - spec/confluence/space_spec.rb
69
72
  - spec/confluencer_spec.rb
70
73
  - spec/spec.opts
71
74
  - spec/spec_helper.rb
@@ -105,5 +108,6 @@ test_files:
105
108
  - spec/confluence/page_spec.rb
106
109
  - spec/confluence/record_spec.rb
107
110
  - spec/confluence/session_spec.rb
111
+ - spec/confluence/space_spec.rb
108
112
  - spec/confluencer_spec.rb
109
113
  - spec/spec_helper.rb