libis-tools 0.9.65 → 1.0.0

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.
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