bkmrq 0.0.6 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +13 -0
  3. data/Gemfile.lock +70 -0
  4. data/LICENSE +21 -0
  5. data/README.md +74 -0
  6. data/bin/bkmrq +4 -3
  7. data/bkmrq.gemspec +28 -0
  8. data/lib/bkmrq/application.rb +27 -0
  9. data/lib/bkmrq/bookmark.rb +35 -0
  10. data/lib/bkmrq/cli/app.rb +17 -0
  11. data/lib/bkmrq/cli/arg_parser.rb +90 -0
  12. data/lib/bkmrq/codegen/html_generator.rb +26 -0
  13. data/lib/bkmrq/codegen/markdown_generator.rb +78 -0
  14. data/lib/bkmrq/error.rb +8 -0
  15. data/lib/bkmrq/extractors/brave.rb +29 -0
  16. data/lib/bkmrq/extractors/chrome.rb +29 -0
  17. data/lib/bkmrq/extractors/chromium.rb +30 -0
  18. data/lib/bkmrq/extractors/error.rb +13 -0
  19. data/lib/bkmrq/extractors/extractors.rb +21 -0
  20. data/lib/bkmrq/extractors/firefox.rb +29 -0
  21. data/lib/bkmrq/extractors/opera.rb +29 -0
  22. data/lib/bkmrq/extractors/safari.rb +24 -0
  23. data/lib/bkmrq/filter.rb +14 -0
  24. data/lib/bkmrq/formatters/assets.rb +11 -0
  25. data/lib/bkmrq/formatters/csv.rb +12 -0
  26. data/lib/bkmrq/formatters/formatters.rb +18 -0
  27. data/lib/bkmrq/formatters/html.rb +43 -0
  28. data/lib/bkmrq/formatters/json.rb +28 -0
  29. data/lib/bkmrq/formatters/markdown.rb +50 -0
  30. data/lib/bkmrq/parsers/brave.rb +52 -0
  31. data/lib/bkmrq/parsers/chrome.rb +52 -0
  32. data/lib/bkmrq/parsers/chromium.rb +52 -0
  33. data/lib/bkmrq/parsers/error.rb +13 -0
  34. data/lib/bkmrq/parsers/firefox.rb +19 -0
  35. data/lib/bkmrq/parsers/opera.rb +19 -0
  36. data/lib/bkmrq/parsers/parsers.rb +22 -0
  37. data/lib/bkmrq/parsers/safari.rb +19 -0
  38. data/lib/bkmrq/ui.rb +39 -0
  39. data/lib/bkmrq/writer.rb +12 -0
  40. data/lib/bkmrq.rb +7 -5
  41. metadata +76 -13
  42. data/lib/bkmrq/app.rb +0 -83
  43. data/lib/bkmrq/browser_config.rb +0 -24
  44. data/lib/bkmrq/cli.rb +0 -52
  45. data/lib/bkmrq/docs_template.rb +0 -31
  46. data/lib/bkmrq/manual.rb +0 -65
