relaton 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +6 -0
- data/.travis.yml +9 -1
- data/Gemfile.lock +18 -134
- data/README.adoc +7 -4
- data/Rakefile +6 -0
- data/lib/relaton/db.rb +92 -45
- data/lib/relaton/registry.rb +2 -7
- data/lib/relaton/version.rb +1 -1
- data/relaton.gemspec +5 -6
- data/spec/relaton/relaton_spec.rb +72 -68
- data/spec/support/iso_111111119115_1.xml +0 -0
- data/spec/support/iso_19115_1.xml +117 -0
- data/spec/support/iso_19115_2.xml +97 -0
- data/spec/support/list_entries.xml +113 -0
- metadata +34 -74
- data/spec/support/_fr_standard_26020.html +0 -828
- data/spec/support/_fr_standard_32557.html +0 -843
- data/spec/support/_fr_standard_32579.html +0 -768
- data/spec/support/_fr_standard_39229.html +0 -880
- data/spec/support/_fr_standard_44361.html +0 -606
- data/spec/support/_fr_standard_53798.html +0 -850
- data/spec/support/_fr_standard_57104.html +0 -805
- data/spec/support/_fr_standard_66197.html +0 -768
- data/spec/support/_fr_standard_67039.html +0 -704
- data/spec/support/_fr_standard_73118.html +0 -775
- data/spec/support/_ru_standard_26020.html +0 -831
- data/spec/support/_ru_standard_32557.html +0 -841
- data/spec/support/_ru_standard_32579.html +0 -772
- data/spec/support/_ru_standard_39229.html +0 -872
- data/spec/support/_ru_standard_44361.html +0 -597
- data/spec/support/_ru_standard_53798.html +0 -843
- data/spec/support/_ru_standard_57104.html +0 -803
- data/spec/support/_ru_standard_66197.html +0 -767
- data/spec/support/_ru_standard_67039.html +0 -695
- data/spec/support/_ru_standard_73118.html +0 -768
- data/spec/support/_standard_26020.html +0 -840
- data/spec/support/_standard_32557.html +0 -848
- data/spec/support/_standard_32579.html +0 -779
- data/spec/support/_standard_39229.html +0 -879
- data/spec/support/_standard_44361.html +0 -606
- data/spec/support/_standard_53798.html +0 -850
- data/spec/support/_standard_57104.html +0 -810
- data/spec/support/_standard_66197.html +0 -774
- data/spec/support/_standard_67039.html +0 -704
- data/spec/support/_standard_73118.html +0 -775
- data/spec/support/algolia_resp_page_0.json +0 -130
- data/spec/support/algolia_resp_page_1.json +0 -148
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bec19dd26e20ad03b8e537bbfcaab9f5cf75dc005ab71d83a094c99b80f08aaa
|
4
|
+
data.tar.gz: 161b82000e567929a9a3faa39669acbfd4528dd6c1ff6dab6610314248b85553
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c56f8d929682c8bde40d0b559cb3f5879107dd9bae7032551dbe6a6923555cc5c8107411f73db57d7150b35f8fa8cd9cb807a67b4a170ef855921fbf07ba8e21
|
7
|
+
data.tar.gz: 51c4e74ee9e8610b1bd49d972bbcda8e210355f949be4f264af8beb632fe7eb5fc27ed2dcbbd15201e38c5a91f107e6957e9c6fbfc380ba5728fe3469bd7ac35
|
data/.gitignore
ADDED
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
relaton (0.0.
|
5
|
-
|
4
|
+
relaton (0.0.2)
|
5
|
+
algoliasearch
|
6
6
|
gbbib (~> 0.1.0)
|
7
7
|
iev (~> 0.1.0)
|
8
|
-
|
9
|
-
isobib (~> 0.1.8)
|
8
|
+
isobib (~> 0.2.0)
|
10
9
|
rfcbib (~> 0.1.0)
|
11
10
|
|
12
11
|
GEM
|
@@ -15,81 +14,17 @@ GEM
|
|
15
14
|
algoliasearch (1.23.2)
|
16
15
|
httpclient (~> 2.8, >= 2.8.3)
|
17
16
|
json (>= 1.5.1)
|
18
|
-
asciidoctor (1.5.7.1)
|
19
|
-
asciidoctor-csand (0.3.1)
|
20
|
-
asciidoctor (~> 1.5.7)
|
21
|
-
asciidoctor-iso (>= 0.9.0)
|
22
|
-
asciimath
|
23
|
-
htmlentities (~> 4.3.4)
|
24
|
-
image_size
|
25
|
-
isodoc (>= 0.8.0)
|
26
|
-
mime-types
|
27
|
-
nokogiri
|
28
|
-
ruby-jing
|
29
|
-
ruby-xslt
|
30
|
-
thread_safe
|
31
|
-
uuidtools
|
32
|
-
asciidoctor-csd (0.4.1)
|
33
|
-
asciidoctor-iso (>= 0.9.0)
|
34
|
-
isodoc (>= 0.8.0)
|
35
|
-
asciidoctor-gb (0.3.1)
|
36
|
-
asciidoctor-iso (>= 0.9.0)
|
37
|
-
gbbib
|
38
|
-
isodoc (>= 0.8.0)
|
39
|
-
twitter_cldr
|
40
|
-
asciidoctor-iso (0.9.3)
|
41
|
-
asciidoctor (~> 1.5.7)
|
42
|
-
iso-bib-item (~> 0.1.6)
|
43
|
-
isobib (~> 0.1.8)
|
44
|
-
isodoc (>= 0.8)
|
45
|
-
ruby-jing
|
46
|
-
asciidoctor-m3d (0.3.2)
|
47
|
-
asciidoctor (~> 1.5.7)
|
48
|
-
asciidoctor-iso (>= 0.9.0)
|
49
|
-
asciimath
|
50
|
-
htmlentities (~> 4.3.4)
|
51
|
-
image_size
|
52
|
-
isodoc (>= 0.8.0)
|
53
|
-
mime-types
|
54
|
-
nokogiri
|
55
|
-
ruby-jing
|
56
|
-
ruby-xslt
|
57
|
-
thread_safe
|
58
|
-
uuidtools
|
59
|
-
asciidoctor-rfc (0.9.0)
|
60
|
-
asciidoctor (~> 1.5.7)
|
61
|
-
htmlentities (~> 4.3.4)
|
62
|
-
nokogiri
|
63
|
-
ruby-jing
|
64
|
-
thread_safe
|
65
|
-
asciidoctor-rsd (0.3.1)
|
66
|
-
asciidoctor (~> 1.5.7)
|
67
|
-
asciidoctor-iso (>= 0.8.0)
|
68
|
-
asciimath
|
69
|
-
htmlentities (~> 4.3.4)
|
70
|
-
image_size
|
71
|
-
isodoc (>= 0.7.0)
|
72
|
-
mime-types
|
73
|
-
nokogiri
|
74
|
-
ruby-jing
|
75
|
-
ruby-xslt
|
76
|
-
thread_safe
|
77
|
-
uuidtools
|
78
|
-
asciimath (1.0.4)
|
79
17
|
ast (2.4.0)
|
80
18
|
byebug (9.1.0)
|
81
|
-
camertron-eprun (1.1.1)
|
82
|
-
cldr-plurals-runtime-rb (1.0.1)
|
83
19
|
cnccs (0.1.1)
|
84
20
|
coderay (1.1.2)
|
85
21
|
diff-lcs (1.3)
|
86
22
|
docile (1.3.1)
|
87
|
-
duplicate (1.1.1)
|
88
23
|
equivalent-xml (0.6.0)
|
89
24
|
nokogiri (>= 1.4.3)
|
90
25
|
ffi (1.9.25)
|
91
26
|
formatador (0.2.5)
|
92
|
-
gbbib (0.1.
|
27
|
+
gbbib (0.1.4)
|
93
28
|
cnccs
|
94
29
|
iso-bib-item
|
95
30
|
guard (2.14.2)
|
@@ -106,62 +41,25 @@ GEM
|
|
106
41
|
guard (~> 2.1)
|
107
42
|
guard-compat (~> 1.1)
|
108
43
|
rspec (>= 2.99.0, < 4.0)
|
109
|
-
html2doc (0.8.0)
|
110
|
-
asciimath
|
111
|
-
htmlentities (~> 4.3.4)
|
112
|
-
image_size
|
113
|
-
mime-types
|
114
|
-
nokogiri
|
115
|
-
ruby-xslt
|
116
|
-
thread_safe
|
117
|
-
uuidtools
|
118
|
-
htmlentities (4.3.4)
|
119
44
|
httpclient (2.8.3)
|
120
45
|
iev (0.1.0)
|
121
46
|
nokogiri
|
122
|
-
|
123
|
-
iso-bib-item (0.1.10)
|
124
|
-
duplicate (~> 1.1.1)
|
47
|
+
iso-bib-item (0.2.0)
|
125
48
|
isoics (~> 0.1.6)
|
126
|
-
nokogiri
|
127
|
-
|
49
|
+
nokogiri (~> 1.8.4)
|
50
|
+
ruby_deep_clone (~> 0.8.0)
|
51
|
+
isobib (0.2.0)
|
128
52
|
algoliasearch
|
129
|
-
iso-bib-item (~> 0.
|
130
|
-
isodoc (0.8.1)
|
131
|
-
asciimath
|
132
|
-
html2doc (>= 0.7.1)
|
133
|
-
htmlentities (~> 4.3.4)
|
134
|
-
image_size
|
135
|
-
liquid
|
136
|
-
mime-types
|
137
|
-
nokogiri
|
138
|
-
roman-numerals
|
139
|
-
ruby-xslt
|
140
|
-
sass
|
141
|
-
thread_safe
|
142
|
-
uuidtools
|
53
|
+
iso-bib-item (~> 0.2.0)
|
143
54
|
isoics (0.1.6)
|
144
55
|
jaro_winkler (1.5.1)
|
145
56
|
json (2.1.0)
|
146
|
-
liquid (4.0.0)
|
147
57
|
listen (3.1.5)
|
148
58
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
149
59
|
rb-inotify (~> 0.9, >= 0.9.7)
|
150
60
|
ruby_dep (~> 1.2)
|
151
61
|
lumberjack (1.0.13)
|
152
|
-
metanorma (0.2.5)
|
153
|
-
asciidoctor-csand (>= 0.3.0)
|
154
|
-
asciidoctor-csd (>= 0.4.0)
|
155
|
-
asciidoctor-gb (>= 0.3.0)
|
156
|
-
asciidoctor-iso (>= 0.9.1)
|
157
|
-
asciidoctor-m3d (>= 0.3.1)
|
158
|
-
asciidoctor-rfc (>= 0.9.0)
|
159
|
-
asciidoctor-rsd (>= 0.3.0)
|
160
|
-
isodoc (>= 0.8.0)
|
161
62
|
method_source (0.9.0)
|
162
|
-
mime-types (3.1)
|
163
|
-
mime-types-data (~> 3.2015)
|
164
|
-
mime-types-data (3.2016.0521)
|
165
63
|
mini_portile2 (2.3.0)
|
166
64
|
nenv (0.3.0)
|
167
65
|
nokogiri (1.8.4)
|
@@ -169,22 +67,23 @@ GEM
|
|
169
67
|
notiffany (0.1.1)
|
170
68
|
nenv (~> 0.1)
|
171
69
|
shellany (~> 0.0)
|
172
|
-
optout (0.0.2)
|
173
70
|
parallel (1.12.1)
|
174
|
-
parser (2.5.1.
|
71
|
+
parser (2.5.1.2)
|
175
72
|
ast (~> 2.4.0)
|
176
73
|
powerpack (0.1.2)
|
177
74
|
pry (0.11.3)
|
178
75
|
coderay (~> 1.1.0)
|
179
76
|
method_source (~> 0.9.0)
|
77
|
+
pry-byebug (3.5.1)
|
78
|
+
byebug (~> 9.1)
|
79
|
+
pry (~> 0.10)
|
180
80
|
rainbow (3.0.0)
|
181
81
|
rake (12.3.1)
|
182
82
|
rb-fsevent (0.10.3)
|
183
83
|
rb-inotify (0.9.10)
|
184
84
|
ffi (>= 0.5.0, < 2)
|
185
85
|
rfcbib (0.1.1)
|
186
|
-
iso-bib-item (~> 0.
|
187
|
-
roman-numerals (0.3.0)
|
86
|
+
iso-bib-item (~> 0.2.0)
|
188
87
|
rspec (3.7.0)
|
189
88
|
rspec-core (~> 3.7.0)
|
190
89
|
rspec-expectations (~> 3.7.0)
|
@@ -198,24 +97,17 @@ GEM
|
|
198
97
|
diff-lcs (>= 1.2.0, < 2.0)
|
199
98
|
rspec-support (~> 3.7.0)
|
200
99
|
rspec-support (3.7.1)
|
201
|
-
rubocop (0.
|
100
|
+
rubocop (0.58.1)
|
202
101
|
jaro_winkler (~> 1.5.1)
|
203
102
|
parallel (~> 1.10)
|
204
|
-
parser (>= 2.5)
|
103
|
+
parser (>= 2.5, != 2.5.1.1)
|
205
104
|
powerpack (~> 0.1)
|
206
105
|
rainbow (>= 2.2.2, < 4.0)
|
207
106
|
ruby-progressbar (~> 1.7)
|
208
107
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
209
|
-
ruby-jing (0.0.1)
|
210
|
-
optout (>= 0.0.2)
|
211
108
|
ruby-progressbar (1.9.0)
|
212
|
-
|
109
|
+
ruby_deep_clone (0.8.0)
|
213
110
|
ruby_dep (1.5.0)
|
214
|
-
sass (3.5.6)
|
215
|
-
sass-listen (~> 4.0.0)
|
216
|
-
sass-listen (4.0.0)
|
217
|
-
rb-fsevent (~> 0.9, >= 0.9.4)
|
218
|
-
rb-inotify (~> 0.9, >= 0.9.7)
|
219
111
|
shellany (0.0.1)
|
220
112
|
simplecov (0.16.1)
|
221
113
|
docile (~> 1.1)
|
@@ -223,16 +115,8 @@ GEM
|
|
223
115
|
simplecov-html (~> 0.10.0)
|
224
116
|
simplecov-html (0.10.2)
|
225
117
|
thor (0.20.0)
|
226
|
-
thread_safe (0.3.6)
|
227
118
|
timecop (0.9.1)
|
228
|
-
twitter_cldr (4.4.3)
|
229
|
-
camertron-eprun
|
230
|
-
cldr-plurals-runtime-rb (~> 1.0)
|
231
|
-
tzinfo
|
232
|
-
tzinfo (1.2.5)
|
233
|
-
thread_safe (~> 0.1)
|
234
119
|
unicode-display_width (1.4.0)
|
235
|
-
uuidtools (2.1.5)
|
236
120
|
|
237
121
|
PLATFORMS
|
238
122
|
ruby
|
@@ -243,7 +127,7 @@ DEPENDENCIES
|
|
243
127
|
equivalent-xml (~> 0.6)
|
244
128
|
guard (~> 2.14)
|
245
129
|
guard-rspec (~> 4.7)
|
246
|
-
|
130
|
+
pry-byebug
|
247
131
|
rake (~> 12.0)
|
248
132
|
relaton!
|
249
133
|
rspec (~> 3.6)
|
data/README.adoc
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
= relaton
|
2
2
|
|
3
|
+
image:https://img.shields.io/gem/v/relaton.svg["Gem Version", link="https://rubygems.org/gems/relaton"]
|
4
|
+
image:https://img.shields.io/travis/riboseinc/relaton/master.svg["Build Status", link="https://travis-ci.org/riboseinc/relaton"]
|
5
|
+
image:https://codeclimate.com/github/riboseinc/relaton/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/riboseinc/relaton"]
|
6
|
+
|
3
7
|
gem for importing and caching bibliographic references to technical standards
|
4
8
|
|
5
|
-
|
9
|
+
[source,ruby]
|
10
|
+
----
|
6
11
|
x = Relaton.fetch("ISO19011")
|
7
12
|
=> Relaton::Error "No such fetcher"
|
8
13
|
|
@@ -12,6 +17,4 @@ x = Relaton.fetch("ISO19011")
|
|
12
17
|
|
13
18
|
x.to_xml
|
14
19
|
=> <bib-item ...>
|
15
|
-
|
16
|
-
|
17
|
-
|
20
|
+
----
|
data/Rakefile
ADDED
data/lib/relaton/db.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "pstore"
|
1
2
|
require_relative "registry"
|
2
3
|
|
3
4
|
module Relaton
|
@@ -6,11 +7,13 @@ module Relaton
|
|
6
7
|
class Db
|
7
8
|
SUPPORTED_GEMS = %w[ isobib rfcbib gbbib ].freeze
|
8
9
|
|
10
|
+
# @param global_cache [String] filename of global DB
|
11
|
+
# @param local_cache [String] filename of local DB
|
9
12
|
def initialize(global_cache, local_cache)
|
10
|
-
@
|
11
|
-
@
|
12
|
-
@
|
13
|
-
@
|
13
|
+
@db = open_cache_biblio(global_cache)
|
14
|
+
@local_db = open_cache_biblio(local_cache)
|
15
|
+
@db_name = global_cache
|
16
|
+
@local_db_name = local_cache
|
14
17
|
register_gems
|
15
18
|
@registry = Relaton::Registry.instance
|
16
19
|
end
|
@@ -38,11 +41,39 @@ module Relaton
|
|
38
41
|
check_bibliocache(code, year, opts, stdclass)
|
39
42
|
end
|
40
43
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
+
# @param key [String]
|
45
|
+
# @return [Hash]
|
46
|
+
def load_entry(key)
|
47
|
+
entry = @local_db.transaction { @local_db[key] }
|
48
|
+
return entry if entry
|
49
|
+
@db.transaction { @db[key] }
|
44
50
|
end
|
45
51
|
|
52
|
+
# @param key [String]
|
53
|
+
# @param value [Hash]
|
54
|
+
# @option value [Date] "fetched"
|
55
|
+
# @option value [IsoBibItem::IsoBibliographicItem] "bib"
|
56
|
+
def save_entry(key, value)
|
57
|
+
@db.transaction { @db[key] = value }
|
58
|
+
@local_db.transaction { @local_db[key] = value }
|
59
|
+
end
|
60
|
+
|
61
|
+
# list all entris as a serialization
|
62
|
+
def to_xml
|
63
|
+
@db.transaction do
|
64
|
+
Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
|
65
|
+
xml.documents do
|
66
|
+
@db.roots.each { |key| @db[key]["bib"].to_xml(xml, {}) }
|
67
|
+
end
|
68
|
+
end.to_xml
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# def save
|
73
|
+
# save_cache_biblio(@db, @db_name)
|
74
|
+
# save_cache_biblio(@local_db, @local_db_name)
|
75
|
+
# end
|
76
|
+
|
46
77
|
private
|
47
78
|
|
48
79
|
def standard_class(code)
|
@@ -52,10 +83,12 @@ module Relaton
|
|
52
83
|
%r{^(ISO|IEC)[ /]|IEV($| )}.match? code and return :isobib
|
53
84
|
=end
|
54
85
|
@registry.processors.each do |name, processor|
|
55
|
-
processor.prefix.match?
|
86
|
+
processor.prefix.match?(code) and return name
|
87
|
+
end
|
88
|
+
allowed = @registry.processors.reduce([]) do |m, (_k, v)|
|
89
|
+
m << v.prefix.inspect
|
56
90
|
end
|
57
|
-
warn "#{code} does not have a recognised prefix: "
|
58
|
-
"#{@registry.processors.inject([]) { |m, (k, v)| m << v.prefix.inspect }.join(', ')}"
|
91
|
+
warn "#{code} does not have a recognised prefix: #{allowed.join(', ')}"
|
59
92
|
nil
|
60
93
|
end
|
61
94
|
|
@@ -67,55 +100,69 @@ module Relaton
|
|
67
100
|
ret
|
68
101
|
end
|
69
102
|
|
103
|
+
# @param code [String]
|
104
|
+
# @param year [String]
|
105
|
+
# @param opts [Hash]
|
106
|
+
# @param stdclass [Symbol]
|
70
107
|
def check_bibliocache(code, year, opts, stdclass)
|
71
108
|
id = std_id(code, year, opts, stdclass)
|
72
|
-
return nil if @
|
73
|
-
@
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
109
|
+
return nil if @db.nil? # signals we will not be using isobib
|
110
|
+
@db.transaction do
|
111
|
+
@db.delete(id) unless valid_bib_entry?(@db[id], year)
|
112
|
+
@db[id] ||= new_bib_entry(code, year, opts, stdclass)
|
113
|
+
@local_db.transaction do
|
114
|
+
@local_db[id] = @db[id] if !valid_bib_entry?(@local_db[id], year)
|
115
|
+
@local_db[id]["bib"] == "not_found" ? nil : @local_db[id]["bib"]
|
116
|
+
end
|
117
|
+
end
|
80
118
|
end
|
81
119
|
|
82
|
-
# hash uses => , because the hash is imported from
|
83
|
-
|
120
|
+
# hash uses => , because the hash is imported from JSONo
|
121
|
+
# @param code [String]
|
122
|
+
# @param year [String]
|
123
|
+
# @param opts [Hash]
|
124
|
+
# @param stdclass [Symbol]
|
125
|
+
# @return [Hash]
|
126
|
+
def new_bib_entry(code, year, opts, stdclass)
|
84
127
|
bib = @registry.processors[stdclass].get(code, year, opts)
|
85
|
-
|
128
|
+
bib = "not_found" if bib.nil?
|
86
129
|
{ "fetched" => Date.today, "bib" => bib }
|
87
130
|
end
|
88
131
|
|
89
132
|
# if cached reference is undated, expire it after 60 days
|
90
|
-
|
91
|
-
|
92
|
-
|
133
|
+
# @param bib [Hash]
|
134
|
+
# @param year [String]
|
135
|
+
def valid_bib_entry?(bib, year)
|
136
|
+
bib&.is_a?(Hash) && bib&.has_key?("bib") && bib&.has_key?("fetched") &&
|
137
|
+
(year || Date.today - bib["fetched"] < 60)
|
93
138
|
end
|
94
139
|
|
140
|
+
# @param filename [String] DB filename
|
141
|
+
# @return [Hash]
|
95
142
|
def open_cache_biblio(filename)
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
end
|
103
|
-
biblio
|
143
|
+
PStore.new filename
|
144
|
+
# biblio = {}
|
145
|
+
# return {} unless !filename.nil? && Pathname.new(filename).file?
|
146
|
+
# File.open(filename, "r") { |f| biblio = JSON.parse(f.read) }
|
147
|
+
# biblio.each { |_k, v| v["bib"] && (v["bib"] = from_xml(v["bib"])) }
|
148
|
+
# biblio
|
104
149
|
end
|
105
150
|
|
106
|
-
|
107
|
-
|
108
|
-
|
151
|
+
# @param enstry [String] entry in XML format
|
152
|
+
# @return [IsoBibItem::IsoBibliographicItem]
|
153
|
+
# def from_xml(entry)
|
154
|
+
# IsoBibItem.from_xml entry # will be unmarshaller
|
155
|
+
# end
|
109
156
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
end
|
157
|
+
# @param [Hash{String=>Hash{String=>String}}] biblio
|
158
|
+
# def save_cache_biblio(biblio, filename)
|
159
|
+
# return if biblio.nil? || filename.nil?
|
160
|
+
# File.open(filename, "w") do |b|
|
161
|
+
# b << biblio.reduce({}) do |s, (k, v)|
|
162
|
+
# bib = v["bib"].respond_to?(:to_xml) ? v["bib"].to_xml : v["bib"]
|
163
|
+
# s.merge(k => { "fetched" => v["fetched"], "bib" => bib })
|
164
|
+
# end.to_json
|
165
|
+
# end
|
166
|
+
# end
|
120
167
|
end
|
121
168
|
end
|