libis-tools 1.0.4 → 1.0.12

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: c9e3d995478c23cf34462e49682a86e2268c059314a3f9b8f1a4d4cb7dca3cfa
4
- data.tar.gz: 20138f051ab8337d686aa2f7b226883ea535afc418765a80b19cd135c016b673
3
+ metadata.gz: 810ac9ed3a3b03f0ae8cc0d1deea5b1c6a0f70b0d34bce8eb752fba9da5583f9
4
+ data.tar.gz: 5b51eb0c78b0928e1183f53bd270ec148f35b47f42a066432705a657279ccfa9
5
5
  SHA512:
6
- metadata.gz: d35c8c621b0e07a7817a5671a74f624ab7fc5a1d4a3f781c19f77fc03e61a411edafbb77666c3bab7607b59057a90d58e271cb927cd4156fcd77925ed755da4b
7
- data.tar.gz: 1381a075f84a335510b4acff0a6c8ffef7daf8a0efb84d0a30fc49d56dc0250191b6f51bb0fd8d6b75faacc08fc4783d56c5c6915c70c78663c3d2fbd591984e
6
+ metadata.gz: a0a53c49318401d632db7a3e20a70a1378a50ce101c2e8f26ac0216aee3ffcb28c81287663b6daccb3693d2a962337c472f36254e6ea065aed2135e65cfbf876
7
+ data.tar.gz: 207d258c97de31f803d71dd0f39c6cc37b00fbcfe0120bf37a36c3669c3ac43d4d1253b2c1cfed0004a24ed8215e03e9990af4853389c40958f6c5300497068f
data/.travis.yml CHANGED
@@ -1,36 +1,30 @@
1
+ dist: bionic
1
2
  language: ruby
2
3
  cache: bundler
3
4
  sudo: false
4
5
  rvm:
5
- - 2.1.10
6
- - 2.2.8
7
- - 2.3.5
8
- - 2.4.2
6
+ - 2.4
7
+ - 2.5
8
+ - 2.6
9
+ - 2.7
10
+ - 3.0
9
11
  - ruby-head
10
- - jruby-9.0.5.0
11
- - jruby-9.1.9.0
12
+ # - jruby-9.1
13
+ - jruby-9.2
12
14
  - jruby-head
13
15
  jdk:
14
- - openjdk8
15
- - oraclejdk8
16
+ - openjdk11
16
17
  matrix:
17
- exclude:
18
- - rvm: 2.1.10
19
- jdk: oraclejdk8
20
- - rvm: 2.2.8
21
- jdk: oraclejdk8
22
- - rvm: 2.3.5
23
- jdk: oraclejdk8
24
- - rvm: 2.4.2
25
- jdk: oraclejdk8
26
- - rvm: ruby-head
27
- jdk: oraclejdk8
28
18
  allow_failures:
19
+ - rvm: 3.0
29
20
  - rvm: ruby-head
30
21
  - rvm: jruby-head
31
22
  branches:
32
23
  only:
33
24
  - master
25
+ #before_install:
26
+ # - gem update --system
27
+ # - gem --version
34
28
  addons:
35
29
  code_climate:
36
30
  repo_token: f6978964f55e6543befb82373651365f8195677816af6ff40ad70c82f7f22f09
@@ -20,7 +20,7 @@ module Libis
20
20
  optional_headers = options.delete(:optional)
21
21
  options[:headers] = true
22
22
  options[:return_headers] = true
23
- csv = CSV.open(file_name, mode, options)
23
+ csv = ::CSV.open(file_name, mode, **options)
24
24
  line = csv.shift
25
25
  found_headers = required_headers & line.headers
26
26
  return csv if found_headers.size == required_headers.size
@@ -29,7 +29,7 @@ module Libis
29
29
  options[:headers] = (required_headers + optional_headers)[0...line.size]
30
30
  raise RuntimeError, 'CSV does not contain enough columns' if required_headers.size > line.size
31
31
  options[:return_headers] = true
32
- csv = CSV.open(file_name, mode, options)
32
+ csv = ::CSV.open(file_name, mode, **options)
33
33
  csv.shift
34
34
  csv
35
35
  end
@@ -28,8 +28,8 @@ module Libis
28
28
  return self unless hash.respond_to?(:to_hash)
29
29
  hash.to_hash.inject(self.dup) do |ds, (key, value)|
