json-ld-validate 0.0.1 → 0.0.3

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: eb2b68b43d6f70db4f285fc9cf1688c86924eab78124df1a97600321e29e6580
4
- data.tar.gz: 5ad5623240065310e7bff57c78a6c7a1a09a087845d69da2b1894e014f41bc27
3
+ metadata.gz: 3b842c8a5568175c193e71d16e26fa41bab31e1bae79143487620096fa890ec4
4
+ data.tar.gz: 6daf575322e3247089f2f3e4d0ed9fc4b8959accfd5254de9e15261a0320d566
5
5
  SHA512:
6
- metadata.gz: d21b24fa9430da9cf3122591764c71fc08f6d5d0254e4aa4b1bdd51f68ef4d142ef7264ad99ac5f0ba92866d85f60982e426db75f48f105808370a5b9f12b745
7
- data.tar.gz: 565fa8da562bf98bc3e90fe086560d16443287817366512eb6dd000861cec4d5b1bf7b27a76eff281cdc4b5ed05791d95b0ba22b093d4ca2cafbdc576d7cf5a7
6
+ metadata.gz: 3060a4e2e85af2ae2ef40ffb1a20c95c2864ee1ecf51dfeba746034e0c313d2ab51bd462febf4951dc6f8a21a4549fd63fa3c23eb866dc58a1d307d582d03306
7
+ data.tar.gz: 54fadf3ffd1807c70223c637afe7b81fa4d6adbcdf9060baafe372b7a44b7448f20df13249d36aa2ea1d0746f69167c773217609b3ff31298703ce95c1911006
@@ -10,28 +10,86 @@ module JsonldValidate
10
10
  end
11
11
 
12
12
  def valid?
13
+ return false if content.nil?
13
14
  return true if content.empty?
14
15
 
15
- doc
16
+ build_expanded_doc
17
+ build_doc
16
18
  return false unless errors.empty?
17
19
 
18
- validates_no_unknown_field
20
+ find_unknown_fields(content, doc, [])
19
21
 
20
22
  errors.empty?
21
23
  end
22
24
 
23
25
  private
24
26
 
25
- def doc
26
- @doc ||= JSON::LD::API.expand(content)
27
+ attr_reader :doc, :expanded_doc
28
+
29
+ def build_doc
30
+ return if expanded_doc.nil?
31
+
32
+ @doc = JSON::LD::API.compact(expanded_doc, content['@context'])
33
+ end
34
+
35
+ def build_expanded_doc
36
+ @expanded_doc = clean_expanded_doc(JSON::LD::API.expand(content))
27
37
  rescue JSON::LD::JsonLdError::LoadingDocumentFailed
28
38
  @errors << 'failed loading document'
39
+ rescue JSON::LD::JsonLdError::InvalidLanguageMapValue => e
40
+ @errors << e.to_s
29
41
  end
30
42
 
31
- def validates_no_unknown_field
32
- return if doc.flat_map(&:keys).length == content.keys.length - 1
43
+ def find_unknown_fields(original, compacted, path)
44
+ return unless original.is_a?(Hash)
45
+ return report_all_fields(original, path) unless compacted.is_a?(Hash)
46
+
47
+ report_unknown_keys(original, compacted, path)
48
+ recurse_known_keys(original, compacted, path)
49
+ end
50
+
51
+ def report_all_fields(original, path)
52
+ original.each_key do |key|
53
+ next if key.start_with?('@')
54
+
55
+ errors << "found unknown fields: #{(path + [key]).join('.')}"
56
+ end
57
+ end
58
+
59
+ def report_unknown_keys(original, compacted, path)
60
+ (original.keys - compacted.keys).each do |field|
61
+ errors << "found unknown fields: #{(path + [field]).join('.')}"
62
+ end
63
+ end
64
+
65
+ def recurse_known_keys(original, compacted, path)
66
+ (original.keys & compacted.keys).each do |key|
67
+ recurse_field(original[key], compacted[key], path + [key])
68
+ end
69
+ end
70
+
71
+ def recurse_field(orig_val, comp_val, path)
72
+ if orig_val.is_a?(Array)
73
+ comp_val = [] unless comp_val.is_a?(Array)
74
+ orig_val.each_with_index do |item, i|
75
+ find_unknown_fields(item, comp_val[i], path + [i.to_s])
76
+ end
77
+ else
78
+ find_unknown_fields(orig_val, comp_val, path)
79
+ end
80
+ end
33
81
 
34
- errors << 'found unknown fields'
82
+ def clean_expanded_doc(obj)
83
+ case obj
84
+ when Array
85
+ obj.map { |item| clean_expanded_doc(item) }
86
+ when Hash
87
+ obj.each_with_object({}) do |(k, v), h|
88
+ h[k] = clean_expanded_doc(v) unless k.start_with?('_:')
89
+ end
90
+ else
91
+ obj
92
+ end
35
93
  end
36
94
  end
37
95
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JsonldValidate
4
- VERSION = '0.0.1'
4
+ VERSION = '0.0.3'
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-ld-validate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damien MATHIEU
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-09-16 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: json-ld
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  requirements: []
73
- rubygems_version: 3.6.2
73
+ rubygems_version: 4.0.3
74
74
  specification_version: 4
75
75
  summary: JSON-LD documents validation
76
76
  test_files: []