obp-access 0.1.1

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.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +18 -0
  3. data/.rubocop_todo.yml +33 -0
  4. data/CLAUDE.md +59 -0
  5. data/README.adoc +97 -0
  6. data/Rakefile +12 -0
  7. data/exe/obp-access +5 -0
  8. data/lib/obp/access/catalog.rb +67 -0
  9. data/lib/obp/access/cli.rb +115 -0
  10. data/lib/obp/access/converter.rb +25 -0
  11. data/lib/obp/access/deliverable.rb +109 -0
  12. data/lib/obp/access/domain_extractor.rb +63 -0
  13. data/lib/obp/access/element_registry.rb +20 -0
  14. data/lib/obp/access/elements/array.rb +64 -0
  15. data/lib/obp/access/elements/base.rb +69 -0
  16. data/lib/obp/access/elements/bibliography/bib_ref.rb +60 -0
  17. data/lib/obp/access/elements/bibliography.rb +52 -0
  18. data/lib/obp/access/elements/copyright.rb +27 -0
  19. data/lib/obp/access/elements/figure.rb +58 -0
  20. data/lib/obp/access/elements/figure_group.rb +48 -0
  21. data/lib/obp/access/elements/index.rb +113 -0
  22. data/lib/obp/access/elements/introduction.rb +31 -0
  23. data/lib/obp/access/elements/list.rb +58 -0
  24. data/lib/obp/access/elements/non_normative_note.rb +47 -0
  25. data/lib/obp/access/elements/paragraph.rb +31 -0
  26. data/lib/obp/access/elements/root.rb +122 -0
  27. data/lib/obp/access/elements/section.rb +38 -0
  28. data/lib/obp/access/elements/section_title.rb +26 -0
  29. data/lib/obp/access/elements/section_type.rb +27 -0
  30. data/lib/obp/access/elements/table_wrap.rb +47 -0
  31. data/lib/obp/access/elements/terminology/base.rb +27 -0
  32. data/lib/obp/access/elements/terminology/definition.rb +44 -0
  33. data/lib/obp/access/elements/terminology/example.rb +27 -0
  34. data/lib/obp/access/elements/terminology/note.rb +27 -0
  35. data/lib/obp/access/elements/terminology/source.rb +45 -0
  36. data/lib/obp/access/elements/terminology/tig.rb +59 -0
  37. data/lib/obp/access/elements/terminology/tig_admitted.rb +23 -0
  38. data/lib/obp/access/elements/terminology/tig_deprecated.rb +39 -0
  39. data/lib/obp/access/elements/terminology/tig_preferred.rb +23 -0
  40. data/lib/obp/access/elements/terminology.rb +28 -0
  41. data/lib/obp/access/elements/title.rb +33 -0
  42. data/lib/obp/access/fetcher.rb +63 -0
  43. data/lib/obp/access/grammar_parser.rb +135 -0
  44. data/lib/obp/access/imager.rb +39 -0
  45. data/lib/obp/access/inline_renderer.rb +97 -0
  46. data/lib/obp/access/parser.rb +82 -0
  47. data/lib/obp/access/renderer.rb +43 -0
  48. data/lib/obp/access/retriever.rb +97 -0
  49. data/lib/obp/access/urn.rb +31 -0
  50. data/lib/obp/access/version.rb +5 -0
  51. data/lib/obp/access.rb +118 -0
  52. data/lib/obp-access.rb +1 -0
  53. metadata +151 -0