30
30
  ds[key] = DeepDup.new(
31
- recurse_over_arrays: @recurse_over_arrays,
32
- preserve_original_keys: @preserve_original_keys
31
+ recurse_over_arrays: @options[:recurse_over_arrays],
32
+ preserve_original_keys: @options[:preserve_original_keys]
33
33
  ).call(value)
34
34
  ds
35
35
  end
@@ -39,8 +39,8 @@ module Libis
39
39
  return self unless hash.respond_to?(:to_hash)
40
40
  hash.to_hash.inject(self) do |ds, (key, value)|
41
41
  ds[key] = DeepDup.new(
42
- recurse_over_arrays: @recurse_over_arrays,
43
- preserve_original_keys: @preserve_original_keys
42
+ recurse_over_arrays: @options[:recurse_over_arrays],
43
+ preserve_original_keys: @options[:preserve_original_keys]
44
44
  ).call(value)
45
45
  ds
46
46
  end
@@ -1,7 +1,32 @@
1
- # Extension for NilClass
1
+ # frozen_string_literal: true
2
+
2
3
  class NilClass
3
- # Allows nil.empty?
4
4
  def empty?
5
5
  true
6
6
  end
7
- end
7
+ end
8
+
9
+ class TrueClass
10
+ def empty?
11
+ false
12
+ end
13
+ end
14
+
15
+ class FalseClass
16
+ def empty?
17
+ false
18
+ end
19
+ end
20
+
21
+ class String
22
+ BLANK_RE = /\A[[:space:]]^\z/.freeze
23
+ def blank?
24
+ empty? || BLANK_RE.match?(self)
25
+ end
26
+ end
27
+
28
+ class Object
29
+ def blank?
30
+ respond_to?(:empty?) ? !!empty? : !self
31
+ end
32
+ end
@@ -1,5 +1,3 @@
1
- require 'backports/rails/hash'
2
-
3
1
  # Extension class for Hash
4
2
  class Hash
5
3
 
@@ -56,6 +54,14 @@ class Hash
56
54
  self.merge!(other_hash) {|_,v, w| v.blank? ? w : v}
57
55
  end unless method_defined? :apply_defaults!
58
56
 
57
+ def symbolize_keys
58
+ self.transform_keys {|k| k.to_sym}
59
+ end unless method_defined? :symbolize_keys
60
+
61
+ def symbolize_keys!
62
+ self.transform_keys! {|k| k.to_sym}
63
+ end unless method_defined? :symbolize_keys!
64
+
59
65
  # Convert all keys to symbols. In-place operation.
60
66
  # @param (see #key_strings_to_symbols)
61
67
  def key_strings_to_symbols!(options = {})
@@ -101,6 +107,14 @@ class Hash
101
107
  r
102
108
  end unless method_defined? :key_strings_to_symbols
103
109
 
110
+ def stringify_keys
111
+ self.transform_keys {|k| k.to_s}
112
+ end unless method_defined? :stringify_keys
113
+
114
+ def stringify_keys!
115
+ self.transform_keys! {|k| k.to_s}
116
+ end unless method_defined? :stringify_keys!
117
+
104
118
  # Convert all keys to strings. In-place operation.
105
119
  # (@see #key_symbols_to_strings)
106
120
  # @param (see #key_symbols_to_strings)
@@ -144,4 +158,36 @@ class Hash
144
158
  r
145
159
  end unless method_defined? :key_symbols_to_strings
146
160
 
161
+ def transform_keys
162
+ result = {}
163
+ each_key do |key|
164
+ result[yield(key)] = self[key]
165
+ end
166
+ result
167
+ end unless method_defined? :transform_keys
168
+
169
+ def transform_keys!
170
+ keys.each do |key|
171
+ self[yield(key)] = delete(key)
172
+ end
173
+ self
174
+ end unless method_defined? :transform_keys!
175
+
176
+ def transform_values
177
+ return enum_for(:transform_values) { size } unless block_given?
178
+ return {} if empty?
179
+ result = self.class.new
180
+ each do |key, value|
181
+ result[key] = yield(value)
182
+ end
183
+ result
184
+ end unless method_defined? :transform_values
185
+
186
+ def transform_values!
187
+ return enum_for(:transform_values!) { size } unless block_given?
188
+ each do |key, value|
189
+ self[key] = yield(value)
190
+ end
191
+ end unless method_defined? :transform_values!
192
+
147
193
  end
