ezid-client 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|