libis-tools 0.9.15 → 0.9.16

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
  SHA1:
3
- metadata.gz: 7ad80b0200a021e9181c164d32163ef90c03ec40
4
- data.tar.gz: ff6cba705fa063e1a98c83f80c79e20516da2eaf
3
+ metadata.gz: 0864d175751dfc12feb50a156f13200b12d14f52
4
+ data.tar.gz: 53c1f3a745b0f599e2d8c39ff6a57524c9cb7e91
5
5
  SHA512:
6
- metadata.gz: b09c20e3962dc4b8aeb1555212a51992a5102a07f3b6b27b65af97075bd06de12fcf8fea24a6d762aa8d34554a0ab43cfe13110e4072dcbfb99c0dbd4af58e82
7
- data.tar.gz: 597b7334148abc3ba78f675b8914cbaf05647a7b57a5d9d66e61717c1cb083588d0e8d7a69a6d949320528b52f4c7dec9b3bcaf8036663551f4a4fbca98bed96
6
+ metadata.gz: d798591f94b555ac8ecdfede9a3a368b3bfeef313a06b3084e315cbcfc806ef1a3f324482d05d442f7f346a5d2a7815635bfff63e4b09e84f2041fa532a919ab
7
+ data.tar.gz: d87cd92dc1340e197da2527b4feb88d5e3b631afc76259a9031428affd7bf71a31e537eab7dfcd28cfcea7770b66f48c6f553c4d2894943e286680353a5852a9
@@ -25,7 +25,7 @@ module Libis
25
25
  # p cfg[:my_text] # => 'abc'
26
26
  # p cfg.logger.warn('message') # => W, [2015-03-16T12:51:01.180548 #28935] WARN -- : message
27
27
  #
28
- class Config < ConfigFile
28
+ class Config
29
29
  include Singleton
30
30
 
31
31
  class << self
@@ -40,12 +40,18 @@ module Libis
40
40
 
41
41
  end
42
42
 
43
+ def method_missing(name, *args, &block)
44
+ result = config.send(name, *args, &block)
45
+ self === config ? self : result
46
+ end
47
+
43
48
  # Load configuration parameters from a YAML file or Hash.
44
49
  #
45
50
  # The file paths and Hashes are memorised and loaded again by the {#reload} methods.
46
51
  # @param [String,Hash] file_or_hash
47
52
  def <<(file_or_hash)
48
- super(file_or_hash) { |data| @sources << data }
53
+ @config.send('<<', (file_or_hash)) { |data| @sources << data }
54
+ self
49
55
  end
50
56
 
51
57
  # Load all files and Hashes again.
@@ -59,15 +65,13 @@ module Libis
59
65
  self
60
66
  end
61
67
 
62
- alias_method :deep_struct_clear!, :clear!
63
-
64
68
  # Clear data and load all files and Hashes again.
65
69
  #
66
70
  # All configuration parameters are first deleted which means that any parameters
67
71
  # added directly (not via file or hash) will no longer be available. Parameters set explicitly that also exist in
68
72
  # the files or hashes will be reset to the values in those files and hashes.
69
73
  def reload!
70
- deep_struct_clear!
74
+ @config.clear!
71
75
  reload
72
76
  end
73
77
 
@@ -76,7 +80,7 @@ module Libis
76
80
  # Not only all configuration parameters are deleted, but also the memorized list of loaded files
77
81
  # and hashes are cleared and the logger configuration is reset to it's default status.
78
82
  def clear!
79
- super
83
+ @config.clear!
80
84
  @sources = Array.new
81
85
  @logger = ::Logger.new(STDOUT)
82
86
  set_log_formatter
@@ -98,13 +102,13 @@ module Libis
98
102
  end
99
103
  end
100
104
 
101
- attr_accessor :logger
105
+ attr_accessor :logger, :config, :sources
102
106
 
103
107
  protected
104
108
 
105
109
  def initialize(hash = nil, opts = {})
106
- super(hash, opts)
107
- clear!
110
+ @config = ConfigFile.new(hash, opts)
111
+ self.clear!
108
112
  end
109
113
 
110
114
  end
@@ -68,19 +68,22 @@ module Libis
68
68
  parent ||= root
69
69
  m = /^([\/\.]*\/)?(dc(?:terms)?:)?(.*)/.match(tag.to_s)
70
70
  return [] unless m[3]
71
- path = (m[1] || '') + ('dc:' || m[2]) + m[3]
71
+ path = (m[1] || '')
72
+ ns, tag = get_namespace(tag)
73
+ path += "#{ns}:" if ns
74
+ path += tag
72
75
  parent.xpath(path)
73
76
  end
74
77
 
75
78
  def get_namespace(tag)
76
79
  m = /^((dc)?(terms)?(?:_|:)?)?([a-zA-Z_][-_.0-9a-zA-Z]+)(.*)/.match tag
77
- ns = if m[1].nil?
80
+ ns = if m[1].blank?
78
81
  if DC_ELEMENTS.include?(m[4])
79
82
  :dc
80
83
  else
