libis-tools 0.9.65 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -23
  3. data/lib/libis/tools.rb +0 -1
  4. data/lib/libis/tools/version.rb +1 -1
  5. data/libis-tools.gemspec +1 -1
  6. metadata +4 -51
  7. data/lib/libis/tools/metadata.rb +0 -25
  8. data/lib/libis/tools/metadata/dublin_core_record.rb +0 -116
  9. data/lib/libis/tools/metadata/field_format.rb +0 -121
  10. data/lib/libis/tools/metadata/fix_field.rb +0 -35
  11. data/lib/libis/tools/metadata/mapper.rb +0 -81
  12. data/lib/libis/tools/metadata/mappers/flandrica.rb +0 -76
  13. data/lib/libis/tools/metadata/mappers/kuleuven.rb +0 -1929
  14. data/lib/libis/tools/metadata/mappers/scope.rb +0 -46
  15. data/lib/libis/tools/metadata/marc21_record.rb +0 -51
  16. data/lib/libis/tools/metadata/marc_record.rb +0 -287
  17. data/lib/libis/tools/metadata/parser/basic_parser.rb +0 -120
  18. data/lib/libis/tools/metadata/parser/dublin_core_parser.rb +0 -37
  19. data/lib/libis/tools/metadata/parser/marc21_parser.rb +0 -207
  20. data/lib/libis/tools/metadata/parser/marc_format_parser.rb +0 -53
  21. data/lib/libis/tools/metadata/parser/marc_rules.rb +0 -36
  22. data/lib/libis/tools/metadata/parser/marc_select_parser.rb +0 -26
  23. data/lib/libis/tools/metadata/parser/patch.rb +0 -22
  24. data/lib/libis/tools/metadata/parser/subfield_criteria_parser.rb +0 -72
  25. data/lib/libis/tools/metadata/parsers.rb +0 -12
  26. data/lib/libis/tools/metadata/sharepoint_mapping.rb +0 -119
  27. data/lib/libis/tools/metadata/sharepoint_record.rb +0 -262
  28. data/lib/libis/tools/metadata/var_field.rb +0 -242
  29. data/spec/data/MetadataMapping.xlsx +0 -0
  30. data/spec/metadata/123456789.marc +0 -18
  31. data/spec/metadata/8389207.marc +0 -117
  32. data/spec/metadata/BE_942855_1927_4898_corrected.XML +0 -11
  33. data/spec/metadata/BE_942855_1927_4898_md.XML +0 -11
  34. data/spec/metadata/dublin_core_parser_spec.rb +0 -48
  35. data/spec/metadata/dublin_core_spec.rb +0 -81
  36. data/spec/metadata/marc21_parser_data.rb +0 -382
  37. data/spec/metadata/marc21_parser_spec.rb +0 -67
  38. data/spec/metadata/marc21_spec.rb +0 -178
  39. data/spec/metadata/metadata_mapper_spec.rb +0 -23
  40. data/spec/metadata/scope_mapper_spec.rb +0 -29
  41. data/test.rb +0 -61
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e20556c8d995577522538e74f68c9495cdcb8988
4
- data.tar.gz: ee609560a8adbb810ed7be297806e610ff0b1468
3
+ metadata.gz: 6ac60f332c876e86ca3f751e4a99b68a10b60f03
4
+ data.tar.gz: cc488738791b1535b7c79fdc9dbf7b7e75847dca
5
5
  SHA512:
6
- metadata.gz: 1244dcd1307b9eea5792750037686900d7c1a145a69ef8d3e5a30396b6ae0f0f8d4bc2c108f83a3481ce5cda6f6da90edd837de6981287f8b0f0fd0936619c82
7
- data.tar.gz: bcaca90c28543679c1aee0a27f4b93b7fc7330ace6be042abe5ba45135bac614d42477cce36b4048d5ce7d969031c07fef50e6ed5e0baa22d46701f0e380f5a9
6
+ metadata.gz: 3c74151553d0042175b87149cc9f19d15efbb23191e32dce0c37d3f40ef17eb9872005b9757aafec0cf159b905fbdd4bbc9609248d61a0874d5a3fa3f1a47a66
7
+ data.tar.gz: ee214d77eae0e39be7a08b6bfdbb1daf4568814aa5be02bc35ee93095b090fd0abd04ee5bee4f40e96e9413dc3fa30769c08feb02a6db9b0ed8da7dac0ffe05c
data/README.md CHANGED
@@ -76,25 +76,7 @@ It also initializes a default logger.
76
76
 
