bkmrq 0.0.1 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bkmrq +5 -4
- data/lib/bkmrq/app.rb +84 -0
- data/lib/{browser_config.rb → bkmrq/browser_config.rb} +3 -2
- data/lib/{cli.rb → bkmrq/cli.rb} +19 -6
- data/lib/{docs_template.rb → bkmrq/docs_template.rb} +0 -0
- data/lib/{manual.rb → bkmrq/manual.rb} +4 -3
- data/lib/bkmrq.rb +5 -78
- metadata +7 -7
- data/lib/app.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ee67957af96bba18676779fe6cb3c818374720d6401483e3b5ff24a760a421b
|
4
|
+
data.tar.gz: 312c79e8cf2beb187bebcb1405bcb0e157d867a1fe07cfe4a37745a82920641a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59cbd60d25856f3c89df44f84efe7f60c3faa3039dfebcca54f8f9865c848fddfd05f0f48bc0ecbd7a9276d4ea23dd2ee82b4a056618bf7d370cda3361800a0c
|
7
|
+
data.tar.gz: 91a1b4abaffe181f5af152b26b33a832cbdd364d5bca2f03e2e11b10ae4e4bfd2d9b7d02f4da52bda4ae4fa3e4215342ee5f7951b8687a7049e94f52aada3b48
|
data/bin/bkmrq
CHANGED
data/lib/bkmrq/app.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'bkmrq/docs_template'
|
6
|
+
require 'bkmrq/browser_config'
|
7
|
+
|
8
|
+
module Bkmrq
|
9
|
+
# Bookmarks Document Generator
|
10
|
+
class App
|
11
|
+
BLOCKLIST = ENV.fetch('BKMRQ_BLOCKLIST', '(pdf|google|file:)').split(',').map(&:strip)
|
12
|
+
|
13
|
+
def initialize(browser: nil, input_file: nil, output_path: nil, edit: false)
|
14
|
+
@bookmarks_input = input_file || Bkmrq::BROWSER_CONFIG.dig(browser, :bookmark_file_path)
|
15
|
+
@output_path = output_path || FileUtils.pwd
|
16
|
+
end
|
17
|
+
|
18
|
+
def export!
|
19
|
+
write_template
|
20
|
+
export(bookmarks['bookmark_bar'])
|
21
|
+
export(bookmarks['other'])
|
22
|
+
export(bookmarks['synced'])
|
23
|
+
output_file.close
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def output_file
|
29
|
+
@output_file ||= ::File.open(
|
30
|
+
File.join(@output_path, "bkmrq_export_#{String(Integer(Time.now))[0..-2]}.md"),
|
31
|
+
'w+'
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def bookmarks
|
36
|
+
@bookmarks ||= ::File.open(@bookmarks_input, 'r') do |file|
|
37
|
+
JSON.parse(file.read)['roots']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def write_template
|
42
|
+
%i[title subtitle header_image description]
|
43
|
+
.map(&Bkmrq::DocsTemplate.method(:public_send))
|
44
|
+
.map(&output_file.method(:write))
|
45
|
+
end
|
46
|
+
|
47
|
+
def export(marqs = bookmarks, level = 1)
|
48
|
+
return if skip_export?(marqs)
|
49
|
+
|
50
|
+
output_file.write(generate_formatted_entity(marqs, level))
|
51
|
+
marqs.fetch('children', []).empty? ||
|
52
|
+
marqs['children'].map { |child| export(child, level + 1) }
|
53
|
+
end
|
54
|
+
|
55
|
+
def skip_export?(bookmark_section)
|
56
|
+
[bookmark_section['name'], bookmark_section['name']].any? do |meta|
|
57
|
+
BLOCKLIST.any? { |pattern| !meta&.match(pattern).nil? }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def generate_formatted_entity(bookmark, level)
|
62
|
+
if bookmark['url'].nil?
|
63
|
+
generate_bookmark_title(bookmark, level)
|
64
|
+
else
|
65
|
+
generate_bookmark_link(bookmark, level)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def generate_bookmark_title(bookmark, level)
|
70
|
+
[
|
71
|
+
' ' * level,
|
72
|
+
'#' * level,
|
73
|
+
"#{bookmark['name']}\n"
|
74
|
+
].join(' ')
|
75
|
+
end
|
76
|
+
|
77
|
+
def generate_bookmark_link(bookmark, level)
|
78
|
+
[
|
79
|
+
' ' * level,
|
80
|
+
"[#{bookmark['name']}](#{bookmark['url']}) \n"
|
81
|
+
].join(' ')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/{cli.rb → bkmrq/cli.rb}
RENAMED
@@ -3,27 +3,32 @@
|
|
3
3
|
# frozen_string_literal: true
|
4
4
|
|
5
5
|
require 'optparse'
|
6
|
-
require '
|
7
|
-
|
8
|
-
require_relative 'bkmrq'
|
9
|
-
require_relative 'manual'
|
6
|
+
require 'bkmrq/app'
|
7
|
+
require 'bkmrq/manual'
|
10
8
|
|
11
9
|
module Bkmrq
|
12
10
|
# Cli
|
13
11
|
class Cli
|
14
12
|
def initialize(args)
|
15
13
|
@opts = {}
|
16
|
-
option_parser.parse!(sanitize_args(args), into: @opts)
|
14
|
+
option_parser.parse!(default_args(sanitize_args(args)), into: @opts)
|
15
|
+
init_app if opts_valid?
|
17
16
|
end
|
18
17
|
|
19
18
|
private
|
20
19
|
|
20
|
+
def init_app
|
21
|
+
Bkmrq::App.new(
|
22
|
+
**@opts.slice(*Bkmrq::Manual.options_specs.map(&:last))
|
23
|
+
).export!
|
24
|
+
end
|
25
|
+
|
21
26
|
def option_parser
|
22
27
|
@option_parser ||= OptionParser.new do |args|
|
23
28
|
# Option Parsing
|
24
29
|
Bkmrq::Manual.options_specs.map do |option_spec|
|
25
30
|
option_key = option_spec.pop
|
26
|
-
args.on(*option_spec) { |input| @opts
|
31
|
+
args.on(*option_spec) { |input| @opts[option_key] = input }
|
27
32
|
end
|
28
33
|
|
29
34
|
# Manual Printing
|
@@ -35,5 +40,13 @@ module Bkmrq
|
|
35
40
|
def sanitize_args(args)
|
36
41
|
args.reject(&:empty?).map(&:scrub).map(&:split).flatten
|
37
42
|
end
|
43
|
+
|
44
|
+
def default_args(args)
|
45
|
+
args.empty? ? ['-H'] : args
|
46
|
+
end
|
47
|
+
|
48
|
+
def opts_valid?
|
49
|
+
!@opts.key?(:help)
|
50
|
+
end
|
38
51
|
end
|
39
52
|
end
|
File without changes
|
@@ -26,7 +26,8 @@ module Bkmrq
|
|
26
26
|
'-B BROWSER',
|
27
27
|
'--browser BROWSER',
|
28
28
|
String,
|
29
|
-
'Browser (Loads Default Configs)',
|
29
|
+
'Browser (Loads Default Configs)',
|
30
|
+
:browser
|
30
31
|
]
|
31
32
|
end
|
32
33
|
|
@@ -36,7 +37,7 @@ module Bkmrq
|
|
36
37
|
'--input-file FILE',
|
37
38
|
String,
|
38
39
|
'Bookmarks file generated by your browser. (JSON FORMAT ONLY)',
|
39
|
-
:
|
40
|
+
:input_file
|
40
41
|
]
|
41
42
|
end
|
42
43
|
|
@@ -46,7 +47,7 @@ module Bkmrq
|
|
46
47
|
'--output-file FILE',
|
47
48
|
String,
|
48
49
|
'Filepath for markdown generated by Bkmrq',
|
49
|
-
:
|
50
|
+
:output_path
|
50
51
|
]
|
51
52
|
end
|
52
53
|
|
data/lib/bkmrq.rb
CHANGED
@@ -1,82 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'json'
|
4
|
-
require_relative 'docs_template'
|
5
|
-
require_relative 'browser_config'
|
6
|
-
|
7
3
|
module Bkmrq
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@bookmarks_input = bookmarks_input || Bkmrq::BROWSER_CONFIG.dig(browser, :bookmark_file_path)
|
14
|
-
end
|
15
|
-
|
16
|
-
def export!
|
17
|
-
write_template
|
18
|
-
export(bookmarks['bookmark_bar'])
|
19
|
-
export(bookmarks['other'])
|
20
|
-
export(bookmarks['synced'])
|
21
|
-
output_file.close
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def output_file
|
27
|
-
@output_file ||= ::File.open(
|
28
|
-
"bkmrq_export_#{String(Integer(Time.now))[0..-2]}.md",
|
29
|
-
'w+'
|
30
|
-
)
|
31
|
-
end
|
32
|
-
|
33
|
-
def bookmarks
|
34
|
-
@bookmarks ||= ::File.open(@bookmarks_input, 'r') do |file|
|
35
|
-
JSON.parse(file.read)['roots']
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def write_template
|
40
|
-
%i[title subtitle header_image description]
|
41
|
-
.map(&Bkmrq::DocsTemplate.method(:public_send))
|
42
|
-
.map(&output_file.method(:write))
|
43
|
-
end
|
44
|
-
|
45
|
-
def export(marqs = bookmarks, level = 1)
|
46
|
-
return if skip_export?(marqs)
|
47
|
-
|
48
|
-
output_file.write(generate_formatted_entity(marqs, level))
|
49
|
-
marqs.fetch('children', []).empty? ||
|
50
|
-
marqs['children'].map { |child| export(child, level + 1) }
|
51
|
-
end
|
52
|
-
|
53
|
-
def skip_export?(bookmark_section)
|
54
|
-
[bookmark_section['name'], bookmark_section['name']].any? do |meta|
|
55
|
-
BLOCKLIST.any? { |pattern| !meta&.match(pattern).nil? }
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def generate_formatted_entity(bookmark, level)
|
60
|
-
if bookmark['url'].nil?
|
61
|
-
generate_bookmark_title(bookmark, level)
|
62
|
-
else
|
63
|
-
generate_bookmark_link(bookmark, level)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def generate_bookmark_title(bookmark, level)
|
68
|
-
[
|
69
|
-
' ' * level,
|
70
|
-
'#' * level,
|
71
|
-
"#{bookmark['name']}\n"
|
72
|
-
].join(' ')
|
73
|
-
end
|
74
|
-
|
75
|
-
def generate_bookmark_link(bookmark, level)
|
76
|
-
[
|
77
|
-
' ' * level,
|
78
|
-
"[#{bookmark['name']}](#{bookmark['url']}) \n"
|
79
|
-
].join(' ')
|
80
|
-
end
|
81
|
-
end
|
4
|
+
require 'bkmrq/app'
|
5
|
+
require 'bkmrq/browser_config'
|
6
|
+
require 'bkmrq/cli'
|
7
|
+
require 'bkmrq/docs_template'
|
8
|
+
require 'bkmrq/manual'
|
82
9
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bkmrq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sreedev Kodichath
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-11-
|
11
|
+
date: 2021-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Bkmrq Converts Bookmarks stored by your browser in JSON format to a readable
|
14
14
|
markdown format
|
@@ -19,12 +19,12 @@ extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
21
|
- bin/bkmrq
|
22
|
-
- lib/app.rb
|
23
22
|
- lib/bkmrq.rb
|
24
|
-
- lib/
|
25
|
-
- lib/
|
26
|
-
- lib/
|
27
|
-
- lib/
|
23
|
+
- lib/bkmrq/app.rb
|
24
|
+
- lib/bkmrq/browser_config.rb
|
25
|
+
- lib/bkmrq/cli.rb
|
26
|
+
- lib/bkmrq/docs_template.rb
|
27
|
+
- lib/bkmrq/manual.rb
|
28
28
|
homepage: https://rubygems.org/gems/bkmrq
|
29
29
|
licenses:
|
30
30
|
- MIT
|