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.
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Bindery
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.1
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 new` 创建整套项目结构,
15
- `bindery generate book` 为单本书生成骨架,
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-gem
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-gem
54
+ source_code_uri: https://github.com/gamepunk/bindery-cli
49
55
  rubygems_mfa_required: 'true'
50
56
  rdoc_options: []
51
57
  require_paths: