ezid-client 0.10.0 → 0.11.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/ezid/metadata.rb +29 -33
- data/spec/unit/metadata_spec.rb +2 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aadca7c8873de91162829915f9f1eb4a071505a2
|
4
|
+
data.tar.gz: ded517161bf42799607d34c27caf5297baa60f24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8bc419ec35cbd1b0b467c3ea1e71c01066b4b0aa604bd0ac3d5e9339c91b5a74693171cd6c0a478284986fbcb6cdc3659fc6d902a77b9e2d9a601356dc1185b
|
7
|
+
data.tar.gz: 3a20ac6400849df2dd6ce85c422e693627357f16c54de512c812a73a886545599c328d10ae38bff7a02a15f9d307f4d4d05d104ece70e05675ad039f7974396e
|
data/README.md
CHANGED
@@ -113,7 +113,7 @@ I, [2014-12-04T15:12:48.853964 #86734] INFO -- : EZID DELETE ark:/99999/fk4n58p
|
|
113
113
|
|
114
114
|
## Metadata handling
|
115
115
|
|
116
|
-
|
116
|
+
Accessors are provided to ease the use of EZID [reserved metadata elements](http://ezid.cdlib.org/doc/apidoc.html#internal-metadata) and [metadata profiles](http://ezid.cdlib.org/doc/apidoc.html#metadata-profiles):
|
117
117
|
|
118
118
|
**Reserved elements** can be read and written using the name of the element without the leading underscore:
|
119
119
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.11.0
|
data/lib/ezid/metadata.rb
CHANGED
@@ -37,7 +37,7 @@ module Ezid
|
|
37
37
|
LINE_ENDING_RE = /\r?\n/
|
38
38
|
|
39
39
|
# A metadata element
|
40
|
-
Element = Struct.new(:name, :writer)
|
40
|
+
Element = Struct.new(:name, :reader, :writer)
|
41
41
|
|
42
42
|
# Metadata profiles
|
43
43
|
PROFILES = {
|
@@ -78,11 +78,19 @@ module Ezid
|
|
78
78
|
|
79
79
|
def self.register_element(accessor, opts={})
|
80
80
|
if element = registered_elements[accessor.to_sym]
|
81
|
-
raise Error, "Element \"#{element.name}\"
|
81
|
+
raise Error, "Element \"#{element.name}\" is registered under the accessor :#{accessor}."
|
82
82
|
end
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
element = Element.new(opts.fetch(:name, accessor.to_s))
|
84
|
+
element.reader = define_reader(accessor, element.name)
|
85
|
+
element.writer = define_writer(accessor, element.name) if opts.fetch(:writer, true)
|
86
|
+
registered_elements[accessor.to_sym] = element
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.unregister_element(accessor)
|
90
|
+
element = registered_elements.delete(accessor)
|
91
|
+
raise Error, "No element is registered under the accessor :#{accessor}." unless element
|
92
|
+
remove_method(element.reader)
|
93
|
+
remove_method(element.writer) if element.writer
|
86
94
|
end
|
87
95
|
|
88
96
|
def self.register_profile_element(profile, element)
|
@@ -107,9 +115,24 @@ module Ezid
|
|
107
115
|
end
|
108
116
|
end
|
109
117
|
|
118
|
+
def self.define_reader(accessor, element)
|
119
|
+
define_method(accessor) do
|
120
|
+
reader(element)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.define_writer(accessor, element)
|
125
|
+
define_method("#{accessor}=") do |value|
|
126
|
+
writer(element, value)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
110
130
|
private_class_method :register_elements,
|
111
131
|
:register_reserved_elements,
|
112
|
-
:register_profile_elements
|
132
|
+
:register_profile_elements,
|
133
|
+
:unregister_element,
|
134
|
+
:define_reader,
|
135
|
+
:define_writer
|
113
136
|
|
114
137
|
def initialize(data={})
|
115
138
|
super(coerce(data))
|
@@ -132,24 +155,8 @@ module Ezid
|
|
132
155
|
self.class.registered_elements
|
133
156
|
end
|
134
157
|
|
135
|
-
protected
|
136
|
-
|
137
|
-
def method_missing(method, *args)
|
138
|
-
return registered_reader(method) if registered_reader?(method, *args)
|
139
|
-
return registered_writer(method, *args) if registered_writer?(method, *args)
|
140
|
-
super
|
141
|
-
end
|
142
|
-
|
143
158
|
private
|
144
159
|
|
145
|
-
def registered_reader?(accessor, *args)
|
146
|
-
args.empty? && registered_elements.include?(accessor)
|
147
|
-
end
|
148
|
-
|
149
|
-
def registered_reader(accessor)
|
150
|
-
reader registered_elements[accessor].name
|
151
|
-
end
|
152
|
-
|
153
160
|
def reader(element)
|
154
161
|
value = self[element]
|
155
162
|
if RESERVED_TIME_ELEMENTS.include?(element)
|
@@ -159,17 +166,6 @@ module Ezid
|
|
159
166
|
value
|
160
167
|
end
|
161
168
|
|
162
|
-
def registered_writer?(method, *args)
|
163
|
-
return false unless method.to_s.end_with?("=") && args.size == 1
|
164
|
-
accessor = method.to_s.sub("=", "").to_sym
|
165
|
-
registered_elements.include?(accessor) && registered_elements[accessor].writer
|
166
|
-
end
|
167
|
-
|
168
|
-
def registered_writer(method, *args)
|
169
|
-
accessor = method.to_s.sub("=", "").to_sym
|
170
|
-
writer(registered_elements[accessor].name, *args)
|
171
|
-
end
|
172
|
-
|
173
169
|
def writer(element, value)
|
174
170
|
self[element] = value
|
175
171
|
end
|
data/spec/unit/metadata_spec.rb
CHANGED
@@ -68,10 +68,8 @@ module Ezid
|
|
68
68
|
|
69
69
|
describe "custom element" do
|
70
70
|
let(:element) { Metadata::Element.new("custom", true) }
|
71
|
-
before
|
72
|
-
|
73
|
-
allow(subject.registered_elements).to receive(:[]).with(:custom) { element }
|
74
|
-
end
|
71
|
+
before { described_class.register_element :custom }
|
72
|
+
after { described_class.send(:unregister_element, :custom) }
|
75
73
|
it "should have a reader" do
|
76
74
|
expect(subject).to receive(:reader).with("custom")
|
77
75
|
subject.custom
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ezid-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Chandek-Stark
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|