xbel 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,7 +15,8 @@ tmtags
15
15
 
16
16
  ## PROJECT::GENERAL
17
17
  coverage
18
- rdoc
18
+ doc
19
+ .yardoc
19
20
  pkg
20
21
 
21
22
  ## PROJECT::SPECIFIC
data/Rakefile CHANGED
@@ -40,12 +40,11 @@ end
40
40
 
41
41
  task :default => :test
42
42
 
43
- require 'rake/rdoctask'
44
- Rake::RDocTask.new do |rdoc|
45
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
-
47
- rdoc.rdoc_dir = 'rdoc'
48
- rdoc.title = "xbel #{version}"
49
- rdoc.rdoc_files.include('README*')
50
- rdoc.rdoc_files.include('lib/**/*.rb')
43
+ begin
44
+ require 'yard'
45
+ YARD::Rake::YardocTask.new
46
+ rescue LoadError
47
+ task :yardoc do
48
+ abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
49
+ end
51
50
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -3,7 +3,7 @@ module Nokogiri::Decorators::XBEL
3
3
  autoload :Bookmark, "#{ File.dirname __FILE__ }/xbel/bookmark.rb"
4
4
  autoload :Folder, "#{ File.dirname __FILE__ }/xbel/folder.rb"
5
5
  autoload :Alias, "#{ File.dirname __FILE__ }/xbel/alias.rb"
6
- autoload :Seperator, "#{ File.dirname __FILE__ }/xbel/folder.rb"
6
+ autoload :Separator, "#{ File.dirname __FILE__ }/xbel/separator.rb"
7
7
 
8
8
  def self.extended(base)
9
9
  case base.name
@@ -35,9 +35,11 @@ module Nokogiri::Decorators::XBEL
35
35
  end
36
36
  attr_reader :info
37
37
 
38
+ # Returns description of node.
38
39
  def desc
39
40
  if node = at('./desc') then node.content end
40
41
  end
42
+ # Sets description of node.
41
43
  def desc=(value)
42
44
  node = at './desc'
43
45
  node ||= add_child Nokogiri::XML::Node.new('desc', document)
@@ -47,9 +49,11 @@ module Nokogiri::Decorators::XBEL
47
49
  alias_method :description, :desc
48
50
  alias_method :description=, :desc=
49
51
 
52
+ # Returns title fo node.
50
53
  def title
51
54
  if node = at('./title') then node.content end
52
55
  end
56
+ # Sets title for node.
53
57
  def title=(value)
54
58
  node = at './title'
55
59
  node ||= add_child Nokogiri::XML::Node.new('title', document)
@@ -58,22 +62,29 @@ module Nokogiri::Decorators::XBEL
58
62
  end
59
63
  alias_method :to_s, :title
60
64
 
65
+ # Returns id for node.
61
66
  def id
62
67
  if id = attribute('id') then id.content end
63
68
  end
69
+ # Sets id for node.
64
70
  def id=(value)
65
71
  set_attribute 'id', value.to_s
66
72
  end
67
73
 
74
+ # Returns addition date.
68
75
  def added
69
76
  if value = attribute('added') then Date.parse value.content end
70
77
  end
78
+ # Sets addition date.
71
79
  def added=(value)
72
80
  set_attribute 'added', value.to_s
73
81
  end
74
82
 
83
+ # Returns nil.
75
84
  def alias?; end
85
+ # Returns nil.
76
86
  def bookmark?; end
87
+ # Returns nil.
77
88
  def folder?; end
78
89
  end
79
90
 
@@ -4,19 +4,27 @@ module Nokogiri::Decorators::XBEL
4
4
  def_delegators :entry,
5
5
  :description, :title, :to_s, :id, :added, :bookmark?, :folder?
6
6
 
7
+ # Returns reference to bookmark or folder id.
7
8
  def ref
8
9
  attribute('ref').content
9
10
  end
10
- def ref=(value)
11
- set_attribute 'ref', value.to_s
11
+ # Sets reference of bookmark or folder id.
12
+ def ref=(bookmark_or_folder_id)
13
+ set_attribute 'ref', bookmark_or_folder_id.to_s
12
14
  end
13
15
  alias_method :reference, :ref
14
16
  alias_method :reference=, :ref=
15
17
 
18
+ # Returns referenced bookmark or folder.
16
19
  def entry
