bhook 0.1.3 → 0.1.4
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +2 -1
- data/lib/bhook/args_parser.rb +1 -1
- data/lib/bhook/config.rb +30 -0
- data/lib/bhook/directory.rb +11 -4
- data/lib/bhook/md_file.rb +19 -9
- data/lib/bhook/theme/page.erb +14 -1
- data/lib/bhook/theme.rb +3 -2
- data/lib/bhook/version.rb +1 -1
- data/lib/bhook/workspace.rb +4 -4
- data/lib/bhook.rb +3 -1
- metadata +2 -2
- data/lib/bhook/root_directory.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ffd9eb1c5db23eb8abdd4a3fab6932720c3774697c27656ecf4ddcae1732eeb
|
4
|
+
data.tar.gz: cf87062c2146ca04a7dc3e64e85909a8dd5d53799e6f6cea8aeccf2d197701e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2071d0b4baf4b58dd94ec675323f416bc4864f964506e79c04db3618a4338c44f7d151aff1137467f174c07df06ce26bc2cbf2d13b0f66476b6f47ef960305f
|
7
|
+
data.tar.gz: 3e3693defc38e9e1598c1cca637c48fbc305bfb012602d4b458f916c024f9260de650863ed25a4ba15737a4933fc4e5b037a75b70f7fcd70559e561cdb285752
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Install it yourself as:
|
|
15
15
|
Getting help:
|
16
16
|
|
17
17
|
$ bhook --help
|
18
|
-
Bhook version 0.1.
|
18
|
+
Bhook version 0.1.4
|
19
19
|
Usage: bhook --source /source/path --output /output/path
|
20
20
|
-s, --source=SOURCE Path to version controlled directory containing source md files
|
21
21
|
-o, --output=OUTPUT Path to directory where output files are to be generated
|
@@ -23,6 +23,7 @@ Getting help:
|
|
23
23
|
-v, --verbose Print detailed information about files as they are processed
|
24
24
|
-t, --theme=PATH Path to directory containing theme files to use when generating html
|
25
25
|
--generate-theme=PATH Generate a baseline theme that you can then modify to your needs
|
26
|
+
--benchmark Run a performance benchmark for the specified source
|
26
27
|
-h, --help Prints this help
|
27
28
|
|
28
29
|
How I use it:
|
data/lib/bhook/args_parser.rb
CHANGED
@@ -8,7 +8,7 @@ module Bhook
|
|
8
8
|
Options = Struct.new(:source, :output, :watch, :verbose, :theme, :generate_theme, :benchmark)
|
9
9
|
|
10
10
|
def initialize(argv)
|
11
|
-
@args = Options.new(nil, nil, false, false,
|
11
|
+
@args = Options.new(nil, nil, false, false, Bhook::THEME_DIR_PATH, nil, false)
|
12
12
|
@argv = argv.clone
|
13
13
|
@opt_parser = build_opt_parser
|
14
14
|
end
|
data/lib/bhook/config.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Bhook
|
5
|
+
class Config
|
6
|
+
extend T::Sig
|
7
|
+
BHOOK_CONFIG_FILE = T.let('.bhook', String)
|
8
|
+
WEBSITE_KEY = T.let('website', String)
|
9
|
+
|
10
|
+
sig { params(root_dir_path: Pathname).void }
|
11
|
+
def initialize(root_dir_path)
|
12
|
+
config_file_path = root_dir_path.join(BHOOK_CONFIG_FILE)
|
13
|
+
config = if File.exist?(config_file_path)
|
14
|
+
YAML.load(File.read(config_file_path))
|
15
|
+
else
|
16
|
+
{}
|
17
|
+
end
|
18
|
+
@root_dir_path = root_dir_path
|
19
|
+
@website_url = T.let(config[WEBSITE_KEY], T.nilable(String))
|
20
|
+
end
|
21
|
+
|
22
|
+
sig { params(src_file_path: Pathname, src_file_sha: T.nilable(String)).returns(T.nilable(String)) }
|
23
|
+
def website_url_for(src_file_path, src_file_sha)
|
24
|
+
if @website_url && src_file_sha
|
25
|
+
relative_file_path = src_file_path.relative_path_from(@root_dir_path)
|
26
|
+
URI::join(@website_url, "#{src_file_sha}/#{relative_file_path}").to_s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/bhook/directory.rb
CHANGED
@@ -8,11 +8,18 @@ module Bhook
|
|
8
8
|
GIT_DIR = '.git'
|
9
9
|
MD_EXT = '.md'
|
10
10
|
|
11
|
-
sig { params(src_path: Pathname, out_path: Pathname
|
12
|
-
def
|
11
|
+
sig { params(src_path: Pathname, out_path: Pathname).returns(Bhook::Directory) }
|
12
|
+
def self.new_root_directory(src_path, out_path)
|
13
|
+
self.new(src_path, out_path, Git.open(src_path), Bhook::Config.new(src_path))
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
sig { params(src_path: Pathname, out_path: Pathname, git: Git::Base, config: Bhook::Config).void }
|
18
|
+
def initialize(src_path, out_path, git, config)
|
13
19
|
@src_path = src_path
|
14
20
|
@out_path = T.let(out_path.join(src_path.basename), Pathname)
|
15
21
|
@git = git
|
22
|
+
@config = config
|
16
23
|
@sub_dirs = T.let([], T::Array[Directory])
|
17
24
|
@md_files = T.let([], T::Array[MdFile])
|
18
25
|
build_next_level_nodes
|
@@ -50,9 +57,9 @@ module Bhook
|
|
50
57
|
file_threads = []
|
51
58
|
children.each do |child_path|
|
52
59
|
if child_path.directory?
|
53
|
-
@sub_dirs << Directory.new(child_path, @out_path, @git)
|
60
|
+
@sub_dirs << Directory.new(child_path, @out_path, @git, @config)
|
54
61
|
elsif child_path.extname == MD_EXT
|
55
|
-
file_threads << Thread.new { MdFile.new(child_path, @out_path, @git) }
|
62
|
+
file_threads << Thread.new { MdFile.new(child_path, @out_path, @git, @config) }
|
56
63
|
end
|
57
64
|
end
|
58
65
|
file_threads.each { |thread| @md_files << thread.value }
|
data/lib/bhook/md_file.rb
CHANGED
@@ -11,18 +11,15 @@ module Bhook
|
|
11
11
|
sig { returns(Pathname) }
|
12
12
|
attr_reader :src_file_path
|
13
13
|
|
14
|
-
sig { params(src_file_path: Pathname, out_path: Pathname, git: Git::Base).void }
|
15
|
-
def initialize(src_file_path, out_path, git)
|
14
|
+
sig { params(src_file_path: Pathname, out_path: Pathname, git: Git::Base, config: Bhook::Config).void }
|
15
|
+
def initialize(src_file_path, out_path, git, config)
|
16
16
|
L.debug "Reading: #{src_file_path}"
|
17
17
|
@md = T.let(File.read(src_file_path), String)
|
18
18
|
@src_file_path = src_file_path
|
19
19
|
@out_path = out_path
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
'--date=short',
|
24
|
-
'--',
|
25
|
-
@src_file_path).split('|')
|
20
|
+
@git = git
|
21
|
+
@config = config
|
22
|
+
src_file_date, src_file_sha = load_git_file_metadata
|
26
23
|
@src_file_date = T.let(src_file_date, T.nilable(String))
|
27
24
|
@src_file_sha = T.let(src_file_sha, T.nilable(String))
|
28
25
|
end
|
@@ -31,9 +28,10 @@ module Bhook
|
|
31
28
|
def write!(theme)
|
32
29
|
out_file_name = @src_file_path.basename.sub(/\.md$/, '.html')
|
33
30
|
out_file_path = @out_path.join(out_file_name)
|
31
|
+
file_url = @config.website_url_for(@src_file_path, @src_file_sha)
|
34
32
|
|
35
33
|
L.debug "Processing: #{@src_file_sha || 'unversioned'} #{@src_file_path}"
|
36
|
-
rendered_page = theme.render_page(@md, @src_file_sha, @src_file_date)
|
34
|
+
rendered_page = theme.render_page(@md, @src_file_sha, @src_file_date, file_url)
|
37
35
|
|
38
36
|
L.debug "Writing: #{@src_file_sha} #{out_file_path}"
|
39
37
|
File.write(out_file_path, rendered_page)
|
@@ -43,5 +41,17 @@ module Bhook
|
|
43
41
|
def to_s
|
44
42
|
@src_file_path.to_s
|
45
43
|
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
sig { returns(T::Array[String]) }
|
48
|
+
def load_git_file_metadata
|
49
|
+
@git.lib.send(:command, 'log',
|
50
|
+
'-n 1',
|
51
|
+
'--pretty=format:%ad|%H',
|
52
|
+
'--date=short',
|
53
|
+
'--',
|
54
|
+
@src_file_path).split('|')
|
55
|
+
end
|
46
56
|
end
|
47
57
|
end
|
data/lib/bhook/theme/page.erb
CHANGED
@@ -40,6 +40,13 @@
|
|
40
40
|
padding: 0.1em 1em 0.1em 1em;
|
41
41
|
border: 1px solid #bbbbbb;
|
42
42
|
}
|
43
|
+
|
44
|
+
blockquote {
|
45
|
+
border-left: 10px solid #cccccc;
|
46
|
+
background: #eeeeee;
|
47
|
+
display: inline-block;
|
48
|
+
padding: 1em;
|
49
|
+
}
|
43
50
|
</style>
|
44
51
|
<title><%= src_title -%></title>
|
45
52
|
</head>
|
@@ -52,7 +59,13 @@
|
|
52
59
|
</div>
|
53
60
|
<div class="footer d-flex justify-content-center">
|
54
61
|
<div>
|
55
|
-
|
62
|
+
<% short_sha = src_file_sha ? src_file_sha[0..7] : nil -%>
|
63
|
+
<% if file_url && short_sha -%>
|
64
|
+
v. <a href="<%= file_url -%>"><%= short_sha -%></a>,
|
65
|
+
<% elsif short_sha -%>
|
66
|
+
v. <%= short_sha -%>,
|
67
|
+
<% end -%>
|
68
|
+
<%= src_file_date -%> © <a href="https://sidu.in">Sidu Ponnappa</a>
|
56
69
|
</div>
|
57
70
|
</div>
|
58
71
|
</div>
|
data/lib/bhook/theme.rb
CHANGED
@@ -13,8 +13,9 @@ module Bhook
|
|
13
13
|
@after_h1_strategy = T.let(strategy, T.proc.params(binding_instance: Binding).returns(String))
|
14
14
|
end
|
15
15
|
|
16
|
-
sig { params(md: String, src_file_sha: T.nilable(String),
|
17
|
-
|
16
|
+
sig { params(md: String, src_file_sha: T.nilable(String),
|
17
|
+
src_file_date: T.nilable(String), file_url: T.nilable(String)).returns(String) }
|
18
|
+
def render_page(md, src_file_sha, src_file_date, file_url)
|
18
19
|
src_title = T.let('', String)
|
19
20
|
|
20
21
|
doc = Kramdown::Document.new(md)
|
data/lib/bhook/version.rb
CHANGED
data/lib/bhook/workspace.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
module Bhook
|
5
5
|
class Workspace
|
6
6
|
extend T::Sig
|
7
|
-
|
7
|
+
|
8
8
|
sig { params(src_path: String, out_path: String, theme_path: String).void }
|
9
9
|
def initialize(src_path, out_path, theme_path)
|
10
10
|
@src_path = T.let(Pathname.new(src_path).expand_path, Pathname)
|
@@ -36,10 +36,10 @@ module Bhook
|
|
36
36
|
root_dir.all_md_files
|
37
37
|
end
|
38
38
|
|
39
|
-
private
|
40
|
-
sig { returns(Bhook::
|
39
|
+
private
|
40
|
+
sig { returns(Bhook::Directory) }
|
41
41
|
def root_dir
|
42
|
-
|
42
|
+
Directory.new_root_directory(@src_path, @out_path)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
data/lib/bhook.rb
CHANGED
@@ -7,6 +7,8 @@ require 'pathname'
|
|
7
7
|
require 'erb'
|
8
8
|
require 'optparse'
|
9
9
|
require 'logger'
|
10
|
+
require 'uri'
|
11
|
+
require 'yaml'
|
10
12
|
require 'sorbet-runtime'
|
11
13
|
require 'git'
|
12
14
|
require 'kramdown'
|
@@ -25,10 +27,10 @@ end
|
|
25
27
|
require_relative 'bhook/version'
|
26
28
|
require_relative 'bhook/logger'
|
27
29
|
require_relative 'bhook/args_parser'
|
30
|
+
require_relative 'bhook/config'
|
28
31
|
require_relative 'bhook/theme_generator'
|
29
32
|
require_relative 'bhook/theme'
|
30
33
|
require_relative 'bhook/converter/html'
|
31
34
|
require_relative 'bhook/directory'
|
32
|
-
require_relative 'bhook/root_directory'
|
33
35
|
require_relative 'bhook/md_file'
|
34
36
|
require_relative 'bhook/workspace'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bhook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sidu Ponnappa
|
@@ -169,11 +169,11 @@ files:
|
|
169
169
|
- bin/bhook
|
170
170
|
- lib/bhook.rb
|
171
171
|
- lib/bhook/args_parser.rb
|
172
|
+
- lib/bhook/config.rb
|
172
173
|
- lib/bhook/converter/html.rb
|
173
174
|
- lib/bhook/directory.rb
|
174
175
|
- lib/bhook/logger.rb
|
175
176
|
- lib/bhook/md_file.rb
|
176
|
-
- lib/bhook/root_directory.rb
|
177
177
|
- lib/bhook/theme.rb
|
178
178
|
- lib/bhook/theme/_after_h1.erb
|
179
179
|
- lib/bhook/theme/page.erb
|
data/lib/bhook/root_directory.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# typed: false
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
module Bhook
|
5
|
-
class RootDirectory < Directory
|
6
|
-
extend T::Sig
|
7
|
-
|
8
|
-
sig { params(src_path: Pathname, out_path: Pathname).void }
|
9
|
-
def initialize(src_path, out_path)
|
10
|
-
super(src_path, out_path, Git.open(src_path))
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|