81
84
  DCTERMS_ELEMENTS.include?(m[4]) ? :dcterms : nil
82
85
  end
83
- elsif m[3].nil?
86
+ elsif m[3].blank?
84
87
  :dc
85
88
  else
86
89
  :dcterms
@@ -14,7 +14,7 @@ module Libis
14
14
  module IdContainer
15
15
 
16
16
  def set_from_hash(h)
17
- h.each { |k, v| send "#{k}=", v }
17
+ h.each { |k, v| send "#{k}=", v if respond_to?(k) }
18
18
  end
19
19
 
20
20
  def id
@@ -41,9 +41,10 @@ module Libis
41
41
  class Representation
42
42
  include IdContainer
43
43
 
44
- attr_accessor :label, :preservation_type, :usage_type, :representation_code, :entity_type, :priority, :order,
44
+ attr_accessor :label, :preservation_type, :usage_type, :representation_code, :entity_type, :access_right_id,
45
+ :user_a, :user_b, :user_c,
46
+ :group_id, :priority, :order,
45
47
  :digital_original, :content, :context, :hardware, :carrier, :original_name,
46
- :user_a, :user_b, :user_c, :group_id,
47
48
  :preservation_levels, :env_dependencies, :hardware_ids, :software_ids,
48
49
  :hardware_infos, :software_infos, :relationship_infos, :environments,
49
50
  :dc_record, :source_metadata
@@ -200,7 +201,7 @@ module Libis
200
201
  # Rights section
201
202
  rights_data = []
202
203
  data = {
203
- policyId: hash[:access_right]
204
+ policyId: access_right_id
204
205
  }.cleanup
205
206
  rights_data << Rights.new(data) unless data.empty?
206
207
  dnx[:rights] = rights_data unless rights_data.empty?
@@ -218,20 +219,20 @@ module Libis
218
219
  class File
219
220
  include IdContainer
220
221
 
221
- attr_accessor :label, :note, :location, :target_location, :mimetype, :entity_type,
222
+ attr_accessor :label, :note, :location, :target_location, :mimetype, :puid, :size, :entity_type,
222
223
  :creation_date, :modification_date, :composition_level, :group_id,
224
+ :checksum_MD5, :checksum_SHA1, :checksum_SHA256,:checksum_SHA384,:checksum_SHA512,
223
225
  :fixity_type, :fixity_value,
224
226
  :preservation_levels, :inhibitors, :env_dependencies, :hardware_ids, :software_ids,
225
227
  :signatures, :hardware_infos, :software_infos, :relationship_infos, :environments, :applications,
226
- :dc_record, :source_metadata
227
- :representation
228
+ :dc_record, :source_metadata, :representation
228
229
 
229
230
  def xml_id
230
231
  "fid#{id}"
231
232
  end
232
233
 
233
- def group_id
234
- "grp#{master.id rescue id}"
234
+ def make_group_id
235
+ "grp#{group_id || master.id rescue id}"
235
236
  end
236
237
 
237
238
  def master
@@ -285,18 +286,22 @@ module Libis
285
286
  fileExtension: ::File.extname(orig_name),
286
287
  fileMIMEType: mimetype,
287
288
  fileSizeBytes: size,
288
-
289
+ formatLibraryId: puid
289
290
  }.cleanup
290
291
  tech_data << TechGeneralFile.new(data) unless data.empty?
291
292
  # Fixity
292
- data = {
293
- fixityType: fixity_type,
294
- fixityValue: fixity_value,
295
- }.cleanup
296
- tech_data << TechFixity.new(data) unless data.empty?
293
+ %w'MD5 SHA1 SHA256 SHA384 SHA512'.each do |checksum_type|
294
+ if (checksum = self.send("checksum_#{checksum_type}"))
295
+ data = {
296
+ fixityType: checksum_type,
297
+ fixityValue: checksum,
298
+ }.cleanup
299
+ tech_data << TechFixity.new(data) unless data.empty?
300
+ end
301
+ end
297
302
  # Object characteristics
298
303
  data = {
299
- groupID: group_id
304
+ groupID: make_group_id
300
305
  }.cleanup
301
306
  tech_data << TechObjectChars.new(data) unless data.empty?
302
307
  # Preservation level
@@ -554,6 +559,10 @@ module Libis
554
559
  tag 'webHarvesting'
555
560
  end
556
561
 
562
+ class CollectionInfo < DnxSection
563
+ tag 'Collection'
564
+ end
565
+
557
566
  class PreservationLevel < DnxSection
558
567
  tag 'preservationLevel'
559
568
  end
@@ -740,6 +749,10 @@ module Libis
740
749
  harvestTime: hash[:harvest_time],
741
750
  }.cleanup
742
751
  tech_data << WebHarvesting.new(data) unless data.empty?
752
+ data = {
753
+ collectionId: hash[:collection_id]
754
+ }.cleanup
755
+ tech_data << CollectionInfo.new(data) unless data.empty?
743
756
  @dnx[:tech] = tech_data unless tech_data.empty?
