Module: Vivlio::Starter::CLI::PreProcessCommands::DataRender

Defined in:
lib/vivlio/starter/cli/pre_process/data_render.rb,
lib/vivlio/starter/cli/pre_process/data_render/singularize.rb,
lib/vivlio/starter/cli/pre_process/data_render/template_compiler.rb,
lib/vivlio/starter/cli/pre_process/data_render/query_stream_parser.rb

Overview

QueryStream 記法を展開してMarkdownを生成するモジュール実処理は query-stream gem に委譲する

Defined Under Namespace

Modules: QueryStreamParser, Singularize, TemplateCompiler

Class Method Summary collapse

Class Method Details

.process(content, source_filename: nil, data_dir: 'data', templates_dir: Common::TEMPLATES_DIR) ⇒ String

Markdown コンテンツ内の QueryStream 記法をすべて展開する

Parameters:

  • content (String)

    Markdown コンテンツ

  • source_filename (String) (defaults to: nil)

    エラー報告用のソースファイル名

  • data_dir (String) (defaults to: 'data')

    データディレクトリのパス

  • templates_dir (String) (defaults to: Common::TEMPLATES_DIR)

    テンプレートディレクトリのパス

Returns:

  • (String)

    展開後の Markdown コンテンツ



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/vivlio/starter/cli/pre_process/data_render.rb', line 33

def process(content, source_filename: nil, data_dir: 'data', templates_dir: Common::TEMPLATES_DIR)
  # gem 側はログを出力しないため、on_error / on_warning コールバックでメッセージを構成する。
  # Common.log_error / log_warn が ❌ / ⚠️ の絵文字プレフィックスを付与するため、
  # コールバック側ではプレフィックスを付けない。
  on_error = lambda do |error|
    case error
    in QueryStream::TemplateNotFoundError => e
      # location は "filename:line" 形式
      detail_lines = ["雛形の場所: #{e.template_path}"]
      detail_lines << "ヒント: #{e.hint}" if e.hint
      Common.log_error(
        "#{e.location} - 雛形ファイル '#{File.basename(e.template_path)}' が見つかりません(記法: #{e.query}",
        detail: detail_lines.join("\n")
      )
    in QueryStream::DataNotFoundError => e
      Common.log_error(
        "#{e.location} - データファイルが見つかりません(記法: #{e.query}",
        detail: "データの場所: #{e.expected_path}"
      )
    else
      Common.log_error("QueryStream 展開エラー: #{error.message}")
    end
  end

  on_warning = lambda do |warning|
    case warning
    in QueryStream::NoResultWarning => w
      Common.log_warn(
        "#{w.location} - 一件検索で該当レコードが見つかりません(記法: #{w.query}"
      )
    in QueryStream::AmbiguousQueryWarning => w
      Common.log_warn(
        "#{w.location} - 一件検索で複数件ヒット(#{w.count} 件)。条件を明示してください(記法: #{w.query}"
      )
    else
      Common.log_warn("QueryStream 警告: #{warning.message}")
    end
  end

  QueryStream.render(
    content,
    source_filename:,
    data_dir:,
    templates_dir:,
    on_error:,
    on_warning:
  )
end