oselvar-var-core 0.3.2
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 +7 -0
- data/lib/oselvar/var/core/ast.rb +49 -0
- data/lib/oselvar/var/core/canonical_json.rb +49 -0
- data/lib/oselvar/var/core/cell_diff.rb +107 -0
- data/lib/oselvar/var/core/conformance.rb +264 -0
- data/lib/oselvar/var/core/deep_freeze.rb +27 -0
- data/lib/oselvar/var/core/diagnostics.rb +50 -0
- data/lib/oselvar/var/core/doc_string_diff.rb +38 -0
- data/lib/oselvar/var/core/drift.rb +187 -0
- data/lib/oselvar/var/core/execute.rb +189 -0
- data/lib/oselvar/var/core/failure_anchor.rb +30 -0
- data/lib/oselvar/var/core/hash.rb +29 -0
- data/lib/oselvar/var/core/matcher.rb +134 -0
- data/lib/oselvar/var/core/param_diff.rb +54 -0
- data/lib/oselvar/var/core/parse.rb +20 -0
- data/lib/oselvar/var/core/plan.rb +290 -0
- data/lib/oselvar/var/core/registry.rb +76 -0
- data/lib/oselvar/var/core/scanner.rb +348 -0
- data/lib/oselvar/var/core/sentences.rb +116 -0
- data/lib/oselvar/var/core/span.rb +86 -0
- data/lib/oselvar/var/core/step_role.rb +25 -0
- data/lib/oselvar/var/core/structurer.rb +86 -0
- data/lib/oselvar/var/core/table_cells.rb +46 -0
- data/lib/oselvar/var/core.rb +34 -0
- metadata +82 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'oselvar/var/core/span'
|
|
4
|
+
|
|
5
|
+
module Oselvar
|
|
6
|
+
module Var
|
|
7
|
+
module Core
|
|
8
|
+
# Parse a Markdown/Gherkin table row into trimmed cells and per-cell source
|
|
9
|
+
# spans. Port of table-cells.ts. All offsets count UTF-16 code units.
|
|
10
|
+
module TableCells
|
|
11
|
+
module_function
|
|
12
|
+
|
|
13
|
+
# Split a `| a | b |` row into [cells, cell_spans]. +line_start_offset+
|
|
14
|
+
# is the UTF-16 offset of the row's first character within +source+.
|
|
15
|
+
def parse_row_cells(line_text, line_start_offset, source)
|
|
16
|
+
first_cp = line_text.index('|')
|
|
17
|
+
last_cp = line_text.rindex('|')
|
|
18
|
+
return [[], []] if first_cp.nil? || last_cp.nil? || last_cp <= first_cp
|
|
19
|
+
|
|
20
|
+
# Pipe positions: convert code-point index to UTF-16 (matters when
|
|
21
|
+
# astral chars precede the pipe). '|' is ASCII → 1 UTF-16 unit.
|
|
22
|
+
first_u16 = Offsets.to_utf16_offset(line_text, first_cp)
|
|
23
|
+
inner_start_u16 = first_u16 + 1
|
|
24
|
+
|
|
25
|
+
inner = line_text[(first_cp + 1)...last_cp]
|
|
26
|
+
|
|
27
|
+
cells = []
|
|
28
|
+
cell_spans = []
|
|
29
|
+
cursor = 0 # running UTF-16 position within inner
|
|
30
|
+
|
|
31
|
+
# split(-1) keeps trailing empty segments, matching JS/Python split.
|
|
32
|
+
inner.split('|', -1).each do |seg|
|
|
33
|
+
trimmed = seg.strip
|
|
34
|
+
leading = Offsets.utf16_len(seg) - Offsets.utf16_len(seg.lstrip)
|
|
35
|
+
abs_start = line_start_offset + inner_start_u16 + cursor + leading
|
|
36
|
+
cells << trimmed
|
|
37
|
+
cell_spans << Offsets.span_from_offsets(source, abs_start, abs_start + Offsets.utf16_len(trimmed))
|
|
38
|
+
cursor += Offsets.utf16_len(seg) + 1 # +1 for the '|' delimiter
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
[cells, cell_spans]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Oselvar
|
|
4
|
+
module Var
|
|
5
|
+
# The pure functional core: parse, match, plan, execute, diffs, drift, and
|
|
6
|
+
# the conformance projections. No filesystem, network, globals, or time.
|
|
7
|
+
module Core
|
|
8
|
+
VERSION = '0.3.2'
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
require 'oselvar/var/core/span'
|
|
14
|
+
require 'oselvar/var/core/ast'
|
|
15
|
+
require 'oselvar/var/core/table_cells'
|
|
16
|
+
require 'oselvar/var/core/scanner'
|
|
17
|
+
require 'oselvar/var/core/structurer'
|
|
18
|
+
require 'oselvar/var/core/parse'
|
|
19
|
+
require 'oselvar/var/core/step_role'
|
|
20
|
+
require 'oselvar/var/core/registry'
|
|
21
|
+
require 'oselvar/var/core/sentences'
|
|
22
|
+
require 'oselvar/var/core/diagnostics'
|
|
23
|
+
require 'oselvar/var/core/cell_diff'
|
|
24
|
+
require 'oselvar/var/core/matcher'
|
|
25
|
+
require 'oselvar/var/core/plan'
|
|
26
|
+
require 'oselvar/var/core/deep_freeze'
|
|
27
|
+
require 'oselvar/var/core/doc_string_diff'
|
|
28
|
+
require 'oselvar/var/core/param_diff'
|
|
29
|
+
require 'oselvar/var/core/failure_anchor'
|
|
30
|
+
require 'oselvar/var/core/execute'
|
|
31
|
+
require 'oselvar/var/core/hash'
|
|
32
|
+
require 'oselvar/var/core/drift'
|
|
33
|
+
require 'oselvar/var/core/canonical_json'
|
|
34
|
+
require 'oselvar/var/core/conformance'
|
metadata
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: oselvar-var-core
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.3.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Aslak Hellesøy
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-07-07 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: cucumber-cucumber-expressions
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - '='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 20.0.0
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 20.0.0
|
|
27
|
+
description: The pure functional pipeline (parse, match, plan, execute, drift) behind
|
|
28
|
+
Vár.
|
|
29
|
+
email:
|
|
30
|
+
- aslak@oselvar.com
|
|
31
|
+
executables: []
|
|
32
|
+
extensions: []
|
|
33
|
+
extra_rdoc_files: []
|
|
34
|
+
files:
|
|
35
|
+
- lib/oselvar/var/core.rb
|
|
36
|
+
- lib/oselvar/var/core/ast.rb
|
|
37
|
+
- lib/oselvar/var/core/canonical_json.rb
|
|
38
|
+
- lib/oselvar/var/core/cell_diff.rb
|
|
39
|
+
- lib/oselvar/var/core/conformance.rb
|
|
40
|
+
- lib/oselvar/var/core/deep_freeze.rb
|
|
41
|
+
- lib/oselvar/var/core/diagnostics.rb
|
|
42
|
+
- lib/oselvar/var/core/doc_string_diff.rb
|
|
43
|
+
- lib/oselvar/var/core/drift.rb
|
|
44
|
+
- lib/oselvar/var/core/execute.rb
|
|
45
|
+
- lib/oselvar/var/core/failure_anchor.rb
|
|
46
|
+
- lib/oselvar/var/core/hash.rb
|
|
47
|
+
- lib/oselvar/var/core/matcher.rb
|
|
48
|
+
- lib/oselvar/var/core/param_diff.rb
|
|
49
|
+
- lib/oselvar/var/core/parse.rb
|
|
50
|
+
- lib/oselvar/var/core/plan.rb
|
|
51
|
+
- lib/oselvar/var/core/registry.rb
|
|
52
|
+
- lib/oselvar/var/core/scanner.rb
|
|
53
|
+
- lib/oselvar/var/core/sentences.rb
|
|
54
|
+
- lib/oselvar/var/core/span.rb
|
|
55
|
+
- lib/oselvar/var/core/step_role.rb
|
|
56
|
+
- lib/oselvar/var/core/structurer.rb
|
|
57
|
+
- lib/oselvar/var/core/table_cells.rb
|
|
58
|
+
homepage: https://var.oselvar.com
|
|
59
|
+
licenses:
|
|
60
|
+
- MIT
|
|
61
|
+
metadata:
|
|
62
|
+
rubygems_mfa_required: 'true'
|
|
63
|
+
post_install_message:
|
|
64
|
+
rdoc_options: []
|
|
65
|
+
require_paths:
|
|
66
|
+
- lib
|
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
68
|
+
requirements:
|
|
69
|
+
- - ">="
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
version: '3.2'
|
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
requirements: []
|
|
78
|
+
rubygems_version: 3.4.10
|
|
79
|
+
signing_key:
|
|
80
|
+
specification_version: 4
|
|
81
|
+
summary: Markdown-native BDD — pure functional core engine
|
|
82
|
+
test_files: []
|