relaton-bipm 1.10.1 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3bc3bc46660a7a7852fd963502f27eb135b9f65bb75a5d24d69e59243fc90ad2
4
- data.tar.gz: 4311d9bf2198fe3204f1075a9d088ab9bc24c327c9e2d07dcf5abbe0b00b4059
3
+ metadata.gz: 9a82c0e9b55d960a68829f47fe01690401a924a1b61df376e6834a107159b488
4
+ data.tar.gz: 007aee78882b5e154ff6219d1b1429b727110600f254be691e8dced237e1120d
5
5
  SHA512:
6
- metadata.gz: b6d914ecd5376914dda72e7f9aebb392c2685f0b29871531e434cf6402291383b72815497c74f263f6ba4e37fa88f46ddcb3d78bfc4ba7e1371c246ca6f333b7
7
- data.tar.gz: 2c13012defdb97df5e6884b6f36807bdee455ad39d8feec34441115f2f4796a0a1e46e81101f8ca30c7c3fb7e1b58c15189523b28a1644cf26efedf038cb7731
6
+ metadata.gz: 81058113d2ba56ea79734d19f9c1bb45e4cbcb71df6d7fc8fb14b5ab09d8c55924dda3118db4d6588a15d0790e55b5cc393a41e67539c4f9b5d78c31d9663a69
7
+ data.tar.gz: 1fc0397bb7b6b693fe8233d9577214684a72af2ec3c2a8fef5b130a3a4d10413c6980aefe4c7c638b9dfe0ba6726d1aa612577e63a853ec232827e8b16f673c0
data/README.adoc CHANGED
@@ -8,7 +8,7 @@ image:https://codeclimate.com/github/relaton/relaton-bipm/badges/gpa.svg["Code C
8
8
  image:https://img.shields.io/github/issues-pr-raw/relaton/relaton-bipm.svg["Pull Requests", link="https://github.com/relaton/relaton-bipm/pulls"]
9
9
  image:https://img.shields.io/github/commits-since/relaton/relaton-bipm/latest.svg["Commits since latest",link="https://github.com/relaton/relaton-bipm/releases"]
10
10
 
11
- RelatonIec is a Ruby gem that implements the https://github.com/metanorma/metanorma-model-iso#iso-bibliographic-item[IsoBibliographicItem model].
11
+ RelatonBipm is a Ruby gem that implements the https://github.com/metanorma/metanorma-model-iso#iso-bibliographic-item[IsoBibliographicItem model].
12
12
 
13
13
  You can use it to retrieve metadata of BIPM Standards from https://www.bipm.org, and access such metadata through the `BipmBibliographicItem` object.
14
14
 
@@ -53,17 +53,17 @@ bib = RelatonBipm::BipmBibliography.get "BIPM Metrologia 29 6 373"
53
53
  ...
54
54
 
55
55
  # get CGPM resolutions
56
- RelatonBipm::BipmBibliography.get "BIPM CGPM01 1"
57
- [relaton-bipm] ("BIPM CGPM01 1") fetching...
58
- [relaton-bipm] ("BIPM CGPM01 1") found CGPM01-1
59
- => #<RelatonBipm::BipmBibliographicItem:0x00007f9e92817968
56
+ RelatonBipm::BipmBibliography.get "BIPM CR 01"
57
+ [relaton-bipm] ("BIPM CR 01") fetching...
58
+ [relaton-bipm] ("BIPM CR 01") found BIPM CR 01
59
+ => #<RelatonBipm::BipmBibliographicItem:0x00007fd4f7cba038
60
60
  ...
61
61
 
62
62
  # get CIPM resolutions
63
- RelatonBipm::BipmBibliography.get "BIPM CIPM101 1"
64
- [relaton-bipm] ("BIPM CIPM101 1") fetching...
65
- [relaton-bipm] ("BIPM CIPM101 1") found CIPM101-1
66
- => #<RelatonBipm::BipmBibliographicItem:0x00007f9e9293d658
63
+ RelatonBipm::BipmBibliography.get "BIPM PV 101(I)"
64
+ [relaton-bipm] ("BIPM PV 101(I)") fetching...
65
+ [relaton-bipm] ("BIPM PV 101(I)") found BIPM PV 101(I)
66
+ => #<RelatonBipm::BipmBibliographicItem:0x00007fd5072301c0
67
67
  ...
68
68
  ----
69
69
 
data/grammars/biblio.rng CHANGED
@@ -677,6 +677,9 @@
677
677
  <zeroOrMore>
678
678
  <ref name="extent"/>
679
679
  </zeroOrMore>
680
+ <optional>
681
+ <ref name="bibliographic_size"/>
682
+ </optional>
680
683
  <zeroOrMore>
681
684
  <ref name="accesslocation"/>
682
685
  </zeroOrMore>
@@ -922,9 +925,29 @@
922
925
  <text/>
923
926
  </element>
924
927
  </define>
928
+ <define name="sizevalue">
929
+ <element name="value">
930
+ <attribute name="type"/>
931
+ <text/>
932
+ </element>
933
+ </define>
934
+ <define name="bibliographic_size">
935
+ <element name="size">
936
+ <oneOrMore>
937
+ <ref name="sizevalue"/>
938
+ </oneOrMore>
939
+ </element>
940
+ </define>
925
941
  <define name="extent">