744
757
  data = {
745
758
  policyId: hash[:access_right]
@@ -864,7 +877,7 @@ module Libis
864
877
  ID: object.xml_id,
865
878
  MIMETYPE: object.mimetype,
866
879
  ADMID: amd_id(object.xml_id),
867
- GROUPID: object.group_id,
880
+ GROUPID: object.make_group_id,
868
881
  }.cleanup
869
882
  h[:DMDID] = dmd_id(object.xml_id) if object.dc_record
870
883
 
@@ -891,7 +904,7 @@ module Libis
891
904
  TYPE: 'PHYSICAL',
892
905
  ) {
893
906
  xml[:mets].div(LABEL: map.representation.label) {
894
- add_struct_map(xml, map.diqv) if map.div
907
+ add_struct_map(xml, map.div) if map.div
895
908
  }
896
909
  }
897
910
  end
@@ -21,12 +21,24 @@ module Libis
21
21
  end
22
22
 
23
23
  def dup
24
+ # noinspection RubySuperCallWithoutSuperclassInspection
24
25
  new_obj = super
25
26
  # noinspection RubyResolve
26
27
  new_obj[:options] = Marshal.load(Marshal.dump(self[:options]))
27
28
  new_obj
28
29
  end
29
30
 
31
+ def merge!(other)
32
+ other.each do |k,v|
33
+ if k == :options
34
+ self[:options].merge!(v)
35
+ else
36
+ self[k] = v
37
+ end
38
+ end
39
+ self
40
+ end
41
+
30
42
  def [](key)
31
43
  # noinspection RubySuperCallWithoutSuperclassInspection
32
44
  return super(key) if members.include?(key)
@@ -44,6 +56,7 @@ module Libis
44
56
  end
45
57
 
46
58
  def to_h
59
+ # noinspection RubySuperCallWithoutSuperclassInspection
47
60
  super.inject({}) do |hash, key, value|
48
61
  key == :options ? value.each { |k, v| hash[k] = v } : hash[key] = value
49
62
  hash
@@ -159,7 +172,11 @@ module Libis
159
172
  begin
160
173
  self.superclass.parameter_defs.
161
174
  each_with_object(@parameters) do |(name, param), hash|
162
- hash[name] = param.dup
175
+ if hash.has_key?(name)
176
+ hash[name].merge!(param)
177
+ else
178
+ hash[name] = param.dup
179
+ end
163
180
  end
164
181
  rescue NoMethodError
165
182
  # ignored
@@ -1,5 +1,5 @@
1
1
  module Libis
2
2
  module Tools
3
- VERSION = '0.9.15'
3
+ VERSION = '0.9.16'
4
4
  end
5
5
  end
@@ -542,20 +542,19 @@ module Libis
542
542
  #
543
543
  #
544
544
  def method_missing(method, *args, &block)
545
- super unless method.to_s =~ /^([a-z_][a-z_0-9]*)(=)?$/i
545
+ super unless method.to_s =~ /^([a-z_][a-z_0-9]*)(!|=)?$/i
546
546
  node = get_node($1)
547
- node = add_node($1) unless node
547
+ node = add_node($1) if node.nil? || $2 == '!'
548
548
  case args.size
549
549
  when 0
550
- node = get_node($1)
551
550
  if block_given?
552
551
  build(node, &block)
553
552
  end
554
553
  when 1
555
- if $2
556
- node.content = args.first.to_s
557
- else
554
+ if $2.blank?
558
555
  return node[args.first.to_s]
556
+ else
557
+ node.content = args.first.to_s
559
558
  end
560
559
  when 2
561
560
  node[args.first.to_s] = args[1].to_s
@@ -50,8 +50,8 @@ STR
50
50
 
51
51
  it 'add dc:date' do
52
52
  dc.date = '2001'
53
- dc.dcdate = '2002'
54
- dc.dc_date = '2003'
53
+ dc.dcdate! '2002'
54
+ dc.dc_date! '2003'
55
55
  match_xml dc.document,
56
56
  header +
57
57
  record_start +
@@ -62,10 +62,10 @@ STR
62
62
  end
63
63
 
64
64
  it 'add dcterms:date' do
65
- dc.termsdate = '2001'
66
- dc.dctermsdate = '2002'
67
- dc.terms_date = '2003'
68
- dc.dcterms_date = '2004'
65
+ dc.termsdate! '2001'
66
+ dc.dctermsdate! '2002'
67
+ dc.terms_date! '2003'
68
+ dc.dcterms_date! '2004'
69
69
  match_xml dc.document,
70
70
  header +
71
71
  record_start +
@@ -106,7 +106,7 @@ describe 'Marc21Record' do
106
106
  </dc:record>
107
107
  STR
108
108
  expect(record.to_dc.root).to be_equivalent_to(xml_doc.root).respecting_element_order
109
- record.to_dc.elements.each_with_index do |element, i|
109
+ record.to_dc.root.elements.each_with_index do |element, i|
110
110
  expect(element).to be_equivalent_to(xml_doc.root.elements[i])
111
111
  end
112
112
  end
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: 0.9.15
4
+ version: 0.9.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-10 00:00:00.000000000 Z
11
+ date: 2015-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler