metacrunch-mab2 1.2.1-universal-java-1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bb39868bb9fa32a9babc6108efcee48c3c863c2e
4
+ data.tar.gz: e863ea0beeb4f34e01afff66c7ed67e20d8a6720
5
+ SHA512:
6
+ metadata.gz: 2e7cf09fdb473a8f80c033076ee45b67a64943558141968f602cae6f43c56de5357cce461462edeeb816c13c9d53d2ba3d90e80191f31dd13c5d435af817f2ee
7
+ data.tar.gz: eb9c8a71b21661df4447074665f3a81a3daa4dec8a484747a4a058f130337ecc00ff8c700dbbb8f77b2f205a656b02b3bfd33a95ca31039310ea9f88e28cd677
data/.gitignore ADDED
@@ -0,0 +1,24 @@
1
+ .DS_Store
2
+ /doc
3
+ *.gem
4
+ *.rbc
5
+ .bundle
6
+ .config
7
+ .yardoc
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
20
+ *.bundle
21
+ *.so
22
+ *.o
23
+ *.a
24
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format documentation
3
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - ruby-2.3.0
4
+ - jruby-9.0.5.0
data/Gemfile ADDED
@@ -0,0 +1,21 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem "bundler", ">= 1.7"
7
+ gem "rake", ">= 11.1"
8
+ gem "rspec", ">= 3.0.0", "< 4.0.0"
9
+ gem "simplecov", ">= 0.11.0"
10
+
11
+ if !ENV["CI"]
12
+ gem "hashdiff", ">= 0.3.0", platform: :ruby
13
+ gem "pry-byebug", ">= 3.3.0", platform: :ruby
14
+ gem "pry-rescue", ">= 1.4.2", platform: :ruby
15
+ gem "pry-state", ">= 0.1.7", platform: :ruby
16
+ end
17
+ end
18
+
19
+ group :test do
20
+ gem "codeclimate-test-reporter", ">= 0.5.0", require: nil
21
+ end
data/License.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 René Sprotte, Michael Sievers, Marcel Otto
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/Readme.md ADDED
@@ -0,0 +1,6 @@
1
+ # metacrunch-mab2
2
+
3
+ [![Code Climate](https://codeclimate.com/github/ubpb/metacrunch-mab2/badges/gpa.svg)](https://codeclimate.com/github/ubpb/metacrunch-mab2)
4
+ [![Build Status](https://travis-ci.org/ubpb/metacrunch-mab2.svg)](https://travis-ci.org/ubpb/metacrunch-mab2)
5
+
6
+ Dokumentation folgt in Kürze...
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler/setup"
3
+ require "metacrunch"
4
+
5
+ begin
6
+ require "pry"
7
+ rescue LoadError ; end
8
+
9
+ if defined?(Pry)
10
+ Pry.start
11
+ else
12
+ require "irb"
13
+ IRB.start
14
+ end
@@ -0,0 +1,52 @@
1
+ require_relative "./document"
2
+
3
+ module Metacrunch
4
+ module Mab2
5
+ class Builder
6
+
7
+ attr_reader :document
8
+
9
+ def self.build(&block)
10
+ builder = new
11
+ document = builder.instance_eval(&block) if block_given?
12
+ document || Document.new
13
+ end
14
+
15
+ def initialize
16
+ @document = Document.new
17
+ end
18
+
19
+ def controlfield(tag, values)
20
+ controlfield = Document::Controlfield.new(tag, values)
21
+ @document.add_controlfield(controlfield)
22
+ @document
23
+ end
24
+
25
+ def datafield(tag, ind1:nil, ind2:nil, &block)
26
+ datafield = Document::Datafield.new(tag, ind1: ind1, ind2: ind2)
27
+ @document.add_datafield(datafield)
28
+
29
+ if block_given?
30
+ subfield_builder = SubfieldBuilder.new(datafield)
31
+ subfield_builder.instance_eval(&block)
32
+ end
33
+
34
+ @document
35
+ end
36
+
37
+
38
+ class SubfieldBuilder
39
+ def initialize(datafield)
40
+ @datafield = datafield
41
+ end
42
+
43
+ def subfield(code, value)
44
+ subfield = Document::Subfield.new(code, value)
45
+ @datafield.add_subfield(subfield)
46
+ subfield
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1 @@
1
+ # TODO
@@ -0,0 +1,91 @@
1
+ module Metacrunch
2
+ module Mab2
3
+ class Document
4
+ class Controlfield
5
+
6
+ attr_accessor :tag
7
+
8
+ def initialize(tag = nil, values = [])
9
+ self.tag = tag
10
+ self.values = values
11
+ end
12
+
13
+ def tag=(value)
14
+ @tag = value.to_s if value
15
+ end
16
+
17
+ #
18
+ # Setter for the control field values. Values can be given as String or
19
+ # as an Array.
20
+ #
21
+ # @param [String, Array] values for the control field as a String or Array.
22
+ # In case of String the MAB2 delimiter/placeholder | is respected. In case
23
+ # of an Array every element is converted into a String. Empty strings are
24
+ # converted into nil. Array values that are longer than one character will
25
+ # raise an ArgumentError.
26
+ #
27
+ # @example Add control field using String values
28
+ # add_control_field("050", "a|b||")
29
+ #
30
+ # @example Add control field using Array
31
+ # add_control_field("050", ["a", nil, "b", nil, nil])
32
+ #
33
+ def values=(values)
34
+ @values = case values
35
+ when String then string2values(values)
36
+ when Array then array2values(values)
37
+ when nil then []
38
+ else
39
+ raise ArgumentError, "expecting a String or Array, but got #{values}"
40
+ end
41
+ end
42
+
43
+ #
44
+ # @return [Array<String>]
45
+ #
46
+ def values
47
+ @values
48
+ end
49
+
50
+ #
51
+ # @param [int] index
52
+ # @return [Array<String>] value at given index
53
+ #
54
+ def at(index)
55
+ @values.at(index)
56
+ end
57
+
58
+ # ------------------------------------------------------------------------------
59
+ # Serialization
60
+ # ------------------------------------------------------------------------------
61
+
62
+ def to_xml(builder)
63
+ builder.controlfield(values2string, tag: tag)
64
+ end
65
+
66
+ private
67
+
68
+ def string2values(string)
69
+ string.chars.to_a.map{ |e| (e=="|") ? nil : e }
70
+ end
71
+
72
+ def array2values(array)
73
+ array.map do |v|
74
+ if v.present?
75
+ v = v.to_s
76
+ raise ArgumentError, "invalid value of controlfield #{tag}: #{array}" if v.length > 1
77
+ v
78
+ else
79
+ nil
80
+ end
81
+ end
82
+ end
83
+
84
+ def values2string
85
+ values.map{|c| c.blank? ? "|" : c}.join
86
+ end
87
+
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,69 @@
1
+ module Metacrunch
2
+ module Mab2
3
+ class Document
4
+ class Datafield
5
+
6
+ attr_accessor :tag
7
+ attr_accessor :ind1, :ind2
8
+
9
+ def initialize(tag = nil, ind1:nil, ind2:nil)
10
+ @tag = tag
11
+ @ind1 = ind1
12
+ @ind2 = ind2
13
+ @subfields = {}
14
+ end
15
+
16
+ def value
17
+ subfields.value
18
+ end
19
+
20
+ # ------------------------------------------------------------------------------
21
+ # Sub fields
22
+ # ------------------------------------------------------------------------------
23
+
24
+ #
25
+ # Returns the sub field matching the given code.
26
+ #
27
+ # @param [String] code of the sub field
28
+ # @return [Metacrunch::Mab2::Document::SubfieldSet] sub field with the given code. The set
29
+ # is empty if the sub field doesn't exists.
30
+ #
31
+ def subfields(code = nil)
32
+ result = Metacrunch::Mab2::Document::SubfieldSet.new
33
+
34
+ if code.nil?
35
+ result.concat(@subfields.values.flatten(1))
36
+ elsif _subfields = @subfields[code]
37
+ result.concat(_subfields)
38
+ elsif (codes = code).is_a?(Array)
39
+ result.concat(codes.map { |_code| @subfields[_code] }.compact.flatten(1))
40
+ end
41
+
42
+ result
43
+ end
44
+
45
+ #
46
+ # Adds a new sub field.
47
+ #
48
+ # @param [Metacrunch::Mab2::Document::Subfield] subfield
49
+ #
50
+ def add_subfield(subfield)
51
+ (@subfields[subfield.code] ||= []) << subfield
52
+ end
53
+
54
+ # ------------------------------------------------------------------------------
55
+ # Serialization
56
+ # ------------------------------------------------------------------------------
57
+
58
+ def to_xml(builder)
59
+ builder.datafield(tag: tag, ind1: ind1, ind2: ind2) do
60
+ @subfields.values.each do |_subfield_set|
61
+ _subfield_set.to_xml(builder)
62
+ end
63
+ end
64
+ end
65
+
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,67 @@
1
+ require "self_enumerable"
2
+
3
+ module Metacrunch
4
+ module Mab2
5
+ class Document
6
+ class DatafieldSet
7
+ include SelfEnumerable
8
+
9
+ def initialize(datafields = [])
10
+ @datafields = datafields
11
+ end
12
+
13
+ def each
14
+ block_given? ? @datafields.each { |_datafield| yield _datafield } : to_enum
15
+ end
16
+
17
+ def <<(datafield)
18
+ @datafields << datafield
19
+ end
20
+
21
+ def concat(datafield_set)
22
+ @datafields.concat(datafield_set.to_a)
23
+ self
24
+ end
25
+
26
+ def value
27
+ @datafields.find { |_datafield| _datafield.value }.try(:value)
28
+ end
29
+ alias_method :first_value, :value
30
+
31
+ def to_a
32
+ @datafields
33
+ end
34
+
35
+ def empty?
36
+ @datafields.empty?
37
+ end
38
+
39
+ def present?
40
+ !empty?
41
+ end
42
+
43
+ # @return [Metacrunch::Mab2::Document::SubfieldSet]
44
+ def subfields(code = nil)
45
+ result = Metacrunch::Mab2::Document::SubfieldSet.new
46
+
47
+ @datafields.each do |_datafield|
48
+ result.concat(_datafield.subfields(code))
49
+ end
50
+
51
+ result
52
+ end
53
+
54
+ # ------------------------------------------------------------------------------
55
+ # Serialization
56
+ # ------------------------------------------------------------------------------
57
+
58
+ def to_xml(builder)
59
+ self.each do |_datafield|
60
+ _datafield.to_xml(builder)
61
+ end
62
+ end
63
+
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,45 @@
1
+ module Metacrunch
2
+ module Mab2
3
+ class Document
4
+ class MabXmlParser
5
+
6
+ def parse(mab_xml)
7
+ xml = Nokogiri::XML(mab_xml.try(:strip))
8
+ xml.remove_namespaces!
9
+
10
+ html_entities = HTMLEntities.new
11
+ document = Document.new
12
+
13
+ xml.xpath("//metadata/record").children.each do |node|
14
+ if node.name == "controlfield"
15
+ controlfield = Metacrunch::Mab2::Document::Controlfield.new
16
+ controlfield.tag = node.attributes["tag"].value
17
+ controlfield.values = node.content
18
+ document.add_controlfield(controlfield)
19
+ elsif node.name == "datafield" then
20
+ datafield = Metacrunch::Mab2::Document::Datafield.new
21
+ datafield.tag = node.attributes["tag"].value
22
+ datafield.ind1 = node.attributes["ind1"].try(:value)
23
+ datafield.ind2 = node.attributes["ind2"].try(:value)
24
+
25
+ node.children.each do |subnode|
26
+ if subnode.name == "subfield"
27
+ subfield = Metacrunch::Mab2::Document::Subfield.new
28
+ subfield.code = subnode.attributes["code"].value
29
+ value = subnode.content
30
+ subfield.value = value.include?("&") ? html_entities.decode(value) : value
31
+ datafield.add_subfield(subfield)
32
+ end
33
+ end
34
+
35
+ document.add_datafield(datafield)
36
+ end
37
+ end
38
+
39
+ document
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,75 @@
1
+ require "ox"
2
+
3
+ module Metacrunch
4
+ module Mab2
5
+ class Document
6
+ class MabXmlParser < Ox::Sax
7
+
8
+ def parse(mab_xml)
9
+ # initialize state machine
10
+ @in_controlfield = @in_datafield = @in_subfield = false
11
+
12
+ @controlfield = @datafield = @subfield = nil
13
+ @document = Document.new
14
+ @html_entities_coder = HTMLEntities.new
15
+
16
+ # convert_special tells ox to convert some html entities already during
17
+ # parsing, which minifies the amount of entities we have to decode ourself
18
+ Ox.sax_parse(self, mab_xml, convert_special: true)
19
+
20
+ return @document
21
+ end
22
+
23
+ def start_element(name)
24
+ if name == :subfield
25
+ @in_subfield = true
26
+ @subfield = Metacrunch::Mab2::Document::Subfield.new
27
+ elsif name == :datafield
28
+ @in_datafield = true
29
+ @datafield = Metacrunch::Mab2::Document::Datafield.new
30
+ elsif name == :controlfield
31
+ @in_controlfield = true
32
+ @controlfield = Metacrunch::Mab2::Document::Controlfield.new
33
+ end
34
+ end
35
+
36
+ def end_element(name)
37
+ if @in_subfield
38
+ @in_subfield = false
39
+ @datafield.add_subfield(@subfield)
40
+ elsif @in_datafield
41
+ @in_datafield = false
42
+ @document.add_datafield(@datafield)
43
+ elsif @in_controlfield
44
+ @in_controlfield = false
45
+ @document.add_controlfield(@controlfield)
46
+ end
47
+ end
48
+
49
+ def attr(name, value)
50
+ if @in_subfield
51
+ @subfield.code = value if name == :code
52
+ elsif @in_datafield
53
+ if name == :tag
54
+ @datafield.tag = value
55
+ elsif name == :ind1
56
+ @datafield.ind1 = value
57
+ elsif name == :ind2
58
+ @datafield.ind2 = value
59
+ end
60
+ elsif @in_controlfield
61
+ @controlfield.tag = value if name == :tag
62
+ end
63
+ end
64
+
65
+ def text(value)
66
+ if @in_subfield
67
+ @subfield.value = value.include?("&") ? @html_entities_coder.decode(value) : value
68
+ elsif @in_controlfield
69
+ @controlfield.values = value
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,25 @@
1
+ module Metacrunch
2
+ module Mab2
3
+ class Document
4
+ class Subfield
5
+
6
+ attr_accessor :code
7
+ attr_accessor :value
8
+
9
+ def initialize(code = nil, value = nil)
10
+ @code = code
11
+ @value = value
12
+ end
13
+
14
+ # ------------------------------------------------------------------------------
15
+ # Serialization
16
+ # ------------------------------------------------------------------------------
17
+
18
+ def to_xml(builder)
19
+ builder.subfield(value, code: code)
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,59 @@
1
+ require "self_enumerable"
2
+
3
+ module Metacrunch
4
+ module Mab2
5
+ class Document
6
+ class SubfieldSet
7
+ include SelfEnumerable
8
+
9
+ def initialize(subfields = [])
10
+ @subfields = subfields
11
+ end
12
+
13
+ def each
14
+ block_given? ? @subfields.each { |_subfield| yield _subfield } : to_enum
15
+ end
16
+
17
+ def <<(subfield)
18
+ @subfields << subfield
19
+ end
20
+
21
+ def concat(subfield_set)
22
+ @subfields.concat(subfield_set.to_a)
23
+ end
24
+
25
+ def to_a
26
+ @subfields
27
+ end
28
+
29
+ def empty?
30
+ @subfields.empty?
31
+ end
32
+
33
+ def present?
34
+ !empty?
35
+ end
36
+
37
+ def value
38
+ values.find{ |v| v.present? }
39
+ end
40
+ alias_method :first_value, :value
41
+
42
+ def values
43
+ @subfields.map{ |subfield| subfield.value }
44
+ end
45
+
46
+ # ------------------------------------------------------------------------------
47
+ # Serialization
48
+ # ------------------------------------------------------------------------------
49
+
50
+ def to_xml(builder)
51
+ self.each do |_subfield|
52
+ _subfield.to_xml(builder)
53
+ end
54
+ end
55
+
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,134 @@
1
+ module Metacrunch
2
+ module Mab2
3
+ class Document
4
+ if RUBY_PLATFORM == "java"
5
+ require_relative "document/jruby/mab_xml_parser"
6
+ else
7
+ require_relative "document/mab_xml_parser"
8
+ end
9
+
10
+ require_relative "document/controlfield"
11
+ require_relative "document/datafield"
12
+ require_relative "document/datafield_set"
13
+ require_relative "document/subfield"
14
+ require_relative "document/subfield_set"
15
+
16
+ # ------------------------------------------------------------------------------
17
+ # Parsing
18
+ # ------------------------------------------------------------------------------
19
+
20
+ #
21
+ # @param [String] xml repesenting a MAB document in Aleph MAB XML format
22
+ # @return [Metacrunch::Mab2::Document]
23
+ #
24
+ def self.from_aleph_mab_xml(xml)
25
+ MabXmlParser.new.parse(xml)
26
+ end
27
+
28
+ def initialize
29
+ @controlfields = {}
30
+ @datafields = {}
31
+ end
32
+
33
+ # ------------------------------------------------------------------------------
34
+ # Control fields
35
+ # ------------------------------------------------------------------------------
36
+
37
+ #
38
+ # Returns the control field matching the given tag.
39
+ #
40
+ # @param [String] tag of the control field
41
+ # @return [Controlfield] control field with the given tag.
42
+ #
43
+ def controlfield(tag)
44
+ @controlfields[tag] || Controlfield.new(tag)
45
+ end
46
+
47
+ #
48
+ # Adds a new control field.
49
+ #
50
+ # @param [Metacrunch::Mab2::Document::Controlfield] controlfield
51
+ #
52
+ def add_controlfield(controlfield)
53
+ @controlfields[controlfield.tag] = controlfield
54
+ end
55
+
56
+ # ------------------------------------------------------------------------------
57
+ # Data fields
58
+ # ------------------------------------------------------------------------------
59
+
60
+ #
61
+ # Returns the data fields matching the given tag and ind1/ind2.
62
+ #
63
+ # @param [String, nil] tag of the data field. Can be nil to match any data field.
64
+ # @param [String, nil] ind1 filter for ind1. Can be nil to match any indicator 1.
65
+ # @param [String, nil] ind2 filter for ind2. Can be nil to match any indicator 2.
66
+ # @return [Metacrunch::Mab2::Document::DatafieldSet] data field with the given tag and ind1/ind2.
67
+ # The set is empty if a matching field with the tag and/or ind1/ind2 doesn't exists.
68
+ #
69
+ def datafields(tag = nil, ind1: nil, ind2: nil)
70
+ if tag.nil?
71
+ DatafieldSet.new(@datafields.values.flatten(1))
72
+ else
73
+ set = DatafieldSet.new(@datafields[tag] || [])
74
+ return set if set.empty? || (ind1.nil? && ind2.nil?)
75
+
76
+ ind1 = map_indicator(ind1)
77
+ ind2 = map_indicator(ind2)
78
+
79
+ set.select do |_datafield|
80
+ check_indicator(ind1, _datafield.ind1) && check_indicator(ind2, _datafield.ind2)
81
+ end
82
+ end
83
+ end
84
+
85
+ #
86
+ # Adds a new data field.
87
+ #
88
+ # @param [Metacrunch::Mab2::Document::Datafield] datafield
89
+ #
90
+ def add_datafield(datafield)
91
+ (@datafields[datafield.tag] ||= []) << datafield
92
+ end
93
+
94
+ # ------------------------------------------------------------------------------
95
+ # Serialization
96
+ # ------------------------------------------------------------------------------
97
+
98
+ def to_xml
99
+ builder = ::Builder::XmlMarkup.new(indent: 2)
100
+ builder.instruct!(:xml, :encoding => "UTF-8")
101
+ builder.mab_xml do
102
+ controlfields_struct.values.each do |_controlfield|
103
+ _controlfield.to_xml(builder)
104
+ end
105
+
106
+ @datafields.values.each do |_datafield_set|
107
+ _datafield_set.to_xml(builder)
108
+ end
109
+ end
110
+ end
111
+
112
+ private
113
+
114
+ def map_indicator(ind)
115
+ ind.is_a?(Array) ? ind.map { |_el| _el == :blank ? [" ", "-", nil] : _el }.flatten(1) : ind
116
+ end
117
+
118
+ def check_indicator(requested_ind, datafield_ind)
119
+ if !requested_ind
120
+ true
121
+ elsif requested_ind == :blank && (datafield_ind == " " || datafield_ind == "-" || datafield_ind.nil?)
122
+ true
123
+ elsif requested_ind == datafield_ind
124
+ true
125
+ elsif requested_ind.is_a?(Array) && requested_ind.include?(datafield_ind)
126
+ true
127
+ else
128
+ false
129
+ end
130
+ end
131
+
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,5 @@
1
+ module Metacrunch
2
+ module Mab2
3
+ VERSION = "1.2.1"
4
+ end
5
+ end
@@ -0,0 +1,48 @@
1
+ require "nokogiri"
2
+ require_relative "../mab2"
3
+
4
+ class Metacrunch::Mab2::XmlBuilder
5
+ def initialize(identifier = nil, &block)
6
+ @builder =
7
+ Nokogiri::XML::Builder.new do
8
+ send(
9
+ :"OAI-PMH",
10
+ "xmlns" => "http://www.openarchives.org/OAI/2.0/",
11
+ "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
12
+ "xsi:schemaLocation" => "http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"
13
+ ) do
14
+ ListRecords do
15
+ record do
16
+ if identifier
17
+ header do |_xml|
18
+ _xml.identifier identifier
19
+ end
20
+ end
21
+
22
+ metadata do
23
+ record("xmlns" => "http://www.ddb.de/professionell/mabxml/mabxml-1.xsd") do
24
+ define_singleton_method(:controlfield) do |_tag, _text|
25
+ send(:method_missing, :controlfield, _text, tag: _tag)
26
+ end
27
+
28
+ define_singleton_method(:datafield) do |_tag, _attributes = {}, &_block|
29
+ send(:method_missing, :datafield, {tag: _tag}.merge(_attributes), &_block)
30
+ end
31
+
32
+ define_singleton_method(:subfield) do |_code, _text|
33
+ send(:method_missing, :subfield, _text, code: _code)
34
+ end
35
+
36
+ instance_eval(&block)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ def to_xml
46
+ @builder.to_xml
47
+ end
48
+ end
@@ -0,0 +1,15 @@
1
+ require "rubygems"
2
+ require "active_support"
3
+ require "active_support/core_ext"
4
+ require "htmlentities"
5
+ require "nokogiri"
6
+ require "ox" unless RUBY_PLATFORM == "java"
7
+
8
+ module Metacrunch
9
+ module Mab2
10
+ require_relative "./mab2/builder"
11
+ require_relative "./mab2/cli"
12
+ require_relative "./mab2/document"
13
+ require_relative "./mab2/version"
14
+ end
15
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "metacrunch/mab2/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "metacrunch-mab2"
8
+ spec.version = Metacrunch::Mab2::VERSION
9
+ spec.authors = ["René Sprotte", "Michael Sievers", "Marcel Otto"]
10
+ spec.email = "r.sprotte@ub.uni-paderborn.de"
11
+ spec.summary = %q{MAB2 tools for metacrunch}
12
+ spec.homepage = "http://github.com/ubpb/metacrunch-mab2"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.bindir = "exe"
17
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency "activesupport", "~> 4.2"
21
+ spec.add_dependency "htmlentities", "~> 4.3"
22
+ spec.add_dependency "nokogiri", "~> 1.6"
23
+ spec.add_dependency "self_enumerable", "~> 0.2"
24
+
25
+ if RUBY_PLATFORM != "java"
26
+ spec.add_dependency "ox", "~> 2.1"
27
+ end
28
+
29
+ if RUBY_PLATFORM == "java"
30
+ spec.platform = Gem::Platform::CURRENT
31
+ end
32
+ end
33
+
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: metacrunch-mab2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.1
5
+ platform: universal-java-1.8
6
+ authors:
7
+ - René Sprotte
8
+ - Michael Sievers
9
+ - Marcel Otto
10
+ autorequire:
11
+ bindir: exe
12
+ cert_chain: []
13
+ date: 2016-04-25 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '4.2'
21
+ name: activesupport
22
+ prerelease: false
23
+ type: :runtime
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '4.2'
29
+ - !ruby/object:Gem::Dependency
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '4.3'
35
+ name: htmlentities
36
+ prerelease: false
37
+ type: :runtime
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '4.3'
43
+ - !ruby/object:Gem::Dependency
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.6'
49
+ name: nokogiri
50
+ prerelease: false
51
+ type: :runtime
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.6'
57
+ - !ruby/object:Gem::Dependency
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0.2'
63
+ name: self_enumerable
64
+ prerelease: false
65
+ type: :runtime
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '0.2'
71
+ description:
72
+ email: r.sprotte@ub.uni-paderborn.de
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - ".rspec"
79
+ - ".travis.yml"
80
+ - Gemfile
81
+ - License.txt
82
+ - Rakefile
83
+ - Readme.md
84
+ - bin/console
85
+ - lib/metacrunch/mab2.rb
86
+ - lib/metacrunch/mab2/builder.rb
87
+ - lib/metacrunch/mab2/cli.rb
88
+ - lib/metacrunch/mab2/document.rb
89
+ - lib/metacrunch/mab2/document/controlfield.rb
90
+ - lib/metacrunch/mab2/document/datafield.rb
91
+ - lib/metacrunch/mab2/document/datafield_set.rb
92
+ - lib/metacrunch/mab2/document/jruby/mab_xml_parser.rb
93
+ - lib/metacrunch/mab2/document/mab_xml_parser.rb
94
+ - lib/metacrunch/mab2/document/subfield.rb
95
+ - lib/metacrunch/mab2/document/subfield_set.rb
96
+ - lib/metacrunch/mab2/version.rb
97
+ - lib/metacrunch/mab2/xml_builder.rb
98
+ - metacrunch-mab2.gemspec
99
+ homepage: http://github.com/ubpb/metacrunch-mab2
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.4.8
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: MAB2 tools for metacrunch
123
+ test_files: []