926
942
  <element name="extent">
927
- <ref name="BibItemLocality"/>
943
+ <choice>
944
+ <zeroOrMore>
945
+ <ref name="locality"/>
946
+ </zeroOrMore>
947
+ <zeroOrMore>
948
+ <ref name="localityStack"/>
949
+ </zeroOrMore>
950
+ </choice>
928
951
  </element>
929
952
  </define>
930
953
  <define name="series">
data/grammars/bipm.rng CHANGED
@@ -59,7 +59,7 @@
59
59
  <data type="boolean"/>
60
60
  </attribute>
61
61
  </optional>
62
- <text/>
62
+ <ref name="XrefBody"/>
63
63
  </element>
64
64
  </define>
65
65
  <define name="Clause-Section">
data/grammars/isodoc.rng CHANGED
@@ -152,9 +152,7 @@
152
152
  <data type="boolean"/>
153
153
  </attribute>
154
154
  </optional>
155
- <oneOrMore>
156
- <ref name="PureTextElement"/>
157
- </oneOrMore>
155
+ <ref name="XrefBody"/>
158
156
  </element>
159
157
  </define>
160
158
  <define name="erefType">
@@ -188,6 +186,42 @@
188
186
  <ref name="PureTextElement"/>
189
187
  </oneOrMore>
190
188
  </define>
189
+ <define name="localityStack">
190
+ <element name="localityStack">
191
+ <optional>
192
+ <attribute name="connective">
193
+ <choice>
194
+ <value>and</value>
195
+ <value>or</value>
196
+ <value>from</value>
197
+ <value>to</value>
198
+ <value/>
199
+ </choice>
200
+ </attribute>
201
+ </optional>
202
+ <zeroOrMore>
203
+ <ref name="locality"/>
204
+ </zeroOrMore>
205
+ </element>
206
+ </define>
207
+ <define name="sourceLocalityStack">
208
+ <element name="sourceLocalityStack">
209
+ <optional>
210
+ <attribute name="connective">
211
+ <choice>
212
+ <value>and</value>
213
+ <value>or</value>
214
+ <value>from</value>
215
+ <value>to</value>
216
+ <value/>
217
+ </choice>
218
+ </attribute>
219
+ </optional>
220
+ <zeroOrMore>
221
+ <ref name="sourceLocality"/>
222
+ </zeroOrMore>
223
+ </element>
224
+ </define>
191
225
  <define name="ul">
192
226
  <element name="ul">
193
227
  <attribute name="id">
@@ -1098,6 +1132,16 @@
1098
1132
  </define>
1099
1133
  </include>
1100
1134
  <!-- end overrides -->
1135
+ <define name="image" combine="choice">
1136
+ <element name="svg">
1137
+ <oneOrMore>
1138
+ <choice>
1139
+ <text/>
1140
+ <ref name="AnyElement"/>
1141
+ </choice>
1142
+ </oneOrMore>
1143
+ </element>
1144
+ </define>
1101
1145
  <define name="MultilingualRenderingType">
1102
1146
  <choice>
1103
1147
  <value>common</value>
@@ -2631,4 +2675,30 @@
2631
2675
  </zeroOrMore>
2632
2676
  </element>
2633
2677
  </define>
2678
+ <define name="XrefBody">
2679
+ <zeroOrMore>
2680
+ <ref name="XrefTarget"/>
2681
+ </zeroOrMore>
2682
+ <oneOrMore>
2683
+ <ref name="PureTextElement"/>
2684
+ </oneOrMore>
2685
+ </define>
2686
+ <define name="XrefTarget">
2687
+ <element name="location">
2688
+ <attribute name="target">
2689
+ <data type="string">
2690
+ <param name="pattern">\i\c*|\c+#\c+</param>
2691
+ </data>
2692
+ </attribute>
2693
+ <attribute name="connective">
2694
+ <choice>
2695
+ <value>and</value>
2696
+ <value>or</value>
2697
+ <value>from</value>
2698
+ <value>to</value>
2699
+ <value/>
2700
+ </choice>
2701
+ </attribute>
2702
+ </element>
2703
+ </define>
2634
2704
  </grammar>
@@ -39,12 +39,18 @@ module RelatonBipm
39
39
  # @param ref [String]
40
40
  # @param agent [Mechanize]
41
41
  # @return [RelatonBipm::BipmBibliographicItem]
42
- def get_bipm(ref, agent)
43
- url = "#{GH_ENDPOINT}#{ref.upcase.split.join '-'}.yaml"
42
+ def get_bipm(ref, agent) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
43
+ url = "#{GH_ENDPOINT}#{ref.gsub(/[()]/, "").upcase.split.join '-'}.yaml"
44
44
  resp = agent.get url
45
+ check_response resp
45
46
  return unless resp.code == "200"
46
47
 
