relaton-index 0.2.17 → 0.2.19

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 788bf4331c7923b1671faeb8b9655aab2caaa856dcf5f6fb6b9a95a930c9376c
4
- data.tar.gz: 6d6e14df3e79b577e04e654579cdb4fb1c2dfdbe458763de1aabc28ca1d3af84
3
+ metadata.gz: 0e0ad0db979d523bfd05a561b5f81ba0aab46f41f02d524c804c4767fa50e57b
4
+ data.tar.gz: f9e2c9fc9bdc73f8ae55cc5badd54190fbb0d2bef812c16c42ff6a4ed126958f
5
5
  SHA512:
6
- metadata.gz: f1b8d3dfe3686f754cf65a592daaa6ac475f6370aa0473da8eb77d48f9d53fc6694d0a71cad06a0fe3657829e2fd29d5928ecbaf5bd333547148b8066cb8bbfa
7
- data.tar.gz: d6b868fa97d70774e5fcc865c390dabb64c8321be488c47127278cc33767f5725763e1da67848975a73c9ae539a432d8aa55d29e609c6d95a02e9aec0986bfd2
6
+ metadata.gz: d53ca914ea49bc69a1c80833ad7996a6bde8b5c583dfd7b8ac4aa858e5a3bb5031050271adafbbb58a511f987769e4133b5bbac0479e5455a2c36b0a708031a2
7
+ data.tar.gz: e01cdbea3d72c1c76d48a735adba13af8af34f9c3cdd994de8532a8c8eef815548396c9d254a7824a1d7a83ce3d38ab41ca61602f851479f6111c35b035bbacf
data/.rubocop.yml CHANGED
@@ -7,6 +7,6 @@ require: rubocop-rails
7
7
  inherit_from:
8
8
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
9
9
  AllCops:
10
- TargetRubyVersion: 2.7
10
+ TargetRubyVersion: 3.1
11
11
  Rails:
12
12
  Enabled: false
@@ -8,6 +8,9 @@ module Relaton
8
8
  class FileIO
9
9
  attr_reader :url, :pubid_class
10
10
 
11
+ @@file_locks = {}
12
+ @@file_locks_mutex = Mutex.new
13
+
11
14
  #
12
15
  # Initialize FileIO
13
16
  #
@@ -39,7 +42,9 @@ module Relaton
39
42
  def read
40
43
  case url
41
44
  when String
42
- check_file || fetch_and_save
45
+ with_file_lock do
46
+ check_file || fetch_and_save
47
+ end
43
48
  else
44
49
  read_file || []
45
50
  end
@@ -146,20 +151,22 @@ module Relaton
146
151
  warn_local_index_error "YAML parsing error when reading"
147
152
  end
148
153
  end
154
+
149
155
  #
150
156
  # Fetch index from external repository and save it to storage
151
157
  #
152
158
  # @return [Array<Hash>] index
153
159
  #
154
160
  def fetch_and_save
155
- resp = StringIO.new(URI(url).read)
161
+ uri = URI.parse(url)
162
+ body = Net::HTTP.get(uri)
156
163
  yaml = nil
157
- Zip::File.open_buffer(resp) do |zip|
164
+ Zip::File.open_buffer(body) do |zip|
158
165
  entry = zip.entries.first
159
166
  yaml = entry.get_input_stream.read
160
167
  end
161
168
  Util.info "Downloaded index from `#{url}`", progname
162
- load_index(yaml, save = true)
169
+ load_index(yaml, true)
163
170
  end
164
171
 
165
172
  def warn_remote_index_error(reason)
@@ -176,8 +183,10 @@ module Relaton
176
183
  # @return [void]
177
184
  #
178
185
  def save(index)
179
- Index.config.storage.write file,
180
- index.map { |item| item.transform_values { |value| value.is_a?(Pubid::Core::Identifier::Base) ? value.to_h : value } }.to_yaml
186
+ yaml = index.map do |item|
187
+ item.transform_values { |value| value.is_a?(Pubid::Core::Identifier::Base) ? value.to_h : value }
188
+ end.to_yaml
189
+ Index.config.storage.write file, yaml
181
190
  end
182
191
 
183
192
  #
@@ -189,6 +198,16 @@ module Relaton
189
198
  Index.config.storage.remove file
190
199
  []
191
200
  end
201
+
202
+ private
203
+
204
+ def with_file_lock(&)
205
+ @@file_locks_mutex.synchronize do
206
+ @@file_locks[file] ||= Mutex.new
207
+ end
208
+
209
+ @@file_locks[file].synchronize(&)
210
+ end
192
211
  end
193
212
  end
194
213
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Relaton
4
4
  module Index
5
- VERSION = "0.2.17"
5
+ VERSION = "0.2.19"
6
6
  end
7
7
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = "Relaton Index is a library for indexing Relaton files."
12
12
  spec.homepage = "https://github.com/relaton/relaton-index"
13
13
  spec.license = "MIT"
14
- spec.required_ruby_version = ">= 2.7.0"
14
+ spec.required_ruby_version = ">= 3.1.0"
15
15
 
16
16
  # spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
17
17
 
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
+ spec.add_dependency "openssl", "~> 3.3.2"
33
34
  spec.add_dependency "pubid-core", "~> 1.15.0"
34
35
  spec.add_dependency "relaton-logger", "~> 0.2.0"
35
36
  spec.add_dependency "rubyzip", "~> 2.3.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-index
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.17
4
+ version: 0.2.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -9,6 +9,20 @@ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: openssl
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 3.3.2
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 3.3.2
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: pubid-core
14
28
  requirement: !ruby/object:Gem::Requirement
@@ -86,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
88
102
  - !ruby/object:Gem::Version
89
- version: 2.7.0
103
+ version: 3.1.0
90
104
  required_rubygems_version: !ruby/object:Gem::Requirement
91
105
  requirements:
92
106
  - - ">="