17
20
  at %Q'//*[@id="#{ ref }"]'
18
21
  end
22
+ # Sets referenced bookmark or folder.
23
+ def entry=(bookmark_or_folder)
24
+ self.ref = bookmark_or_folder.id
25
+ end
19
26
 
27
+ # Returns true.
20
28
  def alias?
21
29
  true
22
30
  end
@@ -6,28 +6,36 @@ module Nokogiri::Decorators::XBEL
6
6
  node.initialize_decorator
7
7
  end
8
8
 
9
+ # Returns modification date.
9
10
  def modified
10
11
  if value = self['modified'] then Date.parse value end
11
12
  end
13
+ # Sets modification date.
12
14
  def modified=(value)
13
15
  self['modified'] = value.to_s
14
16
  end
17
+ # Returns visit date.
15
18
  def visited
16
19
  if value = self['visited'] then Date.parse value end
17
20
  end
21
+ # Sets visit date.
18
22
  def visited=(value)
19
23
  self['visited'] = value.to_s
20
24
  end
25
+ # Sets visit to today.
21
26
  def visit
22
27
  self.visited = Date.today
23
28
  end
29
+ # Returns href value.
24
30
  def href
25
31
  if value = self['href'] then value end
26
32
  end
33
+ # Sets href value.
27
34
  def href=(value)
28
35
  self.modified = Date.today
29
36
  self['href'] = value
30
37
  end
38
+ # Returns true.
31
39
  def bookmark?
32
40
  true
33
41
  end
@@ -6,19 +6,19 @@ module Nokogiri::Decorators::XBEL
6
6
  node.initialize_decorator
7
7
  end
8
8
 
9
- # Returns an instance of NodeSet with all valid children for this folder.
9
+ # Returns an instance of NodeSet with possible children in this folder.
10
10
  def entries
11
11
  xpath './alias | ./bookmark | ./folder | ./separator'
12
12
  end
13
- # Returns an instance of NodeSet with all aliases for this folder.
13
+ # Returns an instance of NodeSet with all aliases in this folder.
14
14
  def aliases
15
15
  xpath './alias'
16
16
  end
17
- # Returns an instance of NodeSet with all bookmarks for this folder.
17
+ # Returns an instance of NodeSet with all bookmarks in this folder.
18
18
  def bookmarks
19
19
  xpath './bookmark'
20
20
  end
21
- # Returns an instance of NodeSet with all folders for this folder.
21
+ # Returns an instance of NodeSet with all folders in this folder.
22
22
  def folders
23
23
  xpath './folder'
24
24
  end
@@ -56,8 +56,8 @@ module Nokogiri::Decorators::XBEL
56
56
 
57
57
  add_child node
58
58
  end
59
- # Builds a seperator with given attributes and add it.
60
- def add_seperator
59
+ # Builds a saperator with given attributes and add it.
60
+ def add_separator
61
61
  add_child Nokogiri::XML::Node.new('separator', document)
62
62
  end
63
63
 
@@ -1,8 +1,9 @@
1
1
  module Nokogiri::Decorators::XBEL
2
2
  module Separator
3
3
 
4
+ # Returns a single space.
4
5
  def to_s
5
- ''
6
+ ' '
6
7
  end
7
8
 
8
9
  end
data/lib/xbel.rb CHANGED
@@ -7,21 +7,26 @@ class XBEL < Nokogiri::XML::Document
7
7
  extend Forwardable
8
8
  def_delegators :root, :title, :title=, :desc, :desc=
9
9
 
10
+ # Returns an instance of XBEL.
10
11
  def self.new(major = 1, minor = 0)
11
12
  parse %Q'<!DOCTYPE xbel PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML" "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd"><xbel version="%i.%i"></xbel>' % [major, minor]
12
13
  end
13
14
 
14
- def self.open(path)
15
- parse File.read(path.to_s)
15
+ # Reads file at <tt>path</tt> into <tt>parse</tt>.
16
+ # @yield [XBEL]
17
+ # @see Nokogiri.parse
18
+ def self.open(path, &block)
19
+ parse File.read(path.to_s), &block
16
20
  end
17
21
 
18
- # Use <tt>XBEL.parse(string)</tt> create an instance.
22
+ # Calls <tt>Nokogiri#initialize</tt> and decorates XBEL nodes.
19
23
  def initialize(*args)
