bookmarks 0.1.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.
- checksums.yaml +7 -0
- data/Changelog.markdown +4 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +35 -0
- data/README.markdown +70 -0
- data/Rakefile +25 -0
- data/TODO +3 -0
- data/VERSION +1 -0
- data/lib/bookmarks/document.rb +104 -0
- data/lib/bookmarks/netscape_bookmark.rb +94 -0
- data/lib/bookmarks.rb +11 -0
- metadata +113 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bb320228bd68d2c679651f8b0bef8ed3be77526a
|
4
|
+
data.tar.gz: 6049fb5986c41ae4ffb2eaf5618e6046b39d3bd7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 343aec86130060ee882d7eda260dbdbdd81fdddb525ac8e705d1f3978fe6a344083c60d56cf476ddf093064f7df8366d99c84a88e47c847be19aa74f5c60337e
|
7
|
+
data.tar.gz: 30fcb9a2a5bda9c3746758503cc183ef83da15b35ecb9b1312444a44449bc8ce025d379fc355fe994ea9c7b99ef74419fd8da3568bd3b0867b0ae488e9d94f86
|
data/Changelog.markdown
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
bookmarks (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
coco (0.7.1)
|
10
|
+
diff-lcs (1.2.4)
|
11
|
+
rake (10.1.0)
|
12
|
+
rspec (2.14.0)
|
13
|
+
rspec-core (~> 2.14.0)
|
14
|
+
rspec-expectations (~> 2.14.0)
|
15
|
+
rspec-mocks (~> 2.14.0)
|
16
|
+
rspec-core (2.14.1)
|
17
|
+
rspec-expectations (2.14.0)
|
18
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
19
|
+
rspec-mocks (2.14.1)
|
20
|
+
tomparse (0.4.2)
|
21
|
+
yard (0.8.6.2)
|
22
|
+
yard-tomdoc (0.7.1)
|
23
|
+
tomparse (>= 0.4.0)
|
24
|
+
yard
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
bookmarks!
|
31
|
+
coco (>= 0.7.1)
|
32
|
+
rake
|
33
|
+
rspec
|
34
|
+
yard
|
35
|
+
yard-tomdoc
|
data/README.markdown
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
Bookmarks [](https://travis-ci.org/lkdjiin/bookmarks)
|
2
|
+
================
|
3
|
+
|
4
|
+
Description
|
5
|
+
-----------
|
6
|
+
|
7
|
+
Bookmarks is a library to parse or build a file of bookmarks, currently
|
8
|
+
only files in netscape format, like the ones exported by Delicious.
|
9
|
+
|
10
|
+
Install
|
11
|
+
-------------------------
|
12
|
+
|
13
|
+
On the CLI
|
14
|
+
|
15
|
+
gem install bookmarks
|
16
|
+
|
17
|
+
or in a Gemfile
|
18
|
+
|
19
|
+
gem 'bookmarks'
|
20
|
+
|
21
|
+
Usage
|
22
|
+
--------------------------
|
23
|
+
|
24
|
+
require 'bookmarks'
|
25
|
+
|
26
|
+
# To parse a document.
|
27
|
+
document = Document.new
|
28
|
+
document.parse 'bookmarks_file.html'
|
29
|
+
document.total # => Number of bookmarks.
|
30
|
+
first_bookmark = document.bookmarks.first
|
31
|
+
first_bookmark.class # => NetscapeBookmark
|
32
|
+
first_bookmark.url # => Url of the bookmark.
|
33
|
+
first_bookmark.title # => Title of the bookmark.
|
34
|
+
first_bookmark.tags # => Tags of the bookmark.
|
35
|
+
first_bookmark.date # => Date of the bookmark.
|
36
|
+
first_bookmark.description # => Description of the bookmark.
|
37
|
+
|
38
|
+
# To build a document.
|
39
|
+
# ary is an array of NetscapeBookmark.
|
40
|
+
document.build do
|
41
|
+
ary.each {|e| e }
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
Dependencies
|
47
|
+
--------------------------
|
48
|
+
|
49
|
+
* ruby >= 2.0.0
|
50
|
+
|
51
|
+
Contributing
|
52
|
+
-------------------------
|
53
|
+
|
54
|
+
1. Fork it
|
55
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
56
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
57
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
58
|
+
5. Create new Pull Request
|
59
|
+
|
60
|
+
|
61
|
+
License
|
62
|
+
--------------------------
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
Questions and/or Comments
|
67
|
+
--------------------------
|
68
|
+
|
69
|
+
Feel free to email [Xavier Nayrac](mailto:xavier.nayrac@gmail.com)
|
70
|
+
with any questions, or contact me on [twitter](https://twitter.com/lkdjiin).
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
desc 'Test Bookmarks'
|
7
|
+
task :default => :spec
|
8
|
+
|
9
|
+
desc 'Test Bookmarks with rspec'
|
10
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
11
|
+
t.rspec_opts = ['--color']
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'Check for code smells'
|
15
|
+
task :reek do
|
16
|
+
puts 'Checking for code smells...'
|
17
|
+
files = Dir.glob 'lib/**/*.rb'
|
18
|
+
args = files.join(' ')
|
19
|
+
sh "reek --quiet #{args} | ./reek.sed"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'Generate documentation'
|
23
|
+
task :doc do
|
24
|
+
sh "yard --plugin tomdoc"
|
25
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
module Bookmarks
|
4
|
+
|
5
|
+
# Public: Document is your main interface to the file of bookmarks
|
6
|
+
# (called «document»).
|
7
|
+
class Document
|
8
|
+
|
9
|
+
# Public: Init a new Document.
|
10
|
+
#
|
11
|
+
# format - The Symbol format of the document (Optional).
|
12
|
+
#
|
13
|
+
# Examples
|
14
|
+
#
|
15
|
+
# # The two following calls work the same way.
|
16
|
+
# Document.new
|
17
|
+
# Document.new format: :netscape
|
18
|
+
def initialize format: :netscape
|
19
|
+
@bookmarks_format = format
|
20
|
+
@document = ""
|
21
|
+
@bookmarks = []
|
22
|
+
@total = 0
|
23
|
+
end
|
24
|
+
|
25
|
+
# Public: Returns the Symbol format of the document. Currently
|
26
|
+
# there is only one format available: `:netscape`.
|
27
|
+
attr_reader :bookmarks_format
|
28
|
+
|
29
|
+
# Public: Returns the String document.
|
30
|
+
attr_reader :document
|
31
|
+
|
32
|
+
# Public: Returns an Array of NetscapeBookmark bookmarks.
|
33
|
+
attr_reader :bookmarks
|
34
|
+
|
35
|
+
# Public: Returns the Integer numbers of bookmarks in the document.
|
36
|
+
attr_reader :total
|
37
|
+
|
38
|
+
# Public: Build a document, ie build a file of bookmarks.
|
39
|
+
#
|
40
|
+
# block - A block that enumerate all NetscapeBookmark to put
|
41
|
+
# into the document.
|
42
|
+
#
|
43
|
+
# Examples
|
44
|
+
#
|
45
|
+
# # ary is an array of NetscapeBookmark.
|
46
|
+
# document.build do
|
47
|
+
# ary.each {|e| e }
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# Returns the String document.
|
51
|
+
def build &block
|
52
|
+
@document += FIRST_PART
|
53
|
+
block.call.each do |n|
|
54
|
+
@document += n.to_s + "\n"
|
55
|
+
@total += 1
|
56
|
+
end
|
57
|
+
@document += LAST_PART
|
58
|
+
end
|
59
|
+
|
60
|
+
# Public: Parse a file of bookmarks (netscape format). Bookmarks could
|
61
|
+
# then be retrieved with #bookmarks.
|
62
|
+
#
|
63
|
+
# file_path - Full String pathname of the file to parse.
|
64
|
+
#
|
65
|
+
# Returns the String document (see also #document).
|
66
|
+
def parse file_path
|
67
|
+
File.new(file_path).readlines.each {|line| parse_a_bookmark line }
|
68
|
+
@total = @bookmarks.size
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
# Parse a single line from a bookmarks file.
|
74
|
+
#
|
75
|
+
# line - String.
|
76
|
+
#
|
77
|
+
# Returns nothing.
|
78
|
+
def parse_a_bookmark line
|
79
|
+
if line =~ /^<DT>/
|
80
|
+
@bookmarks << NetscapeBookmark.from_string(line)
|
81
|
+
elsif line =~ /^<DD>/
|
82
|
+
@bookmarks.last.description = line[4..-1].chomp
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
# First part of a bookmark's file in netscape format.
|
88
|
+
FIRST_PART = <<CODE
|
89
|
+
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
90
|
+
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
91
|
+
<!-- This is an automatically generated file.
|
92
|
+
It will be read and overwritten.
|
93
|
+
Do Not Edit! -->
|
94
|
+
<TITLE>Bookmarks</TITLE>
|
95
|
+
<H1>Bookmarks</H1>
|
96
|
+
<DL><p>
|
97
|
+
CODE
|
98
|
+
|
99
|
+
# Last part of a bookmark's file in netscape format.
|
100
|
+
LAST_PART = "</DL><p>\n"
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
module Bookmarks
|
4
|
+
|
5
|
+
# Public: A single bookmark in netscape format.
|
6
|
+
class NetscapeBookmark
|
7
|
+
|
8
|
+
# Public: Init a new NetscapeBookmark.
|
9
|
+
#
|
10
|
+
# url - An optional String url.
|
11
|
+
# title - An optional String title.
|
12
|
+
# date - An optional Date/DateTime date.
|
13
|
+
# tags - An optional String tags. Tags are comma separated.
|
14
|
+
# description - An optional String description.
|
15
|
+
def initialize url: "", title: "", date: nil, tags: "", description: ""
|
16
|
+
@url = url
|
17
|
+
@title = title
|
18
|
+
@date = date
|
19
|
+
@tags = tags
|
20
|
+
@description = description
|
21
|
+
end
|
22
|
+
|
23
|
+
# Public: Initialize a new NetscapeBookmark object from a line from
|
24
|
+
# a bookmarks file.
|
25
|
+
#
|
26
|
+
# line - String line from a bookmarks file.
|
27
|
+
#
|
28
|
+
# Returns a new NetscapeBookmark object.
|
29
|
+
def self.from_string line
|
30
|
+
url = /HREF="(.*?)"/.match(line)[1]
|
31
|
+
title = /HREF=.*>(.*)<\/A>$/.match(line)[1]
|
32
|
+
date = /ADD_DATE="(.*?)"/.match(line)[1]
|
33
|
+
date = Time.at(date.to_i).to_s
|
34
|
+
tags = /TAGS="(.*?)"/.match(line)[1]
|
35
|
+
title = prettify_title title, url
|
36
|
+
new url: url, title: title, date: date, tags: tags
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# Public: Set/get the String url.
|
41
|
+
attr_accessor :url
|
42
|
+
|
43
|
+
# Public: Set/get the String title.
|
44
|
+
attr_accessor :title
|
45
|
+
|
46
|
+
# Public: Set/get the Date/DateTime date.
|
47
|
+
attr_accessor :date
|
48
|
+
|
49
|
+
# Public: Set/get the String tags.
|
50
|
+
attr_accessor :tags
|
51
|
+
|
52
|
+
# Public: Set/get the String description.
|
53
|
+
attr_accessor :description
|
54
|
+
|
55
|
+
# Public: Returns the bookmark as a String.
|
56
|
+
def to_s
|
57
|
+
str = "<DT><A HREF=\"#{@url}\" " +
|
58
|
+
"ADD_DATE=\"#{@date.nil? ? "" : @date.to_time.to_i}\" " +
|
59
|
+
"TAGS=\"#{@tags}\">" +
|
60
|
+
(@title.empty? ? 'None' : @title) + "</A>"
|
61
|
+
if @description.empty?
|
62
|
+
str
|
63
|
+
else
|
64
|
+
str + "\n<DD>#{@description}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# In some case (which?) Delicious miss the title and we have a crapy
|
69
|
+
# 'None' instead of the original title. Bad news is the original title
|
70
|
+
# is lost. And there is no good news :) In such case, we build a new
|
71
|
+
# title from the url.
|
72
|
+
#
|
73
|
+
# Examples
|
74
|
+
#
|
75
|
+
# # Before expand_title
|
76
|
+
# @title # => 'None'
|
77
|
+
# @url # => "http://designmodo.com/flat-design-colors/"
|
78
|
+
# # After expand_title
|
79
|
+
# @title # => 'flat design colors'
|
80
|
+
#
|
81
|
+
# Returns String prettified title.
|
82
|
+
def self.prettify_title title, url
|
83
|
+
return title unless title == '' || title == 'None'
|
84
|
+
title = url
|
85
|
+
# Remove '/' at the end if it exists.
|
86
|
+
title = title.gsub(/\/$/, '')
|
87
|
+
# Keep the last element of the url.
|
88
|
+
title = title.match(/^.*\/(.*)/)[1]
|
89
|
+
# Substitute each '-' by a space.
|
90
|
+
title = title.gsub('-', ' ')
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
data/lib/bookmarks.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.dirname(__FILE__)
|
4
|
+
$BOOKMARKS_PATH = File.expand_path(File.expand_path(File.dirname(__FILE__)) + '/..')
|
5
|
+
|
6
|
+
require 'bookmarks/document'
|
7
|
+
require 'bookmarks/netscape_bookmark'
|
8
|
+
|
9
|
+
# Public: Bookmarks is a library to parse or build a file of bookmarks.
|
10
|
+
module Bookmarks
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bookmarks
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Xavier Nayrac
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: coco
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.7.1
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.7.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: yard
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard-tomdoc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: |-
|
70
|
+
Bookmarks is a library to parse or build a file of
|
71
|
+
bookmarks, currently only files in netscape format, like the ones
|
72
|
+
exported by Delicious.
|
73
|
+
email: xavier.nayrac@gmail.com
|
74
|
+
executables: []
|
75
|
+
extensions: []
|
76
|
+
extra_rdoc_files: []
|
77
|
+
files:
|
78
|
+
- lib/bookmarks.rb
|
79
|
+
- lib/bookmarks/document.rb
|
80
|
+
- lib/bookmarks/netscape_bookmark.rb
|
81
|
+
- Changelog.markdown
|
82
|
+
- Gemfile
|
83
|
+
- Gemfile.lock
|
84
|
+
- README.markdown
|
85
|
+
- Rakefile
|
86
|
+
- TODO
|
87
|
+
- VERSION
|
88
|
+
homepage: https://github.com/lkdjiin/bookmarks
|
89
|
+
licenses:
|
90
|
+
- MIT
|
91
|
+
metadata: {}
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 2.0.0
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - '>='
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
requirements: []
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 2.0.3
|
109
|
+
signing_key:
|
110
|
+
specification_version: 4
|
111
|
+
summary: Bookmarks is a library to parse or build a file of bookmarks.
|
112
|
+
test_files: []
|
113
|
+
has_rdoc:
|