ezid-client 1.3.0 → 1.4.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 +25 -48
- data/VERSION +1 -1
- data/ezid-client.gemspec +1 -0
- data/lib/ezid/batch_download.rb +0 -1
- data/lib/ezid/client.rb +0 -1
- data/lib/ezid/error.rb +8 -0
- data/lib/ezid/identifier.rb +149 -50
- data/lib/ezid/metadata.rb +43 -17
- data/lib/ezid/proxy_identifier.rb +2 -0
- data/lib/ezid/responses/response.rb +12 -1
- data/spec/integration/identifier_spec.rb +28 -32
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/batch_download_spec.rb +5 -0
- data/spec/unit/identifier_spec.rb +278 -212
- metadata +18 -3
- data/lib/ezid/reserved_metadata.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2baebf2aca4cada19d44f70e2e6614ad9e206ea
|
4
|
+
data.tar.gz: 1cbc73e6739a91a88d2cd3a7f5698d8dab1bfa3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 042582d5276928c9444bf60eb1d1ed851795d072145c2e33e13d8a08d25be121bb797992ed941a2e1eba5cae1a9f980d26c24196f4ffa59edbf9a3d1d5a46161
|
7
|
+
data.tar.gz: f6be1c6c06c59f8aec88b78664927aa0fbd8c92d090f920ad5c4c9edf99202c397f6a8444b2210da12c1f5c1ebc7240401286dc09fb447b7ef9f9ee65cccc414
|
data/README.md
CHANGED
@@ -27,17 +27,17 @@ Or install it yourself as:
|
|
27
27
|
|
28
28
|
[Mint an identifier on a shoulder](http://ezid.cdlib.org/doc/apidoc.html#operation-mint-identifier)
|
29
29
|
|
30
|
+
*Added in v1.4.0:* `Ezid::Identifier.mint` class method.
|
31
|
+
|
30
32
|
```
|
31
|
-
>> identifier = Ezid::Identifier.
|
32
|
-
I, [
|
33
|
-
|
34
|
-
=> #<Ezid::Identifier id="ark:/99999/fk4rx9d523" status="public" target="http://ezid.cdlib.org/id/ark:/99999/fk4rx9d523" created="2014-12-04 20:06:02 UTC">
|
35
|
-
>> identifier.id
|
36
|
-
=> "ark:/99999/fk4rx9d523"
|
33
|
+
>> identifier = Ezid::Identifier.mint("ark:/99999/fk4")
|
34
|
+
I, [2016-03-01T22:20:08.505323 #35148] INFO -- : EZID MintIdentifier -- success: ark:/99999/fk4tq65d6k
|
35
|
+
=> #<Ezid::Identifier id=ark:/99999/fk4tq65d6k>
|
37
36
|
>> identifier.status
|
37
|
+
I, [2016-03-01T22:20:22.323650 #35148] INFO -- : EZID GetIdentifierMetadata -- success: ark:/99999/fk4tq65d6k
|
38
38
|
=> "public"
|
39
39
|
>> identifier.target
|
40
|
-
=> "http://ezid.cdlib.org/id/ark:/99999/
|
40
|
+
=> "http://ezid.cdlib.org/id/ark:/99999/fk4tq65d6k"
|
41
41
|
```
|
42
42
|
|
43
43
|
A default shoulder can be configured:
|
@@ -59,19 +59,19 @@ end
|
|
59
59
|
New identifiers will then be minted on the default shoulder when a shoulder is not specified:
|
60
60
|
|
61
61
|
```
|
62
|
-
>> identifier = Ezid::Identifier.
|
62
|
+
>> identifier = Ezid::Identifier.mint
|
63
63
|
I, [2014-12-09T11:22:34.499860 #32279] INFO -- : EZID MintIdentifier -- success: ark:/99999/fk43f4wd4v
|
64
|
-
|
65
|
-
=> #<Ezid::Identifier id="ark:/99999/fk43f4wd4v" status="public" target="http://ezid.cdlib.org/id/ark:/99999/fk43f4wd4v" created="2014-12-09 16:22:35 UTC">
|
64
|
+
=> #<Ezid::Identifier id="ark:/99999/fk43f4wd4v">
|
66
65
|
```
|
67
66
|
|
68
67
|
[Create a specific identifier](http://ezid.cdlib.org/doc/apidoc.html#operation-create-identifier)
|
69
68
|
|
69
|
+
*Changed in v1.4.0:* `Ezid::Identifier.create` now expects the first argument to be the identifier (String) to create; the second optional argument is a hash of metadata elements. Passing the identifier in an `:id` hash option is deprecated and will be removed in v2.0. The `:shoulder` hash option is likewise deprecated; use `Ezid::Identifier.mint(shoulder, metadata)` instead.
|
70
|
+
|
70
71
|
```
|
71
|
-
>> identifier = Ezid::Identifier.create(
|
72
|
+
>> identifier = Ezid::Identifier.create("ark:/99999/fk4rx9d523/12345")
|
72
73
|
I, [2014-12-09T11:21:42.077297 #32279] INFO -- : EZID CreateIdentifier -- success: ark:/99999/fk4rx9d523/12345
|
73
|
-
|
74
|
-
=> #<Ezid::Identifier id="ark:/99999/fk4rx9d523/12345" status="public" target="http://ezid.cdlib.org/id/ark:/99999/fk4rx9d523/12345" created="2014-12-09 16:21:42 UTC">
|
74
|
+
=> #<Ezid::Identifier id="ark:/99999/fk4rx9d523/12345">
|
75
75
|
```
|
76
76
|
|
77
77
|
**Retrieve** (Get Metadata)
|
@@ -91,30 +91,34 @@ I, [2014-12-04T15:07:00.648676 #86655] INFO -- : EZID GetIdentifierMetadata --
|
|
91
91
|
=> "http://example.com"
|
92
92
|
>> identifier.save
|
93
93
|
I, [2014-12-09T11:24:26.321801 #32279] INFO -- : EZID ModifyIdentifier -- success: ark:/99999/fk43f4wd4v
|
94
|
-
|
95
|
-
=> #<Ezid::Identifier id="ark:/99999/fk43f4wd4v" status="public" target="http://example.com" created="2014-12-09 16:22:35 UTC">
|
94
|
+
=> #<Ezid::Identifier id="ark:/99999/fk43f4wd4v">
|
96
95
|
>> identifier.target
|
96
|
+
I, [2014-12-09T11:24:27.039288 #32279] INFO -- : EZID GetIdentifierMetadata -- success: ark:/99999/fk43f4wd4v
|
97
97
|
=> "http://example.com"
|
98
98
|
```
|
99
99
|
|
100
|
+
*Added in v1.4.0:* `Ezid::Identifier.modify(id, metadata)` class method. In support of more efficient updating of known identifiers, this method skips the GetIdentifierMetadata request used by `.find`. The operation will raise the `Ezid::IdentifierNotFoundError` if the EZID identifier does not exist.
|
101
|
+
|
100
102
|
**Delete**
|
101
103
|
|
102
104
|
*Identifier status must be "reserved" to delete.* http://ezid.cdlib.org/doc/apidoc.html#operation-delete-identifier
|
103
105
|
|
104
106
|
```
|
105
|
-
>> identifier = Ezid::Identifier.
|
106
|
-
I, [
|
107
|
-
|
108
|
-
=> #<Ezid::Identifier id="ark:/99999/fk4n58pc0r" status="reserved" target="http://ezid.cdlib.org/id/ark:/99999/fk4n58pc0r" created="2014-12-04 20:12:39 UTC">
|
107
|
+
>> identifier = Ezid::Identifier.mint("ark:/99999/fk4", status: "reserved")
|
108
|
+
I, [2016-03-01T22:26:08.645858 #36701] INFO -- : EZID MintIdentifier -- success: ark:/99999/fk4pz5fm1b
|
109
|
+
=> #<Ezid::Identifier id=ark:/99999/fk4pz5fm1b>
|
109
110
|
>> identifier.delete
|
110
|
-
I, [
|
111
|
-
|
111
|
+
I, [2016-03-01T22:26:14.829731 #36701] INFO -- : EZID GetIdentifierMetadata -- success: ark:/99999/fk4pz5fm1b
|
112
|
+
I, [2016-03-01T22:26:15.711390 #36701] INFO -- : EZID DeleteIdentifier -- success: ark:/99999/fk4pz5fm1b
|
113
|
+
=> #<Ezid::Identifier id=ark:/99999/fk4pz5fm1b [DELETED]>
|
112
114
|
```
|
113
115
|
|
114
116
|
## Batch Download
|
115
117
|
|
116
118
|
See http://ezid.cdlib.org/doc/apidoc.html#parameters. Repeated values should be given as an array value for the parameter key.
|
117
119
|
|
120
|
+
*Added in v1.3.0:* `Ezid::BatchDownload` class.
|
121
|
+
|
118
122
|
```
|
119
123
|
>> batch = Ezid::BatchDownload.new(:csv)
|
120
124
|
=> #<Ezid::BatchDownload format=:csv>
|
@@ -161,33 +165,6 @@ Notes:
|
|
161
165
|
|
162
166
|
Accessors are also implemented for the `crossref`, `datacite`, and `erc` elements as described in the EZID API documentation.
|
163
167
|
|
164
|
-
**Setting default metadata values**
|
165
|
-
|
166
|
-
Default metadata values can be set:
|
167
|
-
|
168
|
-
```ruby
|
169
|
-
Ezid::Client.configure do |config|
|
170
|
-
# set multiple defaults with a hash
|
171
|
-
config.identifier.defaults = {status: "reserved", profile: "dc"}
|
172
|
-
# or set individual elements
|
173
|
-
config.identifier.defaults[:status] = "reserved"
|
174
|
-
config.identifier.defaults[:profile] = "dc"
|
175
|
-
end
|
176
|
-
```
|
177
|
-
|
178
|
-
Then new identifiers will receive the defaults:
|
179
|
-
|
180
|
-
```
|
181
|
-
>> identifier = Ezid::Identifier.create(shoulder: "ark:/99999/fk4")
|
182
|
-
I, [2014-12-09T11:38:37.335136 #32279] INFO -- : EZID MintIdentifier -- success: ark:/99999/fk4zs2w500
|
183
|
-
I, [2014-12-09T11:38:38.153546 #32279] INFO -- : EZID GetIdentifierMetadata -- success: ark:/99999/fk4zs2w500
|
184
|
-
=> #<Ezid::Identifier id="ark:/99999/fk4zs2w500" status="reserved" target="http://ezid.cdlib.org/id/ark:/99999/fk4zs2w500" created="2014-12-09 16:38:38 UTC">
|
185
|
-
>> identifier.profile
|
186
|
-
=> "dc"
|
187
|
-
>> identifier.status
|
188
|
-
=> "reserved"
|
189
|
-
```
|
190
|
-
|
191
168
|
## Authentication
|
192
169
|
|
193
170
|
Credentials can be provided in any -- or a combination -- of these ways:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
data/ezid-client.gemspec
CHANGED
data/lib/ezid/batch_download.rb
CHANGED
data/lib/ezid/client.rb
CHANGED
@@ -6,7 +6,6 @@ require_relative "configuration"
|
|
6
6
|
require_relative "session"
|
7
7
|
require_relative "metadata"
|
8
8
|
require_relative "identifier"
|
9
|
-
require_relative "proxy_identifier"
|
10
9
|
require_relative "batch_download"
|
11
10
|
|
12
11
|
Dir[File.expand_path("../responses/*.rb", __FILE__)].each { |m| require m }
|
data/lib/ezid/error.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
1
|
module Ezid
|
2
2
|
class Error < ::RuntimeError; end
|
3
|
+
|
4
|
+
# The requested identifier was not found
|
5
|
+
class IdentifierNotFoundError < Error; end
|
6
|
+
|
7
|
+
# The requested action is not allowed
|
8
|
+
class NotAllowedError < Error; end
|
9
|
+
|
10
|
+
class DeletionError < Error; end
|
3
11
|
end
|
data/lib/ezid/identifier.rb
CHANGED
@@ -6,53 +6,111 @@ module Ezid
|
|
6
6
|
#
|
7
7
|
class Identifier
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
private :state, :state=, :id=
|
13
|
-
|
14
|
-
# Attributes to display on inspect
|
15
|
-
INSPECT_ATTRS = %w( id status target created ).freeze
|
9
|
+
attr_accessor :id, :shoulder, :persisted, :deleted
|
10
|
+
private :persisted=, :persisted, :deleted=, :deleted
|
16
11
|
|
17
12
|
class << self
|
18
13
|
attr_accessor :defaults
|
19
14
|
|
20
15
|
# Creates or mints an identifier (depending on arguments)
|
21
16
|
# @see #save
|
17
|
+
# @overload create(id, metadata=nil)
|
18
|
+
# Creates an identifier
|
19
|
+
# @param id [String] the identifier to create
|
20
|
+
# @param metadata [Hash] the metadata to set on the identifier
|
21
|
+
# @overload create(metadata=nil)
|
22
|
+
# Mints an identifier
|
23
|
+
# @deprecated Use {.mint} instead
|
24
|
+
# @param metadata [Hash] the metadata to set on the identifier
|
25
|
+
# @return [Ezid::Identifier] the new identifier
|
26
|
+
# @raise [Ezid::Error]
|
27
|
+
def create(*args)
|
28
|
+
raise ArgumentError, "`mint` receives 0-2 arguments." if args.size > 2
|
29
|
+
if args.first.is_a?(Hash)
|
30
|
+
warn "[DEPRECATION] Sending a hash as the first argument to `create` is deprecated and will raise an exception in 2.0. Use `create(id, metadata)` or `mint(metadata)` instead. (called from #{caller.first})"
|
31
|
+
metadata = args.first
|
32
|
+
id = metadata.delete(:id)
|
33
|
+
else
|
34
|
+
id, metadata = args
|
35
|
+
end
|
36
|
+
if id.nil?
|
37
|
+
warn "[DEPRECATION] Calling `create` without an id will raise an exception in 2.0. Use `mint` instead. (called from #{caller.first})"
|
38
|
+
shoulder = metadata.delete(:shoulder)
|
39
|
+
mint(shoulder, metadata)
|
40
|
+
else
|
41
|
+
new(id, metadata) { |i| i.save }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Mints a new identifier
|
46
|
+
# @overload mint(shoulder, metadata=nil)
|
47
|
+
# @param shoulder [String] the EZID shoulder on which to mint
|
48
|
+
# @param metadata [Hash] the metadata to set on the identifier
|
49
|
+
# @overload mint(metadata=nil)
|
50
|
+
# @param metadata [Hash] the metadata to set on the identifier
|
22
51
|
# @return [Ezid::Identifier] the new identifier
|
23
52
|
# @raise [Ezid::Error]
|
24
|
-
def
|
25
|
-
|
26
|
-
|
53
|
+
def mint(*args)
|
54
|
+
raise ArgumentError, "`mint` receives 0-2 arguments." if args.size > 2
|
55
|
+
metadata = args.last.is_a?(Hash) ? args.pop : nil
|
56
|
+
new(metadata) do |i|
|
57
|
+
i.shoulder = args.first
|
58
|
+
i.save
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Modifies the metadata of an existing identifier.
|
63
|
+
# @param id [String] the EZID identifier
|
64
|
+
# @param metadata [Hash] the metadata to update on the identifier
|
65
|
+
# @return [Ezid::Identifier] the identifier
|
66
|
+
# @raise [Ezid::IdentifierNotFoundError]
|
67
|
+
def modify(id, metadata)
|
68
|
+
i = allocate
|
69
|
+
i.id = id
|
70
|
+
i.update_metadata(metadata)
|
71
|
+
i.modify!
|
27
72
|
end
|
28
73
|
|
29
74
|
# Retrieves an identifier
|
75
|
+
# @param id [String] the EZID identifier to find
|
30
76
|
# @return [Ezid::Identifier] the identifier
|
31
|
-
# @raise [Ezid::
|
77
|
+
# @raise [Ezid::IdentifierNotFoundError] if the identifier does not exist in EZID
|
32
78
|
def find(id)
|
33
|
-
|
34
|
-
|
79
|
+
i = allocate
|
80
|
+
i.id = id
|
81
|
+
i.load_metadata
|
35
82
|
end
|
36
83
|
end
|
37
84
|
|
38
85
|
self.defaults = {}
|
39
86
|
|
40
|
-
def initialize(args
|
41
|
-
|
42
|
-
|
43
|
-
@
|
44
|
-
|
45
|
-
|
46
|
-
|
87
|
+
def initialize(*args)
|
88
|
+
raise ArgumentError, "`new` receives 0-2 arguments." if args.size > 2
|
89
|
+
data = args.last.is_a?(Hash) ? args.pop : nil
|
90
|
+
@id = args.first
|
91
|
+
apply_default_metadata
|
92
|
+
if data
|
93
|
+
if shoulder = data.delete(:shoulder)
|
94
|
+
warn "[DEPRECATION] The `:shoulder` hash option is deprecated and will raise an exception in 2.0. Use `Ezid::Identifier.mint(shoulder, metadata)` to mint an identifier. (called by #{caller.first})"
|
95
|
+
@shoulder = shoulder
|
96
|
+
end
|
97
|
+
if anvl = data.delete(:metadata)
|
98
|
+
update_metadata(anvl)
|
99
|
+
end
|
100
|
+
update_metadata(data)
|
101
|
+
end
|
102
|
+
yield self if block_given?
|
47
103
|
end
|
48
104
|
|
49
105
|
def inspect
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
106
|
+
id_val = if id.nil?
|
107
|
+
"NEW"
|
108
|
+
elsif deleted?
|
109
|
+
"#{id} [DELETED]"
|
110
|
+
else
|
111
|
+
id
|
112
|
+
end
|
113
|
+
"#<#{self.class.name} id=#{id_val}>"
|
56
114
|
end
|
57
115
|
|
58
116
|
def to_s
|
@@ -60,11 +118,16 @@ module Ezid
|
|
60
118
|
end
|
61
119
|
|
62
120
|
# Returns the identifier metadata
|
63
|
-
# @param load [Boolean] - flag to load the metadata from EZID if stale (default: `true`)
|
64
121
|
# @return [Ezid::Metadata] the metadata
|
65
|
-
def metadata(
|
66
|
-
|
67
|
-
|
122
|
+
def metadata(_=nil)
|
123
|
+
if !_.nil?
|
124
|
+
warn "[DEPRECATION] The parameter of `metadata` is deprecated and will be removed in 2.0. (called from #{caller.first})"
|
125
|
+
end
|
126
|
+
@metadata ||= Metadata.new
|
127
|
+
end
|
128
|
+
|
129
|
+
def remote_metadata
|
130
|
+
@remote_metadata ||= Metadata.new
|
68
131
|
end
|
69
132
|
|
70
133
|
# Persist the identifer and/or metadata to EZID.
|
@@ -77,27 +140,41 @@ module Ezid
|
|
77
140
|
def save
|
78
141
|
raise Error, "Cannot save a deleted identifier." if deleted?
|
79
142
|
persist
|
80
|
-
|
143
|
+
reset_metadata
|
144
|
+
self
|
145
|
+
end
|
146
|
+
|
147
|
+
# Force a modification of the EZID identifier -- i.e.,
|
148
|
+
# assumes previously persisted without confirmation.
|
149
|
+
# @return [Ezid::Identifier] the identifier
|
150
|
+
# @raise [Ezid::Error] if `id` is nil
|
151
|
+
# @raise [Ezid::IdentifierNotFoundError] if EZID identifier does not exist.
|
152
|
+
def modify!
|
153
|
+
raise Error, "Cannot modify an identifier without and id." if id.nil?
|
154
|
+
modify
|
155
|
+
persists!
|
156
|
+
reset_metadata
|
157
|
+
self
|
81
158
|
end
|
82
159
|
|
83
160
|
# Updates the metadata
|
84
161
|
# @param attrs [Hash] the metadata
|
85
162
|
# @return [Ezid::Identifier] the identifier
|
86
163
|
def update_metadata(attrs={})
|
87
|
-
|
164
|
+
metadata.update(attrs)
|
88
165
|
self
|
89
166
|
end
|
90
167
|
|
91
168
|
# Is the identifier persisted?
|
92
169
|
# @return [Boolean]
|
93
170
|
def persisted?
|
94
|
-
|
171
|
+
!!persisted
|
95
172
|
end
|
96
173
|
|
97
174
|
# Has the identifier been deleted?
|
98
175
|
# @return [Boolean]
|
99
176
|
def deleted?
|
100
|
-
|
177
|
+
!!deleted
|
101
178
|
end
|
102
179
|
|
103
180
|
# Updates the metadata and saves the identifier
|
@@ -111,24 +188,26 @@ module Ezid
|
|
111
188
|
|
112
189
|
# @deprecated Use {#load_metadata} instead.
|
113
190
|
def reload
|
114
|
-
warn "[DEPRECATION] `reload` is deprecated and will be removed in version 2.0. Use `load_metadata` instead."
|
191
|
+
warn "[DEPRECATION] `reload` is deprecated and will be removed in version 2.0. Use `load_metadata` instead. (called from #{caller.first})"
|
115
192
|
load_metadata
|
116
193
|
end
|
117
194
|
|
118
|
-
# Loads the metadata from EZID
|
195
|
+
# Loads the metadata from EZID
|
119
196
|
# @return [Ezid::Identifier] the identifier
|
120
197
|
# @raise [Ezid::Error]
|
121
198
|
def load_metadata
|
122
199
|
response = client.get_identifier_metadata(id)
|
123
|
-
self.
|
124
|
-
|
200
|
+
# self.remote_metadata = Metadata.new(response.metadata)
|
201
|
+
remote_metadata.replace(response.metadata)
|
202
|
+
persists!
|
125
203
|
self
|
126
204
|
end
|
127
205
|
|
128
206
|
# Empties the (local) metadata (changes will be lost!)
|
129
207
|
# @return [Ezid::Identifier] the identifier
|
130
208
|
def reset
|
131
|
-
|
209
|
+
warn "[DEPRECATION] `reset` is deprecated and will be removed in 2.0. Use `reset_metadata` instead. (called from #{caller.first})"
|
210
|
+
reset_metadata
|
132
211
|
self
|
133
212
|
end
|
134
213
|
|
@@ -139,8 +218,10 @@ module Ezid
|
|
139
218
|
def delete
|
140
219
|
raise Error, "Only persisted, reserved identifiers may be deleted: #{inspect}." unless deletable?
|
141
220
|
client.delete_identifier(id)
|
142
|
-
|
143
|
-
|
221
|
+
reset_metadata
|
222
|
+
self.deleted = true
|
223
|
+
self.persisted = false
|
224
|
+
self
|
144
225
|
end
|
145
226
|
|
146
227
|
# Is the identifier reserved?
|
@@ -190,22 +271,32 @@ module Ezid
|
|
190
271
|
self.status = Status::PUBLIC
|
191
272
|
end
|
192
273
|
|
274
|
+
def client
|
275
|
+
@client ||= Client.new
|
276
|
+
end
|
277
|
+
|
278
|
+
def reset_metadata
|
279
|
+
metadata.clear unless metadata.empty?
|
280
|
+
remote_metadata.clear unless remote_metadata.empty?
|
281
|
+
end
|
282
|
+
|
193
283
|
protected
|
194
284
|
|
195
|
-
def method_missing(
|
196
|
-
|
285
|
+
def method_missing(*args)
|
286
|
+
local_or_remote_metadata(*args)
|
197
287
|
rescue NoMethodError
|
198
288
|
super
|
199
289
|
end
|
200
290
|
|
201
291
|
private
|
202
292
|
|
203
|
-
def
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
293
|
+
def local_or_remote_metadata(*args)
|
294
|
+
value = metadata.send(*args)
|
295
|
+
if value.nil? && persisted?
|
296
|
+
load_metadata if remote_metadata.empty?
|
297
|
+
value = remote_metadata.send(*args)
|
298
|
+
end
|
299
|
+
value
|
209
300
|
end
|
210
301
|
|
211
302
|
def modify
|
@@ -227,7 +318,15 @@ module Ezid
|
|
227
318
|
|
228
319
|
def persist
|
229
320
|
persisted? ? modify : create_or_mint
|
230
|
-
|
321
|
+
persists!
|
322
|
+
end
|
323
|
+
|
324
|
+
def persists!
|
325
|
+
self.persisted = true
|
326
|
+
end
|
327
|
+
|
328
|
+
def apply_default_metadata
|
329
|
+
update_metadata(self.class.defaults)
|
231
330
|
end
|
232
331
|
|
233
332
|
end
|