Module: Ast::Merge::Git::BenchmarkAdapter
- Defined in:
- lib/ast/merge/git/benchmark_adapter.rb,
sig/ast/merge/git.rbs
Overview
Versioned JSONL protocol for repeated benchmark operations in one Ruby process. rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/ModuleLength, Metrics/PerceivedComplexity -- protocol validation and dispatch remain explicit
Constant Summary collapse
- REQUEST_SCHEMA =
'structuredmerge.benchmark.adapter-request/v1'- RESPONSE_SCHEMA =
'structuredmerge.benchmark.adapter-response/v1'- OPERATIONS =
%w[diff2 merge2 merge3].freeze
- SOURCE_ROLES =
{ 'diff2' => %w[before after], 'merge2' => %w[incoming current], 'merge3' => %w[base ours theirs] }.freeze
Class Method Summary collapse
- .decode_source(encoded) ⇒ String
- .encode_source(source) ⇒ String
- .execute(request) ⇒ Hash[String, untyped]
- .serve(input: $stdin, output: $stdout) ⇒ void
Class Method Details
.decode_source(encoded) ⇒ String
146 147 148 |
# File 'lib/ast/merge/git/benchmark_adapter.rb', line 146 def decode_source(encoded) encoded.unpack1('m0') end |
.encode_source(source) ⇒ String
142 143 144 |
# File 'lib/ast/merge/git/benchmark_adapter.rb', line 142 def encode_source(source) [source.b].pack('m0') end |
.execute(request) ⇒ Hash[String, untyped]
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/ast/merge/git/benchmark_adapter.rb', line 35 def execute(request) started = monotonic_nanoseconds operation, selector, sources = validate_request(request) require selector.fetch('require') result = dispatch(operation, selector, sources, request.fetch('path_name')) response_for(request.fetch('request_id'), operation, result, monotonic_nanoseconds - started) rescue ArgumentError, Ast::Merge::Error, KeyError, LoadError => e error_response(request.is_a?(Hash) ? request['request_id'] : nil, e, started: started) end |
.serve(input: $stdin, output: $stdout) ⇒ void
This method returns an undefined value.
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/ast/merge/git/benchmark_adapter.rb', line 22 def serve(input: $stdin, output: $stdout) input.each_line do |line| next if line.strip.empty? response = execute(JSON.parse(line)) output.puts(JSON.generate(response)) output.flush rescue JSON::ParserError => e output.puts(JSON.generate(error_response(nil, e))) output.flush end end |