query-stream 1.2.2 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3f3bc788221f5c37fb1327f132501ec5fe4607e97f3e673ddbc2a32dfeeb188
4
- data.tar.gz: 9111b6651c0596097399b9ffb46f8acea17928dd572f3a7af38ef167ddd6a037
3
+ metadata.gz: 4535df4515bcf03c03c770986f6d62b62e475b6cac1803fdd15c3b5885f1d393
4
+ data.tar.gz: 442dedf0baacf24a92f95a22fb5bab4de2086aebcf0b26d6affc724577fb7140
5
5
  SHA512:
6
- metadata.gz: 792bbe4684efb730c7d1f122ecdf6cff9dfbaa484254f7bf9830b47790978cba0a5150939845975e07fdd2ac9d24e464a66b2f17ee7085e4e8097f041fecb105
7
- data.tar.gz: e3de3485e7fdb0f5bdb9d8f728ee2742387540c342f82a27765b80282d9dff1b337a680f419467440fdfbf9b201dfc27414d43110f0f37864e097de36d4f1c04
6
+ metadata.gz: 0c5ae30a471b7b3c8921ff20fa3e764cb3852f1385a74679cd3c52ace1f3ffe0ee89a43b55fc915123757dee0fe55f0bfa960b49edf5f6d0605db4b49b6f2350
7
+ data.tar.gz: 7295c55fb86e7fc8dd344a615e0f87f554e23808e05060368af37579380262c394fd7fa413074e23468d268e9049082bbc31b95f3d3d9d2f206a13e89bfea483
@@ -25,11 +25,17 @@ module QueryStream
25
25
  # @return [Logger] ログ出力先
26
26
  attr_accessor :logger
27
27
 
28
+ # 1 記法の展開結果を、コンテキスト付きで呼び出し元へ通す後段フィルタ。
29
+ # gem 自身は用途を規定しない(画像パス解決など呼び出し元固有の後処理を担わせる)。
30
+ # @return [Proc, nil] (text, context) -> String。String 以外を返した場合は元の展開結果を採用する
31
+ attr_accessor :post_render
32
+
28
33
  def initialize
29
34
  @data_dir = 'data'
30
35
  @templates_dir = 'templates'
31
36
  @default_format = :md
32
37
  @logger = Logger.new($stdout)
38
+ @post_render = nil
33
39
  end
34
40
  end
35
41
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QueryStream
4
- VERSION = '1.2.2'
4
+ VERSION = '1.3.0'
5
5
  end
data/lib/query_stream.rb CHANGED
@@ -57,10 +57,13 @@ module QueryStream
57
57
  # @param templates_dir [String, nil] テンプレートディレクトリ(nil時はconfigを使用)
58
58
  # @param on_error [Proc, nil] エラー時コールバック。|exception| を受け取る。省略時は何もしない。
59
59
  # @param on_warning [Proc, nil] 警告時コールバック。|warning| を受け取る。省略時は何もしない。
60
+ # @param post_render [Proc, nil] 展開結果の後段フィルタ。(text, context) -> String。省略時は configuration.post_render を使う。
60
61
  # @return [String] 展開後のテキストコンテンツ
61
- def render(content, source_filename: nil, data_dir: nil, templates_dir: nil, on_error: nil, on_warning: nil)
62
+ def render(content, source_filename: nil, data_dir: nil, templates_dir: nil, on_error: nil, on_warning: nil,
63
+ post_render: nil)
62
64
  data_dir ||= configuration.data_dir
63
65
  templates_dir ||= configuration.templates_dir
66
+ post_render ||= configuration.post_render
64
67
 
65
68
  lines = content.lines
66
69
  result = []
@@ -85,7 +88,7 @@ module QueryStream
85
88
  if line.match?(QUERY_STREAM_PATTERN)
86
89
  begin
87
90
  expanded = render_query(
88
- line.chomp, line_number:, source_filename:, data_dir:, templates_dir:, on_warning:
91
+ line.chomp, line_number:, source_filename:, data_dir:, templates_dir:, on_warning:, post_render:
89
92
  )
90
93
  result << expanded << "\n"
91
94
  rescue Error => e
@@ -107,8 +110,10 @@ module QueryStream
107
110
  # @param source_filename [String, nil] ソースファイル名
108
111
  # @param data_dir [String, nil] データディレクトリ
109
112
  # @param templates_dir [String, nil] テンプレートディレクトリ
113
+ # @param post_render [Proc, nil] 展開結果の後段フィルタ。(text, context) -> String
110
114
  # @return [String] 展開後のテキスト
111
- def render_query(query, line_number: nil, source_filename: nil, data_dir: nil, templates_dir: nil, on_warning: nil)
115
+ def render_query(query, line_number: nil, source_filename: nil, data_dir: nil, templates_dir: nil, on_warning: nil,
116
+ post_render: nil)
112
117
  data_dir ||= configuration.data_dir
113
118
  templates_dir ||= configuration.templates_dir
114
119
  location = source_filename ? "#{source_filename}:#{line_number}" : "行#{line_number}"
@@ -178,7 +183,23 @@ module QueryStream
178
183
  template_content = File.read(template_path, encoding: 'utf-8')
179
184
 
180
185
  # --- Phase: Render ---
181
- TemplateCompiler.render(template_content, records, source_filename:, line_number:)
186
+ rendered = TemplateCompiler.render(template_content, records, source_filename:, line_number:)
187
+
188
+ # --- Phase: Post-render filter ---
189
+ # 展開結果を呼び出し元の後段フィルタへ通す(画像パス解決など gem 外の後処理)。
190
+ # コールバックが String 以外を返した場合は安全側に倒して元の展開結果を採用する。
191
+ return rendered unless post_render
192
+
193
+ context = {
194
+ source: parsed[:source], # 記法に書かれた論理名(例: "physics_book")
195
+ data_file: data_file, # 単複解決後の実パス(例: "data/physics_books.yml")
196
+ data_dir: data_dir,
197
+ template_path: template_path,
198
+ query: query,
199
+ location: location # "filename:line" 形式
200
+ }
201
+ result = post_render.call(rendered, context)
202
+ result.is_a?(String) ? result : rendered
182
203
  end
183
204
 
184
205
  # テキスト内の QueryStream 記法を検出してリストを返す
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: query-stream
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Atelier Mirai
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubygems_version: 4.0.10
127
+ rubygems_version: 4.0.16
128
128
  specification_version: 4
129
129
  summary: QueryStream - YAML/JSON data renderer with template expansion
130
130
  test_files: []