Class: Ast::Merge::Git::Corpus
- Inherits:
-
Object
- Object
- Ast::Merge::Git::Corpus
- Defined in:
- lib/ast/merge/git/corpus.rb,
sig/ast/merge/git.rbs
Overview
rubocop:disable Metrics/AbcSize, Metrics/ClassLength, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity -- evidence validation and raw-result assembly remain explicit and auditable Validates and executes pinned Git-history corpus cases.
Defined Under Namespace
Classes: Error
Constant Summary collapse
- CLASSIFICATIONS =
%w[ exact_automatic_resolution structurally_equivalent_resolution conflict_expected ambiguous_manual_review excluded ].freeze
- BACKLOG_STATUSES =
%w[blocked admitted resolved].freeze
- SHA_PATTERN =
/\A[0-9a-f]{40}\z/- CASE_ID_PATTERN =
/\A[a-z0-9]+(?:-[a-z0-9]+)*\z/- REQUIRED_CASE_KEYS =
%w[ case_id merge_commit base_commit parent_commits path blob_oids selector capability_tags stratum oracle ].freeze
Instance Attribute Summary collapse
-
#manifest ⇒ Hash[String, untyped]
readonly
Returns the value of attribute manifest.
Class Method Summary collapse
Instance Method Summary collapse
- #cases(case_id = nil) ⇒ Array[Hash[String, untyped]]
-
#initialize(manifest) ⇒ Corpus
constructor
A new instance of Corpus.
- #validate! ⇒ true
Constructor Details
#initialize(manifest) ⇒ Corpus
Returns a new instance of Corpus.
41 42 43 |
# File 'lib/ast/merge/git/corpus.rb', line 41 def initialize(manifest) @manifest = manifest end |
Instance Attribute Details
#manifest ⇒ Hash[String, untyped] (readonly)
Returns the value of attribute manifest.
31 32 33 |
# File 'lib/ast/merge/git/corpus.rb', line 31 def manifest @manifest end |
Class Method Details
Instance Method Details
#cases(case_id = nil) ⇒ Array[Hash[String, untyped]]
61 62 63 64 65 66 67 |
# File 'lib/ast/merge/git/corpus.rb', line 61 def cases(case_id = nil) validate! return manifest['cases'] unless case_id [manifest['cases'].find { |item| item['case_id'] == case_id } || raise(Error, "unknown case: #{case_id}")] end |
#validate! ⇒ true
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ast/merge/git/corpus.rb', line 45 def validate! require_keys(manifest, %w[schema_version corpus_id source claim_policy admission_backlog cases], 'manifest') raise Error, 'schema_version must be 1' unless manifest['schema_version'] == 1 validate_source! validate_backlog! raise Error, 'cases must be a non-empty array' unless manifest['cases'].is_a?(Array) && manifest['cases'].any? ids = manifest['cases'].map { |item| validate_case!(item) } raise Error, 'case_id values must be unique' unless ids.uniq.length == ids.length validate_admitted_backlog!(ids) true end |