data/lib/bkmrq/app.rb DELETED
@@ -1,83 +0,0 @@
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
- "#{bookmark['name']}\n"
73
- ].join(' ')
74
- end
75
-
76
- def generate_bookmark_link(bookmark, level)
77
- [
78
- ' ' * (level % 2),
79
- "[#{bookmark['name']}](#{bookmark['url']}) \n"
80
- ].join(' ')
81
- end
82
- end
83
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Bkmrq
4
- module Bkmrq
5
- USER_HOME = ENV.fetch('HOME', ::File.join('home', ENV['USER']))
6
-
7
- BRAVE_BROWSER_CONFIG = {
8
- bookmark_file_path: File.join(
9
- USER_HOME, '.config', 'BraveSoftware', 'Brave-Browser', 'Default', 'Bookmarks'
10
- ),
11
- root: 'roots'
12
- }.freeze
13
-
14
- CHROME_BROWSER_CONFIG = {
15
- bookmark_file_path: File.join(USER_HOME, '.config', 'chromium', 'Default', 'Bookmarks'),
16
- root: 'roots'
17
- }.freeze
18
-
19
- BROWSER_CONFIG = {
20
- 'brave' => BRAVE_BROWSER_CONFIG,
21
- 'chrome' => CHROME_BROWSER_CONFIG,
22
- 'chromium' => CHROME_BROWSER_CONFIG
23
- }.freeze
24
- end
data/lib/bkmrq/cli.rb DELETED
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # frozen_string_literal: true
4
-
5
- require 'optparse'
6
- require 'bkmrq/app'
7
- require 'bkmrq/manual'
8
-
9
- module Bkmrq
10
- # Cli
11
- class Cli
12
- def initialize(args)
13
- @opts = {}
14
- option_parser.parse!(default_args(sanitize_args(args)), into: @opts)
15
- init_app if opts_valid?
16
- end
17
-
18
- private
19
-
20
- def init_app
21
- Bkmrq::App.new(
22
- **@opts.slice(*Bkmrq::Manual.options_specs.map(&:last))
23
- ).export!
24
- end
25
-
26
- def option_parser
27
- @option_parser ||= OptionParser.new do |args|
28
- # Option Parsing
29
- Bkmrq::Manual.options_specs.map do |option_spec|
30
- option_key = option_spec.pop
31
- args.on(*option_spec) { |input| @opts[option_key] = input }
32
- end
33
-
34
- # Manual Printing
35
- args.banner = Bkmrq::Manual::BANNER
36
- args.on_tail('-H', '--help', 'Bkmrq Manual') { puts args }
37
- end
38
- end
39
-
40
- def sanitize_args(args)
41
- args.reject(&:empty?).map(&:scrub).map(&:split).flatten
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
51
- end
52
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bkmrq
4
- # document output template
5
- class DocsTemplate
6
- FORMAT = {
7
- title: "#{ENV['USER']}'s Web Browser Bookmarks",
8
- subtitle: 'Bookmarks Exported Using Bkmrq',
9
- header_image: 'https://user-images.githubusercontent.com/36154121/137836028-8dfe3001-4626-47a0-880f-d3dc7b719e27.jpeg',
10
- description: <<-MD
11
- This file was auto generated using the [bkmrq](https://github.com/sreedevk/bkmrq) gem.
12
- MD
13
- }.freeze
14
-
15
- def self.title
16
- "# #{FORMAT[:title]} \n"
17
- end
18
-
19
- def self.subtitle
20
- "## #{FORMAT[:subtitle]} \n"
21
- end
22
-
23
- def self.header_image
24
- "![](#{FORMAT[:header_image]}) \n"
25
- end
26
-
27
- def self.description
28
- FORMAT[:description]
29
- end
30
- end
31
- end
data/lib/bkmrq/manual.rb DELETED
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Bookmarks Manual
4
- module Bkmrq
5
- # Package Manual
6
- class Manual
7
- BANNER = <<-MAN
8
- Bkmrq - Export your bookmarks to markdown
9
-
10
- # Supported Browsers
11
- - brave
12
- - chromium
13
- MAN
14
-
15
- def self.options_specs
16
- [
17
- browser_opt_specs,
18
- input_file_opt_specs,
19
- output_file_opt_specs,
20
- edit_opt_specs
21
- ]
22
- end
23
-
24
- def self.browser_opt_specs
25
- [
26
- '-B BROWSER',
27
- '--browser BROWSER',
28
- String,
29
- 'Browser (Loads Default Configs)',
30
- :browser
31
- ]
32
- end
33
-
34
- def self.input_file_opt_specs
35
- [
36
- '-F FILE',
37
- '--input-file FILE',
38
- String,
39
- 'Bookmarks file generated by your browser. (JSON FORMAT ONLY)',
40
- :input_file
41
- ]
42
- end
43
-
44
- def self.output_file_opt_specs
45
- [
46
- '-O FILE',
47
- '--output-file FILE',
48
- String,
49
- 'Filepath for markdown generated by Bkmrq',
50
- :output_path
51
- ]
52
- end
53
-
54
- def self.edit_opt_specs
55
- [
56
- '-E',
57
- '--edit',
58
- 'Load Generated Markdown in $EDITOR (will not persist generated output)',
59
- :edit
60
- ]
61
- end
62
-
63
- private_class_method :browser_opt_specs, :input_file_opt_specs, :output_file_opt_specs, :edit_opt_specs
64
- end
65
- end