ast-template 7.1.9 → 7.1.10
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
- checksums.yaml.gz.sig +0 -0
- data/lib/ast/template/rust_host_provider.rb +53 -0
- data/lib/ast/template/typed_core_bridge.rb +121 -0
- data/lib/ast/template/version.rb +1 -1
- data/lib/ast/template.rb +5 -0
- data.tar.gz.sig +0 -0
- metadata +23 -21
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4509a90704ed26fc5cf41a36d21cebde27bb6c0859831f61234b3e0f4236dc89
|
|
4
|
+
data.tar.gz: 8764fbc1188e4d07232410d74bb073b45c6aa8f9f556c1ad3015621ff2d0bafd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: be5a7b2e71c9b7132f6e9595e9795b0e8b2f614ae3a76ec9e9a386881a3af43d197e332ed39a9f07b5d1cf2eae25d6fe55c7ce8d055ca23a9dc449328b0e63fd
|
|
7
|
+
data.tar.gz: a0048712a2b6158324b1991d026769dbd35ebc0a69820fec77c5987b69057eccda088d8bdcd0b266e49834c181e7449264f73c79990209b8a196bf68dd389b55
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'typed_core_bridge'
|
|
4
|
+
|
|
5
|
+
module Ast
|
|
6
|
+
module Template
|
|
7
|
+
# Explicit report-only bridge for the portable Rust session contract.
|
|
8
|
+
# Template execution and filesystem mutation remain Ruby-owned.
|
|
9
|
+
class RustHostProvider
|
|
10
|
+
include TypedCoreBridge
|
|
11
|
+
PROVIDER_ID = 'rust.ast-template.session-reports'
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
def available?
|
|
15
|
+
require 'structuredmerge_core' unless defined?(::StructuredmergeCore)
|
|
16
|
+
%i[report_template_options report_template_profile plan_template_directory].all? do |name|
|
|
17
|
+
::StructuredmergeCore.respond_to?(name)
|
|
18
|
+
end
|
|
19
|
+
rescue LoadError
|
|
20
|
+
false
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def provider_id = PROVIDER_ID
|
|
25
|
+
|
|
26
|
+
def capabilities
|
|
27
|
+
{
|
|
28
|
+
operations: %i[options_report profile_report plan_report],
|
|
29
|
+
backend: :rust_tslp,
|
|
30
|
+
execution: :report_and_plan_only,
|
|
31
|
+
source_projection: :ruby_owned
|
|
32
|
+
}.freeze
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def report(request)
|
|
36
|
+
core_report(request)
|
|
37
|
+
rescue KeyError, ArgumentError, TypeError => e
|
|
38
|
+
raise e.message.to_s
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def plan(request)
|
|
42
|
+
report(request.merge(kind: 'plan'))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def host
|
|
48
|
+
require 'structuredmerge_core' unless defined?(::StructuredmergeCore)
|
|
49
|
+
::StructuredmergeCore
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Ast
|
|
4
|
+
module Template
|
|
5
|
+
# Converts transport shapes only; configuration resolution and planning
|
|
6
|
+
# remain in Rust. No Ruby selection, template execution or writes occur here.
|
|
7
|
+
module TypedCoreBridge
|
|
8
|
+
REPORT_FIELDS = {
|
|
9
|
+
'TemplateSessionRequestReport' => %w[request_kind profile_name mode ready diagnostics resolved_options],
|
|
10
|
+
'TemplateSessionOptions' => %w[mode template_root destination_root context default_strategy overrides
|
|
11
|
+
replacements allowed_families config],
|
|
12
|
+
'TemplateDestinationContext' => %w[project_name],
|
|
13
|
+
'TemplateStrategyOverride' => %w[path strategy],
|
|
14
|
+
'TemplateTokenConfig' => %w[pre post separators min_segments max_segments segment_pattern],
|
|
15
|
+
'SessionDiagnostic' => %w[severity category reason path family message],
|
|
16
|
+
'TemplateSessionPlanReport' => %w[mode runner_report],
|
|
17
|
+
'TemplateDirectoryRunnerReport' => %w[plan_report preview run_report apply_report],
|
|
18
|
+
'TemplateDirectoryPlanReport' => %w[entries summary],
|
|
19
|
+
'TemplateDirectoryPlanReportEntry' => %w[template_source_path logical_destination_path destination_path
|
|
20
|
+
execution_action write_action status previewable],
|
|
21
|
+
'TemplateDirectoryPlanReportSummary' => %w[create update keep blocked omitted],
|
|
22
|
+
'TemplatePreviewResult' => %w[result_files created_paths updated_paths kept_paths blocked_paths omitted_paths]
|
|
23
|
+
}.freeze
|
|
24
|
+
OMIT_NIL = {
|
|
25
|
+
'TemplateSessionRequestReport' => %w[profile_name],
|
|
26
|
+
'TemplateSessionOptions' => %w[config],
|
|
27
|
+
'TemplateDestinationContext' => %w[project_name],
|
|
28
|
+
'TemplateTokenConfig' => %w[max_segments],
|
|
29
|
+
'SessionDiagnostic' => %w[path family]
|
|
30
|
+
}.freeze
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def core_report(request)
|
|
35
|
+
request = require_hash(normalize_transport(request))
|
|
36
|
+
options = template_options(request.fetch('options'))
|
|
37
|
+
result = case request.fetch('kind')
|
|
38
|
+
when 'options'
|
|
39
|
+
host.report_template_options(options)
|
|
40
|
+
when 'profile'
|
|
41
|
+
profiles = require_hash(request.fetch('profiles', {})).transform_values do |profile|
|
|
42
|
+
template_profile(profile)
|
|
43
|
+
end
|
|
44
|
+
host.report_template_profile(host::TemplateProfileRequest.new(
|
|
45
|
+
profile_name: request.fetch('profile_name'), profiles: profiles, options: options
|
|
46
|
+
))
|
|
47
|
+
when 'plan'
|
|
48
|
+
host.plan_template_directory(options)
|
|
49
|
+
else
|
|
50
|
+
raise ArgumentError, "unsupported ast-template report kind #{request['kind'].inspect}"
|
|
51
|
+
end
|
|
52
|
+
project_report(result).transform_keys(&:to_sym)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def normalize_transport(value)
|
|
56
|
+
case value
|
|
57
|
+
when Hash then value.to_h { |key, item| [key.to_s, normalize_transport(item)] }
|
|
58
|
+
when Array then value.map { |item| normalize_transport(item) }
|
|
59
|
+
when Symbol then value.to_s
|
|
60
|
+
else value
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def template_fields(value)
|
|
65
|
+
value = require_hash(value)
|
|
66
|
+
fields = %w[mode default_strategy replacements].to_h { |field| [field.to_sym, value.fetch(field)] }
|
|
67
|
+
fields[:replacements] = require_hash(fields[:replacements])
|
|
68
|
+
fields[:context] =
|
|
69
|
+
host::TemplateDestinationContext.new(project_name: require_hash(value.fetch('context'))['project_name'])
|
|
70
|
+
overrides = value.fetch('overrides')
|
|
71
|
+
raise TypeError, 'template overrides must be an array' unless overrides.is_a?(Array)
|
|
72
|
+
|
|
73
|
+
fields[:overrides] = overrides.map do |entry|
|
|
74
|
+
entry = require_hash(entry)
|
|
75
|
+
host::TemplateStrategyOverride.new(path: entry.fetch('path'), strategy: entry.fetch('strategy'))
|
|
76
|
+
end
|
|
77
|
+
fields[:allowed_families] = value['allowed_families']
|
|
78
|
+
fields[:config] = unless value['config'].nil?
|
|
79
|
+
config = require_hash(value['config'])
|
|
80
|
+
args = %w[pre post separators min_segments segment_pattern].to_h do |key|
|
|
81
|
+
[key.to_sym, config.fetch(key)]
|
|
82
|
+
end
|
|
83
|
+
host::TemplateTokenConfig.new(**args, max_segments: config['max_segments'])
|
|
84
|
+
end
|
|
85
|
+
fields
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def require_hash(value)
|
|
89
|
+
raise TypeError, 'template request fields must be objects' unless value.is_a?(Hash)
|
|
90
|
+
|
|
91
|
+
value
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def template_options(value)
|
|
95
|
+
host::TemplateSessionOptions.new(**template_fields(value),
|
|
96
|
+
template_root: value.fetch('template_root'), destination_root: value.fetch('destination_root'))
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def template_profile(value)
|
|
100
|
+
host::DirectorySessionProfile.new(**template_fields(value))
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def project_report(value)
|
|
104
|
+
case value
|
|
105
|
+
when Hash then value.transform_values { |item| project_report(item) }
|
|
106
|
+
when Array then value.map { |item| project_report(item) }
|
|
107
|
+
when Symbol then value.to_s
|
|
108
|
+
when NilClass, String, Numeric, TrueClass, FalseClass then value
|
|
109
|
+
else
|
|
110
|
+
type = value.class.name.delete_prefix('StructuredmergeCore::')
|
|
111
|
+
REPORT_FIELDS.fetch(type).each_with_object({}) do |field, result|
|
|
112
|
+
item = value.public_send(field)
|
|
113
|
+
next if item.nil? && OMIT_NIL.fetch(type, []).include?(field)
|
|
114
|
+
|
|
115
|
+
result[field] = project_report(item)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
data/lib/ast/template/version.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Ast
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = '7.1.
|
|
8
|
+
VERSION = '7.1.10'
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
data/lib/ast/template.rb
CHANGED
|
@@ -25,8 +25,13 @@ module Ast
|
|
|
25
25
|
'rust' => 'Rust',
|
|
26
26
|
'typescript' => 'TypeScript'
|
|
27
27
|
}.freeze
|
|
28
|
+
autoload :RustHostProvider, 'ast/template/rust_host_provider'
|
|
28
29
|
|
|
29
30
|
class << self
|
|
31
|
+
def rust_host_provider
|
|
32
|
+
@rust_host_provider ||= RustHostProvider.new
|
|
33
|
+
end
|
|
34
|
+
|
|
30
35
|
def readme_family_language_aliases(self_language, language_order = README_FAMILY_LANGUAGE_ORDER)
|
|
31
36
|
self_id = self_language.to_s
|
|
32
37
|
alternatives = language_order.map(&:to_s).reject { |language| language == self_id }
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ast-template
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -43,14 +43,14 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 7.1.
|
|
46
|
+
version: 7.1.10
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - '='
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 7.1.
|
|
53
|
+
version: 7.1.10
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: version_gem
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -77,20 +77,20 @@ dependencies:
|
|
|
77
77
|
requirements:
|
|
78
78
|
- - "~>"
|
|
79
79
|
- !ruby/object:Gem::Version
|
|
80
|
-
version: '3.
|
|
80
|
+
version: '3.1'
|
|
81
81
|
- - ">="
|
|
82
82
|
- !ruby/object:Gem::Version
|
|
83
|
-
version: 3.
|
|
83
|
+
version: 3.1.8
|
|
84
84
|
type: :development
|
|
85
85
|
prerelease: false
|
|
86
86
|
version_requirements: !ruby/object:Gem::Requirement
|
|
87
87
|
requirements:
|
|
88
88
|
- - "~>"
|
|
89
89
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: '3.
|
|
90
|
+
version: '3.1'
|
|
91
91
|
- - ">="
|
|
92
92
|
- !ruby/object:Gem::Version
|
|
93
|
-
version: 3.
|
|
93
|
+
version: 3.1.8
|
|
94
94
|
- !ruby/object:Gem::Dependency
|
|
95
95
|
name: bundler-audit
|
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -168,7 +168,7 @@ dependencies:
|
|
|
168
168
|
version: '3.2'
|
|
169
169
|
- - ">="
|
|
170
170
|
- !ruby/object:Gem::Version
|
|
171
|
-
version: 3.2.
|
|
171
|
+
version: 3.2.5
|
|
172
172
|
type: :development
|
|
173
173
|
prerelease: false
|
|
174
174
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -178,7 +178,7 @@ dependencies:
|
|
|
178
178
|
version: '3.2'
|
|
179
179
|
- - ">="
|
|
180
180
|
- !ruby/object:Gem::Version
|
|
181
|
-
version: 3.2.
|
|
181
|
+
version: 3.2.5
|
|
182
182
|
- !ruby/object:Gem::Dependency
|
|
183
183
|
name: kettle-test
|
|
184
184
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -188,7 +188,7 @@ dependencies:
|
|
|
188
188
|
version: '2.0'
|
|
189
189
|
- - ">="
|
|
190
190
|
- !ruby/object:Gem::Version
|
|
191
|
-
version: 2.0.
|
|
191
|
+
version: 2.0.23
|
|
192
192
|
type: :development
|
|
193
193
|
prerelease: false
|
|
194
194
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -198,7 +198,7 @@ dependencies:
|
|
|
198
198
|
version: '2.0'
|
|
199
199
|
- - ">="
|
|
200
200
|
- !ruby/object:Gem::Version
|
|
201
|
-
version: 2.0.
|
|
201
|
+
version: 2.0.23
|
|
202
202
|
- !ruby/object:Gem::Dependency
|
|
203
203
|
name: turbo_tests2
|
|
204
204
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -208,7 +208,7 @@ dependencies:
|
|
|
208
208
|
version: '3.2'
|
|
209
209
|
- - ">="
|
|
210
210
|
- !ruby/object:Gem::Version
|
|
211
|
-
version: 3.2.
|
|
211
|
+
version: 3.2.14
|
|
212
212
|
type: :development
|
|
213
213
|
prerelease: false
|
|
214
214
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -218,7 +218,7 @@ dependencies:
|
|
|
218
218
|
version: '3.2'
|
|
219
219
|
- - ">="
|
|
220
220
|
- !ruby/object:Gem::Version
|
|
221
|
-
version: 3.2.
|
|
221
|
+
version: 3.2.14
|
|
222
222
|
- !ruby/object:Gem::Dependency
|
|
223
223
|
name: ruby-progressbar
|
|
224
224
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -242,7 +242,7 @@ dependencies:
|
|
|
242
242
|
version: '1.0'
|
|
243
243
|
- - ">="
|
|
244
244
|
- !ruby/object:Gem::Version
|
|
245
|
-
version: 1.0.
|
|
245
|
+
version: 1.0.9
|
|
246
246
|
type: :development
|
|
247
247
|
prerelease: false
|
|
248
248
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -252,7 +252,7 @@ dependencies:
|
|
|
252
252
|
version: '1.0'
|
|
253
253
|
- - ">="
|
|
254
254
|
- !ruby/object:Gem::Version
|
|
255
|
-
version: 1.0.
|
|
255
|
+
version: 1.0.9
|
|
256
256
|
- !ruby/object:Gem::Dependency
|
|
257
257
|
name: gitmoji-regex
|
|
258
258
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -262,7 +262,7 @@ dependencies:
|
|
|
262
262
|
version: '2.0'
|
|
263
263
|
- - ">="
|
|
264
264
|
- !ruby/object:Gem::Version
|
|
265
|
-
version: 2.0.
|
|
265
|
+
version: 2.0.15
|
|
266
266
|
type: :development
|
|
267
267
|
prerelease: false
|
|
268
268
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -272,7 +272,7 @@ dependencies:
|
|
|
272
272
|
version: '2.0'
|
|
273
273
|
- - ">="
|
|
274
274
|
- !ruby/object:Gem::Version
|
|
275
|
-
version: 2.0.
|
|
275
|
+
version: 2.0.15
|
|
276
276
|
description: "\U0001F48E Product-level directory session reporting above ast-merge
|
|
277
277
|
for Structured Merge."
|
|
278
278
|
email:
|
|
@@ -285,6 +285,8 @@ files:
|
|
|
285
285
|
- README.md
|
|
286
286
|
- lib/ast-template.rb
|
|
287
287
|
- lib/ast/template.rb
|
|
288
|
+
- lib/ast/template/rust_host_provider.rb
|
|
289
|
+
- lib/ast/template/typed_core_bridge.rb
|
|
288
290
|
- lib/ast/template/version.rb
|
|
289
291
|
- sig/ast/template.rbs
|
|
290
292
|
homepage: https://github.com/structuredmerge/structuredmerge-ruby
|
|
@@ -293,10 +295,10 @@ licenses:
|
|
|
293
295
|
- PolyForm-Small-Business-1.0.0
|
|
294
296
|
metadata:
|
|
295
297
|
homepage_uri: https://structuredmerge.org
|
|
296
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
297
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
298
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.10
|
|
299
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.10/CHANGELOG.md
|
|
298
300
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
299
|
-
documentation_uri: https://www.rubydoc.info/gems/ast-template/7.1.
|
|
301
|
+
documentation_uri: https://www.rubydoc.info/gems/ast-template/7.1.10
|
|
300
302
|
funding_uri: https://github.com/sponsors/pboling
|
|
301
303
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
302
304
|
news_uri: https://www.railsbling.com/tags/ast-template
|
|
@@ -327,7 +329,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
327
329
|
- !ruby/object:Gem::Version
|
|
328
330
|
version: '0'
|
|
329
331
|
requirements: []
|
|
330
|
-
rubygems_version: 4.0.
|
|
332
|
+
rubygems_version: 4.0.20
|
|
331
333
|
specification_version: 4
|
|
332
334
|
summary: "\U0001F48E Structured Merge template orchestration contracts for the Ruby
|
|
333
335
|
monorepo"
|
metadata.gz.sig
CHANGED
|
Binary file
|