@@ -1,3 +1,2 @@
1
1
  # encoding: utf-8
2
- require 'ostruct'
3
- require 'backports/2.0.0/stdlib/ostruct'
2
+ require 'ostruct'
@@ -1,12 +1,42 @@
1
- require 'backports/rails/string'
2
-
3
1
  # Extension class
4
2
  class String
5
3
 
6
- # Check if string is empty
7
- def blank?
8
- self == ''
9
- end unless method_defined? :blank?
4
+ # from activesupport
5
+ def camelize(first_letter = :upper)
6
+ if first_letter == :upper
7
+ gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
8
+ else
9
+ self[0..0].downcase + camelize[1..-1]
10
+ end
11
+ end unless method_defined? :camelize
12
+
13
+ def constantize
14
+ names = split('::')
15
+ names.shift if names.empty? || names.first.empty?
16
+
17
+ constant = Object
18
+ names.each do |name|
19
+ constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
20
+ end
21
+ constant
22
+ end unless method_defined? :constantize
23
+
24
+ def dasherize
25
+ gsub(/_/, '-')
26
+ end unless method_defined? :dasherize
27
+
28
+ def demodulize
29
+ gsub(/^.*::/, '')
30
+ end unless method_defined? :demodulize
31
+
32
+ def underscore
33
+ gsub(/::/, '/').
34
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
35
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
36
+ tr("-", "_").
37
+ downcase
38
+ end unless method_defined? :underscore
39
+
10
40
 
11
41
  # Create sortable object from string. Supports better natural sorting.
12
42
  def sort_form
@@ -84,11 +114,4 @@ class String
84
114
 
85
115
  end
86
116
 
87
- # Extension class
88
- class NilClass
89
-
90
- # Allow nil.blank? so that blank? can be applied without errors.
91
- def blank?
92
- true
93
- end
94
- end
117
+ require_relative 'empty'
@@ -1,7 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'json'
3
- require 'backports/rails/hash'
4
- require 'backports/2.0.0/struct'
3
+ require_relative 'hash'
5
4
 
6
5
  class Struct
7
6
  # def to_hash
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'backports'
4
3
  require 'libis/tools/config'
5
4
  require 'libis/tools/extend/string'
6
5
 
@@ -92,7 +92,7 @@ module Libis
92
92
 
93
93
  dmd_sec = xml_doc.root.xpath('mets:dmdSec', NS).inject({}) do |hash_dmd, dmd|
94
94
  hash_dmd[dmd[:ID]] = dmd.xpath('.//dc:record', NS).first.children.inject({}) do |h, c|
95
- h[c.name] = c.content
95
+ h[c.name] = c.content if c.name != 'text'
96
96
  h
97
97
  end
98
98
  hash_dmd
@@ -60,7 +60,7 @@ module Libis
60
60
  # Merges other parameter data into the current parameter
61
61
  # @param [::Libis::Tools::Parameter] other parameter definition to copy properties from
62
62
  def merge!(other)
63
- other.each do |k,v|
63
+ other.each do |k, v|
64
64
  if k == :options
65
65
  self[:options].merge!(v)
66
66
  else
@@ -130,55 +130,59 @@ module Libis
130
130
  end
131
131
  true
132
132
  end
133
+
133
134
  private
134
135
 
135
136
  def guess_datatype
136
137
  self[:datatype] || case self[:default]
137
- when TrueClass, FalseClass
138
- 'bool'
139
- when NilClass
140
- 'string'
141
- when Integer
142
- 'int'
143
- when Float
144
- 'float'
145
- when DateTime, Date, Time
146
- 'datetime'
147
- when Array
148
- 'array'
149
- when Hash
150
- 'hash'
151
- else
152
- self[:default].class.name.downcase
138
+ when TrueClass, FalseClass
139
+ 'bool'
140
+ when NilClass
141
+ 'string'
142
+ when Integer
143
+ 'int'
144
+ when Float
145
+ 'float'
146
+ when DateTime, Date, Time
147
+ 'datetime'
148
+ when Array
149
+ 'array'
150
+ when Hash
151
+ 'hash'
152
+ else
153
+ self[:default].class.name.downcase
153
154
  end
154
155
  end
155
156
 
156
157
  def convert(v)
157
158
  case self[:datatype].to_s.downcase