77
77
  The ::Libis::Tools::Logger module adds support for logging functionality to any class.
78
78
 
79
- ## {::Libis::Tools::Metadata}
80
-
81
- This gem also provides some modules and classes that assist in working with metadata. There are classes that allow to
82
- create and/or read metadata for MARC(21), Dublin Core and SharePoint. These classes all live in the
83
- Libis::Tools::Metadata namespace.
84
-
85
- ### MARC
86
-
87
- The classes {::Libis::Tools::Metadata::MarcRecord} and it's child class {::Libis::Tools::Metadata::Marc21Record} are
88
- mainly built for reading MARC(21) records. Most of the class logic is in the base class
89
- {::Libis::Tools::Metadata::MarcRecord MarcRecord}, which is incomplete and should be considered an abstract class.
90
-
91
- {::Libis::Tools::Metadata::Marc21Record Marc21Record} on the other hand only contains the logic to parse the XML data
92
- into the internal structure. A {::Libis::Tools::Metadata::MarcRecord MarcRecord} is created by supplying it an XML node
93
- (from Nokogiri or {::Libis::Tools::XmlDocument}) that contains child nodes with the MARC data of a single record.
94
-
95
- The code will strip namespaces from the input in order to greatly simplify working with the XML.
96
-
97
- ## {::Libis::Tools::Parameter} and {::Libis::Tools::ParameterContainer}
79
+ ## {::Libis::Tools::Parameter} and {::Libis::Tools::ParameterContainer}
98
80
 
99
81
  The class {::Libis::Tools::Parameter} and the {::Libis::Tools::ParameterContainer} module provide a simple framework for
100
82
  instance variables that are type-safe and can easily be documented and provide defaults.
@@ -104,7 +86,7 @@ instance variables that are type-safe and can easily be documented and provide d
104
86
  A small and simple module that provides some convenience methods to deal with temp files. Random file names are generated
105
87
  in a similar way as the standard Ruby Tempfile class does. It has the form:
106
88
  ```
107
- <Optional prefix with '_' appended>_<YYYYMMDD>_<process id>_<random base36 number><optional suffix>
89
+ <Optional prefix with '_' appended><YYYYMMDD>_<process id>_<random base36 number><optional suffix>
108
90
  ```
109
91
 
110
92
  The #name method creates a random file name. Optional parameters are the prefix and suffix (including '.' character if
@@ -117,14 +99,14 @@ when the block ends. In that case the return value will be whatever the block re
117
99
 
118
100
  Without a block, the method still creates and opens the file, but it will return the open file pointer to the caller. The
119
101
  caller is responsible to #close and #unlink or #delete the file. The #unlink and #delete methods are injected into the
120
- returned IO object for your convenience, but it calling the corresponding File methods instead is equally valid.
102
+ returned IO object for your convenience, but calling the corresponding File methods instead is equally valid.
121
103
 
122
104
  ## {::Libis::Tools::ThreadSafe}
123
105
 
124
106
  A convenience method that embeds the mutex implementation. Just include this module whenever you need a thread-save
125
107
  implementation and use the mutex instance variable without any concerns regarding initialization. Your class will have
126
- access to an instance variable 'mutex' as well as a class variable 'class_mutex'. The mutexes (Montor instance) are created
127
- in a thread-safe way.
108
+ access to an instance variable 'mutex' as well as a class variable 'class_mutex'. The mutexes (Montor instance) themselves
109
+ are created in a thread-safe way.
128
110
 
129
111
  ## {::Libis::Tools::XmlDocument}
130
112
 
data/lib/libis/tools.rb CHANGED
@@ -20,5 +20,4 @@ module Libis
20
20
  end
21
21
  end
22
22
 
23
- require_relative 'tools/metadata'
24
23
  require_relative 'tools/extend/struct'
@@ -1,5 +1,5 @@
1
1
  module Libis
2
2
  module Tools
3
- VERSION = '0.9.65'
3
+ VERSION = '1.0.0'
4
4
  end
5
5
  end
data/libis-tools.gemspec CHANGED
@@ -44,7 +44,7 @@ Gem::Specification.new do |spec|
44
44
  spec.add_runtime_dependency 'simple_xlsx_reader', '~> 1.0'
45
45
  spec.add_runtime_dependency 'logging', '~> 2.0'
46
46
  spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
47
- spec.add_runtime_dependency 'yard', '~> 0.8'
47
+ spec.add_runtime_dependency 'yard', '~> 0.9.11'
48
48
  spec.add_runtime_dependency 'roo', '~> 2.5'
49
49
  spec.add_runtime_dependency 'roo-xls', '~> 1.0'
50
50
  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.65
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-14 00:00:00.000000000 Z
11
+ date: 2018-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: '0.8'
229
+ version: 0.9.11
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: '0.8'
236
+ version: 0.9.11
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: roo
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -293,28 +293,6 @@ files:
293
293
  - lib/libis/tools/extend/string.rb
294
294
  - lib/libis/tools/extend/struct.rb
295
295
  - lib/libis/tools/logger.rb
296
- - lib/libis/tools/metadata.rb
297
- - lib/libis/tools/metadata/dublin_core_record.rb
298
- - lib/libis/tools/metadata/field_format.rb
299
- - lib/libis/tools/metadata/fix_field.rb
300
- - lib/libis/tools/metadata/mapper.rb
301
- - lib/libis/tools/metadata/mappers/flandrica.rb
302
- - lib/libis/tools/metadata/mappers/kuleuven.rb
303
- - lib/libis/tools/metadata/mappers/scope.rb
304
- - lib/libis/tools/metadata/marc21_record.rb
305
- - lib/libis/tools/metadata/marc_record.rb
306
- - lib/libis/tools/metadata/parser/basic_parser.rb
307
- - lib/libis/tools/metadata/parser/dublin_core_parser.rb
308
- - lib/libis/tools/metadata/parser/marc21_parser.rb
309
- - lib/libis/tools/metadata/parser/marc_format_parser.rb
310
- - lib/libis/tools/metadata/parser/marc_rules.rb
311
- - lib/libis/tools/metadata/parser/marc_select_parser.rb
312
- - lib/libis/tools/metadata/parser/patch.rb
313
- - lib/libis/tools/metadata/parser/subfield_criteria_parser.rb
314
- - lib/libis/tools/metadata/parsers.rb
315
- - lib/libis/tools/metadata/sharepoint_mapping.rb
316
- - lib/libis/tools/metadata/sharepoint_record.rb
317
- - lib/libis/tools/metadata/var_field.rb
318
296
  - lib/libis/tools/mets_dnx.rb
319
297
  - lib/libis/tools/mets_file.rb
320
298
  - lib/libis/tools/mets_objects.rb
@@ -331,7 +309,6 @@ files:
331
309
  - spec/config_file_spec.rb
332
310
  - spec/config_spec.rb
333
311
  - spec/csv_spec.rb
334
- - spec/data/MetadataMapping.xlsx
335
312
  - spec/data/test-headers.csv
336
313
  - spec/data/test-headers.tsv
337
314
  - spec/data/test-noheaders.csv
@@ -343,17 +320,6 @@ files:
343
320
  - spec/data/test_config.yml
344
321
  - spec/deep_struct_spec.rb
345
322
  - spec/logger_spec.rb
346
- - spec/metadata/123456789.marc
347
- - spec/metadata/8389207.marc
348
- - spec/metadata/BE_942855_1927_4898_corrected.XML
349
- - spec/metadata/BE_942855_1927_4898_md.XML
350
- - spec/metadata/dublin_core_parser_spec.rb
351
- - spec/metadata/dublin_core_spec.rb
352
- - spec/metadata/marc21_parser_data.rb
353
- - spec/metadata/marc21_parser_spec.rb
354
- - spec/metadata/marc21_spec.rb
355
- - spec/metadata/metadata_mapper_spec.rb
356
- - spec/metadata/scope_mapper_spec.rb
357
323
  - spec/mets_file_spec.rb
358
324
  - spec/parameter_container_spec.rb
359
325
  - spec/parameter_spec.rb
@@ -363,7 +329,6 @@ files:
363
329
  - spec/test.xsd
364
330
  - spec/thread_safe_spec.rb
365
331
  - spec/xmldocument_spec.rb
366
- - test.rb
367
332
  - test/test_helper.rb
368
333
  - test/webservices/test_ca_item_info.rb
369
334
  - test/webservices/test_ca_search.rb
@@ -398,7 +363,6 @@ test_files:
398
363
  - spec/config_file_spec.rb
399
364
  - spec/config_spec.rb
400
365
  - spec/csv_spec.rb
401
- - spec/data/MetadataMapping.xlsx
402
366
  - spec/data/test-headers.csv
403
367
  - spec/data/test-headers.tsv
404
368
  - spec/data/test-noheaders.csv
@@ -410,17 +374,6 @@ test_files:
410
374
  - spec/data/test_config.yml
411
375
  - spec/deep_struct_spec.rb
412
376
  - spec/logger_spec.rb
413
- - spec/metadata/123456789.marc
414
- - spec/metadata/8389207.marc
415
- - spec/metadata/BE_942855_1927_4898_corrected.XML
416
- - spec/metadata/BE_942855_1927_4898_md.XML
417
- - spec/metadata/dublin_core_parser_spec.rb
418
- - spec/metadata/dublin_core_spec.rb
419
- - spec/metadata/marc21_parser_data.rb
420
- - spec/metadata/marc21_parser_spec.rb
421
- - spec/metadata/marc21_spec.rb
422
- - spec/metadata/metadata_mapper_spec.rb
423
- - spec/metadata/scope_mapper_spec.rb
424
377
  - spec/mets_file_spec.rb
425
378
  - spec/parameter_container_spec.rb
426
379
  - spec/parameter_spec.rb
@@ -1,25 +0,0 @@
1
- module Libis
2
- module Tools
3
-
4
- # This module groups several metadata formats. Note that all metadata related classes will move into a Gem of their
5
- # own in the future.
6
- module Metadata
7
-
8
- autoload :MarcRecord, 'libis/tools/metadata/marc_record'
9
- autoload :Marc21Record, 'libis/tools/metadata/marc21_record'
10
- autoload :DublinCoreRecord, 'libis/tools/metadata/dublin_core_record'
11
-
12
- # Mappers implementations for converting MARC records to Dublin Core.
13
- module Mappers
14
-
15
- autoload :Kuleuven, 'libis/tools/metadata/mappers/kuleuven'
16
- autoload :Flandrica, 'libis/tools/metadata/mappers/flandrica'
17
- autoload :Scope, 'libis/tools/metadata/mappers/scope'
18
-
19
- end
20
-
21
- end
22
- end
23
- end
24
-
25
- require_relative 'metadata/parsers'
@@ -1,116 +0,0 @@
1
- # encoding: utf-8
2
- require 'nori'
3
- require 'libis/tools/assert'
4
-
5
- module Libis
6
- module Tools
7
- module Metadata
8
-
9
- # Conveniece class to create and read DC records.
10
- # Most of the functionality is derived from the {::Libis::Tools::XmlDocument} base class. This class puts its
11
- # focus on supporting the <dc:xxx> and <dcterms:xxx> namespaces. For most tags the namespaces are added
12
- # automatically by checking which tag you want to add. In some cases the same tag exists in both namespaces and
13
- # you may want to state the namespace explicitely. Even then things are made as easily as possible.
14
- class DublinCoreRecord < Libis::Tools::XmlDocument
15
-
16
- # List of known tags in the DC namespace
17
- DC_ELEMENTS = %w'contributor coverage creator date description format identifier language' +
18
- %w'publisher relation rights source subject title type'
19
- # List of known tags in the DCTERMS namespace
20
- DCTERMS_ELEMENTS = %w'abstract accessRights accrualMethod accrualPeriodicity accrualPolicy alternative' +
21
- %w'audience available bibliographicCitation conformsTo contributor coverage created creator date' +
22
- %w'dateAccepted dateCopyrighted dateSubmitted description educationLevel extent format hasFormat' +
23
- %w'hasPart hasVersion identifier instructionalMethod isFormatOf isPartOf isReferencedBy isReplacedBy' +
24
- %w'isRequiredBy issued isVersionOf language license mediator medium modified provenance publisher' +
25
- %w'references relation replaces requires rights rightsHolder source spatial subject tableOfContents' +
26
- %w'temporal title type valid'
27
-
28
- # Create new DC document.
29
- # If the doc parameter is nil a new empty DC document will be created with the dc:record root element and all
30
- # required namespaces defined.
31
- # @note The input document is not checked if it is a valid DC record XML.
32
- # @param [::Libis::Tools::XmlDocument,String,IO,Hash] doc optional document to read.
33
- def initialize(doc = nil)
34
- super()
35
- xml_doc = case doc
36
- when ::Libis::Tools::XmlDocument
37
- doc
38
- when String
39
- # noinspection RubyResolve
40
- File.exist?(doc) ? Libis::Tools::XmlDocument.open(doc) : Libis::Tools::XmlDocument.parse(doc)
41
- when IO
42
- Libis::Tools::XmlDocument.parse(doc.read)
43
- when Hash
44
- Libis::Tools::XmlDocument.from_hash(doc)
45
- when NilClass
46
- Libis::Tools::XmlDocument.new.build do |xml|
47
- xml[:dc].record('xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
48
- 'xmlns:dc' => 'http://purl.org/dc/elements/1.1/',
49
- 'xmlns:dcterms' => 'http://purl.org/dc/terms/') {
50
- yield xml if block_given?
51
- }
52
- end
53
- else
54
- raise ArgumentError, "Invalid argument: #{doc.inspect}"
55
- end
56
- @document = xml_doc.document if xml_doc
57
- raise ArgumentError, 'XML document not valid.' if self.invalid?
58
- end
59
-
60
- # Search the document with xpath.
61
- # If no namespace is present, the 'dc:' namespace will be added.
62
- # @param [String] path any valid XPath expression
63
- def xpath(path)
64
- m = /^([\/.]*\/)?(dc(terms)?:)?(.*)/.match(path.to_s)
65
- return [] unless m[4]
66
- path = (m[1] || '') + ('dc:' || m[2]) + m[4]
67
- @document.xpath(path.to_s)
68
- end
69
-
70
- # Add a node.
71
- # You can omit the namespace in the name parameter. The method will add the correct namespace for you. If using
72
- # symbols for name, an underscore ('_') can be used as separator instead of the colon (':').
73
- # @param [String,Symbol] name tag name of the element
74
- # @param [String] value content of the new element
75
- # @param [Nokogiri::XML::Node] parent the new element will be attached to this node
76
- # @param [Hash] attributes list of <attribute_name>, <attribute_value> pairs for the new element
77
- def add_node(name, value = nil, parent = nil, attributes = {})
78
- ns, tag = get_namespace(name.to_s)
79
- (attributes[:namespaces] ||= {})[:node_ns] ||= ns if ns
80
- super tag, value, parent, attributes
81
- end
82
-
83
- protected
84
-
85
- def get_nodes(tag, parent = nil)
86
- parent ||= root
87
- m = /^([\/\.]*\/)?(dc(?:terms)?:)?(.*)/.match(tag.to_s)
88
- return [] unless m[3]
89
- path = (m[1] || '')
90
- ns, tag = get_namespace(tag)
91
- path += "#{ns}:" if ns
92
- path += tag
93
- parent.xpath(path)
94
- end
95
-
96
- def get_namespace(tag)
97
- m = /^((dc)?(terms)?(?:_|:)?)?([a-zA-Z_][-_.0-9a-zA-Z]+)(.*)/.match tag
98
- ns = if m[1].blank?
99
- if DC_ELEMENTS.include?(m[4])
100
- :dc
101
- else
102
- DCTERMS_ELEMENTS.include?(m[4]) ? :dcterms : nil
103
- end
104
- elsif m[3].blank?
105
- :dc
106
- else
107
- :dcterms
108
- end
109
- [ns, "#{m[4]}#{m[5]}"]
110
- end
111
-
112
- end
113
-
114
- end
115
- end
116
- end
@@ -1,121 +0,0 @@
1
- # coding: utf-8
2
-
3
- module Libis
4
- module Tools
5
- module Metadata
6
-
7
- # Helper class for formatting field data.
8
- #
9
- # The FieldFormat class can omit prefix and or postfix if no data is present and omits the join string if only
10
- # one data element is present.
11
- class FieldFormat
12
-
13
- # [Array] the list that makes up the data
14
- attr_accessor :parts
15
-
16
- # [String] the text that will be placed in front of the generated text
17
- attr_accessor :prefix
18
-
19
- # [String] the text that will be placed at the end of the generated text
20
- attr_accessor :postfix
21
-
22
- # [String] the text used between the parts of the data
23
- attr_accessor :join
24
-
25
- # Create new formatter
26
- #
27
- # The method takes any number of arguments and processes them as data parts. If the last one is a Hash, it is
28
- # interpreted as options hash. The data parts can either be given as an Array or set of arguments or within the
29
- # options hash with key +:parts+.
30
- #
31
- # On each element in the data set the formatter will call the #to_s method to
32
- # give each data object the opportunity to process it's data.
33
- #
34
- # @param [Array, Hash] parts whatever makes up the data to be formatted.
35
- def initialize(*parts)
36
- @parts = []
37
- self[*parts]
38
- end
39
-
40
- # Parses the arguments, stripping of an optional last Hash as options.
41
- # @param (see #initialize)
42
- def [](*parts)
43
- options = parts.last.is_a?(Hash) ? parts.pop : {}
44
- add parts
45
- x = options.delete(:parts)
46
- add x if x
47
- add_options options
48
- end
49
-
50
- # Set options.
51
- #
52
- # Besides the tree options +:prefix+, +:postfix+ and +:join+ it also accepts the option +:fix+. This combines
53
- # both +:prefix+ and +:postfix+ options by specifying "<prefix>|<postfix>". If both prefix and postfix are only
54
- # 1 character wide the format "<prefix><postfix>" is also allowed.
55
- #
56
- # @param [Hash] options the options list
57
- def add_options(options = {})
58
- if options[:fix]
59
- if options[:fix].size == 2
60
- @prefix, @postfix = options[:fix].split('')
61
- else
62
- @prefix, @postfix = options[:fix].split('|')
63
- end
64
- end
65
- @join = options[:join] if options[:join]
66
- @prefix = FieldFormat::from(options[:prefix]) if options[:prefix]
67
- @postfix = FieldFormat::from(options[:postfix]) if options[:postfix]
68
- self
69
- end
70
-
71
- # Add default options.
72
- # (see #add_options)
73
- # None of these options will be set if they are already set. If you need to overwrite them, use {#add_options}.
74
- # @param (see #add_options)
75
- def add_default_options(options = {})
76
- options.delete(:prefix) if @prefix
77
- options.delete(:postfix) if @postfix
78
- options.delete(:fix) if @prefix or @postfix
79
- options.delete(:join) if @join
80
- add_options options
81
- end
82
-
83
- # Shortcut class method for initializer
84
- def self.from(*h)
85
- self.new(*h)
86
- end
87
-
88
- # The real formatter method.
89
- # This method parses the data and applies the options to generate the formatted string.
90
- # @return [String] the formatter string
91
- def to_s
92
- @parts.delete_if { |x|
93
- x.nil? or
94
- (x.is_a? String and x.empty?) or
95
- (x.is_a? Libis::Tools::Metadata::FieldFormat and x.to_s.empty?)
96
- }
97
- result = @parts.join(@join)
98
- unless result.empty?
99
- result = (@prefix || '').to_s + result + (@postfix || '').to_s
100
- end
101
- result
102
- end
103
-
104
- protected
105
-
106
- def add(part)
107
- case part
108
- when Hash
109
- @parts << Libis::Tools::Metadata::FieldFormat::from(part)
110
- when Array
111
- part.each { |x| add x }
112
- else
113
- @parts << part
114
- end
115
- end
116
-
117
- end
118
-
119
- end
120
- end
121
- end