relaton-iso 1.8.0 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +1 -11
- data/.rubocop.yml +1 -1
- data/README.adoc +84 -1
- data/bin/rackup +29 -0
- data/bin/rubocop +29 -0
- data/bin/ruby-parse +29 -0
- data/bin/ruby-rewrite +29 -0
- data/lib/relaton_iso/hit.rb +7 -6
- data/lib/relaton_iso/hit_collection.rb +44 -32
- data/lib/relaton_iso/iso_bibliography.rb +42 -29
- data/lib/relaton_iso/scrapper.rb +66 -51
- data/lib/relaton_iso/version.rb +1 -1
- data/relaton_iso.gemspec +5 -1
- metadata +64 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c03256162a043a8d8842d3cd31d95dad25487cdde4992b34d44951c650421c3d
|
4
|
+
data.tar.gz: '0295b78c2fbfaaa848e07bb46fabfed6a4ea44c0af0f5e865bf1b25333a4e376'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f34e505b97d03f6e8ed481ee87036e51d8748e81e9ab77ea78fda8c7764eca21942a033a06c5e363b0ffacee648e3125cf93a1254897ab60512877836177ce3c
|
7
|
+
data.tar.gz: 9266cb080c0e888b9f6ffaa151d5bc118a6f3b73655cf3f9c8f9d1727dd98e779eef2047f977d492f54c668b58d5f23663374bf2adb8fe306b97f06558b3e973
|
data/.github/workflows/rake.yml
CHANGED
@@ -16,19 +16,9 @@ jobs:
|
|
16
16
|
strategy:
|
17
17
|
fail-fast: false
|
18
18
|
matrix:
|
19
|
-
ruby: [ '
|
19
|
+
ruby: [ '3.0', '2.7', '2.6', '2.5' ]
|
20
20
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
21
21
|
experimental: [ false ]
|
22
|
-
include:
|
23
|
-
- ruby: '3.0'
|
24
|
-
os: 'ubuntu-latest'
|
25
|
-
experimental: true
|
26
|
-
- ruby: '3.0'
|
27
|
-
os: 'windows-latest'
|
28
|
-
experimental: true
|
29
|
-
- ruby: '3.0'
|
30
|
-
os: 'macos-latest'
|
31
|
-
experimental: true
|
32
22
|
steps:
|
33
23
|
- uses: actions/checkout@v2
|
34
24
|
with:
|
data/.rubocop.yml
CHANGED
data/README.adoc
CHANGED
@@ -31,7 +31,7 @@ Or install it yourself as:
|
|
31
31
|
|
32
32
|
== Usage
|
33
33
|
|
34
|
-
=== Search for
|
34
|
+
=== Search for standards using keywords
|
35
35
|
|
36
36
|
[source,ruby]
|
37
37
|
----
|
@@ -50,6 +50,7 @@ item = hit_collection[2].fetch
|
|
50
50
|
[#<RelatonBib::FormattedString:0x007fa5dca88458
|
51
51
|
@content=
|
52
52
|
"ISO/TS 19115-3:2016 defines an integrated XML implementation of ISO 19115‑1, ..."
|
53
|
+
...
|
53
54
|
|
54
55
|
item.docidentifier
|
55
56
|
=> [#<RelatonBib::DocumentIdentifier:0x007fd9ce9c6878 @id="ISO/TS 19115-3:2016", @scope=nil, @type="ISO">,
|
@@ -59,6 +60,88 @@ item.docidentifier
|
|
59
60
|
=> "urn:iso:std:iso-ts:ts:19115:-3:stage-90.92:ed-1:en,fr"
|
60
61
|
----
|
61
62
|
|
63
|
+
=== Fetch document by reference and year
|
64
|
+
|
65
|
+
[source,ruby]
|
66
|
+
----
|
67
|
+
item = RelatonIso::IsoBibliography.get "ISO 19115:2003"
|
68
|
+
[relaton-iso] ("ISO 19115:2003") fetching...
|
69
|
+
[relaton-iso] ("ISO 19115:2003") found ISO 19115:2003
|
70
|
+
=> #<RelatonIsoBib::IsoBibliographicItem:0x00007f8c83429e30
|
71
|
+
...
|
72
|
+
|
73
|
+
item = RelatonIso::IsoBibliography.get "ISO 19115", "2003"
|
74
|
+
[relaton-iso] ("ISO 19115") fetching...
|
75
|
+
[relaton-iso] ("ISO 19115") found ISO 19115:2003
|
76
|
+
=> #<RelatonIsoBib::IsoBibliographicItem:0x00007f8c828d3180
|
77
|
+
...
|
78
|
+
|
79
|
+
item.docidentifier[0].id
|
80
|
+
=> "ISO 19115:2003"
|
81
|
+
----
|
82
|
+
|
83
|
+
=== Fetch non-part document
|
84
|
+
|
85
|
+
[source,ruby]
|
86
|
+
----
|
87
|
+
item = RelatonIso::IsoBibliography.get "ISO 19115"
|
88
|
+
[relaton-iso] ("ISO 19115") fetching...
|
89
|
+
[relaton-iso] ("ISO 19115") found ISO 19115:2003
|
90
|
+
=> #<RelatonIsoBib::IsoBibliographicItem:0x00007f8c830275a8
|
91
|
+
...
|
92
|
+
|
93
|
+
item.docidentifier[0].id
|
94
|
+
=> "ISO 19115:2003"
|
95
|
+
----
|
96
|
+
|
97
|
+
=== Fetch part document
|
98
|
+
|
99
|
+
[source,ruby]
|
100
|
+
----
|
101
|
+
item = RelatonIso::IsoBibliography.get "ISO 19115-1"
|
102
|
+
[relaton-iso] ("ISO 19115-1") fetching...
|
103
|
+
[relaton-iso] ("ISO 19115-1") found ISO 19115-1:2014
|
104
|
+
=> #<RelatonIsoBib::IsoBibliographicItem:0x00007f8c83408af0
|
105
|
+
...
|
106
|
+
|
107
|
+
item.docidentifier[0].id
|
108
|
+
=> "ISO 19115-1:2014"
|
109
|
+
----
|
110
|
+
|
111
|
+
=== Fetch all-parts document
|
112
|
+
|
113
|
+
[source,ruby]
|
114
|
+
----
|
115
|
+
item = RelatonIso::IsoBibliography.get "ISO 19115 (all parts)"
|
116
|
+
[relaton-iso] ("ISO 19115") fetching...
|
117
|
+
[relaton-iso] ("ISO 19115") found ISO 19115 (all parts)
|
118
|
+
=> #<RelatonIsoBib::IsoBibliographicItem:0x00007f8ca216e118
|
119
|
+
...
|
120
|
+
|
121
|
+
item = RelatonIso::IsoBibliography.get "ISO 19115", nil, all_parts: true
|
122
|
+
[relaton-iso] ("ISO 19115") fetching...
|
123
|
+
[relaton-iso] ("ISO 19115") found ISO 19115 (all parts)
|
124
|
+
=> #<RelatonIsoBib::IsoBibliographicItem:0x00007f8c830f3d38
|
125
|
+
...
|
126
|
+
|
127
|
+
item.docidentifier[0].id
|
128
|
+
=> "ISO 19115 (all parts)"
|
129
|
+
|
130
|
+
item = RelatonIso::IsoBibliography.get "ISO 19115-1 (all parts)"
|
131
|
+
[relaton-iso] ("ISO 19115-1") fetching...
|
132
|
+
[relaton-iso] ("ISO 19115-1") found ISO 19115 (all parts)
|
133
|
+
=> #<RelatonIsoBib::IsoBibliographicItem:0x00007f8c8290e5a0
|
134
|
+
|
135
|
+
item = RelatonIso::IsoBibliography.get "ISO 19115-1", nil, all_parts: true
|
136
|
+
[relaton-iso] ("ISO 19115-1") fetching...
|
137
|
+
[relaton-iso] ("ISO 19115-1") found ISO 19115 (all parts)
|
138
|
+
=> #<RelatonIsoBib::IsoBibliographicItem:0x00007f8c925355b8
|
139
|
+
...
|
140
|
+
|
141
|
+
item.docidentifier[0].id
|
142
|
+
=> "ISO 19115 (all parts)"
|
143
|
+
----
|
144
|
+
|
62
145
|
=== Search for ISO/IEC Directives
|
63
146
|
|
64
147
|
The ISO/IEC Derectives are stored in a static cache in a relaton gem. It needs to use the relaton gem to fetch the ISO/IEC Directives. Folloving reaferences are allowed to fetch:
|
data/bin/rackup
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rackup' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("rack", "rackup")
|
data/bin/rubocop
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rubocop' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("rubocop", "rubocop")
|
data/bin/ruby-parse
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'ruby-parse' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("parser", "ruby-parse")
|
data/bin/ruby-rewrite
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'ruby-rewrite' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("parser", "ruby-rewrite")
|
data/lib/relaton_iso/hit.rb
CHANGED
@@ -4,7 +4,7 @@ module RelatonIso
|
|
4
4
|
# Hit.
|
5
5
|
class Hit < RelatonBib::Hit
|
6
6
|
# @return [RelatonIsoBib::IsoBibliographicItem]
|
7
|
-
|
7
|
+
attr_writer :fetch
|
8
8
|
|
9
9
|
# Parse page.
|
10
10
|
# @param lang [String, NilClass]
|
@@ -15,11 +15,12 @@ module RelatonIso
|
|
15
15
|
|
16
16
|
# @return [Integer]
|
17
17
|
def sort_weight
|
18
|
-
case hit[
|
19
|
-
when "
|
20
|
-
when "
|
21
|
-
when "
|
22
|
-
|
18
|
+
case hit[:status] # && hit["publicationStatus"]["key"]
|
19
|
+
when "Published" then 0
|
20
|
+
when "Under development" then 1
|
21
|
+
when "Withdrawn" then 2
|
22
|
+
when "Deleted" then 3
|
23
|
+
else 4
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "algolia"
|
3
4
|
require "relaton_iso/hit"
|
4
5
|
|
5
6
|
module RelatonIso
|
@@ -16,18 +17,22 @@ module RelatonIso
|
|
16
17
|
# @param lang [String, NilClass]
|
17
18
|
# @return [RelatonIsoBib::IsoBibliographicItem]
|
18
19
|
def to_all_parts(lang = nil) # rubocop:disable Metrics/CyclomaticComplexity
|
19
|
-
parts = @array.reject { |h| h.hit["docPart"]&.empty? }
|
20
|
-
hit =
|
20
|
+
# parts = @array.reject { |h| h.hit["docPart"]&.empty? }
|
21
|
+
hit = @array.min_by do |h|
|
22
|
+
IsoBibliography.ref_components(h.hit[:title])[1].to_i
|
23
|
+
end
|
21
24
|
return @array.first.fetch lang unless hit
|
22
25
|
|
23
26
|
bibitem = hit.fetch lang
|
24
27
|
all_parts_item = bibitem.to_all_parts
|
25
|
-
|
28
|
+
@array.reject { |h| h.hit[:uuid] == hit.hit[:uuid] }.each do |hi|
|
29
|
+
%r{^(?<fr>ISO(?:\s|/)[^-/:()]+(?:-[\w-]+)?(?::\d{4})?
|
30
|
+
(?:/\w+(?:\s\w+)?\s\d+(?:\d{4})?)?)}x =~ hi.hit[:title]
|
26
31
|
isobib = RelatonIsoBib::IsoBibliographicItem.new(
|
27
|
-
formattedref: RelatonBib::FormattedRef.new(content:
|
32
|
+
formattedref: RelatonBib::FormattedRef.new(content: fr),
|
28
33
|
)
|
29
34
|
all_parts_item.relation << RelatonBib::DocumentRelation.new(
|
30
|
-
type: "instance", bibitem: isobib
|
35
|
+
type: "instance", bibitem: isobib,
|
31
36
|
)
|
32
37
|
end
|
33
38
|
all_parts_item
|
@@ -49,8 +54,8 @@ module RelatonIso
|
|
49
54
|
|
50
55
|
hash = YAML.safe_load resp.body
|
51
56
|
bib_hash = RelatonIsoBib::HashConverter.hash_to_bib hash
|
52
|
-
bib = RelatonIsoBib::IsoBibliographicItem.new
|
53
|
-
hit = Hit.new({
|
57
|
+
bib = RelatonIsoBib::IsoBibliographicItem.new(**bib_hash)
|
58
|
+
hit = Hit.new({ title: text }, self)
|
54
59
|
hit.fetch = bib
|
55
60
|
[hit]
|
56
61
|
end
|
@@ -61,21 +66,28 @@ module RelatonIso
|
|
61
66
|
# @return [Array<RelatonIso::Hit>]
|
62
67
|
#
|
63
68
|
def fetch_iso # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
64
|
-
%r{\s(?<num>\d+)(?:-(?<part>[\d-]+))?} =~ text
|
65
|
-
http = Net::HTTP.new "www.iso.org", 443
|
66
|
-
http.use_ssl = true
|
67
|
-
search = ["status=ENT_ACTIVE,ENT_PROGRESS,ENT_INACTIVE,ENT_DELETED"]
|
68
|
-
search << "docNumber=#{num}"
|
69
|
-
search << "docPartNo=#{part}" if part
|
70
|
-
q = search.join "&"
|
71
|
-
resp = http.get("/cms/render/live/en/sites/isoorg.advancedSearch.do?#{q}",
|
72
|
-
|
73
|
-
|
69
|
+
# %r{\s(?<num>\d+)(?:-(?<part>[\d-]+))?} =~ text
|
70
|
+
# http = Net::HTTP.new "www.iso.org", 443
|
71
|
+
# http.use_ssl = true
|
72
|
+
# search = ["status=ENT_ACTIVE,ENT_PROGRESS,ENT_INACTIVE,ENT_DELETED"]
|
73
|
+
# search << "docNumber=#{num}"
|
74
|
+
# search << "docPartNo=#{part}" if part
|
75
|
+
# q = search.join "&"
|
76
|
+
# resp = http.get("/cms/render/live/en/sites/isoorg.advancedSearch.do?#{q}",
|
77
|
+
# "Accept" => "application/json, text/plain, */*")
|
78
|
+
config = Algolia::Search::Config.new(application_id: "JCL49WV5AR", api_key: "dd1b9e1ab383f4d4817d29cd5e96d3f0")
|
79
|
+
client = Algolia::Search::Client.new config, logger: ::Logger.new($stderr)
|
80
|
+
index = client.init_index "all_en"
|
81
|
+
resp = index.search text, hitsPerPage: 100, filters: "category:standard"
|
82
|
+
# return [] if resp.body.empty?
|
74
83
|
|
75
|
-
json = JSON.parse resp.body
|
76
|
-
json["standards"]
|
77
|
-
|
78
|
-
|
84
|
+
# json = JSON.parse resp.body
|
85
|
+
# json["standards"]
|
86
|
+
resp[:hits].map { |h| Hit.new h, self }.sort! do |a, b|
|
87
|
+
if a.sort_weight == b.sort_weight && b.hit[:year] = a.hit[:year]
|
88
|
+
a.hit[:title] <=> b.hit[:title]
|
89
|
+
elsif a.sort_weight == b.sort_weight
|
90
|
+
b.hit[:year] - a.hit[:year]
|
79
91
|
else
|
80
92
|
a.sort_weight - b.sort_weight
|
81
93
|
end
|
@@ -84,16 +96,16 @@ module RelatonIso
|
|
84
96
|
|
85
97
|
# @param hit [Hash]
|
86
98
|
# @return [Date]
|
87
|
-
def parse_date(hit)
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
end
|
99
|
+
# def parse_date(hit)
|
100
|
+
# if hit["publicationDate"]
|
101
|
+
# Date.strptime(hit["publicationDate"], "%Y-%m")
|
102
|
+
# elsif %r{:(?<year>\d{4})} =~ hit["docRef"]
|
103
|
+
# Date.strptime(year, "%Y")
|
104
|
+
# elsif hit["newProjectDate"]
|
105
|
+
# Date.parse hit["newProjectDate"]
|
106
|
+
# else
|
107
|
+
# Date.new 0
|
108
|
+
# end
|
109
|
+
# end
|
98
110
|
end
|
99
111
|
end
|
@@ -15,8 +15,9 @@ module RelatonIso
|
|
15
15
|
HitCollection.new text.gsub(/\u2013/, "-")
|
16
16
|
rescue SocketError, Timeout::Error, Errno::EINVAL, Errno::ECONNRESET,
|
17
17
|
EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
|
18
|
-
Net::ProtocolError, OpenSSL::SSL::SSLError, Errno::ETIMEDOUT
|
19
|
-
|
18
|
+
Net::ProtocolError, OpenSSL::SSL::SSLError, Errno::ETIMEDOUT,
|
19
|
+
Algolia::AlgoliaUnreachableHostError => e
|
20
|
+
raise RelatonBib::RequestError, e.message
|
20
21
|
end
|
21
22
|
|
22
23
|
# @param ref [String] the ISO standard Code to look up (e..g "ISO 9000")
|
@@ -25,11 +26,15 @@ module RelatonIso
|
|
25
26
|
# reference is required, :keep_year if undated reference should
|
26
27
|
# return actual reference with year
|
27
28
|
# @return [String] Relaton XML serialisation of reference
|
28
|
-
def get(ref, year = nil, opts = {})
|
29
|
+
def get(ref, year = nil, opts = {}) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
29
30
|
code = ref.gsub(/\u2013/, "-")
|
30
|
-
%r{\s(?<num>\d+)(
|
31
|
+
# %r{\s(?<num>\d+)(?:-(?<part>[\d-]+))?(?::(?<year1>\d{4}))?} =~ code
|
32
|
+
_, _part, year1, = ref_components ref
|
31
33
|
year ||= year1
|
32
|
-
|
34
|
+
code.sub! " (all parts)", ""
|
35
|
+
opts[:all_parts] ||= $~ && opts[:all_parts].nil?
|
36
|
+
opts[:keep_year] ||= opts[:keep_year].nil?
|
37
|
+
# code.sub!("#{num}-#{part}", num) if opts[:all_parts] && part
|
33
38
|
# if %r[^ISO/IEC DIR].match? code
|
34
39
|
# return RelatonIec::IecBibliography.get(code, year, opts)
|
35
40
|
# end
|
@@ -44,6 +49,16 @@ module RelatonIso
|
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
52
|
+
def ref_components(ref)
|
53
|
+
%r{
|
54
|
+
^(?<code>ISO(?:\s|/)[^-/:()]+\d+)
|
55
|
+
(?:-(?<part>[\w-]+))?
|
56
|
+
(?::(?<year>\d{4}))?
|
57
|
+
(?:/(?<corr>\w+(?:\s\w+)?\s\d+)(?:(?<coryear>\d{4}))?)?
|
58
|
+
}x =~ ref
|
59
|
+
[code&.strip, part, year, corr, coryear]
|
60
|
+
end
|
61
|
+
|
47
62
|
private
|
48
63
|
|
49
64
|
# rubocop:disable Metrics/MethodLength
|
@@ -51,19 +66,19 @@ module RelatonIso
|
|
51
66
|
def fetch_ref_err(code, year, missed_years)
|
52
67
|
id = year ? "#{code}:#{year}" : code
|
53
68
|
warn "[relaton-iso] WARNING: no match found online for #{id}. "\
|
54
|
-
|
69
|
+
"The code must be exactly like it is on the standards website."
|
55
70
|
unless missed_years.empty?
|
56
71
|
warn "[relaton-iso] (There was no match for #{year}, though there "\
|
57
|
-
|
72
|
+
"were matches found for #{missed_years.join(', ')}.)"
|
58
73
|
end
|
59
74
|
if /\d-\d/.match? code
|
60
75
|
warn "[relaton-iso] The provided document part may not exist, "\
|
61
|
-
|
76
|
+
"or the document may no longer be published in parts."
|
62
77
|
else
|
63
78
|
warn "[relaton-iso] If you wanted to cite all document parts for "\
|
64
|
-
|
65
|
-
|
66
|
-
|
79
|
+
"the reference, use \"#{code} (all parts)\".\nIf the document "\
|
80
|
+
"is not a standard, use its document type abbreviation "\
|
81
|
+
"(TS, TR, PAS, Guide)."
|
67
82
|
end
|
68
83
|
nil
|
69
84
|
end
|
@@ -76,18 +91,20 @@ module RelatonIso
|
|
76
91
|
# @param opts [Hash]
|
77
92
|
# @return [Array<RelatonIso::Hit>]
|
78
93
|
def isobib_search_filter(code, opts)
|
94
|
+
ref = remove_part code, opts[:all_parts]
|
79
95
|
warn "[relaton-iso] (\"#{code}\") fetching..."
|
80
|
-
result = search(
|
96
|
+
result = search(ref)
|
81
97
|
res = search_code result, code, opts
|
82
98
|
return res unless res.empty?
|
83
99
|
|
84
100
|
# try stages
|
85
|
-
|
101
|
+
case code
|
102
|
+
when %r{^\w+/[^/]+\s\d+} # code like ISO/IEC 123, ISO/IEC/IEE 123
|
86
103
|
res = try_stages(result, opts) do |st|
|
87
104
|
code.sub(%r{^(?<pref>[^\s]+\s)}) { "#{$~[:pref]}#{st} " }
|
88
105
|
end
|
89
106
|
return res unless res.empty?
|
90
|
-
|
107
|
+
when %r{^\w+\s\d+} # code like ISO 123
|
91
108
|
res = try_stages(result, opts) do |st|
|
92
109
|
code.sub(%r{^(?<pref>\w+)}) { "#{$~[:pref]}/#{st}" }
|
93
110
|
end
|
@@ -103,6 +120,12 @@ module RelatonIso
|
|
103
120
|
end
|
104
121
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
105
122
|
|
123
|
+
def remove_part(ref, all_parts)
|
124
|
+
return ref unless all_parts
|
125
|
+
|
126
|
+
ref.sub %r{(\S+\s\d+)[\d-]+}, '\1'
|
127
|
+
end
|
128
|
+
|
106
129
|
# @param result [RelatonIso::HitCollection]
|
107
130
|
# @param opts [Hash]
|
108
131
|
# @return [RelatonIso::HitCollection]
|
@@ -120,25 +143,15 @@ module RelatonIso
|
|
120
143
|
# @param code [String]
|
121
144
|
# @param opts [Hash]
|
122
145
|
# @return [RelatonIso::HitCollection]
|
123
|
-
def search_code(result, code,
|
124
|
-
code1, part1, corr1, coryear1 = ref_components code
|
146
|
+
def search_code(result, code, opts) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
|
147
|
+
code1, part1, _, corr1, coryear1 = ref_components code
|
125
148
|
result.select do |i|
|
126
|
-
code2, part2, corr2, coryear2 = ref_components i.hit[
|
127
|
-
code1 == code2 && (
|
149
|
+
code2, part2, _, corr2, coryear2 = ref_components i.hit[:title]
|
150
|
+
code1 == code2 && (opts[:all_parts] && part2 || !opts[:all_parts] && part1 == part2) &&
|
128
151
|
corr1 == corr2 && (!coryear1 || coryear1 == coryear2)
|
129
152
|
end
|
130
153
|
end
|
131
154
|
|
132
|
-
def ref_components(ref)
|
133
|
-
%r{
|
134
|
-
^(?<code>ISO(?:\s|/)[^-/:()]+)
|
135
|
-
(?:-(?<part>[^:/]+))?
|
136
|
-
(?::\d{4})?
|
137
|
-
(?:/(?<corr>\w+(?:\s\w+)?\s\d+)(?:(?<coryear>\d{4}))?)?
|
138
|
-
}x =~ ref
|
139
|
-
[code&.strip, part, corr, coryear]
|
140
|
-
end
|
141
|
-
|
142
155
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
143
156
|
|
144
157
|
# Sort through the results from RelatonIso, fetching them three at a time,
|
@@ -151,7 +164,7 @@ module RelatonIso
|
|
151
164
|
def isobib_results_filter(result, year, opts)
|
152
165
|
missed_years = []
|
153
166
|
hits = result.reduce!([]) do |hts, h|
|
154
|
-
if !year || %r{:(?<iyear>\d{4})(?!.*:\d{4})} =~ h.hit[
|
167
|
+
if !year || %r{:(?<iyear>\d{4})(?!.*:\d{4})} =~ h.hit[:title] && iyear == year
|
155
168
|
hts << h
|
156
169
|
else
|
157
170
|
missed_years << iyear
|
data/lib/relaton_iso/scrapper.rb
CHANGED
@@ -7,8 +7,7 @@ require "net/http"
|
|
7
7
|
|
8
8
|
module RelatonIso
|
9
9
|
# Scrapper.
|
10
|
-
# rubocop:disable Metrics/ModuleLength
|
11
|
-
module Scrapper
|
10
|
+
module Scrapper # rubocop:disable Metrics/ModuleLength
|
12
11
|
DOMAIN = "https://www.iso.org"
|
13
12
|
|
14
13
|
TYPES = {
|
@@ -55,9 +54,9 @@ module RelatonIso
|
|
55
54
|
# @param lang [String, NilClass]
|
56
55
|
# @return [Hash]
|
57
56
|
def parse_page(hit_data, lang = nil) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
58
|
-
path = "/contents/data/standard#{hit_data['splitPath']}/"\
|
59
|
-
"#{hit_data['csnumber']}.html"
|
60
|
-
doc, url = get_page path
|
57
|
+
# path = "/contents/data/standard#{hit_data['splitPath']}/"\
|
58
|
+
# "#{hit_data['csnumber']}.html"
|
59
|
+
doc, url = get_page "#{hit_data[:path].sub '/sites/isoorg', ''}.html"
|
61
60
|
|
62
61
|
# Fetch edition.
|
63
62
|
edition = doc&.xpath("//strong[contains(text(), 'Edition')]/..")
|
@@ -67,24 +66,24 @@ module RelatonIso
|
|
67
66
|
|
68
67
|
RelatonIsoBib::IsoBibliographicItem.new(
|
69
68
|
fetched: Date.today.to_s,
|
70
|
-
docid: fetch_docid(
|
69
|
+
docid: fetch_docid(doc, edition, langs),
|
71
70
|
docnumber: fetch_docnumber(doc),
|
72
71
|
edition: edition,
|
73
72
|
language: langs.map { |l| l[:lang] },
|
74
73
|
script: langs.map { |l| script(l[:lang]) }.uniq,
|
75
74
|
title: titles,
|
76
|
-
doctype: fetch_type(hit_data[
|
75
|
+
doctype: fetch_type(hit_data[:title]),
|
77
76
|
docstatus: fetch_status(doc),
|
78
77
|
ics: fetch_ics(doc),
|
79
|
-
date: fetch_dates(doc, hit_data[
|
80
|
-
contributor: fetch_contributors(hit_data[
|
78
|
+
date: fetch_dates(doc, hit_data[:title]),
|
79
|
+
contributor: fetch_contributors(hit_data[:title]),
|
81
80
|
editorialgroup: fetch_workgroup(doc),
|
82
81
|
abstract: abstract,
|
83
|
-
copyright: fetch_copyright(
|
82
|
+
copyright: fetch_copyright(doc),
|
84
83
|
link: fetch_link(doc, url),
|
85
84
|
relation: fetch_relations(doc),
|
86
85
|
place: ["Geneva"],
|
87
|
-
structuredidentifier: fetch_structuredidentifier(doc)
|
86
|
+
structuredidentifier: fetch_structuredidentifier(doc),
|
88
87
|
)
|
89
88
|
end
|
90
89
|
|
@@ -94,8 +93,7 @@ module RelatonIso
|
|
94
93
|
# @param doc [Nokigiri::HTML::Document]
|
95
94
|
# @param lang [String, NilClass]
|
96
95
|
# @return [Array<Array>]
|
97
|
-
# rubocop:disable Metrics/AbcSize,
|
98
|
-
def fetch_titles_abstract(doc, lang)
|
96
|
+
def fetch_titles_abstract(doc, lang) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
99
97
|
titles = RelatonBib::TypedTitleStringCollection.new
|
100
98
|
abstract = []
|
101
99
|
langs = languages(doc, lang).reduce([]) do |s, l|
|
@@ -107,7 +105,11 @@ module RelatonIso
|
|
107
105
|
titles += fetch_title(d, l[:lang])
|
108
106
|
|
109
107
|
# Fetch abstracts.
|
110
|
-
abstract_content = d.
|
108
|
+
abstract_content = d.xpath(
|
109
|
+
"//div[@itemprop='description']/p|//div[@itemprop='description']/ul/li",
|
110
|
+
).map do |a|
|
111
|
+
a.name == "li" ? "- #{a.text}" : a.text
|
112
|
+
end.reject(&:empty?).join("\n")
|
111
113
|
unless abstract_content.empty?
|
112
114
|
abstract << {
|
113
115
|
content: abstract_content,
|
@@ -121,7 +123,6 @@ module RelatonIso
|
|
121
123
|
end
|
122
124
|
[titles, abstract, langs]
|
123
125
|
end
|
124
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
125
126
|
|
126
127
|
# Returns available languages.
|
127
128
|
# @param doc [Nokogiri::HTML::Document]
|
@@ -131,7 +132,7 @@ module RelatonIso
|
|
131
132
|
lgs = [{ lang: "en" }]
|
132
133
|
doc.css("li#lang-switcher ul li a").each do |lang_link|
|
133
134
|
lang_path = lang_link.attr("href")
|
134
|
-
l = lang_path.match(%r{
|
135
|
+
l = lang_path.match(%r{^/(fr)/})
|
135
136
|
lgs << { lang: l[1], path: lang_path } if l && (!lang || l[1] == lang)
|
136
137
|
end
|
137
138
|
lgs
|
@@ -168,67 +169,80 @@ module RelatonIso
|
|
168
169
|
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
169
170
|
|
170
171
|
# Fetch docid.
|
171
|
-
# @param
|
172
|
+
# @param doc [Nokogiri:HTML::Document]
|
173
|
+
# @param edition [String]
|
172
174
|
# @param langs [Array<Hash>]
|
173
175
|
# @return [Array<RelatonBib::DocumentIdentifier>]
|
174
|
-
def fetch_docid(
|
176
|
+
def fetch_docid(doc, edition, langs)
|
177
|
+
pubid = item_ref doc
|
175
178
|
[
|
176
|
-
RelatonBib::DocumentIdentifier.new(id:
|
177
|
-
RelatonBib::DocumentIdentifier.new(
|
178
|
-
|
179
|
+
RelatonBib::DocumentIdentifier.new(id: pubid, type: "ISO"),
|
180
|
+
RelatonBib::DocumentIdentifier.new(
|
181
|
+
id: fetch_urn(doc, pubid, edition, langs), type: "URN",
|
182
|
+
),
|
179
183
|
]
|
180
184
|
end
|
181
185
|
|
182
|
-
# @param
|
186
|
+
# @param doc [Nokogiri:HTML::Document]
|
187
|
+
# @param pubid [String]
|
188
|
+
# @param edition [String]
|
183
189
|
# @param langs [Array<Hash>]
|
184
190
|
# @returnt [String]
|
185
|
-
def fetch_urn(
|
186
|
-
orig =
|
187
|
-
%r{(?<=)(?<type>DATA|GUIDE|ISP|IWA|PAS|R|TR|TS|TTA)} =~
|
191
|
+
def fetch_urn(doc, pubid, edition, langs) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
|
192
|
+
orig = pubid.split.first.downcase.split("/").join "-"
|
193
|
+
%r{(?<=)(?<type>DATA|GUIDE|ISP|IWA|PAS|R|TR|TS|TTA)} =~ pubid
|
194
|
+
_, part, _year, corr, = IsoBibliography.ref_components pubid
|
188
195
|
urn = "urn:iso:std:#{orig}"
|
189
196
|
urn += ":#{type.downcase}" if type
|
190
|
-
urn += ":#{
|
191
|
-
urn += ":-#{
|
192
|
-
urn += ":stage-#{
|
193
|
-
urn += ":ed-#{
|
194
|
-
if
|
195
|
-
|
197
|
+
urn += ":#{fetch_docnumber(doc)}"
|
198
|
+
urn += ":-#{part}" if part
|
199
|
+
urn += ":stage-#{stage_code(doc)}"
|
200
|
+
urn += ":ed-#{edition}" if edition
|
201
|
+
if corr
|
202
|
+
corrparts = corr.split
|
203
|
+
urn += ":#{corrparts[0].downcase}:#{corrparts[-1]}"
|
196
204
|
end
|
197
|
-
urn += "
|
205
|
+
urn += ":#{langs.map { |l| l[:lang] }.join(',')}"
|
198
206
|
urn
|
199
207
|
end
|
200
208
|
|
201
209
|
def fetch_docnumber(doc)
|
202
|
-
|
203
|
-
id&.match(/\d+/)&.to_s
|
210
|
+
item_ref(doc)&.match(/\d+/)&.to_s
|
204
211
|
end
|
205
212
|
|
206
213
|
# @param doc [Nokogiri::HTML::Document]
|
207
214
|
def fetch_structuredidentifier(doc) # rubocop:disable Metrics/MethodLength
|
208
|
-
|
209
|
-
unless
|
215
|
+
ref = item_ref doc
|
216
|
+
unless ref
|
210
217
|
return RelatonIsoBib::StructuredIdentifier.new(
|
211
|
-
project_number: "?", part_number: "", prefix: nil, id: "?"
|
218
|
+
project_number: "?", part_number: "", prefix: nil, id: "?",
|
212
219
|
)
|
213
220
|
end
|
214
221
|
|
215
|
-
m =
|
222
|
+
m = ref.match(/^(.*?\d+)-?((?<=-)\d+|)/)
|
216
223
|
RelatonIsoBib::StructuredIdentifier.new(
|
217
|
-
project_number: m[1],
|
218
|
-
id: item_ref.text, type: "ISO"
|
224
|
+
project_number: m[1], part: m[2], type: "ISO",
|
219
225
|
)
|
220
226
|
end
|
221
227
|
|
228
|
+
def item_ref(doc)
|
229
|
+
doc.at("//nav[contains(@class, 'heading-condensed')]/h1")&.text
|
230
|
+
end
|
231
|
+
|
222
232
|
# Fetch status.
|
223
233
|
# @param doc [Nokogiri::HTML::Document]
|
224
234
|
# @param status [String]
|
225
235
|
# @return [Hash]
|
226
236
|
def fetch_status(doc)
|
227
|
-
stg, substg = doc.
|
228
|
-
.text.split "."
|
237
|
+
stg, substg = stage_code(doc).split "."
|
229
238
|
RelatonBib::DocumentStatus.new(stage: stg, substage: substg)
|
230
239
|
end
|
231
240
|
|
241
|
+
def stage_code(doc)
|
242
|
+
doc.at("//ul[@class='dropdown-menu']/li[@class='active']"\
|
243
|
+
"/a/span[@class='stage-code']").text
|
244
|
+
end
|
245
|
+
|
232
246
|
# def stage(stg, substg)
|
233
247
|
# abbr = STGABBR[stg].is_a?(Hash) ? STGABBR[stg][substg] : STGABBR[stg]
|
234
248
|
# RelatonBib::DocumentStatus::Stage.new value: stg, abbreviation: abbr
|
@@ -241,13 +255,15 @@ module RelatonIso
|
|
241
255
|
wg_link = doc.css("div.entry-name.entry-block a")[0]
|
242
256
|
# wg_url = DOMAIN + wg_link['href']
|
243
257
|
workgroup = wg_link.text.split "/"
|
258
|
+
type = workgroup[1]&.match(/^[A-Z]+/)&.to_s || "TC"
|
244
259
|
{
|
245
260
|
name: "International Organization for Standardization",
|
246
261
|
abbreviation: "ISO",
|
247
262
|
url: "www.iso.org",
|
248
263
|
technical_committee: [{
|
249
|
-
name:
|
250
|
-
|
264
|
+
name: doc.css("div.entry-title")[0].text,
|
265
|
+
identifier: wg_link.text,
|
266
|
+
type: type,
|
251
267
|
number: workgroup[1]&.match(/\d+/)&.to_s&.to_i,
|
252
268
|
}],
|
253
269
|
}
|
@@ -274,10 +290,10 @@ module RelatonIso
|
|
274
290
|
else
|
275
291
|
a + r.css("a").map do |id|
|
276
292
|
fref = RelatonBib::FormattedRef.new(
|
277
|
-
content: id.text, format: "text/plain"
|
293
|
+
content: id.text, format: "text/plain",
|
278
294
|
)
|
279
295
|
bibitem = RelatonIsoBib::IsoBibliographicItem.new(
|
280
|
-
formattedref: fref, date: date
|
296
|
+
formattedref: fref, date: date,
|
281
297
|
)
|
282
298
|
{ type: type, bibitem: bibitem }
|
283
299
|
end
|
@@ -311,7 +327,7 @@ module RelatonIso
|
|
311
327
|
def fetch_title(doc, lang)
|
312
328
|
content = doc.at(
|
313
329
|
"//nav[contains(@class,'heading-condensed')]/h2 | "\
|
314
|
-
"//nav[contains(@class,'heading-condensed')]/h3"
|
330
|
+
"//nav[contains(@class,'heading-condensed')]/h3",
|
315
331
|
)&.text&.gsub(/\u2014/, "-")
|
316
332
|
return RelatonBib::TypedTitleStringCollection.new unless content
|
317
333
|
|
@@ -373,7 +389,7 @@ module RelatonIso
|
|
373
389
|
def fetch_ics(doc)
|
374
390
|
doc.xpath("//strong[contains(text(), "\
|
375
391
|
"'ICS')]/../following-sibling::dd/div/a").map do |i|
|
376
|
-
code = i.text.match(/[\d
|
392
|
+
code = i.text.match(/[\d.]+/).to_s.split "."
|
377
393
|
{ field: code[0], group: code[1], subgroup: code[2] }
|
378
394
|
end
|
379
395
|
end
|
@@ -395,10 +411,10 @@ module RelatonIso
|
|
395
411
|
end
|
396
412
|
|
397
413
|
# Fetch copyright.
|
398
|
-
# @param ref [String]
|
399
414
|
# @param doc [Nokogiri::HTML::Document]
|
400
415
|
# @return [Array<Hash>]
|
401
|
-
def fetch_copyright(
|
416
|
+
def fetch_copyright(doc)
|
417
|
+
ref = item_ref doc
|
402
418
|
owner_name = ref.match(/.*?(?=\s)/).to_s
|
403
419
|
from = ref.match(/(?<=:)\d{4}/).to_s
|
404
420
|
if from.empty?
|
@@ -408,5 +424,4 @@ module RelatonIso
|
|
408
424
|
end
|
409
425
|
end
|
410
426
|
end
|
411
|
-
# rubocop:enable Metrics/ModuleLength
|
412
427
|
end
|
data/lib/relaton_iso/version.rb
CHANGED
data/relaton_iso.gemspec
CHANGED
@@ -32,11 +32,15 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency "pry-byebug"
|
33
33
|
spec.add_development_dependency "rake", "~> 13.0"
|
34
34
|
spec.add_development_dependency "rspec", "~> 3.0"
|
35
|
+
spec.add_development_dependency "rubocop"
|
36
|
+
spec.add_development_dependency "rubocop-performance"
|
37
|
+
spec.add_development_dependency "rubocop-rails"
|
35
38
|
# spec.add_development_dependency "ruby-debug-ide"
|
36
39
|
spec.add_development_dependency "simplecov"
|
37
40
|
spec.add_development_dependency "vcr"
|
38
41
|
spec.add_development_dependency "webmock"
|
39
42
|
|
40
43
|
# spec.add_dependency "relaton-iec", "~> 1.8.0"
|
41
|
-
spec.add_dependency "
|
44
|
+
spec.add_dependency "algolia"
|
45
|
+
spec.add_dependency "relaton-iso-bib", "~> 1.9.0"
|
42
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-iso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.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: 2021-
|
11
|
+
date: 2021-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|
@@ -80,6 +80,48 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-performance
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-rails
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
83
125
|
- !ruby/object:Gem::Dependency
|
84
126
|
name: simplecov
|
85
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,20 +164,34 @@ dependencies:
|
|
122
164
|
- - ">="
|
123
165
|
- !ruby/object:Gem::Version
|
124
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: algolia
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
125
181
|
- !ruby/object:Gem::Dependency
|
126
182
|
name: relaton-iso-bib
|
127
183
|
requirement: !ruby/object:Gem::Requirement
|
128
184
|
requirements:
|
129
185
|
- - "~>"
|
130
186
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1.
|
187
|
+
version: 1.9.0
|
132
188
|
type: :runtime
|
133
189
|
prerelease: false
|
134
190
|
version_requirements: !ruby/object:Gem::Requirement
|
135
191
|
requirements:
|
136
192
|
- - "~>"
|
137
193
|
- !ruby/object:Gem::Version
|
138
|
-
version: 1.
|
194
|
+
version: 1.9.0
|
139
195
|
description: 'RelatonIso: retrieve ISO Standards for bibliographic use using the IsoBibliographicItem
|
140
196
|
model'
|
141
197
|
email:
|
@@ -165,9 +221,13 @@ files:
|
|
165
221
|
- bin/nokogiri
|
166
222
|
- bin/pry
|
167
223
|
- bin/racc
|
224
|
+
- bin/rackup
|
168
225
|
- bin/rake
|
169
226
|
- bin/rdebug-ide
|
170
227
|
- bin/rspec
|
228
|
+
- bin/rubocop
|
229
|
+
- bin/ruby-parse
|
230
|
+
- bin/ruby-rewrite
|
171
231
|
- bin/safe_yaml
|
172
232
|
- bin/setup
|
173
233
|
- lib/relaton_iso.rb
|