47
- bib_hash = HashConverter.hash_to_bib YAML.safe_load(resp.body, [Date])
48
+ yaml = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new("3.1.0.pre1")
49
+ YAML.safe_load(resp.body, permitted_classes: [Date])
50
+ else
51
+ YAML.safe_load(resp.body, [Date])
52
+ end
53
+ bib_hash = HashConverter.hash_to_bib yaml
48
54
  BipmBibliographicItem.new(**bib_hash)
49
55
  end
50
56
 
@@ -67,6 +73,7 @@ module RelatonBipm
67
73
  def get_journal(agent)
68
74
  url = "#{IOP_DOMAIN}/journal/0026-1394"
69
75
  rsp = agent.get url
76
+ check_response rsp
70
77
  rel = rsp.xpath('//select[@id="allVolumesSelector"]/option').map do |v|
71
78
  { type: "partOf", bibitem: journal_rel(v) }
72
79
  end
@@ -88,6 +95,7 @@ module RelatonBipm
88
95
  def get_volume(vol, agent)
89
96
  url = "#{IOP_DOMAIN}/volume/0026-1394/#{vol}"
90
97
  rsp = agent.get url
98
+ check_response rsp
91
99
  rel = rsp.xpath('//li[@itemprop="hasPart"]').map do |i|
92
100
  { type: "partOf", bibitem: volume_rel(i, vol) }
93
101
  end
@@ -116,9 +124,10 @@ module RelatonBipm
116
124
  # @param ish [String]
117
125
  # @param agent [Mechanize]
118
126
  # @return [RelatonBipm::BipmBibliographicItem]
119
- def get_issue(vol, ish, agent) # rubocop:disable Metrics/AbcSize
127
+ def get_issue(vol, ish, agent) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
120
128
  url = issue_url vol, ish
121
129
  rsp = agent.get url
130
+ check_response rsp
122
131
  rel = rsp.xpath('//div[@class="art-list-item-body"]').map do |a|
123
132
  { type: "partOf", bibitem: issue_rel(a, vol, ish) }
124
133
  end
@@ -199,6 +208,7 @@ module RelatonBipm
199
208
  def get_article_from_issue(vol, ish, art, agent)
200
209
  url = issue_url vol, ish
201
210
  rsp = agent.get url
211
+ check_response rsp
202
212
  get_article rsp.at("//div[@class='indexer'][.='#{art}']/../div/a")[:href], vol, ish, agent
203
213
  end
204
214
 
@@ -209,9 +219,11 @@ module RelatonBipm
209
219
  # @return [RelatonBipm::BipmBibliographicItem]
210
220
  def get_article(path, vol, ish, agent) # rubocop:disable Metrics/AbcSize
211
221
  rsp = agent.get path
222
+ check_response rsp
212
223
  url = rsp.uri
213
224
  bib = rsp.link_with(text: "BibTeX").href
214
225
  rsp = agent.get bib
226
+ check_response rsp
215
227
  bt = BibTeX.parse(rsp.body).first
216
228
  bibitem(docid: btdocid(bt), title: titles(bt.title.to_s), abstract: btabstract(bt), doctype: bt.type.to_s,
217
229
  link: btlink(bt, url), date: btdate(bt), contributor: btcontrib(bt), series: series,
@@ -293,6 +305,26 @@ module RelatonBipm
293
305
  def get(ref, year = nil, opts = {})
294
306
  search(ref, year, opts)
295
307
  end
308
+
309
+ private
310
+
311
+ #
312
+ # Check HTTP response. Warn and rise error if response is not 200
313
+ # or redirect to CAPTCHA.
314
+ #
315
+ # @param [Mechanize] rsp response
316
+ #
317
+ # @raise [RelatonBib::RequestError] if response is not 200
318
+ #
319
+ def check_response(rsp) # rubocop:disable Metrics/AbcSize
320
+ if rsp.code == "302"
321
+ warn "[relaton-bipm] #{rsp.uri} is redirected to #{rsp.header['location']}"
322
+ raise RelatonBib::RequestError, "redirected to #{rsp.header['location']}"
323
+ elsif rsp.code != "200"
324
+ warn "[read_bipm] can't acces #{rsp.uri} #{rsp.code}"
325
+ raise RelatonBib::RequestError, "can't acces #{rsp.uri} #{rsp.code}"
326
+ end
327
+ end
296
328
  end
297
329
  end
298
330
  end
@@ -1,3 +1,3 @@
1
1
  module RelatonBipm
2
- VERSION = "1.10.1".freeze
2
+ VERSION = "1.11.0".freeze
3
3
  end
data/relaton_bipm.gemspec CHANGED
@@ -44,6 +44,6 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
44
44
  spec.add_development_dependency "webmock"
45
45
 
46
46
  spec.add_dependency "mechanize", "~> 2.8.0"
47
- spec.add_dependency "relaton-bib", "~> 1.10.1"
47
+ spec.add_dependency "relaton-bib", "~> 1.11.0"
48
48
  spec.add_dependency "serrano", "~> 1.0"
49
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-bipm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.1
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-09 00:00:00.000000000 Z
11
+ date: 2022-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.10.1
131
+ version: 1.11.0
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 1.10.1
138
+ version: 1.11.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: serrano
141
141
  requirement: !ruby/object:Gem::Requirement