iev 0.4.4 → 0.4.6
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 +4 -4
- data/.github/workflows/rake.yml +7 -4
- data/.github/workflows/release.yml +2 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +4 -1
- data/.rubocop_todo.yml +98 -21
- data/CLAUDE.md +17 -5
- data/Gemfile +8 -4
- data/README.adoc +395 -10
- data/exe/iev +1 -1
- data/iev.gemspec +3 -2
- data/lib/iev/cli/command.rb +3 -2
- data/lib/iev/cli/command_helper.rb +1 -2
- data/lib/iev/cli/ui.rb +5 -5
- data/lib/iev/config.rb +1 -15
- data/lib/iev/data_source.rb +4 -2
- data/lib/iev/db_writer.rb +1 -0
- data/lib/iev/exporter.rb +182 -10
- data/lib/iev/iev_code.rb +80 -0
- data/lib/iev/iso_639_code.rb +2 -1
- data/lib/iev/relaton_db.rb +1 -1
- data/lib/iev/scraper/browser.rb +90 -88
- data/lib/iev/scraper.rb +5 -4
- data/lib/iev/section.rb +37 -0
- data/lib/iev/source_parser.rb +57 -11
- data/lib/iev/subject_area.rb +46 -0
- data/lib/iev/subject_area_concepts.rb +60 -35
- data/lib/iev/subject_areas.rb +72 -33
- data/lib/iev/supersession_parser.rb +1 -2
- data/lib/iev/term_attrs_parser.rb +1 -1
- data/lib/iev/term_builder.rb +14 -9
- data/lib/iev/utilities.rb +29 -1
- data/lib/iev/version.rb +1 -1
- data/lib/iev.rb +43 -11
- metadata +26 -22
data/lib/iev.rb
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "iev/version"
|
|
4
|
-
require "iev/config"
|
|
5
|
-
require "iev/data_source"
|
|
6
|
-
|
|
7
|
-
require "yaml"
|
|
8
4
|
|
|
9
5
|
# plurimath and unitsml both depend on mml, which has a transitive
|
|
10
6
|
# dependency version mismatch with lutaml-model in some environments.
|
|
11
|
-
# Load them when available; the DataSource APIs work without them.
|
|
7
|
+
# Load them when available; the DataSource/Db APIs work without them.
|
|
12
8
|
begin
|
|
13
9
|
require "plurimath"
|
|
14
10
|
rescue LoadError
|
|
@@ -22,6 +18,9 @@ rescue LoadError
|
|
|
22
18
|
end
|
|
23
19
|
|
|
24
20
|
module Iev
|
|
21
|
+
# IEV dataset URN — single source of truth for all concept references.
|
|
22
|
+
IEV_SOURCE = "urn:iec:std:iec:60050"
|
|
23
|
+
|
|
25
24
|
autoload :Cli, "iev/cli"
|
|
26
25
|
autoload :Config, "iev/config"
|
|
27
26
|
autoload :Converter, "iev/converter"
|
|
@@ -29,11 +28,14 @@ module Iev
|
|
|
29
28
|
autoload :DataSource, "iev/data_source"
|
|
30
29
|
autoload :DbWriter, "iev/db_writer"
|
|
31
30
|
autoload :Exporter, "iev/exporter"
|
|
31
|
+
autoload :IevCode, "iev/iev_code"
|
|
32
32
|
autoload :Iso639Code, "iev/iso_639_code"
|
|
33
33
|
autoload :Profiler, "iev/profiler"
|
|
34
34
|
autoload :RelatonDb, "iev/relaton_db"
|
|
35
35
|
autoload :Scraper, "iev/scraper"
|
|
36
|
+
autoload :Section, "iev/section"
|
|
36
37
|
autoload :SourceParser, "iev/source_parser"
|
|
38
|
+
autoload :SubjectArea, "iev/subject_area"
|
|
37
39
|
autoload :SubjectAreas, "iev/subject_areas"
|
|
38
40
|
autoload :SubjectAreaConcepts, "iev/subject_area_concepts"
|
|
39
41
|
autoload :SupersessionParser, "iev/supersession_parser"
|
|
@@ -41,6 +43,26 @@ module Iev
|
|
|
41
43
|
autoload :TermBuilder, "iev/term_builder"
|
|
42
44
|
autoload :Utilities, "iev/utilities"
|
|
43
45
|
|
|
46
|
+
# --- Configuration ---
|
|
47
|
+
|
|
48
|
+
# @return [Config]
|
|
49
|
+
def self.config
|
|
50
|
+
@config ||= Config.new
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Yield the config object for initialization.
|
|
54
|
+
# @yield [Config]
|
|
55
|
+
def self.configure
|
|
56
|
+
yield(config) if block_given?
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Reset config (useful in tests).
|
|
60
|
+
def self.reset_config!
|
|
61
|
+
@config = nil
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# --- Data fetching ---
|
|
65
|
+
|
|
44
66
|
# Fetch term designation from IEV data.
|
|
45
67
|
#
|
|
46
68
|
# @param [String] code for example "103-01-02"
|
|
@@ -48,7 +70,6 @@ module Iev
|
|
|
48
70
|
#
|
|
49
71
|
# @return [String, nil] if found then term,
|
|
50
72
|
# if code or language not found then nil.
|
|
51
|
-
#
|
|
52
73
|
def self.get(code, lang)
|
|
53
74
|
DataSource.fetch_term_designation(code, lang)
|
|
54
75
|
rescue DataSource::NotFoundError
|
|
@@ -74,6 +95,8 @@ module Iev
|
|
|
74
95
|
DataSource.fetch_term(code, lang)
|
|
75
96
|
end
|
|
76
97
|
|
|
98
|
+
# --- Scraping ---
|
|
99
|
+
|
|
77
100
|
# Scrape concept data from Electropedia for a given IEV code.
|
|
78
101
|
# Uses Ferrum (headless Chrome) to handle AWS WAF challenge.
|
|
79
102
|
#
|
|
@@ -83,37 +106,46 @@ module Iev
|
|
|
83
106
|
Scraper.new.fetch_concept(code)
|
|
84
107
|
end
|
|
85
108
|
|
|
109
|
+
# --- Subject area / section queries ---
|
|
110
|
+
|
|
86
111
|
# Return all IEV subject areas with their sections (from bundled data).
|
|
87
|
-
# @return [Array<
|
|
112
|
+
# @return [Array<SubjectArea>]
|
|
88
113
|
def self.subject_areas
|
|
89
114
|
SubjectAreas.all
|
|
90
115
|
end
|
|
91
116
|
|
|
92
117
|
# Find a subject area by code.
|
|
93
118
|
# @param code [String, Integer] e.g. "102"
|
|
94
|
-
# @return [
|
|
119
|
+
# @return [SubjectArea, nil]
|
|
95
120
|
def self.find_subject_area(code)
|
|
96
121
|
SubjectAreas.find_area(code)
|
|
97
122
|
end
|
|
98
123
|
|
|
99
124
|
# Find a section by its section code.
|
|
100
125
|
# @param section_code [String] e.g. "102-01"
|
|
101
|
-
# @return [
|
|
126
|
+
# @return [Section, nil]
|
|
102
127
|
def self.find_section(section_code)
|
|
103
128
|
SubjectAreas.find_section(section_code)
|
|
104
129
|
end
|
|
105
130
|
|
|
106
131
|
# Return sections for a given area code.
|
|
107
132
|
# @param code [String, Integer] e.g. "102"
|
|
108
|
-
# @return [Array<
|
|
133
|
+
# @return [Array<Section>]
|
|
109
134
|
def self.sections_for(code)
|
|
110
135
|
SubjectAreas.sections_for(code)
|
|
111
136
|
end
|
|
112
137
|
|
|
113
138
|
# Return the parent subject area for a given section code.
|
|
114
139
|
# @param section_code [String] e.g. "102-01"
|
|
115
|
-
# @return [
|
|
140
|
+
# @return [SubjectArea, nil]
|
|
116
141
|
def self.area_for_section(section_code)
|
|
117
142
|
SubjectAreas.area_for_section(section_code)
|
|
118
143
|
end
|
|
144
|
+
|
|
145
|
+
# Parse an IEV code into its structural components.
|
|
146
|
+
# @param code [String] e.g. "103-01-02"
|
|
147
|
+
# @return [IevCode, nil] nil if the code is blank
|
|
148
|
+
def self.parse_code(code)
|
|
149
|
+
IevCode.parse(code)
|
|
150
|
+
end
|
|
119
151
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: iev
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-06-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: creek
|
|
@@ -24,34 +24,48 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '2.6'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: ferrum
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0.15'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0.15'
|
|
27
41
|
- !ruby/object:Gem::Dependency
|
|
28
42
|
name: glossarist
|
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
|
30
44
|
requirements:
|
|
31
45
|
- - ">="
|
|
32
46
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 2.
|
|
47
|
+
version: 2.8.2
|
|
34
48
|
type: :runtime
|
|
35
49
|
prerelease: false
|
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
51
|
requirements:
|
|
38
52
|
- - ">="
|
|
39
53
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 2.
|
|
54
|
+
version: 2.8.2
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
56
|
+
name: lutaml-model
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
44
58
|
requirements:
|
|
45
59
|
- - "~>"
|
|
46
60
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
61
|
+
version: 0.8.0
|
|
48
62
|
type: :runtime
|
|
49
63
|
prerelease: false
|
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
65
|
requirements:
|
|
52
66
|
- - "~>"
|
|
53
67
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
68
|
+
version: 0.8.0
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
70
|
name: nokogiri
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -80,20 +94,6 @@ dependencies:
|
|
|
80
94
|
- - ">="
|
|
81
95
|
- !ruby/object:Gem::Version
|
|
82
96
|
version: '0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: lutaml-model
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 0.8.0
|
|
90
|
-
type: :runtime
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: 0.8.0
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: relaton
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -206,6 +206,7 @@ files:
|
|
|
206
206
|
- lib/iev/data_source.rb
|
|
207
207
|
- lib/iev/db_writer.rb
|
|
208
208
|
- lib/iev/exporter.rb
|
|
209
|
+
- lib/iev/iev_code.rb
|
|
209
210
|
- lib/iev/iso_639_2.yaml
|
|
210
211
|
- lib/iev/iso_639_code.rb
|
|
211
212
|
- lib/iev/profiler.rb
|
|
@@ -213,7 +214,9 @@ files:
|
|
|
213
214
|
- lib/iev/scraper.rb
|
|
214
215
|
- lib/iev/scraper/browser.rb
|
|
215
216
|
- lib/iev/scraper/page_parser.rb
|
|
217
|
+
- lib/iev/section.rb
|
|
216
218
|
- lib/iev/source_parser.rb
|
|
219
|
+
- lib/iev/subject_area.rb
|
|
217
220
|
- lib/iev/subject_area_concepts.rb
|
|
218
221
|
- lib/iev/subject_areas.rb
|
|
219
222
|
- lib/iev/supersession_parser.rb
|
|
@@ -224,7 +227,8 @@ files:
|
|
|
224
227
|
homepage: https://github.com/glossarist/iev
|
|
225
228
|
licenses:
|
|
226
229
|
- BSD-2-Clause
|
|
227
|
-
metadata:
|
|
230
|
+
metadata:
|
|
231
|
+
rubygems_mfa_required: 'true'
|
|
228
232
|
post_install_message:
|
|
229
233
|
rdoc_options: []
|
|
230
234
|
require_paths:
|