158
- when 'boolean', 'bool'
159
- return true if TRUE_BOOL.include?(v.to_s.downcase)
160
- return false if FALSE_BOOL.include?(v.to_s.downcase)
161
- raise ParameterValidationError, "No boolean information in '#{v.to_s}'. " +
162
- "Valid values are: '#{TRUE_BOOL.join('\', \'')}" +
163
- "' and '#{FALSE_BOOL.join('\', \'')}'."
164
- when 'string', 'nil'
165
- return v.to_s
166
- when 'int'
167
- return Integer(v)
168
- when 'float'
169
- return Float(v)
170
- when 'datetime'
171
- return v.to_datetime if v.respond_to? :to_datetime
172
- return DateTime.parse(v)
173
- when 'array'
174
- return v if v.is_a?(Array)
175
- return v.split(/[,;|\s]+/) if v.is_a?(String)
176
- return v.to_a if v.respond_to?(:to_a)
177
- when 'hash'
178
- return v when v.is_a?(Hash)
179
- return Hash[(0...v.size).zip(v)] when v.is_a?(Array)
180
- else
181
- raise ParameterValidationError, "Datatype not supported: '#{self[:datatype]}'"
159
+ when 'boolean', 'bool'
160
+ return true if TRUE_BOOL.include?(v.to_s.downcase)
161
+ return false if FALSE_BOOL.include?(v.to_s.downcase)
162
+ raise ParameterValidationError, "No boolean information in '#{v.to_s}'. " +
163
+ "Valid values are: '#{TRUE_BOOL.join('\', \'')}" +
164
+ "' and '#{FALSE_BOOL.join('\', \'')}'."
165
+ when 'string', 'nil'
166
+ return v.to_s
167
+ when 'int', 'integer'
168
+ return Integer(v)
169
+ when 'float'
170
+ return Float(v)
171
+ when 'datetime'
172
+ return v.to_datetime if v.respond_to? :to_datetime
173
+ return DateTime.parse(v)
174
+ when 'array'
175
+ return v if v.is_a?(Array)
176
+ return v.split(/[,;|\s]+/) if v.is_a?(String)
177
+ # Alternatavely:
178
+ # return JSON.parse(v) if v.is_a?(String)
179
+ return v.to_a if v.respond_to?(:to_a)
180
+ when 'hash'
181
+ return v if v.is_a?(Hash)
182
+ return Hash[(0...v.size).zip(v)] if v.is_a?(Array)
183
+ return JSON.parse(v) if v.is_a?(String)
184
+ else
185
+ raise ParameterValidationError, "Datatype not supported: '#{self[:datatype]}'"
182
186
  end
183
187
  nil
184
188
  end
@@ -194,17 +198,17 @@ module Libis
194
198
  def constraint_checker(v, constraint)
195
199
 
196
200
  case constraint
197
- when Array
198
- constraint.each do |c|
199
- return true if (constraint_checker(v, c) rescue false)
200
- end
201
- return true if constraint.include? v
202
- when Range
203
- return true if constraint.cover? v
204
- when Regexp
205
- return true if v =~ constraint
206
- else
207
- return true if v == constraint
201
+ when Array
202
+ constraint.each do |c|
203
+ return true if (constraint_checker(v, c) rescue false)
204
+ end
205
+ return true if constraint.include? v
206
+ when Range
207
+ return true if constraint.cover? v
208
+ when Regexp
209
+ return true if v =~ constraint
210
+ else
211
+ return true if v == constraint
208
212
  end
209
213
  false
210
214
  end
@@ -245,16 +249,16 @@ module Libis
245
249
  # @return [Hash] with parameter names as keys and {Parameter} instance as value.
246
250
  def parameter_defs
247
251
  return @parameters if @parameters
248
- @parameters = ::Concurrent::Hash.new
249
- begin
250
- self.superclass.parameter_defs.
251
- each_with_object(@parameters) do |(name, param), hash|
252
- hash[name] = param.dup
253
- end
254
- rescue NoMethodError
255
- # ignored
252
+ @parameters = ::Concurrent::Hash.new
253
+ begin
254
+ self.superclass.parameter_defs.
255
+ each_with_object(@parameters) do |(name, param), hash|
256
+ hash[name] = param.dup
256
257
  end
257
- @parameters
258
+ rescue NoMethodError
259
+ # ignored
260
+ end
261
+ @parameters
258
262
  end
