bkmrq 0.0.6 → 0.1.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.
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