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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a8c3c449a9447e7176421f705a537c9919442a9
4
- data.tar.gz: 9d16f67d27605bc7066f6dd3df2e9a9be5dc4e26
3
+ metadata.gz: aadca7c8873de91162829915f9f1eb4a071505a2
4
+ data.tar.gz: ded517161bf42799607d34c27caf5297baa60f24
5
5
  SHA512:
6
- metadata.gz: 94f6cf47f52bb030e0f7cf4442ef5aedbcb31f9348ebb1e528a11e9727b2a3e94260002ff43dd2fb1240fdeadbc3b2adde341fa83e5ad6b28f44e9e0f982eedd
7
- data.tar.gz: 4a70172958a729e05c2b5ba2d5a51081e5a4865135c9107111045a9993f9e5881f10d3ca50d0b180d2f1b73cc383913955111beeac1660da9f6635f17754ef01
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
- In order to ease metadata management access to 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) is provided through `#method_missing` according to these heuristics:
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.10.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}\" already registered under key :#{accessor}"
81
+ raise Error, "Element \"#{element.name}\" is registered under the accessor :#{accessor}."
82
82
  end
83
- writer = opts.fetch(:writer, true)
84
- name = opts.fetch(:name, accessor.to_s)
85
- registered_elements[accessor.to_sym] = Element.new(name, writer).freeze
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
@@ -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 do
72
- allow(subject.registered_elements).to receive(:include?).with(:custom) { true }
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.10.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-20 00:00:00.000000000 Z
11
+ date: 2014-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler