obp-access 0.1.4 → 0.1.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.
data/lib/obp/access.rb CHANGED
@@ -16,9 +16,12 @@ require_relative "access/retriever"
16
16
  require_relative "access/fetcher"
17
17
  require_relative "access/element_registry"
18
18
  require_relative "access/parser"
19
+ require_relative "access/raw_html_parser"
19
20
  require_relative "access/converter"
20
21
  require_relative "access/imager"
21
22
  require_relative "access/renderer"
23
+ require_relative "access/table_mapper"
24
+ require_relative "access/table_term_extractor"
22
25
  require_relative "access/cli"
23
26
 
24
27
  require_relative "access/elements/base"
@@ -36,6 +39,10 @@ require_relative "access/elements/table_wrap"
36
39
  require_relative "access/elements/title"
37
40
  require_relative "access/elements/paragraph"
38
41
  require_relative "access/elements/non_normative_note"
42
+ require_relative "access/elements/non_normative_example"
43
+ require_relative "access/elements/disp_formula"
44
+ require_relative "access/elements/footnotes"
45
+ require_relative "access/elements/protected_content_note"
39
46
  require_relative "access/elements/copyright"
40
47
  require_relative "access/elements/bibliography"
41
48
  require_relative "access/elements/terminology"
@@ -70,6 +77,15 @@ module Obp
70
77
  resolved.map { |lang| new(Urn.new("#{urn.base}:#{lang}")) }
71
78
  end
72
79
 
80
+ # Build an Access from an already-downloaded OBP HTML fragment (e.g.
81
+ # captured via a browser or waffle-punch). No network requests are made.
82
+ def self.from_html(urn:, html:, caption: nil, titles: nil)
83
+ raise ArgumentError, "URN is required" unless urn
84
+ raise ArgumentError, "HTML is required" unless html
85
+
86
+ new(Urn.new(urn), html: html, caption: caption, titles: titles)
87
+ end
88
+
73
89
  def self.resolve_languages(primary, requested, available)
74
90
  case requested
75
91
  when :all then [primary] | available
@@ -78,8 +94,11 @@ module Obp
78
94
  end
79
95
  end
80
96
 
81
- def initialize(urn)
97
+ def initialize(urn, html: nil, caption: nil, titles: nil)
82
98
  @urn = urn
99
+ @raw_html = html
100
+ @caption = caption
101
+ @raw_titles = titles
83
102
  end
84
103
 
85
104
  def to_xml(pretty: false)
@@ -91,6 +110,18 @@ module Obp
91
110
  Sts::NisoSts::Standard.from_xml(to_xml)
92
111
  end
93
112
 
113
+ # YAML serialization of every table in the OBP preview HTML
114
+ # (TableMapper's generic table model).
115
+ def to_tables
116
+ table_mapper.to_yaml
117
+ end
118
+
119
+ # YAML serialization of term entries extracted from the document's
120
+ # term-carrying tables (TableTermExtractor over the table model).
121
+ def to_terms
122
+ TableTermExtractor.new(tables: table_mapper.tables).to_yaml
123
+ end
124
+
94
125
  def to_xml_file
95
126
  path = File.join(tmpdir, "#{urn.safe}.xml")
96
127
  File.write(path, to_xml(pretty: true))
@@ -101,10 +132,26 @@ module Obp
101
132
  parser.available_languages
102
133
  end
103
134
 
135
+ # Raw sts-standard HTML fragment as served by the OBP.
136
+ def html
137
+ parser.html
138
+ end
139
+
104
140
  private
105
141
 
106
142
  def parser
107
- @parser ||= Parser.new(urn:, directory: tmpdir)
143
+ @parser ||= if @raw_html
144
+ RawHtmlParser.new(urn:, directory: tmpdir, html: @raw_html,
145
+ caption: @caption, titles: @raw_titles)
146
+ else
147
+ Parser.new(urn:, directory: tmpdir)
148
+ end
149
+ end
150
+
151
+ # Shares Parser#html (memoized) with the STS conversion path, so
152
+ # reading tables does not re-POST to the OBP.
153
+ def table_mapper
154
+ @table_mapper ||= TableMapper.new(source: parser.html)
108
155
  end
109
156
 
110
157
  def pretty_print(xml)
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/obp/access/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "obp-access"
7
+ spec.version = Obp::Access::VERSION
8
+ spec.authors = ["Ribose Inc."]
9
+ spec.email = ["open.source@ribose.com"]
10
+
11
+ spec.summary = ""
12
+ spec.description = ""
13
+ spec.homepage = ""
14
+ spec.required_ruby_version = ">= 3.1"
15
+
16
+ # Specify which files should be added to the gem when it is released.
17
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
+ spec.files = Dir.chdir(__dir__) do
19
+ `git ls-files -z`.split("\x0").reject do |f|
20
+ (File.expand_path(f) == __FILE__) ||
21
+ f.start_with?(*%w[bin/ test/ spec/ features/ .git .github appveyor
22
+ Gemfile])
23
+ end
24
+ end
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+ spec.add_dependency "nokogiri"
29
+ spec.add_dependency "parallel"
30
+ spec.add_dependency "sts"
31
+ spec.add_dependency "thor"
32
+ spec.metadata["rubygems_mfa_required"] = "true"
33
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obp-access
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.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-06-15 00:00:00.000000000 Z
11
+ date: 2026-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -93,13 +93,17 @@ files:
93
93
  - lib/obp/access/elements/bibliography.rb
94
94
  - lib/obp/access/elements/bibliography/bib_ref.rb
95
95
  - lib/obp/access/elements/copyright.rb
96
+ - lib/obp/access/elements/disp_formula.rb
96
97
  - lib/obp/access/elements/figure.rb
97
98
  - lib/obp/access/elements/figure_group.rb
99
+ - lib/obp/access/elements/footnotes.rb
98
100
  - lib/obp/access/elements/index.rb
99
101
  - lib/obp/access/elements/introduction.rb
100
102
  - lib/obp/access/elements/list.rb
103
+ - lib/obp/access/elements/non_normative_example.rb
101
104
  - lib/obp/access/elements/non_normative_note.rb
102
105
  - lib/obp/access/elements/paragraph.rb
106
+ - lib/obp/access/elements/protected_content_note.rb
103
107
  - lib/obp/access/elements/root.rb
104
108
  - lib/obp/access/elements/section.rb
105
109
  - lib/obp/access/elements/section_title.rb
@@ -121,10 +125,14 @@ files:
121
125
  - lib/obp/access/imager.rb
122
126
  - lib/obp/access/inline_renderer.rb
123
127
  - lib/obp/access/parser.rb
128
+ - lib/obp/access/raw_html_parser.rb
124
129
  - lib/obp/access/renderer.rb
125
130
  - lib/obp/access/retriever.rb
131
+ - lib/obp/access/table_mapper.rb
132
+ - lib/obp/access/table_term_extractor.rb
126
133
  - lib/obp/access/urn.rb
127
134
  - lib/obp/access/version.rb
135
+ - obp-access.gemspec
128
136
  homepage: ''
129
137
  licenses: []
130
138
  metadata: