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