hippomarkio 0.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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/Guardfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +67 -0
- data/Rakefile +6 -0
- data/hippomarkio.gemspec +25 -0
- data/lib/markio.rb +9 -0
- data/lib/markio/bookmark.rb +22 -0
- data/lib/markio/builder.rb +80 -0
- data/lib/markio/parser.rb +76 -0
- data/lib/markio/version.rb +3 -0
- data/spec/assets/corrupted.html +11 -0
- data/spec/assets/delicious_bookmarks.html +15 -0
- data/spec/assets/many_bookmarks.html +26 -0
- data/spec/assets/nested_bookmarks.html +36 -0
- data/spec/assets/one_bookmark.html +10 -0
- data/spec/builder_spec.rb +121 -0
- data/spec/parser_spec.rb +58 -0
- data/spec/spec_helper.rb +9 -0
- metadata +127 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 0daf3f8662d3d1f055b778cbe64e49a38e8277ab3767bb71a1d8c090c9e47768
|
|
4
|
+
data.tar.gz: b0d688e480e62bfc11750149167cfeaeb3f546efd1e80fdbb6d7d5686882f0e3
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: e230792318e9f9ab30e529ef40650401de65930b16a3ba1ea22afea7d08e7aad79dbb486a53eeac9a352a641bc89586ed9d479fcae9413a1d63db4b25c8bdef8
|
|
7
|
+
data.tar.gz: 0da33b00401b0a0c44d8162d1da7f06bf34323da84c9174eae3d3cb51d05833382c868f1ebd3a593cf2cb507930720fdc6b22d2819c85158144a9f68c60c087f
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2020 HippoHack
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Markio
|
|
2
|
+
|
|
3
|
+
A Ruby Gem for parsing [Netscape Bookmark File Format](http://msdn.microsoft.com/en-us/library/aa753582\(v=vs.85\).aspx)
|
|
4
|
+
|
|
5
|
+
[](http://badge.fury.io/rb/markio)
|
|
6
|
+
[](https://travis-ci.org/spajus/markio)
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
Add this line to your application's Gemfile:
|
|
11
|
+
|
|
12
|
+
```ruby
|
|
13
|
+
gem 'markio'
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
And then execute:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
$ bundle
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or install it yourself as:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
$ gem install markio
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
### Parsing bookmarks file
|
|
31
|
+
|
|
32
|
+
```ruby
|
|
33
|
+
bookmarks = Markio::parse(File.open('/path/to/bookmarks.html'))
|
|
34
|
+
bookmarks.each do |b|
|
|
35
|
+
b.title # String
|
|
36
|
+
b.href # String with bookmark URL
|
|
37
|
+
b.folders # Array of strings - folders (tags)
|
|
38
|
+
b.add_date # DateTime
|
|
39
|
+
b.last_visit # DateTime
|
|
40
|
+
b.last_modified # DateTime
|
|
41
|
+
end
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Building bookmarks file
|
|
45
|
+
|
|
46
|
+
```ruby
|
|
47
|
+
builder = Markio::Builder.new
|
|
48
|
+
builder.bookmarks << Markio::Bookmark.create({
|
|
49
|
+
:title => "Google",
|
|
50
|
+
:href => "http://google.com"
|
|
51
|
+
})
|
|
52
|
+
file_contents = builder.build_string
|
|
53
|
+
File.open('/path/to/bookmarks.html', 'w') { |f| f.write file_contents }
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## TODO
|
|
57
|
+
|
|
58
|
+
- Builder output to file
|
|
59
|
+
- Builder should not ignore bookmark folders
|
|
60
|
+
|
|
61
|
+
## Contributing
|
|
62
|
+
|
|
63
|
+
1. Fork it
|
|
64
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
65
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
66
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
67
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/hippomarkio.gemspec
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'markio/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |gem|
|
|
7
|
+
gem.name = "hippomarkio"
|
|
8
|
+
gem.version = Markio::VERSION
|
|
9
|
+
gem.authors = ["hippohack"]
|
|
10
|
+
gem.email = ["benzoh.g@gmail.com"]
|
|
11
|
+
gem.description = %q{Import/export utility for Netscape Bookmark Format}
|
|
12
|
+
gem.summary = %q{Handles parsing and building Netscabe Bookmark Format in Ruby way.}
|
|
13
|
+
gem.homepage = "https://github.com/hippohack/hippomarkio"
|
|
14
|
+
|
|
15
|
+
gem.files = `git ls-files`.split($/)
|
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
18
|
+
gem.require_paths = ["lib"]
|
|
19
|
+
|
|
20
|
+
gem.add_dependency 'nokogiri'
|
|
21
|
+
gem.add_development_dependency 'rspec', '~> 2.11'
|
|
22
|
+
gem.add_development_dependency 'pry-nav'
|
|
23
|
+
gem.add_development_dependency 'guard-rspec'
|
|
24
|
+
|
|
25
|
+
end
|
data/lib/markio.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
class Markio::Bookmark
|
|
3
|
+
|
|
4
|
+
attr_accessor :title, :href, :add_date, :last_visit, :last_modified, :folders
|
|
5
|
+
|
|
6
|
+
def self.create data
|
|
7
|
+
bookmark = new
|
|
8
|
+
bookmark.title = data[:title]
|
|
9
|
+
bookmark.href = data[:href]
|
|
10
|
+
bookmark.add_date = data[:add_date] || DateTime.now
|
|
11
|
+
bookmark.last_visit = data[:add_date]
|
|
12
|
+
bookmark.last_modified = data[:last_modified]
|
|
13
|
+
bookmark.folders = data[:folders] || []
|
|
14
|
+
bookmark
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def == other
|
|
18
|
+
unless other.nil? or other.class != self.class
|
|
19
|
+
other.href == href and other.title == title
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require 'nokogiri'
|
|
2
|
+
|
|
3
|
+
class Markio::Builder
|
|
4
|
+
|
|
5
|
+
attr_accessor :bookmarks
|
|
6
|
+
|
|
7
|
+
def initialize(options = {})
|
|
8
|
+
@title = options[:title] || 'Bookmarks'
|
|
9
|
+
@bookmarks = []
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def build_string
|
|
13
|
+
build
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def build_file(file)
|
|
17
|
+
File.new(file, 'w') do |f|
|
|
18
|
+
f.write build
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def build
|
|
25
|
+
|
|
26
|
+
bookmarks = { nil => [] }
|
|
27
|
+
@bookmarks.each do |b|
|
|
28
|
+
|
|
29
|
+
if b.folders.any?
|
|
30
|
+
b.folders.each do |f|
|
|
31
|
+
bookmarks[f] ||= []
|
|
32
|
+
bookmarks[f] << b
|
|
33
|
+
end
|
|
34
|
+
else
|
|
35
|
+
bookmarks[nil] << b
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
docparts = Nokogiri::HTML::DocumentFragment.parse ''
|
|
40
|
+
Nokogiri::HTML::Builder.with(docparts) do |html|
|
|
41
|
+
html.comment <<END
|
|
42
|
+
This is an automatically generated file.
|
|
43
|
+
It will be read and overwritten.
|
|
44
|
+
DO NOT EDIT!
|
|
45
|
+
END
|
|
46
|
+
html.meta('HTTP-EQUIV' => 'Content-Type', 'CONTENT' => 'text/html; charset=UTF-8')
|
|
47
|
+
html.title @title
|
|
48
|
+
html.dl {
|
|
49
|
+
html.p
|
|
50
|
+
bookmarks.keys.each do |f|
|
|
51
|
+
unless f.nil?
|
|
52
|
+
html.dt {
|
|
53
|
+
html.h3 f
|
|
54
|
+
html.dl {
|
|
55
|
+
html.p
|
|
56
|
+
bookmarks[f].each { |b| build_bookmark html, b }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else
|
|
60
|
+
bookmarks[nil].each { |b| build_bookmark html, b }
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
"<!DOCTYPE NETSCAPE-Bookmark-file-1>\n" << docparts.to_html
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
def build_bookmark(html, b)
|
|
72
|
+
html.dt {
|
|
73
|
+
params = { :href => b.href }
|
|
74
|
+
params[:add_date] = b.add_date.to_time.to_i if b.add_date
|
|
75
|
+
params[:last_visit] = b.last_visit.to_time.to_i if b.last_visit
|
|
76
|
+
params[:last_modified] = b.last_modified.to_time.to_i if b.last_modified
|
|
77
|
+
html.a(b.title, params)
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'nokogiri'
|
|
2
|
+
require 'date'
|
|
3
|
+
module Markio
|
|
4
|
+
class Parser
|
|
5
|
+
|
|
6
|
+
def initialize data
|
|
7
|
+
@document = Nokogiri::HTML data
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse
|
|
11
|
+
bookmarks = []
|
|
12
|
+
traverse(@document, []) do |bookmark|
|
|
13
|
+
bookmarks << bookmark
|
|
14
|
+
end
|
|
15
|
+
consolidate bookmarks
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def traverse node, folders, &block
|
|
21
|
+
node.xpath("./*").each do |child|
|
|
22
|
+
case child.name.downcase
|
|
23
|
+
when 'dl'
|
|
24
|
+
traverse child, folders, &block
|
|
25
|
+
folders.pop
|
|
26
|
+
when 'a'
|
|
27
|
+
yield parse_bookmark(child, folders)
|
|
28
|
+
when 'h3'
|
|
29
|
+
folders << child.text
|
|
30
|
+
else
|
|
31
|
+
if child.children.any?
|
|
32
|
+
traverse child, folders, &block
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def parse_bookmark(node, folders)
|
|
40
|
+
data = {}
|
|
41
|
+
node.attributes.each do |k, a|
|
|
42
|
+
data[k.downcase] = a.value
|
|
43
|
+
end
|
|
44
|
+
bookmark = Bookmark.new
|
|
45
|
+
bookmark.href = data['href']
|
|
46
|
+
bookmark.title = node.text
|
|
47
|
+
bookmark.folders = (Array.new(folders) + parse_tags(data['tags'])).uniq
|
|
48
|
+
bookmark.add_date = parse_timestamp data['add_date']
|
|
49
|
+
bookmark.last_visit = parse_timestamp data['last_visit']
|
|
50
|
+
bookmark.last_modified = parse_timestamp data['last_modified']
|
|
51
|
+
bookmark
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def parse_timestamp(timestamp)
|
|
55
|
+
Time.at(timestamp.to_i).to_datetime if timestamp
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def parse_tags(tags)
|
|
59
|
+
tags ? tags.split(/,/x) : []
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def consolidate(bookmarks)
|
|
63
|
+
consolidated = []
|
|
64
|
+
bookmarks.each do |b|
|
|
65
|
+
index = consolidated.index b
|
|
66
|
+
unless index.nil?
|
|
67
|
+
consolidated[index].folders += b.folders
|
|
68
|
+
else
|
|
69
|
+
consolidated << b
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
consolidated
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
This archive contains a snapshot release of MacVim 7.3. It requires
|
|
2
|
+
Mac OS X 10.8 (Mountain Lion) or later. It will NOT run on earlier versions of
|
|
3
|
+
Mac OS X!
|
|
4
|
+
|
|
5
|
+
To install, drag the MacVim icon into the Applications folder.
|
|
6
|
+
|
|
7
|
+
For usage instructions, please start MacVim and type ":h macvim" (without the
|
|
8
|
+
quotes).
|
|
9
|
+
|
|
10
|
+
This archive also contains the script "mvim" which can be used to start MacVim
|
|
11
|
+
from Terminal. Type ":h mvim" in MacVim for help on how to install it.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
|
2
|
+
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
|
3
|
+
<!-- This is an automatically generated file.
|
|
4
|
+
It will be read and overwritten.
|
|
5
|
+
Do Not Edit! -->
|
|
6
|
+
<TITLE>Bookmarks</TITLE>
|
|
7
|
+
<H1>Bookmarks</H1>
|
|
8
|
+
<DL><p>
|
|
9
|
+
<DT><A HREF="http://www.gojee.com/" ADD_DATE="1321971101" PRIVATE="0" TAGS="food,drinks,ingredients,visual,recipes">Gojee</A>
|
|
10
|
+
<DD>Choose what you crave, what you have and what you dislike to get the perfect dish suited to your needs!
|
|
11
|
+
<DT><A HREF="http://banksimple.com/blog/BankSimple/a-first-look-at-BankSimple/" ADD_DATE="1316646441" PRIVATE="0" TAGS="banking,Test!">A First Look at BankSimple | BankSimple Blog</A>
|
|
12
|
+
<DT><A HREF="http://djangostyle.com/" ADD_DATE="1315576821" PRIVATE="0" TAGS="django,heroku,publishing,Test!">DjangoStyle</A>
|
|
13
|
+
<DT><A HREF="http://fornoobs.info/2009/10/php5-not-enabled-by-default-in-snow-leopard-osx-10-6-1/" ADD_DATE="1310999555" PRIVATE="0" TAGS="mac,osx,snowleopard,php,php5,Test!">PHP5 not enabled by default in Snow Leopard (OSX 10.6.1) — fornOObs.info</A>
|
|
14
|
+
<DT><A HREF="http://www.domalomenos.com/1601297/" ADD_DATE="1310722961" PRIVATE="1" TAGS="architecture,design,coimbra">001. João Mendes Ribeiro - Casa da Escrita - do mal o menos</A>
|
|
15
|
+
</DL><p>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
|
2
|
+
<!-- This is an automatically generated file.
|
|
3
|
+
It will be read and overwritten.
|
|
4
|
+
DO NOT EDIT! -->
|
|
5
|
+
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
|
6
|
+
<TITLE>Bookmarks</TITLE>
|
|
7
|
+
<H1>Bookmarks</H1>
|
|
8
|
+
<DL><p>
|
|
9
|
+
<DT><H3 ADD_DATE="1350296505" LAST_MODIFIED="1350743233" PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Bar</H3>
|
|
10
|
+
<DL><p>
|
|
11
|
+
<DT><A HREF="javascript:var%20d%3Ddocument,w%3Dwindow,e%3Dw.getSelection,k%3Dd.getSelection,x%3Dd.selection,s%3D(e%3Fe():(k)%3Fk():(x%3Fx.createRange().text:0)),f%3D%27http://www.tumblr.com/share%27,l%3Dd.location,e%3DencodeURIComponent,p%3D%27%3Fv%3D3%26u%3D%27%2Be(l.href)%20%2B%27%26t%3D%27%2Be(d.title)%20%2B%27%26s%3D%27%2Be(s),u%3Df%2Bp%3Btry%7Bif(!/%5E(.*%5C.)%3Ftumblr%5B%5E.%5D*%24/.test(l.host))throw(0)%3Btstbklt()%3B%7Dcatch(z)%7Ba%20%3Dfunction()%7Bif(!w.open(u,%27t%27,%27toolbar%3D0,resizable%3D0,status%3D1,width%3D450,height%3D430%27))l.href%3Du%3B%7D%3Bif(/Firefox/.test(navigator.userAgent))setTimeout(a,0)%3Belse%20a()%3B%7Dvoid(0)" ADD_DATE="1350296576" TAGS="Bookmarks Bar">Share on Tumblr</A>
|
|
12
|
+
<DT><A HREF="http://192.168.0.111/webman/index.cgi" ADD_DATE="1350296576" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHUlEQVQ4jWM8f/+9w5rTL+qvPfniwEAC0JLhORBiKtHIsvLE0/qrjz+TpJmBgYHh0oMPDn///mVg9Gw7/J9UzciA5e+fP5ToZ2D5Q6EBDHbV2/8jA7vq7f/tqrf/P3zpGYoYjI9M21Vv/88Ec4F1xRYG64otDAdbPBj+/PnDYKMrCRdD5iPTf/78YYAb8OfPHwZk9pHLzxmOdvgwdEYbo4ij0/BARA7Mv3/+MBTMPcrAwMDAcGZCCAO6GmQaHohnJoQwMDAwMBjkrGBgYGBguDAlgoGBgYHhyOXnKDbC5GF8Ru30xZSlA0qjkeXP3wFOSEwmKuIH/v75w0AONlERP8A8a3LHw4cvPik8evVB4d+/fwzEYjN1qQNFocaNAHb5GMnZ0/wiAAAAAElFTkSuQmCC">Synology DiskStation - DiskStation</A>
|
|
13
|
+
<DT><A HREF="http://www.ruby-doc.org/core-1.9.3/" ADD_DATE="1350572675" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHGlET1QAAAACAAAAAAAAAAgAAAAoAAAACAAAAAgAAAGXIcUm9AAAAWNJREFUOBFsj8tKAlEYx49d3IUIgV1HnRkv44yXoJ2P4Cv0Cr1CCO2CWrjpGRJaRENlkWREELQp6GZJSRCWYOaoM9rUv3OmTLssPr5z+/3+3yEAyJ8iZJCdaSFhFtMKai5HFcspGHeFhPU2ne7vMP/BA+yyHhJnEAugHg3qtYlh6PNzOs5O0VxdiVtwMtnH+k8BIZa5ofAJBmuyoGuxIF7GnGilltA+PjKwn0UroypfE9i6AkIsY00W4layLOp0jeaUhHuXA5XFBSB/CSOz0UYuC31nnetOQIiNbTRJUBClY8uiweCGIqIUDeJ8yA5NXQPKT3g9yKG1s2VidxtQVef3BBWZ5xDxQ1PEdgd+lHhc+d0oBjw45Mex6R6x6sLHmaWgF0WO+xRUw5zzLeyjsGAyuE6TyyEeeQoXKNxb1/TsWebN94gPjCOQiZ2msmRYf6b9QfJizzOKE3ESt1Rw0yP6LfgAAAD//2YravMAAAC6SURBVKWROwvCQBCEr7K3VYx5Bz3jr7ay8Ef4QO1EOQOaYCuI+IpddNyVBBQDGiyWgePmu9k5ASlKl5aNs7RwJd02DPSNCiZmFUPSuV3DxtMRunVEpGvSgzSTe9vB0dfKggGZedc0MUjNYwLwMGSRQiKvng+I6eU9mflyZnxVPleO9kyyykvwDZAlCQgSuvrnCr8AGDKiJEuCnKT13gGXWGys5OanJapZt6CZfozMsa0hmHYglOrhn3kAF/hUdfHDKLMAAAAASUVORK5CYII=">Index of Classes & Methods in Ruby 1.9.3 (Ruby 1.9.3)</A>
|
|
14
|
+
<DT><A HREF="http://guides.rubyonrails.org/" ADD_DATE="1350296576">Ruby on Rails Guides</A>
|
|
15
|
+
<DT><A HREF="http://lvh.me:3000/" ADD_DATE="1350296576" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACyklEQVQ4jXWSXWxUVRSFv3vOvXc6w51pO1MoSVtwqs1ghYgOf33QIBISjY0RMglNADUaEx9IlMTEmJiY+KZvAkr4DQQEBKTA9KGJRJ4wUh8I1hZTIBOorUpT4rSdzs+9Z/tQmUwK7mQle5+TtdbeZx+oicPdbNj7Kitrzz7rIn62x90mIhb/FxnQv79PVj5Fyp9Q+OoVOgG+WM/iPz/khnzZJtld6czjuBpgx0baup9it2WhtIXT4rH6+WbGty7nXFMslCLWQqvnv9zxZOexCwO56VoBBfDxD9ztvcm7QUAZA60ea7YtJ9sYIokTg8DgWmZB2Ew3PbYDgO+GuZ6M8fPKZrZXby0FkSZQmr6R0ptb9v12eb6Aqi3qFB4GqrDcOQ/fZ6FjngW4+dET50+/0/Fi1eNhcvI13sgs45S2cKuKoShEEnO5CKNT8lNrTHVNlczYwSGzYteZ0UkNcK6bt7Z0cFxbOAhUYYdBOWAMiBBzpA1jCCmJuhLU7x+Y7rMzoFct4j0FGjNnFghlbeFiAN9/ZHUVQ3HoL+sQgB4CaShzekmcdY0hkggcGOSFgXG+6VwY2uwqK4Ix1KL/dmVn5sz9i9UtXLlPOV7hlONSdy/P1c19HOnLMf5ScoG0e8GmWvJU0R9fcfCfnkcecX799XrWbl0WOtEYcdrnj3Dtb7Nn7fHCzocEC1DpdFq5rmvPzMyoVH0hcvKZW6Patl20PTd3YGYHH6je55royZcYq99XbAGw0+m0bdt22PO8cBAE4Wg0WvfAGCf7x9iJ11uLbyMBAEdGIh98b607+3nlx+JInux/f8joVCrlKqViQIPrugkRaRaR9l+CpbMT+aLdFcsn+8fqvj1QWnMUMJdnl17qvSPDk5OTBhCdSCQsz/MolUqilKporYsikgcmbsmi4V8n/GtZ/+mjvqh8oVAoViqVUjwe93O5nAH4F06pHMB3vhJeAAAAAElFTkSuQmCC">lvh.me:3000</A>
|
|
16
|
+
<DT><A HREF="javascript:function%20bm_add_newphsvuf2h()%7Bvar%20d%20%3D%20document%3Bvar%20el%20%3D%20d.getElementById(%27bm-notification-id%27)%3Bif%20(el%20%3D%3D%20null)%7Bel%20%3D%20d.createElement(%27div%27)%3Bel.setAttribute(%27id%27,%27bm-notification-id%27)%3Bd.body.appendChild(el)%3B%7Del.innerHTML%20%3D%20%27%3Cstyle%20id%3D%22saveitin-div-style%22%3E%20%20%20%20%23saveitin-top-div%7Bpadding:%2010px%3B-moz-box-shadow:%200%3Bposition:%20fixed%3Btop:%200%3Bz-index:%2099999%3Bmin-height:%2034px%3Bbackground:%20white%3Bwidth:%20100%25%3B-moz-box-shadow:%200%200%2025px%20%23666%3B-webkit-box-shadow:%200%200%2025px%20%23666%3Bbox-shadow:%200%200%2025px%20%23666%3Bfont-family:%20Arial,sans-serif%3Bfont-size:%2012px%3Bcolor:%23333%3Bline-height:18px%3B/*text-align:center%3B*/%20%20%20%20%20%20%20%20vertical-align:middle%3B%7D%23saveitin-inner-div%7Bmargin-left:%20auto%3Bmargin-right:%20auto%3Bwidth:%2050em%3B%7D/*%23saveitin-top-div%20h4%7B*/%20%20%20%20%20%20%20%20/*text-align:%20center%3B*/%20%20%20%20/*%7D*/%20%20%20%20%23saveitin-top-div%20input%5Btype%3Dsubmit%5D,%23saveitin-top-div%20input%5Btype%3Dbutton%5D%7Bbackground-color:%20%2314B1E5%3B-webkit-border-image:%20none%3Bbackground-image:%20-moz-linear-gradient(%231BB8EC,%230AA7DB)%3Bbackground-image:%20-ms-linear-gradient(%231BB8EC,%230AA7DB)%3Bbackground-image:%20-o-linear-gradient(%231BB8EC,%230AA7DB)%3Bbackground-image:%20-webkit-linear-gradient(top,%231BB8EC,%230AA7DB)%3Bbackground-repeat:%20repeat-x%3Bborder:%201px%20solid%20%230AA7DB%3Bborder-radius:%204px%3B-moz-border-radius:%204px%3B-o-border-radius:%204px%3B-webkit-border-radius:%204px%3Bcolor:%20white%3Bfont-family:%20HelveticaNeue-Light,%22Helvetica%20Neue%20Light%22,%22Helvetica%20Neue%22,Arial,Helvetica,sans-serif%3Bfont-weight:%20bold%3Bfont-height:%2013px%3Bpadding:%204px%2010px%3Btext-align:%20center%3Btext-decoration:%20none%3Btext-shadow:%20rgba(0,0,0,0.246094)%200px%20-1px%200px%3Bvertical-align:%20middle%3B%7D%23saveitin-form%7Bdisplay:%20none%3B%7D%23saveitin-form%20label%7Btext-align:%20right%3Bdisplay:%20inline-block%3Bwidth:%208em%3B%7D%23saveitin-form%20input%7Bborder:%201px%20solid%20%23ccc%3Bbackground-color:%20%23fff%3Btext-align:%20left%3Bdisplay:%20inline-block%3B%7D%3C/style%3E%3Cdiv%20id%3D%22saveitin-top-div%22%3E%20%20%3Cdiv%20id%3D%22saveitin-inner-div%22%3E%20%20%20%20%20%20%20%20%3Ch4%3ELoading...%3C/h4%3E%20%20%20%20%3C/div%3E%3C/div%3E%27%3Btry%7Bs%3Dd.createElement(%27sc%27%20%2B%20%27ript%27),l%3Dd.location,t%3Dd.getElementsByTagName(%27title%27)%5B0%5D%3Bvar%20m%3D%20d.getElementsByTagName(%27meta%27)%3Bvar%20desc%20%3D%20%27%27%3Bfor%20(var%20i%20%3D%200%3Bi%20%3C%20m.length%3Bi%2B%2B)%7Bvar%20n%20%3D%20m%5Bi%5D%5B%27name%27%5D%20%7C%7C%20m%5Bi%5D.getAttribute(%27property%27)%3Bif%20(n%20%26%26%20(n.toLowerCase().indexOf(%27description%27)%20!%3D%20-1))%7Bvar%20cnt%20%3D%20m%5Bi%5D%5B%27content%27%5D%3Bif%20(cnt%20%26%26%20(cnt.length%20%3E%20desc.length))%7Bdesc%20%3D%20cnt%3B%7D%7D%7Dif%20(!l%20%7C%7C%20l%20%3D%3D%20%22about:blank%22)%7Bwindow.location.assign(%27https://saveit.in/%27)%3B%7Ds.setAttribute(%27src%27,%27https://saveit.in/bookmarklet%3Fb%3D%27%2B%20encodeURIComponent(l.href)%2B%20%27%26t%3D%27%20%2B%20encodeURIComponent(t%20%3F%20t.innerHTML%20:%20l.href)%2B%20%27%26d%3D%27%20%2B%20encodeURIComponent(desc)%2B%20%27%26s%3D%27%2B(new%20Date().getTime()))%3Bif%20(d.body)%7Bd.body.appendChild(s)%3B%7Delse%7Bwindow.onload%20%3D%20function()%7Bd.body.appendChild(s)%3B%7D%3B%7D%7Dcatch(e)%7Balert(%27error:%20%27%20%2B%20e)%3Bwindow.location.assign(%27https://saveit.in/bookmarklet/failover%3Fb%3D%27%2B%20encodeURIComponent(l.href))%3B%7D%7D%3Bbm_add_newphsvuf2h()%3B" ADD_DATE="1350296576">Save It</A>
|
|
17
|
+
<DT><A HREF="javascript:function%20bm_add_new3nrzr6u4()%7Bvar%20d%20%3D%20document%3Bvar%20el%20%3D%20d.getElementById(%27bm-notification-id%27)%3Bif%20(el%20%3D%3D%20null)%7Bel%20%3D%20d.createElement(%27div%27)%3Bel.setAttribute(%27id%27,%27bm-notification-id%27)%3Bd.body.appendChild(el)%3B%7Del.innerHTML%20%3D%20%27%3Cstyle%20id%3D%22saveitin-div-style%22%3E%20%20%20%20%23saveitin-top-div%7Bpadding:%2010px%3B-moz-box-shadow:%200%3Bposition:%20fixed%3Btop:%200%3Bz-index:%2099999%3Bmin-height:%2034px%3Bbackground:%20white%3Bwidth:%20100%25%3B-moz-box-shadow:%200%200%2025px%20%23666%3B-webkit-box-shadow:%200%200%2025px%20%23666%3Bbox-shadow:%200%200%2025px%20%23666%3Bfont-family:%20Arial,sans-serif%3Bfont-size:%2012px%3Bcolor:%23333%3Bline-height:18px%3B/*text-align:center%3B*/%20%20%20%20%20%20%20%20vertical-align:middle%3B%7D%23saveitin-inner-div%7Bmargin-left:%20auto%3Bmargin-right:%20auto%3Bwidth:%2050em%3B%7D/*%23saveitin-top-div%20h4%7B*/%20%20%20%20%20%20%20%20/*text-align:%20center%3B*/%20%20%20%20/*%7D*/%20%20%20%20%23saveitin-top-div%20input%5Btype%3Dsubmit%5D,%23saveitin-top-div%20input%5Btype%3Dbutton%5D%7Bbackground-color:%20%2314B1E5%3B-webkit-border-image:%20none%3Bbackground-image:%20-moz-linear-gradient(%231BB8EC,%230AA7DB)%3Bbackground-image:%20-ms-linear-gradient(%231BB8EC,%230AA7DB)%3Bbackground-image:%20-o-linear-gradient(%231BB8EC,%230AA7DB)%3Bbackground-image:%20-webkit-linear-gradient(top,%231BB8EC,%230AA7DB)%3Bbackground-repeat:%20repeat-x%3Bborder:%201px%20solid%20%230AA7DB%3Bborder-radius:%204px%3B-moz-border-radius:%204px%3B-o-border-radius:%204px%3B-webkit-border-radius:%204px%3Bcolor:%20white%3Bfont-family:%20HelveticaNeue-Light,%22Helvetica%20Neue%20Light%22,%22Helvetica%20Neue%22,Arial,Helvetica,sans-serif%3Bfont-weight:%20bold%3Bfont-height:%2013px%3Bpadding:%204px%2010px%3Btext-align:%20center%3Btext-decoration:%20none%3Btext-shadow:%20rgba(0,0,0,0.246094)%200px%20-1px%200px%3Bvertical-align:%20middle%3B%7D%23saveitin-form%7Bdisplay:%20none%3B%7D%23saveitin-form%20label%7Btext-align:%20right%3Bdisplay:%20inline-block%3Bwidth:%208em%3B%7D%23saveitin-form%20input%7Bborder:%201px%20solid%20%23ccc%3Bbackground-color:%20%23fff%3Btext-align:%20left%3Bdisplay:%20inline-block%3B%7D%3C/style%3E%3Cdiv%20id%3D%22saveitin-top-div%22%3E%20%20%3Cdiv%20id%3D%22saveitin-inner-div%22%3E%20%20%20%20%20%20%20%20%3Ch4%3ELoading...%3C/h4%3E%20%20%20%20%3C/div%3E%3C/div%3E%27%3Btry%7Bs%3Dd.createElement(%27sc%27%20%2B%20%27ript%27),l%3Dd.location,t%3Dd.getElementsByTagName(%27title%27)%5B0%5D%3Bvar%20m%3D%20d.getElementsByTagName(%27meta%27)%3Bvar%20desc%20%3D%20%27%27%3Bfor%20(var%20i%20%3D%200%3Bi%20%3C%20m.length%3Bi%2B%2B)%7Bvar%20n%20%3D%20m%5Bi%5D%5B%27name%27%5D%20%7C%7C%20m%5Bi%5D.getAttribute(%27property%27)%3Bif%20(n%20%26%26%20(n.toLowerCase().indexOf(%27description%27)%20!%3D%20-1))%7Bvar%20cnt%20%3D%20m%5Bi%5D%5B%27content%27%5D%3Bif%20(cnt%20%26%26%20(cnt.length%20%3E%20desc.length))%7Bdesc%20%3D%20cnt%3B%7D%7D%7Dif%20(!l%20%7C%7C%20l%20%3D%3D%20%22about:blank%22)%7Bwindow.location.assign(%27http://dev.saveit.in:3000/%27)%3B%7Ds.setAttribute(%27src%27,%27http://dev.saveit.in:3000/bookmarklet%3Fb%3D%27%2B%20encodeURIComponent(l.href)%2B%20%27%26t%3D%27%20%2B%20encodeURIComponent(t%20%3F%20t.innerHTML%20:%20l.href)%2B%20%27%26d%3D%27%20%2B%20encodeURIComponent(desc)%2B%20%27%26s%3D%27%2B(new%20Date().getTime()))%3Bif%20(d.body)%7Bd.body.appendChild(s)%3B%7Delse%7Bwindow.onload%20%3D%20function()%7Bd.body.appendChild(s)%3B%7D%3B%7D%7Dcatch(e)%7Balert(%27error:%20%27%20%2B%20e)%3Bwindow.location.assign(%27http://dev.saveit.in:3000/bookmarklet/failover%3Fb%3D%27%2B%20encodeURIComponent(l.href))%3B%7D%7D%3Bbm_add_new3nrzr6u4()%3B" ADD_DATE="1350296576">Save It Dev</A>
|
|
18
|
+
<DT><A HREF="http://localhost:3000" ADD_DATE="1350487106" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHGlET1QAAAACAAAAAAAAAAgAAAAoAAAACAAAAAgAAAI+peJuewAAAgpJREFUOBE8T89P0nEY/nqq/8Brrrp76NKhrWamM8fqq5UidbBNEjHRaIiooWAxhCQCayPHb2JqwFdTFFs2I2urnPMgm2aSIEKJOIoYPz7vG3Lo2Z4fh+d9t4dCRAopqqTohVw29Kn0nGW5qo8nFm7X1jPxa5zPscvsUErcmnjnF/8ov0/7TvGrWUf9Akr+H0fc3ZeiUa1jJaBf+7hhjGuN/ZnBZgFo2iSgbhGBStALNuso8b4YyS+Zn+2HnHZ+8cmRBFnspkN+K2ZDTxBzetwNKpBWcLCyR4gNopECVXhdY8F25zz+dDF5nPNi8qUjG+JyT1PbJ84fD11tXI7XNGFY3JKJ7w2True34cxdGnTMGNbyu0Bn9oDy/Regx33wyOODhJvJpe5JMXiBZlNRYW9ZTCLdSPTLICl5QBbscnJR1Qd1aimsh7/D9IdF2InE0OR0oUAsg84BNfj1Qzkib4aQiNNBHbrdJ/9OuTcz3nlMMSYSdvGIeOIVueV8g1sHSVKYWMQElweK8rNoarwCkfXBLHxtw9+eGxKKZWBKVyfdazjL4J/pjjzM0rDyuhvYjhkcnpyCxYU5sNosIKmqIbqKagi87YF0WpfDsBzTTIOUorTtxzrNM/5vTiXu2+tzu/abGDXSaLQ+Rr19HJ+qlMQwZsC6ikpik90hO3ujuLmlyf06MGBg9eHAPwAAAP//y9NkNgAAAcNJREFUY/j//z9DY3fTlkPtcf+nuHv9meji8m9+dNS/D/du/n/z5s2/27du/vv39++/ZWuW/vNozPmXv2Hnv5zVm3+Xbt//f9KGeY0MIANer4nr/r8/6f+KWO/ffS7+/x9duvLvH1Di18+fQPL//39A3ref3//H9BT+95vQ+y9m9ZHfM7Ys/v9xXSTEgI+bYiL/HUj+/3xRxK+HF07/BetCIv6Cjfv/f+uJ3f/MSyP/Zy1b8uv9vqK/vzcE14FdMHNZg0jn6rn3Jm1b8//IgkV/1mw7+Hvhht2/r99+8OfX799/vn3+/Pffnz///vz/+789JenvjpK4H//f9f5/dbshiYGB4T8j0DIGna03TDp65x997Bv+d2JK6f+goo7/qbUT/9dvP/q/fvmm/6tKK/+cXLX63/Gc4v9fg+L+v15Z8+zi/25FsAtABoAxAwPnt8BQy3Px2XnJJW3dMR0zFsYt2XQwds2uB8XVbf9nmNv+veEb9up1ZOKM2xZBRiA9cAOADLBL4IbBDAXSuedui6Z3Tp5zobzm/5fWjj3IauAGwAUZGJj+NzQwNQAxAxDDxYEG7Sgqyn65avlSoDxLA0gdUAwAHdC5thMbc+wAAAAASUVORK5CYII=">http://localhost:3000/member/general/register_step2?confirmation=k13bpG6Q6Tj0b4oV2wMY&external_login_type=2&utm_campaign=login&utm_medium=login&utm_source=mojeid</A>
|
|
19
|
+
<DT><A HREF="javascript:(function()%7Bf%3D%27http://www.delicious.com/save%3Furl%3D%27%2BencodeURIComponent(window.location.href)%2B%27%26title%3D%27%2BencodeURIComponent(document.title)%2B%27%26notes%3D%27%2BencodeURIComponent(%27%27%2B(window.getSelection%3Fwindow.getSelection():document.getSelection%3Fdocument.getSelection():document.selection.createRange().text))%2B%27%26v%3D6%26%27%3Ba%3Dfunction()%7Bif(!window.open(f%2B%27noui%3D1%26jump%3Ddoclose%27,%27deliciousuiv6%27,%27location%3D1,links%3D0,scrollbars%3D0,toolbar%3D0,width%3D710,height%3D660%27))location.href%3Df%2B%27jump%3Dyes%27%7D%3Bif(/Firefox/.test(navigator.userAgent))%7BsetTimeout(a,0)%7Delse%7Ba()%7D%7D)()" ADD_DATE="1350743232">Add to Delicious</A>
|
|
20
|
+
<DT><H3 ADD_DATE="1350544318" LAST_MODIFIED="1350619431">MD</H3>
|
|
21
|
+
<DL><p>
|
|
22
|
+
<DT><A HREF="http://rubymine.org" ADD_DATE="1350393018" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHGlET1QAAAACAAAAAAAAAAgAAAAoAAAACAAAAAgAAAEtCnF8ZgAAAPlJREFUOBGkkTFKA0EYhT8Tl7A7mxOkyw2CKAFPEETwCGktAlrYWQhWFh7E0k5sLcREKwkYsxuy2UUQC8EubDG+iawkEdOkeAwz771v5mew1rKOVpehhLTqgj8AFTYsbKaYmwlhf4J5zjBXDnKm82XYAmBQoRUZPgYB22PM5Q8g7KeEnbjCXhTwNvZozEN+ATK3hgF5HGIFeR/h7ST4Rxn+8YvPrvyp82LDZwq1AjIDPIKnZ5dHAecK2FdDuwjMVo0V+VwIkjtvfhSuofoAJ13IBDpMoL5QLn5JkCE0lDuVvpQ9cDmeoKlNIlmnu/8ACt/DfpHrwa0DfAMAAP//dMaXywAAAJ1JREFUxZCrCgJhEIW/5BNs9hVsvofPoUkwLtgsNkEQ1tsGg9isJsOClyYYfQSjRXA8fxgQYfKGw8wcvjkDwx6yK+QXeKrezYxIW2ic4S09xPcSxwp2Cw0bBZ2gFS27f4T2DJpLGBTqWcOrBEuSOXQwqjo4dV79BA2fH6MbLbqvpbHzOl6hqyMZt6Q5dByMqvi+8wo7hA+LAv79+gO+DKpWTzgNlsEAAAAASUVORK5CYII=">MD platform - Feature #3067: MojeID implementation - Redmine</A>
|
|
23
|
+
<DT><A HREF="http://1.2.3.4:8080/" ADD_DATE="1350544337" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHGlET1QAAAACAAAAAAAAAAgAAAAoAAAACAAAAAgAAAGgmXiD+wAAAWxJREFUOBFi+P//PwM6lpKSEjE3Mp5gaWy0Izsp8nVuSsznvJSYx2EBnmUyMjKcyOoxNEdHRC1NT07+UlWc8+X5lX3/Pt899P/znQP/P97a93/PyinvXeys9jEwMLDCDEExIDUheVVjTe2/poq8Z1/uHf7/8foOMP5wbft/GD6zfeEfVzvrdRgG2Nra2rs4OP5OTUr+e273si8fru/8P6ev4f/WRf1wzSBDNi3o+e/rZv9OWlpaGGQI3AWerq6X21va/ifGJ/4/tnnuj1eXtv4/v3MBWPP7q9tQDHlyev3/gqTIAhQDIkLDHuVm5/6Pj4n/9OzseriGz7cP/D+/axGYf2br3P8fgN7atXzy/7yksOkoBng42z/rqCn8Fhkc+ObK3kXfYX4+smH6/5bSdLAB2xf3/t+2sPv/xnkd/0vSYxbCDQCGKmN/c9mXzqqs/zM7K989PLH6D8wAdLqnNu//naMr/5dmxPaADAAAAAD//8RlfGoAAAGrSURBVGP4//8/AwgXpsbcfn1py/8P17ZjxXePrv5/csus/xMaCv9f3bf4f5SfRwRIH1gziBHi6+4f5OX04MC62SgGfLyx6/++lZP+t5Zl/J/bXfW/Ji/xf3NJ2msFUQUJFANAHEUZGbNVs7p/f7i24//DE2vABr26uOV/V3X2/xXTmv6vntny/+mZ9f+DvVyOg9RjGMDAwMAU7uf5+svdw/8fn173f+eSPrAhz89u+H9+5/z/1w8s/V9XnPFOS0d3PYYBipKS8pq6Rlf1LBx/luVnfLu8b+mfoxtm/M9Livi/bEr95zndlQ99XeyfG+safjXzDP2joWc8EewCkK0qalptuhZ2n5xSq//bxpf8949MftvZ0fmpWE/302xDvdfhWpovIh1sLs0wNvwy2djwl4l/3H8je5+v8vLykgyK0tL6xq5Bv0AajQOT/hsHJIKxkV/cf6Di55ctjP/vMjP6mGBg8KpNT/fNRGPDH0be0f+1LOzPgSwHYgZmQzuPN9YxBXDNMENyTMxuzjHUuR1o53Bqx7Ztv2bPnvsivLjhi4Fr0H8NA/PVIC8AAIYxhprDzOWMAAAAAElFTkSuQmCC">Dashboard [Jenkins]</A>
|
|
24
|
+
</DL><p>
|
|
25
|
+
</DL><p>
|
|
26
|
+
</DL><p>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
|
2
|
+
<!-- This is an automatically generated file.
|
|
3
|
+
It will be read and overwritten.
|
|
4
|
+
DO NOT EDIT! -->
|
|
5
|
+
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
|
6
|
+
<TITLE>Bookmarks</TITLE>
|
|
7
|
+
<H1>Bookmarks Menu</H1>
|
|
8
|
+
|
|
9
|
+
<DL><p>
|
|
10
|
+
<DT><A HREF="place:folder=BOOKMARKS_MENU&folder=UNFILED_BOOKMARKS&folder=TOOLBAR&sort=12&excludeQueries=1&maxResults=10&queryType=1">Recently Bookmarked</A>
|
|
11
|
+
<DT><A HREF="place:sort=14&type=6&maxResults=10&queryType=1">Recent Tags</A>
|
|
12
|
+
<HR>
|
|
13
|
+
<DT><H3 ADD_DATE="1350925942" LAST_MODIFIED="1350926088" PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Toolbar</H3>
|
|
14
|
+
<DD>Add bookmarks to this folder to see them displayed on the Bookmarks Toolbar
|
|
15
|
+
<DL><p>
|
|
16
|
+
<DT><A HREF="place:sort=8&maxResults=10">Most Visited</A>
|
|
17
|
+
<DT><A HREF="http://www.mozilla.com/en-US/firefox/central/" ADD_DATE="1350925942" LAST_MODIFIED="1350925942">Getting Started</A>
|
|
18
|
+
<DT><H3 ADD_DATE="1350925975" LAST_MODIFIED="1350926025">Nest 1</H3>
|
|
19
|
+
<DD>Test nest 1
|
|
20
|
+
<DL><p>
|
|
21
|
+
<DT><A HREF="http://www.google.lt/" ADD_DATE="1350926012" LAST_MODIFIED="1350926012" ICON_URI="http://www.google.lt/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABWUlEQVQ4jaXTPUvDQBgH8HyzkiCVdlBcFD+CDgUn0bU5rUMRS6mD4BuCVgfFKmitCl0s+FKhvoEgVvsyWKuRS9JLcvm7tcplSHW44e6e5/c8x91JAaKFZJXWFELRzZBVWgsQLST9JfknInlt9ExRJLMMqSOG67ID7gLb5xbG100h1hNIFyzM51gbu61wnN7Znl14Al+GC7LTas9nMi20bPgHPnUXmatOxbE1E89v3D8wd8DAbGBiw0R/XMfupY3RJcM/oBCKkUUDiUMGF/h1HN+AQiiC0xSa4aL04mBgVvcPTKZNbBYspHIMy3mGJnXx+s4xmBARAVg4Ybh4ctAb66wNJXSUGxx7RfEqBaDa5EgdMSEwmWXIlnwA+Qcb5QbHcLLTbjBGcfboILLq4yX2xXVsFSzUP1zcVzmOb2zsF21EVsRkhVD89zPVJTmqhWWV1rsGVFqRo1r4G6iM33AbQTj+AAAAAElFTkSuQmCC">Google</A>
|
|
22
|
+
<DT><H3 ADD_DATE="1350926018" LAST_MODIFIED="1350926045">Nest 2</H3>
|
|
23
|
+
<DL><p>
|
|
24
|
+
<DT><A HREF="http://www.yahoo.com/" ADD_DATE="1350926033" LAST_MODIFIED="1350926033" ICON_URI="http://www.yahoo.com/favicon.ico" ICON="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgJqAIoCdgCaAnoAnhKCAKYijgCuLpIAskKeALpSpgC+Yq4AzHy8ANqezgDmvt4A7tLqAPz5+wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKlRFIoABWAKERERE6ADcKMzzu2hOgAAhERK8REWCWBERE36ERMHMEREvo6iEgY6hEn6Pu0mAzqkz/xjMzoDNwpERERDoAMzAKlERIoAAzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AADAOQAAgBkAAAAPAAAACQAAAAkAAAAIAAAACAAAAAgAAIAYAADAOAAA//8AAP//AAD//wAA" LAST_CHARSET="UTF-8">Yahoo!</A>
|
|
25
|
+
<DD>Welcome to Yahoo!, the world's most visited home page. Quickly find what you're searching for, get in touch with friends and stay in-the-know with the latest news and information.
|
|
26
|
+
</DL><p>
|
|
27
|
+
</DL><p>
|
|
28
|
+
<DT><H3 ADD_DATE="1350925942" LAST_MODIFIED="1350925942">Mozilla Firefox</H3>
|
|
29
|
+
<DL><p>
|
|
30
|
+
<DT><A HREF="http://www.mozilla.com/en-US/firefox/help/" ADD_DATE="1350925942" LAST_MODIFIED="1350925942" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/0-1350925942950" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==">Help and Tutorials</A>
|
|
31
|
+
<DT><A HREF="http://www.mozilla.com/en-US/firefox/customize/" ADD_DATE="1350925942" LAST_MODIFIED="1350925942" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/1-1350925942951" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==">Customize Firefox</A>
|
|
32
|
+
<DT><A HREF="http://www.mozilla.com/en-US/firefox/community/" ADD_DATE="1350925942" LAST_MODIFIED="1350925942" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/2-1350925942952" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==">Get Involved</A>
|
|
33
|
+
<DT><A HREF="http://www.mozilla.com/en-US/about/" ADD_DATE="1350925942" LAST_MODIFIED="1350925942" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/3-1350925942953" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==">About Us</A>
|
|
34
|
+
</DL><p>
|
|
35
|
+
</DL><p>
|
|
36
|
+
</DL><p>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
|
2
|
+
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
|
3
|
+
<!-- This is an automatically generated file.
|
|
4
|
+
It will be read and overwritten.
|
|
5
|
+
Do Not Edit! -->
|
|
6
|
+
<TITLE>Bookmarks</TITLE>
|
|
7
|
+
<H1>Bookmarks</H1>
|
|
8
|
+
<DL><p>
|
|
9
|
+
<DT><A HREF="https://saveit.in/" ADD_DATE="1350743281" LAST_VISIT="1350743282" LAST_MODIFIED="1350743283" PRIVATE="0" TAGS="Bookmarking">Save It - Simple, secure bookmarks</A>
|
|
10
|
+
</DL><p>
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'date'
|
|
3
|
+
|
|
4
|
+
module Markio
|
|
5
|
+
describe Builder do
|
|
6
|
+
it 'should build empty bookmarks' do
|
|
7
|
+
builder = Builder.new
|
|
8
|
+
file_contents = builder.build_string
|
|
9
|
+
file_contents.length.should_not be_nil
|
|
10
|
+
file_contents.should match "DOCTYPE NETSCAPE-Bookmark-file-1"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'should build single bookmark without tags' do
|
|
14
|
+
builder = Builder.new
|
|
15
|
+
builder.bookmarks << Bookmark.create({
|
|
16
|
+
:title => "Test bookmark",
|
|
17
|
+
:href => "http://test.com",
|
|
18
|
+
:add_date => Date.parse('2012-01-12 11:22:33').to_datetime,
|
|
19
|
+
:last_visit => Date.parse('2012-01-13 10:20:30').to_datetime,
|
|
20
|
+
:last_modified => Date.parse('2012-01-14 10:21:31').to_datetime
|
|
21
|
+
})
|
|
22
|
+
file_contents = builder.build_string
|
|
23
|
+
file_contents.length.should_not be_nil
|
|
24
|
+
file_contents.should match "Test bookmark"
|
|
25
|
+
file_contents.should match "test\.com"
|
|
26
|
+
file_contents.should match "add_date"
|
|
27
|
+
file_contents.should match "last_visit"
|
|
28
|
+
file_contents.should match "last_modified"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
it 'should be able to parse what it builds' do
|
|
33
|
+
builder = Builder.new
|
|
34
|
+
builder.bookmarks << Bookmark.create({
|
|
35
|
+
:title => "Test bookmark 1",
|
|
36
|
+
:href => "http://test.com"
|
|
37
|
+
})
|
|
38
|
+
builder.bookmarks << Bookmark.create({
|
|
39
|
+
:title => "Test bookmark 2",
|
|
40
|
+
:href => "http://test2.com",
|
|
41
|
+
:add_date => Date.parse('2012-01-12 11:22:33').to_datetime,
|
|
42
|
+
:last_visit => Date.parse('2012-01-13 10:20:30').to_datetime,
|
|
43
|
+
:last_modified => Date.parse('2012-01-14 10:21:31').to_datetime
|
|
44
|
+
})
|
|
45
|
+
file_contents = builder.build_string
|
|
46
|
+
bookmarks = Markio.parse file_contents
|
|
47
|
+
bookmarks.length.should eq builder.bookmarks.length
|
|
48
|
+
bookmarks.each do |b|
|
|
49
|
+
builder.bookmarks.should include b
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'should be reflexive' do
|
|
54
|
+
builder = Builder.new
|
|
55
|
+
builder.bookmarks << Bookmark.create({
|
|
56
|
+
:title => "Test bookmark",
|
|
57
|
+
:href => "http://test1.com"
|
|
58
|
+
})
|
|
59
|
+
builder.bookmarks << Bookmark.create({
|
|
60
|
+
:title => "Test bookmark 2",
|
|
61
|
+
:href => "http://test2.com",
|
|
62
|
+
:add_date => Date.parse('2012-01-12 11:22:33').to_datetime,
|
|
63
|
+
:last_visit => Date.parse('2012-01-13 10:20:30').to_datetime,
|
|
64
|
+
:last_modified => Date.parse('2012-01-14 10:21:31').to_datetime
|
|
65
|
+
})
|
|
66
|
+
file_contents = builder.build_string
|
|
67
|
+
bookmarks = Markio.parse file_contents
|
|
68
|
+
builder = Builder.new
|
|
69
|
+
builder.bookmarks = bookmarks
|
|
70
|
+
builder.build_string.should eq file_contents
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'should group bookmarks into folders' do
|
|
74
|
+
builder = Builder.new
|
|
75
|
+
builder.bookmarks << Bookmark.create({
|
|
76
|
+
:title => "Test bookmark 1",
|
|
77
|
+
:href => "http://test1.com",
|
|
78
|
+
:folders => ["One"]
|
|
79
|
+
})
|
|
80
|
+
builder.bookmarks << Bookmark.create({
|
|
81
|
+
:title => "Test bookmark 2",
|
|
82
|
+
:href => "http://test2.com",
|
|
83
|
+
:folders => ["Two"]
|
|
84
|
+
})
|
|
85
|
+
file_contents = builder.build_string
|
|
86
|
+
file_contents.should match "One"
|
|
87
|
+
file_contents.should match "Two"
|
|
88
|
+
bookmarks = Markio.parse file_contents
|
|
89
|
+
bookmarks.length.should eq builder.bookmarks.length
|
|
90
|
+
bookmarks.each do |b|
|
|
91
|
+
builder.bookmarks.should include b
|
|
92
|
+
b.folders.length.should eq 1
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'should work with multi-folder bookmarks' do
|
|
97
|
+
builder = Builder.new
|
|
98
|
+
builder.bookmarks << Bookmark.create({
|
|
99
|
+
:title => "Test bookmark 1",
|
|
100
|
+
:href => "http://test1.com",
|
|
101
|
+
:folders => ["One", "Shared"]
|
|
102
|
+
})
|
|
103
|
+
builder.bookmarks << Bookmark.create({
|
|
104
|
+
:title => "Test bookmark 2",
|
|
105
|
+
:href => "http://test2.com",
|
|
106
|
+
:folders => ["Two", "Shared"]
|
|
107
|
+
})
|
|
108
|
+
file_contents = builder.build_string
|
|
109
|
+
file_contents.should match "One"
|
|
110
|
+
file_contents.should match "Two"
|
|
111
|
+
file_contents.should match "Shared"
|
|
112
|
+
bookmarks = Markio.parse file_contents
|
|
113
|
+
bookmarks.length.should eq builder.bookmarks.length
|
|
114
|
+
bookmarks.each do |b|
|
|
115
|
+
builder.bookmarks.should include b
|
|
116
|
+
b.folders.length.should eq 2
|
|
117
|
+
b.folders.should include "Shared"
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
data/spec/parser_spec.rb
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Markio
|
|
4
|
+
describe Parser do
|
|
5
|
+
it 'should parse single bookmark' do
|
|
6
|
+
bookmarks = Markio.parse File.open "spec/assets/one_bookmark.html"
|
|
7
|
+
|
|
8
|
+
bookmarks.should_not be_nil
|
|
9
|
+
bookmarks.class.should be Array
|
|
10
|
+
bookmarks.length.should eq 1
|
|
11
|
+
bookmark = bookmarks[0]
|
|
12
|
+
bookmark.title.should eq 'Save It - Simple, secure bookmarks'
|
|
13
|
+
bookmark.href.should eq 'https://saveit.in/'
|
|
14
|
+
bookmark.folders.length.should eq 1
|
|
15
|
+
bookmark.folders.first.should eq "Bookmarking"
|
|
16
|
+
bookmark.add_date.should_not be_nil
|
|
17
|
+
bookmark.last_visit.should_not be_nil
|
|
18
|
+
bookmark.last_modified.should_not be_nil
|
|
19
|
+
bookmark.add_date.class.should be DateTime
|
|
20
|
+
bookmark.last_visit.class.should be DateTime
|
|
21
|
+
bookmark.last_modified.class.should be DateTime
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'should parse multiple bookmarks' do
|
|
25
|
+
bookmarks = Markio.parse File.open "spec/assets/many_bookmarks.html"
|
|
26
|
+
bookmarks.length.should eq 11
|
|
27
|
+
bookmarks.first.folders.length.should eq 1
|
|
28
|
+
bookmarks.first.folders.first.should eq "Bookmarks Bar"
|
|
29
|
+
bookmarks.last.folders.length.should eq 2
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'should parse delicious bookmarks' do
|
|
33
|
+
bookmarks = Markio.parse File.open "spec/assets/delicious_bookmarks.html"
|
|
34
|
+
bookmarks.length.should eq 5
|
|
35
|
+
bookmarks.first.folders.length.should eq 5
|
|
36
|
+
bookmarks.first.folders.first.should eq "food"
|
|
37
|
+
bookmarks.last.folders.length.should eq 3
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'should parse nested bookmarks' do
|
|
41
|
+
bookmarks = Markio.parse File.open "spec/assets/nested_bookmarks.html"
|
|
42
|
+
|
|
43
|
+
bookmarks.length.should eq 10
|
|
44
|
+
bookmarks.first.folders.length.should eq 0
|
|
45
|
+
bookmarks.last.folders.length.should eq 2
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'should raise error for non existing files' do
|
|
49
|
+
expect { Markio.parse File.open "spec/assets/not_found.html" }.to raise_error
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should handle corrupted data' do
|
|
53
|
+
bookmarks = Markio.parse File.open "spec/assets/corrupted.html"
|
|
54
|
+
bookmarks.should eq []
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: hippomarkio
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: '0.1'
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- hippohack
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2020-04-11 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: nokogiri
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
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: rspec
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '2.11'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '2.11'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: pry-nav
|
|
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: guard-rspec
|
|
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: Import/export utility for Netscape Bookmark Format
|
|
70
|
+
email:
|
|
71
|
+
- benzoh.g@gmail.com
|
|
72
|
+
executables: []
|
|
73
|
+
extensions: []
|
|
74
|
+
extra_rdoc_files: []
|
|
75
|
+
files:
|
|
76
|
+
- ".gitignore"
|
|
77
|
+
- ".travis.yml"
|
|
78
|
+
- Gemfile
|
|
79
|
+
- Guardfile
|
|
80
|
+
- LICENSE.txt
|
|
81
|
+
- README.md
|
|
82
|
+
- Rakefile
|
|
83
|
+
- hippomarkio.gemspec
|
|
84
|
+
- lib/markio.rb
|
|
85
|
+
- lib/markio/bookmark.rb
|
|
86
|
+
- lib/markio/builder.rb
|
|
87
|
+
- lib/markio/parser.rb
|
|
88
|
+
- lib/markio/version.rb
|
|
89
|
+
- spec/assets/corrupted.html
|
|
90
|
+
- spec/assets/delicious_bookmarks.html
|
|
91
|
+
- spec/assets/many_bookmarks.html
|
|
92
|
+
- spec/assets/nested_bookmarks.html
|
|
93
|
+
- spec/assets/one_bookmark.html
|
|
94
|
+
- spec/builder_spec.rb
|
|
95
|
+
- spec/parser_spec.rb
|
|
96
|
+
- spec/spec_helper.rb
|
|
97
|
+
homepage: https://github.com/hippohack/hippomarkio
|
|
98
|
+
licenses: []
|
|
99
|
+
metadata: {}
|
|
100
|
+
post_install_message:
|
|
101
|
+
rdoc_options: []
|
|
102
|
+
require_paths:
|
|
103
|
+
- lib
|
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
|
+
requirements:
|
|
106
|
+
- - ">="
|
|
107
|
+
- !ruby/object:Gem::Version
|
|
108
|
+
version: '0'
|
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
|
+
requirements:
|
|
111
|
+
- - ">="
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
version: '0'
|
|
114
|
+
requirements: []
|
|
115
|
+
rubygems_version: 3.1.2
|
|
116
|
+
signing_key:
|
|
117
|
+
specification_version: 4
|
|
118
|
+
summary: Handles parsing and building Netscabe Bookmark Format in Ruby way.
|
|
119
|
+
test_files:
|
|
120
|
+
- spec/assets/corrupted.html
|
|
121
|
+
- spec/assets/delicious_bookmarks.html
|
|
122
|
+
- spec/assets/many_bookmarks.html
|
|
123
|
+
- spec/assets/nested_bookmarks.html
|
|
124
|
+
- spec/assets/one_bookmark.html
|
|
125
|
+
- spec/builder_spec.rb
|
|
126
|
+
- spec/parser_spec.rb
|
|
127
|
+
- spec/spec_helper.rb
|