bindery-cli 0.1.1 → 0.2.0
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/README.md +44 -13
- data/lib/bindery/book.rb +34 -1
- data/lib/bindery/builder.rb +71 -7
- data/lib/bindery/cli.rb +267 -33
- data/lib/bindery/cover.rb +135 -0
- data/lib/bindery/generators/book_generator.rb +20 -4
- data/lib/bindery/generators/chapter_generator.rb +49 -0
- data/lib/bindery/generators/project_generator.rb +16 -10
- data/lib/bindery/generators/templates/book/metadata.yaml.erb +5 -3
- data/lib/bindery/generators/templates/project/README.md.erb +29 -4
- data/lib/bindery/generators/templates/project/gitignore +0 -1
- data/lib/bindery/generators/volume_generator.rb +66 -0
- data/lib/bindery/image.rb +64 -0
- data/lib/bindery/project.rb +11 -1
- data/lib/bindery/server.rb +185 -0
- data/lib/bindery/validator.rb +52 -0
- data/lib/bindery/version.rb +1 -1
- data/lib/bindery.rb +6 -0
- metadata +12 -6
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require "yaml"
|
|
2
|
+
|
|
3
|
+
module Bindery
|
|
4
|
+
# 构建前校验:检查一本书是否具备构建条件
|
|
5
|
+
module Validator
|
|
6
|
+
module_function
|
|
7
|
+
|
|
8
|
+
# 硬性问题(会导致构建失败),返回字符串数组,空数组表示通过
|
|
9
|
+
def check(book, project_root: Project.root!)
|
|
10
|
+
issues = []
|
|
11
|
+
|
|
12
|
+
if book.metadata_file.file?
|
|
13
|
+
begin
|
|
14
|
+
meta = book.metadata
|
|
15
|
+
issues << "metadata.yaml 缺少 title" if meta["title"].to_s.strip.empty?
|
|
16
|
+
rescue Psych::SyntaxError, Bindery::Error => e
|
|
17
|
+
issues << "metadata.yaml 解析失败: #{e.message}"
|
|
18
|
+
end
|
|
19
|
+
else
|
|
20
|
+
issues << "缺少 metadata.yaml"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
issues << "chapters/ 目录下没有任何 .md 文件" if book.all_chapters.empty?
|
|
24
|
+
issues << "未安装 pandoc(构建前请先安装)" unless pandoc_installed?
|
|
25
|
+
|
|
26
|
+
issues
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# 软性警告(不影响构建,但建议修正),返回字符串数组
|
|
30
|
+
def warnings(book, project_root: Project.root!)
|
|
31
|
+
warns = []
|
|
32
|
+
|
|
33
|
+
cover = book.cover_path
|
|
34
|
+
if cover.nil?
|
|
35
|
+
warns << "缺少封面(可在书籍目录放置 cover.jpg)"
|
|
36
|
+
else
|
|
37
|
+
dims = Bindery::Image.dimensions(cover)
|
|
38
|
+
if dims.nil?
|
|
39
|
+
warns << "封面不是有效的 JPEG/PNG 图片"
|
|
40
|
+
elsif dims[0] < 600 || dims[1] < 800
|
|
41
|
+
warns << "封面尺寸偏小(#{dims[0]}×#{dims[1]},建议至少 600×800)"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
warns
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def pandoc_installed?
|
|
49
|
+
system("pandoc", "--version", out: File::NULL, err: File::NULL)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
data/lib/bindery/version.rb
CHANGED
data/lib/bindery.rb
CHANGED
|
@@ -3,7 +3,13 @@ require_relative "bindery/errors"
|
|
|
3
3
|
require_relative "bindery/project"
|
|
4
4
|
require_relative "bindery/book"
|
|
5
5
|
require_relative "bindery/builder"
|
|
6
|
+
require_relative "bindery/image"
|
|
7
|
+
require_relative "bindery/cover"
|
|
8
|
+
require_relative "bindery/validator"
|
|
6
9
|
require_relative "bindery/index"
|
|
10
|
+
require_relative "bindery/server"
|
|
7
11
|
require_relative "bindery/generators/project_generator"
|
|
8
12
|
require_relative "bindery/generators/book_generator"
|
|
13
|
+
require_relative "bindery/generators/chapter_generator"
|
|
14
|
+
require_relative "bindery/generators/volume_generator"
|
|
9
15
|
require_relative "bindery/cli"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bindery-cli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Billow Wang
|
|
@@ -10,9 +10,9 @@ cert_chain: []
|
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies: []
|
|
12
12
|
description: |
|
|
13
|
-
bindery
|
|
14
|
-
`bindery
|
|
15
|
-
`bindery
|
|
13
|
+
bindery 是脚手架工具:
|
|
14
|
+
`bindery init` 在当前目录初始化项目,
|
|
15
|
+
`bindery new book` 为单本书生成骨架(ID 自动生成),
|
|
16
16
|
`bindery build` 调用 Pandoc 批量构建 EPUB。
|
|
17
17
|
仅依赖 Ruby 标准库,不引入任何第三方 gem。
|
|
18
18
|
executables:
|
|
@@ -27,9 +27,11 @@ files:
|
|
|
27
27
|
- lib/bindery/book.rb
|
|
28
28
|
- lib/bindery/builder.rb
|
|
29
29
|
- lib/bindery/cli.rb
|
|
30
|
+
- lib/bindery/cover.rb
|
|
30
31
|
- lib/bindery/errors.rb
|
|
31
32
|
- lib/bindery/generators/base.rb
|
|
32
33
|
- lib/bindery/generators/book_generator.rb
|
|
34
|
+
- lib/bindery/generators/chapter_generator.rb
|
|
33
35
|
- lib/bindery/generators/project_generator.rb
|
|
34
36
|
- lib/bindery/generators/templates/book/chapters/01-chapter.md.erb
|
|
35
37
|
- lib/bindery/generators/templates/book/metadata.yaml.erb
|
|
@@ -38,14 +40,18 @@ files:
|
|
|
38
40
|
- lib/bindery/generators/templates/project/gitignore
|
|
39
41
|
- lib/bindery/generators/templates/project/style.css
|
|
40
42
|
- lib/bindery/generators/templates/project/workflow.yml
|
|
43
|
+
- lib/bindery/generators/volume_generator.rb
|
|
44
|
+
- lib/bindery/image.rb
|
|
41
45
|
- lib/bindery/index.rb
|
|
42
46
|
- lib/bindery/project.rb
|
|
47
|
+
- lib/bindery/server.rb
|
|
48
|
+
- lib/bindery/validator.rb
|
|
43
49
|
- lib/bindery/version.rb
|
|
44
|
-
homepage: https://github.com/gamepunk/bindery-
|
|
50
|
+
homepage: https://github.com/gamepunk/bindery-cli
|
|
45
51
|
licenses:
|
|
46
52
|
- MIT
|
|
47
53
|
metadata:
|
|
48
|
-
source_code_uri: https://github.com/gamepunk/bindery-
|
|
54
|
+
source_code_uri: https://github.com/gamepunk/bindery-cli
|
|
49
55
|
rubygems_mfa_required: 'true'
|
|
50
56
|
rdoc_options: []
|
|
51
57
|
require_paths:
|