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 +4 -4
- data/lib/query_stream/configuration.rb +6 -0
- data/lib/query_stream/version.rb +1 -1
- data/lib/query_stream.rb +25 -4
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4535df4515bcf03c03c770986f6d62b62e475b6cac1803fdd15c3b5885f1d393
|
|
4
|
+
data.tar.gz: 442dedf0baacf24a92f95a22fb5bab4de2086aebcf0b26d6affc724577fb7140
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
data/lib/query_stream/version.rb
CHANGED
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.
|
|
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.
|
|
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: []
|