data/lib/obp/access.rb ADDED
@@ -0,0 +1,118 @@
1
+ require "tmpdir"
2
+ require "net/http"
3
+ require "nokogiri"
4
+ require "json"
5
+ require "lutaml/model"
6
+ require "sts"
7
+ require "parallel"
8
+
9
+ require_relative "access/urn"
10
+ require_relative "access/inline_renderer"
11
+ require_relative "access/grammar_parser"
12
+ require_relative "access/domain_extractor"
13
+ require_relative "access/deliverable"
14
+ require_relative "access/catalog"
15
+ require_relative "access/retriever"
16
+ require_relative "access/fetcher"
17
+ require_relative "access/element_registry"
18
+ require_relative "access/parser"
19
+ require_relative "access/converter"
20
+ require_relative "access/imager"
21
+ require_relative "access/renderer"
22
+ require_relative "access/cli"
23
+
24
+ require_relative "access/elements/base"
25
+ require_relative "access/elements/root"
26
+ require_relative "access/elements/introduction"
27
+ require_relative "access/elements/index"
28
+ require_relative "access/elements/section_type"
29
+ require_relative "access/elements/section_title"
30
+ require_relative "access/elements/section"
31
+ require_relative "access/elements/figure"
32
+ require_relative "access/elements/figure_group"
33
+ require_relative "access/elements/list"
34
+ require_relative "access/elements/array"
35
+ require_relative "access/elements/table_wrap"
36
+ require_relative "access/elements/title"
37
+ require_relative "access/elements/paragraph"
38
+ require_relative "access/elements/non_normative_note"
39
+ require_relative "access/elements/copyright"
40
+ require_relative "access/elements/bibliography"
41
+ require_relative "access/elements/terminology"
42
+ require_relative "access/elements/terminology/base"
43
+ require_relative "access/elements/terminology/definition"
44
+ require_relative "access/elements/terminology/note"
45
+ require_relative "access/elements/terminology/tig"
46
+ require_relative "access/elements/terminology/tig_admitted"
47
+ require_relative "access/elements/terminology/tig_preferred"
48
+ require_relative "access/elements/terminology/tig_deprecated"
49
+ require_relative "access/elements/terminology/example"
50
+ require_relative "access/elements/terminology/source"
51
+ require_relative "access/version"
52
+
53
+ module Obp
54
+ class Access
55
+ BASE_URL = "https://www.iso.org".freeze
56
+ API_URL = "#{BASE_URL}/obp/ui".freeze
57
+
58
+ attr_reader :urn
59
+
60
+ def self.fetch(urn)
61
+ raise ArgumentError, "URN is required" unless urn
62
+
63
+ new(Urn.new(urn))
64
+ end
65
+
66
+ def self.fetch_all(urn, languages:)
67
+ urn = Urn.new(urn)
68
+ available = new(urn).available_languages
69
+ resolved = resolve_languages(urn.language, languages, available)
70
+ resolved.map { |lang| new(Urn.new("#{urn.base}:#{lang}")) }
71
+ end
72
+
73
+ def self.resolve_languages(primary, requested, available)
74
+ case requested
75
+ when :all then [primary] | available
76
+ when Array then [primary] | (requested & available)
77
+ else [primary]
78
+ end
79
+ end
80
+
81
+ def initialize(urn)
82
+ @urn = urn
83
+ end
84
+
85
+ def to_xml(pretty: false)
86
+ xml = parser.to_xml
87
+ pretty ? pretty_print(xml) : xml
88
+ end
89
+
90
+ def to_sts
91
+ Sts::NisoSts::Standard.from_xml(to_xml)
92
+ end
93
+
94
+ def to_xml_file
95
+ path = File.join(tmpdir, "#{urn.safe}.xml")
96
+ File.write(path, to_xml(pretty: true))
97
+ path
98
+ end
99
+
100
+ def available_languages
101
+ parser.available_languages
102
+ end
103
+
104
+ private
105
+
106
+ def parser
107
+ @parser ||= Parser.new(urn:, directory: tmpdir)
108
+ end
109
+
110
+ def pretty_print(xml)
111
+ Nokogiri::XML(xml, &:noblanks).to_xml
112
+ end
113
+
114
+ def tmpdir
115
+ @tmpdir ||= Dir.mktmpdir(urn.safe)
116
+ end
117
+ end
118
+ end
data/lib/obp-access.rb ADDED
@@ -0,0 +1 @@
1
+ require "obp/access"
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: obp-access
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Ribose Inc.
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2026-05-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: parallel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sts
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: ''
70
+ email:
71
+ - open.source@ribose.com
72
+ executables:
73
+ - obp-access
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".rubocop.yml"
78
+ - ".rubocop_todo.yml"
79
+ - CLAUDE.md
80
+ - README.adoc
81
+ - Rakefile
82
+ - exe/obp-access
83
+ - lib/obp-access.rb
84
+ - lib/obp/access.rb
85
+ - lib/obp/access/catalog.rb
86
+ - lib/obp/access/cli.rb
87
+ - lib/obp/access/converter.rb
88
+ - lib/obp/access/deliverable.rb
89
+ - lib/obp/access/domain_extractor.rb
90
+ - lib/obp/access/element_registry.rb
91
+ - lib/obp/access/elements/array.rb
92
+ - lib/obp/access/elements/base.rb
93
+ - lib/obp/access/elements/bibliography.rb
94
+ - lib/obp/access/elements/bibliography/bib_ref.rb
95
+ - lib/obp/access/elements/copyright.rb
96
+ - lib/obp/access/elements/figure.rb
97
+ - lib/obp/access/elements/figure_group.rb
98
+ - lib/obp/access/elements/index.rb
99
+ - lib/obp/access/elements/introduction.rb
100
+ - lib/obp/access/elements/list.rb
101
+ - lib/obp/access/elements/non_normative_note.rb
102
+ - lib/obp/access/elements/paragraph.rb
103
+ - lib/obp/access/elements/root.rb
104
+ - lib/obp/access/elements/section.rb
105
+ - lib/obp/access/elements/section_title.rb
106
+ - lib/obp/access/elements/section_type.rb
107
+ - lib/obp/access/elements/table_wrap.rb
108
+ - lib/obp/access/elements/terminology.rb
109
+ - lib/obp/access/elements/terminology/base.rb
110
+ - lib/obp/access/elements/terminology/definition.rb
111
+ - lib/obp/access/elements/terminology/example.rb
112
+ - lib/obp/access/elements/terminology/note.rb
113
+ - lib/obp/access/elements/terminology/source.rb
114
+ - lib/obp/access/elements/terminology/tig.rb
115
+ - lib/obp/access/elements/terminology/tig_admitted.rb
116
+ - lib/obp/access/elements/terminology/tig_deprecated.rb
117
+ - lib/obp/access/elements/terminology/tig_preferred.rb
118
+ - lib/obp/access/elements/title.rb
119
+ - lib/obp/access/fetcher.rb
120
+ - lib/obp/access/grammar_parser.rb
121
+ - lib/obp/access/imager.rb
122
+ - lib/obp/access/inline_renderer.rb
123
+ - lib/obp/access/parser.rb
124
+ - lib/obp/access/renderer.rb
125
+ - lib/obp/access/retriever.rb
126
+ - lib/obp/access/urn.rb
127
+ - lib/obp/access/version.rb
128
+ homepage: ''
129
+ licenses: []
130
+ metadata:
131
+ rubygems_mfa_required: 'true'
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '3.1'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubygems_version: 3.5.22
148
+ signing_key:
149
+ specification_version: 4
150
+ summary: ''
151
+ test_files: []