rubydora 1.6.3 → 1.6.4
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/VERSION +1 -1
- data/lib/rubydora/datastream.rb +6 -0
- data/lib/rubydora/fedora_url_helpers.rb +21 -2
- data/lib/rubydora/repository.rb +5 -1
- data/lib/rubydora/rest_api_client.rb +59 -5
- data/rubydora.gemspec +1 -1
- data/spec/lib/datastream_spec.rb +39 -0
- data/spec/lib/integration_test_spec.rb +31 -31
- data/spec/lib/repository_spec.rb +3 -1
- data/spec/lib/rest_api_client_spec.rb +60 -35
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 763537753ba63badc5604ff8c0e8973d2c9c66e2
|
4
|
+
data.tar.gz: 6ba0d875a73f459ef3d77d426eaebbc0992b50a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d4a724ddddd121e7276a6b001a633dca5d1b233c72bf7c724740f38f455cf1a44c268e3dc604638b0700c54981ce816a314fa8e827a1279d6bae928188c7a05
|
7
|
+
data.tar.gz: 5abd3a54fb74151c19dd37df480b694447a6a85c7e70e89c3d720023e128afe391c4c8d81c0209db80465023477ccf35f09d4f93e6da86f6ea7e699a9c25580a
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.4
|
data/lib/rubydora/datastream.rb
CHANGED
@@ -318,6 +318,12 @@ module Rubydora
|
|
318
318
|
end
|
319
319
|
end
|
320
320
|
|
321
|
+
def current_version?
|
322
|
+
return true if new?
|
323
|
+
vers = versions
|
324
|
+
return vers.empty? || dsVersionID == vers.first.dsVersionID
|
325
|
+
end
|
326
|
+
|
321
327
|
# Add datastream to Fedora
|
322
328
|
# @return [Rubydora::Datastream]
|
323
329
|
def create
|
@@ -12,6 +12,10 @@ module Rubydora
|
|
12
12
|
"#{base}" + (("?#{options.map { |key, value| "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}"}.join("&") }" if options and not options.empty?) || '')
|
13
13
|
end
|
14
14
|
|
15
|
+
def describe_repository_url options = nil
|
16
|
+
url_for("describe", options)
|
17
|
+
end
|
18
|
+
|
15
19
|
# Generate a base object REST API endpoint URI
|
16
20
|
# @param [String] pid
|
17
21
|
# @param [Hash] options to convert to URL parameters
|
@@ -20,6 +24,10 @@ module Rubydora
|
|
20
24
|
url_for("objects" + (("/#{CGI::escape(pid.to_s.gsub('info:fedora/', ''))}" if pid) || ''), options)
|
21
25
|
end
|
22
26
|
|
27
|
+
def new_object_url options = nil
|
28
|
+
object_url "new", options
|
29
|
+
end
|
30
|
+
|
23
31
|
# @param [Hash] options to convert to URL parameters
|
24
32
|
# @return [String] URI
|
25
33
|
def next_pid_url options = nil
|
@@ -48,9 +56,20 @@ module Rubydora
|
|
48
56
|
# @param [String] dsid
|
49
57
|
# @param [Hash] options to convert to URL parameters
|
50
58
|
# @return [String] URI
|
51
|
-
def datastream_url pid, dsid
|
59
|
+
def datastream_url pid, dsid, options = nil
|
60
|
+
raise "" unless pid and dsid
|
61
|
+
url_for(object_url(pid) + "/datastreams/#{CGI::escape(dsid)}", options)
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# Generate a base datastream REST API endpoint URI
|
66
|
+
# @param [String] pid
|
67
|
+
# @param [String] dsid
|
68
|
+
# @param [Hash] options to convert to URL parameters
|
69
|
+
# @return [String] URI
|
70
|
+
def datastreams_url pid, options = nil
|
52
71
|
raise "" unless pid
|
53
|
-
url_for(object_url(pid) + "/datastreams"
|
72
|
+
url_for(object_url(pid) + "/datastreams", options)
|
54
73
|
end
|
55
74
|
|
56
75
|
# @param [String] pid
|
data/lib/rubydora/repository.rb
CHANGED
@@ -24,6 +24,10 @@ module Rubydora
|
|
24
24
|
DigitalObject.find(pid, self)
|
25
25
|
end
|
26
26
|
|
27
|
+
def find_or_initialize pid
|
28
|
+
DigitalObject.find_or_initialize(pid, self)
|
29
|
+
end
|
30
|
+
|
27
31
|
# High-level access to the Fedora find_objects API
|
28
32
|
#
|
29
33
|
# @params [String] query
|
@@ -65,7 +69,7 @@ module Rubydora
|
|
65
69
|
# @return [Hash]
|
66
70
|
def profile
|
67
71
|
@profile ||= begin
|
68
|
-
profile_xml =
|
72
|
+
profile_xml = self.describe.strip
|
69
73
|
profile_xml.gsub! '<fedoraRepository', '<fedoraRepository xmlns="http://www.fedora.info/definitions/1/0/access/"' unless profile_xml =~ /xmlns=/
|
70
74
|
doc = Nokogiri::XML(profile_xml)
|
71
75
|
xmlns = { 'access' => "http://www.fedora.info/definitions/1/0/access/" }
|
@@ -9,7 +9,9 @@ module Rubydora
|
|
9
9
|
|
10
10
|
include Rubydora::FedoraUrlHelpers
|
11
11
|
extend ActiveSupport::Concern
|
12
|
-
include ActiveSupport::Benchmarkable
|
12
|
+
include ActiveSupport::Benchmarkable
|
13
|
+
extend Deprecation
|
14
|
+
|
13
15
|
|
14
16
|
|
15
17
|
VALID_CLIENT_OPTIONS = [:user, :password, :timeout, :open_timeout, :ssl_client_cert, :ssl_client_key]
|
@@ -59,6 +61,14 @@ module Rubydora
|
|
59
61
|
end
|
60
62
|
end
|
61
63
|
|
64
|
+
def describe options = {}
|
65
|
+
query_options = options.dup
|
66
|
+
query_options[:xml] ||= 'true'
|
67
|
+
client[describe_repository_url(query_options)].get
|
68
|
+
rescue Exception => exception
|
69
|
+
rescue_with_handler(exception) || raise
|
70
|
+
end
|
71
|
+
|
62
72
|
# {include:RestApiClient::API_DOCUMENTATION}
|
63
73
|
# @param [Hash] options
|
64
74
|
# @return [String]
|
@@ -106,7 +116,12 @@ module Rubydora
|
|
106
116
|
# @return [String]
|
107
117
|
def ingest options = {}
|
108
118
|
query_options = options.dup
|
109
|
-
pid = query_options.delete(:pid)
|
119
|
+
pid = query_options.delete(:pid)
|
120
|
+
|
121
|
+
if pid.nil?
|
122
|
+
return mint_pid_and_ingest options
|
123
|
+
end
|
124
|
+
|
110
125
|
file = query_options.delete(:file)
|
111
126
|
assigned_pid = client[object_url(pid, query_options)].post((file.dup if file), :content_type => 'text/xml')
|
112
127
|
run_hook :after_ingest, :pid => assigned_pid, :file => file, :options => options
|
@@ -115,6 +130,17 @@ module Rubydora
|
|
115
130
|
rescue_with_handler(exception) || raise
|
116
131
|
end
|
117
132
|
|
133
|
+
def mint_pid_and_ingest options = {}
|
134
|
+
query_options = options.dup
|
135
|
+
file = query_options.delete(:file)
|
136
|
+
|
137
|
+
assigned_pid = client[new_object_url(query_options)].post((file.dup if file), :content_type => 'text/xml')
|
138
|
+
run_hook :after_ingest, :pid => assigned_pid, :file => file, :options => options
|
139
|
+
assigned_pid
|
140
|
+
rescue Exception => exception
|
141
|
+
rescue_with_handler(exception) || raise
|
142
|
+
end
|
143
|
+
|
118
144
|
# {include:RestApiClient::API_DOCUMENTATION}
|
119
145
|
# @param [Hash] options
|
120
146
|
# @option options [String] :pid
|
@@ -193,10 +219,16 @@ module Rubydora
|
|
193
219
|
query_options = options.dup
|
194
220
|
pid = query_options.delete(:pid)
|
195
221
|
dsid = query_options.delete(:dsid)
|
222
|
+
raise ArgumentError, "Missing required parameter :pid" unless pid
|
223
|
+
|
224
|
+
if dsid.nil?
|
225
|
+
#raise ArgumentError, "Missing required parameter :dsid" unless dsid
|
226
|
+
Deprecation.warn(RestApiClient, "Calling Rubydora::RestApiClient#datastream without a :dsid is deprecated, use #datastreams instead")
|
227
|
+
return datastreams(options)
|
228
|
+
end
|
196
229
|
query_options[:format] ||= 'xml'
|
197
230
|
val = nil
|
198
|
-
|
199
|
-
benchmark message, :level=>:debug do
|
231
|
+
benchmark "Loaded datastream profile #{pid}/#{dsid}", :level=>:debug do
|
200
232
|
val = client[datastream_url(pid, dsid, query_options)].get
|
201
233
|
end
|
202
234
|
|
@@ -208,7 +240,29 @@ module Rubydora
|
|
208
240
|
rescue_with_handler(exception) || raise
|
209
241
|
end
|
210
242
|
|
211
|
-
|
243
|
+
def datastreams options = {}
|
244
|
+
unless options[:dsid].nil?
|
245
|
+
#raise ArgumentError, "Missing required parameter :dsid" unless dsid
|
246
|
+
Deprecation.warn(RestApiClient, "Calling Rubydora::RestApiClient#datastreams with a :dsid is deprecated, use #datastream instead")
|
247
|
+
return datastream(options)
|
248
|
+
end
|
249
|
+
query_options = options.dup
|
250
|
+
pid = query_options.delete(:pid)
|
251
|
+
raise ArgumentError, "Missing required parameter :pid" unless pid
|
252
|
+
query_options[:format] ||= 'xml'
|
253
|
+
val = nil
|
254
|
+
benchmark "Loaded datastream list for #{pid}", :level=>:debug do
|
255
|
+
val = client[datastreams_url(pid, query_options)].get
|
256
|
+
end
|
257
|
+
|
258
|
+
val
|
259
|
+
rescue RestClient::Unauthorized => e
|
260
|
+
logger.error "Unauthorized at #{client.url}/#{datastreams_url(pid, query_options)}"
|
261
|
+
raise e
|
262
|
+
rescue Exception => exception
|
263
|
+
rescue_with_handler(exception) || raise
|
264
|
+
|
265
|
+
end
|
212
266
|
|
213
267
|
# {include:RestApiClient::API_DOCUMENTATION}
|
214
268
|
# @param [Hash] options
|
data/rubydora.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency "mime-types"
|
24
24
|
s.add_dependency "activesupport"
|
25
25
|
s.add_dependency "activemodel"
|
26
|
-
s.add_dependency "hooks"
|
26
|
+
s.add_dependency "hooks", "~> 0.2.2"
|
27
27
|
s.add_dependency "deprecation"
|
28
28
|
|
29
29
|
s.add_development_dependency("rake")
|
data/spec/lib/datastream_spec.rb
CHANGED
@@ -123,6 +123,10 @@ describe Rubydora::Datastream do
|
|
123
123
|
@datastream.versionable.should be_false
|
124
124
|
end
|
125
125
|
|
126
|
+
it "should be the current version" do
|
127
|
+
@datastream.current_version?.should be_true
|
128
|
+
end
|
129
|
+
|
126
130
|
# it "should cast versionable to boolean" do
|
127
131
|
# @datastream.profile['versionable'] = 'true'
|
128
132
|
# @datastream.versionable.should be_true
|
@@ -466,6 +470,36 @@ describe Rubydora::Datastream do
|
|
466
470
|
Rubydora::Datastream.any_instance.stub(:new? => false)
|
467
471
|
@datastream.versions.last.content
|
468
472
|
end
|
473
|
+
|
474
|
+
it "should be the current version" do
|
475
|
+
@mock_repository.stub(:datastream).with(hash_including(:pid => 'pid', :dsid => 'dsid')).and_return <<-XML
|
476
|
+
<datastreamProfile>
|
477
|
+
<dsVersionID>dsid.1</dsVersionID>
|
478
|
+
<dsCreateDate>2010-01-02T00:00:00.012Z</dsCreateDate>
|
479
|
+
</datastreamProfile>
|
480
|
+
XML
|
481
|
+
@datastream.current_version?.should be_true
|
482
|
+
end
|
483
|
+
|
484
|
+
it "should be the current version if it's the first version" do
|
485
|
+
@mock_repository.stub(:datastream).with(hash_including(:pid => 'pid', :dsid => 'dsid', :asOfDateTime =>'2010-01-02T00:00:00.012Z')).and_return <<-XML
|
486
|
+
<datastreamProfile>
|
487
|
+
<dsVersionID>dsid.1</dsVersionID>
|
488
|
+
<dsCreateDate>2010-01-02T00:00:00.012Z</dsCreateDate>
|
489
|
+
</datastreamProfile>
|
490
|
+
XML
|
491
|
+
@datastream.versions.first.current_version?.should be_true
|
492
|
+
end
|
493
|
+
|
494
|
+
it "should not be the current version if it's the second version" do
|
495
|
+
@mock_repository.stub(:datastream).with(hash_including(:pid => 'pid', :dsid => 'dsid', :asOfDateTime => '2008-08-05T01:30:05.012Z')).and_return <<-XML
|
496
|
+
<datastreamProfile>
|
497
|
+
<dsVersionID>dsid.0</dsVersionID>
|
498
|
+
<dsCreateDate>2008-08-05T01:30:05.012Z</dsCreateDate>
|
499
|
+
</datastreamProfile>
|
500
|
+
XML
|
501
|
+
@datastream.versions[1].current_version?.should be_false
|
502
|
+
end
|
469
503
|
end
|
470
504
|
describe "when no versions are found" do
|
471
505
|
before(:each) do
|
@@ -477,6 +511,11 @@ describe Rubydora::Datastream do
|
|
477
511
|
@datastream.versions.should be_empty
|
478
512
|
end
|
479
513
|
|
514
|
+
it "should be the current version" do
|
515
|
+
@datastream.stub(:new? => false)
|
516
|
+
@datastream.current_version?.should be_true
|
517
|
+
end
|
518
|
+
|
480
519
|
end
|
481
520
|
|
482
521
|
end
|
@@ -34,17 +34,17 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should create an object" do
|
37
|
-
obj =
|
37
|
+
obj = @repository.find_or_initialize('test:1')
|
38
38
|
obj.new?.should == true
|
39
39
|
obj.save
|
40
40
|
obj.new?.should == false
|
41
41
|
end
|
42
42
|
|
43
43
|
it "new should not return true until the profile is read" do
|
44
|
-
obj =
|
44
|
+
obj = @repository.find_or_initialize('test:1')
|
45
45
|
obj.save
|
46
|
-
|
47
|
-
|
46
|
+
obj = @repository.find('test:1')
|
47
|
+
obj.should_not be_new
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should have default datastreams" do
|
@@ -58,13 +58,13 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should create another object" do
|
61
|
-
obj =
|
61
|
+
obj = @repository.find_or_initialize('test:2')
|
62
62
|
obj.save
|
63
63
|
obj.new?.should == false
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should create and update object labels" do
|
67
|
-
obj =
|
67
|
+
obj = @repository.find_or_initialize('test:3')
|
68
68
|
obj.label = 'asdf'
|
69
69
|
obj.save
|
70
70
|
|
@@ -78,12 +78,10 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
78
78
|
|
79
79
|
end
|
80
80
|
|
81
|
-
|
82
|
-
obj = @repository.find('test:1')
|
83
|
-
end
|
81
|
+
describe "datastream stuff" do
|
84
82
|
|
85
83
|
it "should create a managed datastream" do
|
86
|
-
obj = @repository.
|
84
|
+
obj = @repository.find_or_initialize('test:1')
|
87
85
|
obj.save
|
88
86
|
ds = obj.datastreams["Test"]
|
89
87
|
|
@@ -93,7 +91,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
93
91
|
end
|
94
92
|
|
95
93
|
it "should create a redirect datastream" do
|
96
|
-
obj = @repository.
|
94
|
+
obj = @repository.find_or_initialize('test:1')
|
97
95
|
ds = obj.datastreams["Redirect"]
|
98
96
|
ds.controlGroup = "R"
|
99
97
|
ds.dsLocation = "http://example.org"
|
@@ -101,7 +99,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
101
99
|
end
|
102
100
|
|
103
101
|
it "should have datastreams" do
|
104
|
-
obj = @repository.
|
102
|
+
obj = @repository.find_or_initialize('test:1')
|
105
103
|
obj.datastreams.keys.should include("Test")
|
106
104
|
obj.datastreams.keys.should include("Redirect")
|
107
105
|
end
|
@@ -112,7 +110,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
112
110
|
end
|
113
111
|
|
114
112
|
it "should have profile attributes" do
|
115
|
-
obj = @repository.
|
113
|
+
obj = @repository.find_or_initialize('test:1')
|
116
114
|
ds = obj.datastreams["Test"]
|
117
115
|
|
118
116
|
ds.versionID.should == "Test.0"
|
@@ -122,15 +120,16 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
122
120
|
ds.controlGroup.should == "M"
|
123
121
|
ds.size.should be > 100
|
124
122
|
end
|
123
|
+
end
|
125
124
|
|
126
125
|
it "should delete datastreams" do
|
127
|
-
obj = @repository.
|
126
|
+
obj = @repository.find_or_initialize('test:1')
|
128
127
|
ds = obj.datastreams["Test"].delete
|
129
128
|
obj.datastreams.keys.should_not include("Test")
|
130
129
|
end
|
131
130
|
|
132
131
|
it "should save changed datastreams when the object is saved" do
|
133
|
-
obj =
|
132
|
+
obj = @repository.find_or_initialize('test:1')
|
134
133
|
obj.datastreams["new_ds"].content = "XXX"
|
135
134
|
obj.datastreams["empty_ds"].new?
|
136
135
|
obj.save
|
@@ -140,7 +139,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
140
139
|
end
|
141
140
|
|
142
141
|
it "should update datastream attributes without changing the content (or mime type)" do
|
143
|
-
obj =
|
142
|
+
obj = @repository.find_or_initialize('test:1')
|
144
143
|
obj.datastreams["my_ds"].content = "XXX"
|
145
144
|
obj.datastreams["my_ds"].mimeType = "application/x-text"
|
146
145
|
obj.save
|
@@ -156,7 +155,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
156
155
|
end
|
157
156
|
|
158
157
|
it "should save IO-based datastreams" do
|
159
|
-
obj = @repository.
|
158
|
+
obj = @repository.find_or_initialize('test:1')
|
160
159
|
ds = obj.datastreams['gemspec']
|
161
160
|
ds.controlGroup = 'M'
|
162
161
|
ds.content = File.open('rubydora.gemspec', 'r')
|
@@ -170,7 +169,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
170
169
|
@repository.find('transactions:1').delete rescue nil
|
171
170
|
|
172
171
|
@repository.transaction do |t|
|
173
|
-
obj =
|
172
|
+
obj = @repository.find_or_initialize('transactions:1')
|
174
173
|
obj.save
|
175
174
|
|
176
175
|
t.rollback
|
@@ -182,7 +181,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
182
181
|
it "should work on purge" do
|
183
182
|
@repository.find('transactions:1').delete rescue nil
|
184
183
|
|
185
|
-
obj =
|
184
|
+
obj = @repository.find_or_initialize('transactions:1')
|
186
185
|
obj.save
|
187
186
|
|
188
187
|
@repository.transaction do |t|
|
@@ -239,9 +238,10 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
239
238
|
end
|
240
239
|
|
241
240
|
it "should work on relationships" do
|
241
|
+
pending("fcrepo 3.6's relationship api is busted; skipping") if @repository.version == 3.6
|
242
242
|
@repository.find('transactions:1').delete rescue nil
|
243
243
|
|
244
|
-
|
244
|
+
obj = @repository.find_or_initialize('transactions:1')
|
245
245
|
obj.save
|
246
246
|
@repository.add_relationship :subject => obj.pid, :predicate => 'uri:asdf', :object => 'fedora:object'
|
247
247
|
|
@@ -266,7 +266,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
266
266
|
end
|
267
267
|
|
268
268
|
it "should have read-only versions" do
|
269
|
-
obj =
|
269
|
+
obj = @repository.find_or_initialize('test:1')
|
270
270
|
expect { obj.versions.first.label = "asdf" }.to raise_error
|
271
271
|
end
|
272
272
|
|
@@ -285,7 +285,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
285
285
|
#end
|
286
286
|
|
287
287
|
it "should access datastreams list using asOfDateTime (and pass the asOfDateTime through to the datastreams)" do
|
288
|
-
obj =
|
288
|
+
obj = @repository.find_or_initialize('test:1')
|
289
289
|
oldest = obj.versions.first.datastreams.keys
|
290
290
|
newest = obj.versions.last.datastreams.keys
|
291
291
|
(newest - oldest).should_not be_empty
|
@@ -297,21 +297,21 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
297
297
|
describe "datastream versions" do
|
298
298
|
|
299
299
|
it "should have versions" do
|
300
|
-
obj =
|
300
|
+
obj = @repository.find_or_initialize('test:1')
|
301
301
|
versions = obj.datastreams["my_ds"].versions
|
302
302
|
versions.should_not be_empty
|
303
303
|
versions.map { |x| x.versionID }.should include('my_ds.1', 'my_ds.0')
|
304
304
|
end
|
305
305
|
|
306
306
|
it "should have read-only versions" do
|
307
|
-
obj =
|
307
|
+
obj = @repository.find_or_initialize('test:1')
|
308
308
|
ds = obj.datastreams["my_ds"].asOfDateTime(Time.now)
|
309
309
|
expect { ds.dsLabel = 'asdf' }.to raise_error
|
310
310
|
expect { ds.content = 'asdf' }.to raise_error
|
311
311
|
end
|
312
312
|
|
313
313
|
it "should access the content of older datastreams" do
|
314
|
-
obj =
|
314
|
+
obj = @repository.find_or_initialize('test:1')
|
315
315
|
|
316
316
|
ds = obj.datastreams["my_ds"]
|
317
317
|
ds.content = "YYY"
|
@@ -322,7 +322,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
322
322
|
end
|
323
323
|
|
324
324
|
it "should allow the user to go from a versioned datastream to an unversioned datastream" do
|
325
|
-
obj =
|
325
|
+
obj = @repository.find_or_initialize('test:1')
|
326
326
|
versions_count = obj.datastreams["my_ds"].versions.length
|
327
327
|
|
328
328
|
obj.datastreams["my_ds"].versionable.should be_true
|
@@ -345,12 +345,12 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
345
345
|
|
346
346
|
context "mime types" do
|
347
347
|
before(:each) do
|
348
|
-
obj = @repository.
|
348
|
+
obj = @repository.find_or_initialize('test:1')
|
349
349
|
obj.datastreams["my_ds"].delete rescue nil
|
350
350
|
end
|
351
351
|
|
352
352
|
it "should default to application/octet-stream" do
|
353
|
-
obj =
|
353
|
+
obj = @repository.find_or_initialize('test:1')
|
354
354
|
obj.datastreams["my_ds"].content = "XXX"
|
355
355
|
obj.save
|
356
356
|
|
@@ -359,7 +359,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
359
359
|
end
|
360
360
|
|
361
361
|
it "should allow the user to specify a mimetype" do
|
362
|
-
obj =
|
362
|
+
obj = @repository.find_or_initialize('test:1')
|
363
363
|
obj.datastreams["my_ds"].content = "XXX"
|
364
364
|
obj.datastreams["my_ds"].mimeType = "text/plain"
|
365
365
|
obj.save
|
@@ -369,7 +369,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
369
369
|
end
|
370
370
|
|
371
371
|
it "should preserve the mimetype on update" do
|
372
|
-
obj =
|
372
|
+
obj = @repository.find_or_initialize('test:1')
|
373
373
|
obj.datastreams["my_ds"].content = "XXX"
|
374
374
|
obj.datastreams["my_ds"].mimeType = "text/plain"
|
375
375
|
obj.save
|
@@ -383,7 +383,7 @@ describe "Integration testing against a live Fedora repository", :integration =>
|
|
383
383
|
end
|
384
384
|
|
385
385
|
it "should allow the mimetype to be changed" do
|
386
|
-
obj = @repository.
|
386
|
+
obj = @repository.find_or_initialize('test:1')
|
387
387
|
obj.datastreams["my_ds"].content = "XXX"
|
388
388
|
obj.datastreams["my_ds"].mimeType = "text/plain"
|
389
389
|
obj.save
|
data/spec/lib/repository_spec.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rubydora::Repository do
|
4
|
+
include Rubydora::FedoraUrlHelpers
|
5
|
+
|
4
6
|
before(:each) do
|
5
7
|
@repository = Rubydora::Repository.new
|
6
8
|
end
|
@@ -45,7 +47,7 @@ describe Rubydora::Repository do
|
|
45
47
|
@mock_response.should_receive(:get).and_return <<-XML
|
46
48
|
<?xml version="1.0" encoding="UTF-8"?><fedoraRepository xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.fedora.info/definitions/1/0/access/ http://www.fedora.info/definitions/1/0/fedoraRepository.xsd"><repositoryName>Fedora Repository</repositoryName><repositoryBaseURL>http://localhost:8983/fedora</repositoryBaseURL><repositoryVersion>3.3</repositoryVersion><repositoryPID> <PID-namespaceIdentifier>changeme</PID-namespaceIdentifier> <PID-delimiter>:</PID-delimiter> <PID-sample>changeme:100</PID-sample> <retainPID>*</retainPID></repositoryPID><repositoryOAI-identifier> <OAI-namespaceIdentifier>example.org</OAI-namespaceIdentifier> <OAI-delimiter>:</OAI-delimiter> <OAI-sample>oai:example.org:changeme:100</OAI-sample></repositoryOAI-identifier><sampleSearch-URL>http://localhost:8983/fedora/search</sampleSearch-URL><sampleAccess-URL>http://localhost:8983/fedora/get/demo:5</sampleAccess-URL><sampleOAI-URL>http://localhost:8983/fedora/oai?verb=Identify</sampleOAI-URL><adminEmail>bob@example.org</adminEmail><adminEmail>sally@example.org</adminEmail></fedoraRepository>
|
47
49
|
XML
|
48
|
-
@mock_client.should_receive(:[]).with(
|
50
|
+
@mock_client.should_receive(:[]).with(describe_repository_url(:xml=> true)).and_return(@mock_response)
|
49
51
|
@repository.should_receive(:client).and_return(@mock_client)
|
50
52
|
profile = @repository.profile
|
51
53
|
profile['repositoryVersion'].should == '3.3'
|
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rubydora::RestApiClient do
|
4
|
+
|
5
|
+
include Rubydora::FedoraUrlHelpers
|
6
|
+
|
4
7
|
class FakeException < Exception
|
5
8
|
|
6
9
|
end
|
@@ -24,6 +27,7 @@ describe Rubydora::RestApiClient do
|
|
24
27
|
}
|
25
28
|
|
26
29
|
it "should replace a RestClient exception with a Rubydora one" do
|
30
|
+
Deprecation.stub(:warn)
|
27
31
|
subject.stub_chain(:client, :[], :get).and_raise RestClient::InternalServerError.new
|
28
32
|
subject.stub_chain(:client, :[], :put).and_raise RestClient::InternalServerError.new
|
29
33
|
subject.stub_chain(:client, :[], :delete).and_raise RestClient::InternalServerError.new
|
@@ -32,7 +36,7 @@ describe Rubydora::RestApiClient do
|
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
35
|
-
[:next_pid, :find_objects, :object, :ingest, :export, :modify_object, :purge_object, :object_versions, :object_xml, :datastream, :datastreams, :set_datastream_options, :datastream_versions, :datastream_history, :datastream_dissemination, :add_datastream, :modify_datastream, :purge_datastream, :relationships, :add_relationship, :purge_relationship, :dissemination].each do |method|
|
39
|
+
[:next_pid, :find_objects, :object, :ingest, :mint_pid_and_ingest, :export, :modify_object, :purge_object, :object_versions, :object_xml, :datastream, :datastreams, :set_datastream_options, :datastream_versions, :datastream_history, :datastream_dissemination, :add_datastream, :modify_datastream, :purge_datastream, :relationships, :add_relationship, :purge_relationship, :dissemination].each do |method|
|
36
40
|
|
37
41
|
class_eval %Q{
|
38
42
|
describe "##{method}" do
|
@@ -45,13 +49,16 @@ describe Rubydora::RestApiClient do
|
|
45
49
|
end
|
46
50
|
|
47
51
|
|
52
|
+
let :base_url do
|
53
|
+
"http://example.org"
|
54
|
+
end
|
48
55
|
|
49
56
|
|
50
57
|
before(:each) do
|
51
58
|
@fedora_user = 'fedoraAdmin'
|
52
59
|
@fedora_password = 'fedoraAdmin'
|
53
60
|
@mock_repository = MockRepository.new
|
54
|
-
@mock_repository.config = { :url =>
|
61
|
+
@mock_repository.config = { :url => base_url,:user => @fedora_user, :password => @fedora_password}
|
55
62
|
end
|
56
63
|
|
57
64
|
it "should create a REST client" do
|
@@ -76,42 +83,48 @@ describe Rubydora::RestApiClient do
|
|
76
83
|
end
|
77
84
|
|
78
85
|
it "should call nextPID" do
|
79
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
86
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + next_pid_url(:format => 'xml')))
|
80
87
|
@mock_repository.next_pid
|
81
88
|
end
|
82
89
|
|
83
90
|
it "should find objects" do
|
84
91
|
RestClient::Request.should_receive(:execute) do |params|
|
85
92
|
params.should have_key(:url)
|
86
|
-
params[:url].should =~ /^#{Regexp.escape("
|
93
|
+
params[:url].should =~ /^#{Regexp.escape(base_url + "/" + find_objects_url + "?")}.*query=a/
|
87
94
|
end
|
88
95
|
@mock_repository.find_objects :query => 'a'
|
89
96
|
end
|
90
97
|
|
91
98
|
|
92
99
|
it "should show object properties" do
|
93
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
100
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + object_url('z', :format => 'xml')))
|
94
101
|
@mock_repository.object :pid => 'z'
|
95
102
|
end
|
96
103
|
|
97
104
|
it "should raise not found exception when retrieving object" do
|
98
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
105
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + object_url('z', :format => 'xml'))).and_raise( RestClient::ResourceNotFound)
|
99
106
|
lambda {@mock_repository.object(:pid => 'z')}.should raise_error RestClient::ResourceNotFound
|
100
107
|
end
|
101
108
|
|
102
109
|
it "ingest" do
|
103
|
-
|
110
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + new_object_url))
|
111
|
+
@mock_repository.ingest
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
it "mint_pid_and_ingest" do
|
116
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + new_object_url))
|
104
117
|
@mock_repository.ingest
|
105
118
|
end
|
106
119
|
|
107
120
|
it "ingest with pid" do
|
108
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
121
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + object_url('mypid')))
|
109
122
|
@mock_repository.ingest :pid => 'mypid'
|
110
123
|
end
|
111
124
|
|
112
125
|
describe "export" do
|
113
126
|
it "should work on the happy path" do
|
114
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
127
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + export_object_url('mypid')))
|
115
128
|
@mock_repository.export :pid => 'mypid'
|
116
129
|
end
|
117
130
|
it "should require a pid" do
|
@@ -122,56 +135,68 @@ describe Rubydora::RestApiClient do
|
|
122
135
|
it "modify_object" do
|
123
136
|
RestClient::Request.should_receive(:execute) do |params|
|
124
137
|
params.should have_key(:url)
|
125
|
-
params[:url].should =~ /^#{Regexp.escape("
|
138
|
+
params[:url].should =~ /^#{Regexp.escape(base_url + "/" + object_url('mypid'))}.*state=Z/
|
126
139
|
end
|
127
140
|
@mock_repository.modify_object :pid => 'mypid', :state => 'Z'
|
128
141
|
end
|
129
142
|
|
130
143
|
it "purge_object" do
|
131
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
144
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + object_url('mypid')))
|
132
145
|
@mock_repository.purge_object :pid => 'mypid'
|
133
146
|
end
|
134
147
|
|
135
148
|
it "should raise not found exception when purging" do
|
136
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
149
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + object_url('mypid'))).and_raise( RestClient::ResourceNotFound)
|
137
150
|
lambda {@mock_repository.purge_object(:pid => 'mypid')}.should raise_error RestClient::ResourceNotFound
|
138
151
|
end
|
139
152
|
|
140
153
|
it "object_versions" do
|
141
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
154
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + object_versions_url('mypid', :format => 'xml')))
|
142
155
|
@mock_repository.object_versions :pid => 'mypid'
|
143
156
|
end
|
144
157
|
|
145
158
|
it "object_xml" do
|
146
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
159
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + object_xml_url('mypid', :format => 'xml')))
|
147
160
|
@mock_repository.object_xml :pid => 'mypid'
|
148
161
|
end
|
149
162
|
|
150
163
|
it "datastream" do
|
151
|
-
|
164
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastreams_url('mypid', :format => 'xml')))
|
152
165
|
logger.should_receive(:debug) # squelch message "Loaded datastream list for mypid (time)"
|
166
|
+
@mock_repository.datastreams :pid => 'mypid'
|
167
|
+
end
|
168
|
+
|
169
|
+
it "datastreams" do
|
170
|
+
@mock_repository.should_receive(:datastream).with(:pid => 'mypid', :dsid => 'asdf')
|
171
|
+
Deprecation.should_receive(:warn)
|
172
|
+
@mock_repository.datastreams :pid => 'mypid', :dsid => 'asdf'
|
173
|
+
end
|
174
|
+
|
175
|
+
it "datastream" do
|
176
|
+
@mock_repository.should_receive(:datastreams).with(:pid => 'mypid')
|
177
|
+
Deprecation.should_receive(:warn)
|
153
178
|
@mock_repository.datastream :pid => 'mypid'
|
154
179
|
end
|
155
180
|
|
156
181
|
it "datastream" do
|
157
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
182
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_url('mypid', 'aaa', :format => 'xml')))
|
158
183
|
logger.should_receive(:debug) # squelch message "Loaded datastream mypid/aaa (time)"
|
159
184
|
@mock_repository.datastream :pid => 'mypid', :dsid => 'aaa'
|
160
185
|
end
|
161
186
|
|
162
187
|
it "should raise not found exception when getting a datastream" do
|
163
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
188
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_url('mypid', 'aaa', :format => 'xml'))).and_raise( RestClient::ResourceNotFound)
|
164
189
|
lambda {@mock_repository.datastream :pid => 'mypid', :dsid => 'aaa'}.should raise_error RestClient::ResourceNotFound
|
165
190
|
end
|
166
191
|
|
167
192
|
it "should raise Unauthorized exception when getting a datastream" do
|
168
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
169
|
-
logger.should_receive(:error).with("Unauthorized at
|
193
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_url('mypid', 'aaa', :format => 'xml'))).and_raise( RestClient::Unauthorized)
|
194
|
+
logger.should_receive(:error).with("Unauthorized at #{base_url + "/" + datastream_url('mypid', 'aaa', :format => 'xml')}")
|
170
195
|
lambda {@mock_repository.datastream :pid => 'mypid', :dsid => 'aaa'}.should raise_error RestClient::Unauthorized
|
171
196
|
end
|
172
197
|
|
173
198
|
it "datastream_dissemination" do
|
174
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
199
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_content_url('mypid', 'aaa')))
|
175
200
|
@mock_repository.datastream_dissemination :pid => 'mypid', :dsid => 'aaa'
|
176
201
|
end
|
177
202
|
it "should allow http methods besides GET on datastream_dissemination" do
|
@@ -184,13 +209,13 @@ describe Rubydora::RestApiClient do
|
|
184
209
|
@mock_repository.datastream_dissemination :pid => 'mypid', :dsid => 'aaa', &_proc
|
185
210
|
end
|
186
211
|
it "should raise not found exception when retrieving datastream_dissemination" do
|
187
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
212
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_content_url('mypid', 'aaa'))).and_raise( RestClient::ResourceNotFound)
|
188
213
|
lambda {@mock_repository.datastream_dissemination :pid => 'mypid', :dsid => 'aaa'}.should raise_error RestClient::ResourceNotFound
|
189
214
|
end
|
190
215
|
|
191
216
|
describe "add_datastream" do
|
192
217
|
it "should post to the correct url" do
|
193
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
218
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_url('mypid', 'aaa')))
|
194
219
|
@mock_repository.add_datastream :pid => 'mypid', :dsid => 'aaa'
|
195
220
|
end
|
196
221
|
|
@@ -206,11 +231,11 @@ describe Rubydora::RestApiClient do
|
|
206
231
|
|
207
232
|
describe "modify datastream" do
|
208
233
|
it "should not set mime-type when it's not provided" do
|
209
|
-
RestClient::Request.should_receive(:execute).with(:url => "
|
234
|
+
RestClient::Request.should_receive(:execute).with(:url => base_url + "/" + datastream_url('mypid', 'aaa'),:open_timeout=>nil, :payload=>nil, :user=>@fedora_user, :password=>@fedora_password, :method=>:put, :headers=>{})
|
210
235
|
@mock_repository.modify_datastream :pid => 'mypid', :dsid => 'aaa'
|
211
236
|
end
|
212
237
|
it "should pass the provided mimeType header" do
|
213
|
-
RestClient::Request.should_receive(:execute).with(:url => "
|
238
|
+
RestClient::Request.should_receive(:execute).with(:url => base_url + "/" + datastream_url('mypid', 'aaa', :mimeType => 'application/json'),:open_timeout=>nil, :payload=>nil, :user=>@fedora_user, :password=>@fedora_password, :method=>:put, :headers=>{})
|
214
239
|
@mock_repository.modify_datastream :pid => 'mypid', :dsid => 'aaa', :mimeType=>'application/json'
|
215
240
|
end
|
216
241
|
describe "when a file is passed" do
|
@@ -224,43 +249,43 @@ describe Rubydora::RestApiClient do
|
|
224
249
|
end
|
225
250
|
|
226
251
|
it "purge_datastream" do
|
227
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
252
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_url('mypid', 'aaa')))
|
228
253
|
@mock_repository.purge_datastream :pid => 'mypid', :dsid => 'aaa'
|
229
254
|
end
|
230
255
|
|
231
256
|
it "set_datastream_options" do
|
232
257
|
RestClient::Request.should_receive(:execute) do |params|
|
233
258
|
params.should have_key(:url)
|
234
|
-
params[:url].should =~ /^#{Regexp.escape("
|
259
|
+
params[:url].should =~ /^#{Regexp.escape(base_url + "/" + datastream_url('mypid', 'aaa') + "?")}.*aparam=true/
|
235
260
|
end
|
236
261
|
@mock_repository.set_datastream_options :pid => 'mypid', :dsid => 'aaa', :aparam => true
|
237
262
|
end
|
238
263
|
|
239
264
|
describe "datastream_versions" do
|
240
265
|
it "should be successful" do
|
241
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
266
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_history_url('mypid', 'aaa', :format=>'xml'))).and_return("expected result")
|
242
267
|
@mock_repository.datastream_versions(:pid => 'mypid', :dsid => 'aaa').should == 'expected result'
|
243
268
|
end
|
244
269
|
it "should not break when fedora doesn't have datastream history" do
|
245
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
270
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_history_url('mypid', 'aaa', :format=>'xml'))).and_raise(RestClient::ResourceNotFound)
|
246
271
|
@mock_repository.datastream_versions(:pid => 'mypid', :dsid => 'aaa').should be_nil
|
247
272
|
end
|
248
273
|
end
|
249
274
|
|
250
275
|
it "datastream_history" do
|
251
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
276
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + datastream_history_url('mypid', 'aaa', :format=>'xml')))
|
252
277
|
@mock_repository.datastream_history :pid => 'mypid', :dsid => 'aaa'
|
253
278
|
end
|
254
279
|
|
255
280
|
it "relationships" do
|
256
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
281
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + object_relationship_url('mypid', :format => 'xml')))
|
257
282
|
@mock_repository.relationships :pid => 'mypid'
|
258
283
|
end
|
259
284
|
|
260
285
|
it "add_relationship" do
|
261
286
|
RestClient::Request.should_receive(:execute) do |params|
|
262
287
|
params.should have_key(:url)
|
263
|
-
params[:url].should =~ /^#{Regexp.escape("
|
288
|
+
params[:url].should =~ /^#{Regexp.escape(base_url + "/" + new_object_relationship_url('mypid') + "?")}.*subject=z/
|
264
289
|
end
|
265
290
|
@mock_repository.add_relationship :pid => 'mypid', :subject => 'z'
|
266
291
|
end
|
@@ -268,23 +293,23 @@ describe Rubydora::RestApiClient do
|
|
268
293
|
it "purge_relationships" do
|
269
294
|
RestClient::Request.should_receive(:execute) do |params|
|
270
295
|
params.should have_key(:url)
|
271
|
-
params[:url].should =~ /^#{Regexp.escape("
|
296
|
+
params[:url].should =~ /^#{Regexp.escape(base_url + "/" + object_relationship_url('mypid') + "?")}.*subject=z/
|
272
297
|
end
|
273
298
|
@mock_repository.purge_relationship :pid => 'mypid', :subject => 'z'
|
274
299
|
end
|
275
300
|
|
276
301
|
it "dissemination" do
|
277
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
302
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + dissemination_url('mypid', nil, nil, :format => 'xml')))
|
278
303
|
@mock_repository.dissemination :pid => 'mypid'
|
279
304
|
end
|
280
305
|
|
281
306
|
it "dissemination" do
|
282
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
307
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + dissemination_url('mypid', 'sdef', nil, :format => 'xml')))
|
283
308
|
@mock_repository.dissemination :pid => 'mypid', :sdef => 'sdef'
|
284
309
|
end
|
285
310
|
|
286
311
|
it "dissemination" do
|
287
|
-
RestClient::Request.should_receive(:execute).with(hash_including(:url => "
|
312
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => base_url + "/" + dissemination_url('mypid', 'sdef', 'method')))
|
288
313
|
@mock_repository.dissemination :pid => 'mypid', :sdef => 'sdef', :method => 'method'
|
289
314
|
end
|
290
315
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubydora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastercsv
|
@@ -112,16 +112,16 @@ dependencies:
|
|
112
112
|
name: hooks
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 0.2.2
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: 0.2.2
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: deprecation
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|