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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da32404cd74a1e51bf20d2901a5072096f7045ed9f6c6dbb887039d81e01c00c
4
- data.tar.gz: ca05ca12b3195a801b3fe7cb995b48b84428dba102bd4d4dbe3a95c00ed81f0a
3
+ metadata.gz: 4509a90704ed26fc5cf41a36d21cebde27bb6c0859831f61234b3e0f4236dc89
4
+ data.tar.gz: 8764fbc1188e4d07232410d74bb073b45c6aa8f9f556c1ad3015621ff2d0bafd
5
5
  SHA512:
6
- metadata.gz: 8d7b452fb1526aaa2180298e5a783fc6ce501e4850182926b28f5f8a15687d86eeddfc90c271e5f6e0f89ee654e23e1476a8fbedf8ede164ad02fa10422e3d24
7
- data.tar.gz: 65446f561a82fa15982a6b3e0a1be7e66d9840acba2016949687d9048a2b80c6586ab3f76e120070dbc990cbff392411aa122722817f52be7829d575ac4a036b
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
@@ -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.9'
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.9
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.9
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.9
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.0'
80
+ version: '3.1'
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: 3.0.34
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.0'
90
+ version: '3.1'
91
91
  - - ">="
92
92
  - !ruby/object:Gem::Version
93
- version: 3.0.34
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.3
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.3
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.21
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.21
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.7
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.7
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.8
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.8
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.12
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.12
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.9
297
- changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.9/CHANGELOG.md
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.9
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.17
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