259
263
 
260
264
  # DSL method that allows creating parameter definitions on the class level.
@@ -1,5 +1,5 @@
1
1
  module Libis
2
2
  module Tools
3
- VERSION = '1.0.4'
3
+ VERSION = '1.0.12'
4
4
  end
5
5
  end
data/libis-tools.gemspec CHANGED
@@ -27,20 +27,19 @@ Gem::Specification.new do |spec|
27
27
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
28
28
 
29
29
  spec.require_paths = ['lib']
30
- spec.has_rdoc = 'yard'
30
+ # spec.has_rdoc = 'yard'
31
31
 
32
32
  spec.add_development_dependency 'bundler', '> 1.6'
33
- spec.add_development_dependency 'rake', '~> 10.3'
33
+ spec.add_development_dependency 'rake', '~> 13.0'
34
34
  spec.add_development_dependency 'rspec', '~> 3.1'
35
35
  spec.add_development_dependency 'term-ansicolor', '~> 1.6'
36
36
  spec.add_development_dependency 'equivalent-xml', '~> 0.5'
37
37
  spec.add_development_dependency 'awesome_print', '~> 1.6'
38
38
 
39
- spec.add_runtime_dependency 'backports', '~> 3.6'
40
39
  spec.add_runtime_dependency 'nokogiri', '~> 1.6'
41
40
  spec.add_runtime_dependency 'gyoku', '~> 1.3'
42
41
  spec.add_runtime_dependency 'nori', '~> 2.6'
43
- spec.add_runtime_dependency 'recursive-open-struct', '~> 1.0'
42
+ spec.add_runtime_dependency 'recursive-open-struct', '>= 1.1.3'
44
43
  spec.add_runtime_dependency 'parslet', '~> 1.7'
45
44
  spec.add_runtime_dependency 'simple_xlsx_reader', '~> 1.0'
46
45
  spec.add_runtime_dependency 'logging', '~> 2.0'
data/spec/command_spec.rb CHANGED
@@ -19,7 +19,9 @@ describe 'Command' do
19
19
 
20
20
  result = Libis::Tools::Command.run('ls')
21
21
 
22
- expect(result[:out].sort).to match entries
22
+ output = result[:out].map {|x| x.split(/\s+/)}.flatten.compact
23
+ expect(output.size).to eq entries.size
24
+ expect(output.sort).to match entries
23
25
  expect(result[:err]).to eq []
24
26
  expect(result[:status]).to eq 0
25
27
 
@@ -30,6 +32,7 @@ describe 'Command' do
30
32
  result = Libis::Tools::Command.run('ls', '-1')
31
33
 
32
34
  output = result[:out]
35
+ puts output.sort
33
36
  expect(output.size).to eq entries.size
34
37
  expect(output.sort).to match entries
35
38
  expect(result[:err]).to eq []
@@ -45,6 +45,7 @@ describe ::Libis::Tools::ConfigFile do
45
45
 
46
46
  it 'allows to change hash in array' do
47
47
  subject << hash
48
+ # subject = ::Libis::Tools::ConfigFile.new(hash)
48
49
  # noinspection RubyResolve
49
50
  subject.c[0][0].a[0].v = 1
50
51
  hash[:c][0][0][:a][0][:v] = 1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libis-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-29 00:00:00.000000000 Z
11
+ date: 2021-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.3'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.3'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,20 +94,6 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.6'
97
- - !ruby/object:Gem::Dependency
98
- name: backports
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '3.6'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '3.6'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: nokogiri
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -154,16 +140,16 @@ dependencies:
154
140
  name: recursive-open-struct
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
- - - "~>"
143
+ - - ">="
158
144
  - !ruby/object:Gem::Version
159
- version: '1.0'
145
+ version: 1.1.3
160
146
  type: :runtime
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
- - - "~>"
150
+ - - ">="
165
151
  - !ruby/object:Gem::Version
166
- version: '1.0'
152
+ version: 1.1.3
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: parslet
169
155
  requirement: !ruby/object:Gem::Requirement
@@ -400,7 +386,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
400
386
  - !ruby/object:Gem::Version
401
387
  version: '0'
402
388
  requirements: []
403
- rubygems_version: 3.0.3
389
+ rubygems_version: 3.2.15
404
390
  signing_key:
405
391
  specification_version: 4
406
392
  summary: LIBIS toolbox.