20
24
  super
21
25
  decorators(Nokogiri::XML::Node) << Nokogiri::Decorators::XBEL
22
26
  decorate!
23
27
  end
24
28
 
29
+ # Returns node with given <tt>id</tt>.
25
30
  def [](id)
26
31
  root.at("//*[@id='#{ id }']")
27
32
  end
data/test/test_xbel.rb CHANGED
@@ -52,11 +52,18 @@ context 'XBEL' do
52
52
  should('be a folder') { topic.folder? }
53
53
 
54
54
  asserts('title') { topic.title }.equals 'Wiki'
55
- # TODO: check type with <name>?
56
- asserts('entries') { topic.entries }.kind_of Nokogiri::XML::NodeSet
57
- asserts('bookmarks') { topic.bookmarks }.kind_of Nokogiri::XML::NodeSet
58
- asserts('aliases') { topic.aliases }.kind_of Nokogiri::XML::NodeSet
59
- asserts('folders') { topic.folders }.kind_of Nokogiri::XML::NodeSet
55
+ asserts('entries names') do
56
+ topic.entries.map { |e| e.name }.uniq.sort
57
+ end.equals %w[ alias bookmark folder separator ]
58
+ should('return bookmarks') do
59
+ not topic.bookmarks.any? { |b| b.name != 'bookmark' }
60
+ end
61
+ should('return aliases') do
62
+ not topic.aliases.any? { |b| b.name != 'alias' }
63
+ end
64
+ should('return folders') do
65
+ not topic.folders.any? { |b| b.name != 'folder' }
66
+ end
60
67
 
61
68
  context 'Bookmark' do
62
69
  setup { topic.bookmarks.first }
@@ -100,6 +107,15 @@ context 'XBEL' do
100
107
  should('be an alias') { topic.alias? }
101
108
 
102
109
  should('reference its folder') { topic.entry == topic.parent }
110
+ should('set reference by entry') do
111
+ topic.entry = topic.document[:b1]
112
+ topic.ref == 'b1'
113
+ end
114
+ end
115
+
116
+ context 'Separator' do
117
+ setup { topic.entries.find { |e| e.name == 'separator' } }
118
+ asserts('to_s') { topic.to_s }.equals ' '
103
119
  end
104
120
 
105
121
  end
data/test/wikipedia.xbel CHANGED
@@ -16,9 +16,12 @@ PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
16
16
  </info>
17
17
  <title>Wikimedia Foundation</title>
18
18
  </bookmark>
19
+ <alias ref="f0-1" />
20
+ <separator />
19
21
  <bookmark href="http://de.wikipedia.org/" id="b1" added="2007-11-11" modified="2007-11-14" visited="2007-12-27">
20
22
  <title>Wikipedia</title>
21
23
  </bookmark>
24
+ <folder id="f0-1"></folder>
22
25
  </folder>
23
26
  <separator />
24
27
  <alias ref="b1" />
data/xbel.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{xbel}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Florian A\303\237mann"]
12
- s.date = %q{2009-11-11}
12
+ s.date = %q{2009-11-12}
13
13
  s.description = %q{}
14
14
  s.email = %q{florian.assmann@email.de}
15
15
  s.extra_rdoc_files = [
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  "lib/nokogiri/decorators/xbel/alias.rb",
29
29
  "lib/nokogiri/decorators/xbel/bookmark.rb",
30
30
  "lib/nokogiri/decorators/xbel/folder.rb",
31
- "lib/nokogiri/decorators/xbel/seperator.rb",
31
+ "lib/nokogiri/decorators/xbel/separator.rb",
32
32
  "lib/xbel.rb",
33
33
  "test/helper.rb",
34
34
  "test/test_xbel.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xbel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Florian A\xC3\x9Fmann"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-11 00:00:00 +01:00
12
+ date: 2009-11-12 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -53,7 +53,7 @@ files:
53
53
  - lib/nokogiri/decorators/xbel/alias.rb
54
54
  - lib/nokogiri/decorators/xbel/bookmark.rb
55
55
  - lib/nokogiri/decorators/xbel/folder.rb
56
- - lib/nokogiri/decorators/xbel/seperator.rb
56
+ - lib/nokogiri/decorators/xbel/separator.rb
57
57
  - lib/xbel.rb
58
58
  - test/helper.rb
59
59
  - test/test_xbel.rb