duracloud-client 0.1.1 → 0.1.2

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: 7ffaf9ecb1c5717ae700751a890c3710300fbff5
4
- data.tar.gz: 31350ff200eac0de8019a199c6efdee0d1c1d9c0
3
+ metadata.gz: 59d7bfce0068c8362b66814cb1b02804fda5bba8
4
+ data.tar.gz: e01c0afa6b9369450862d5189ea0954cf2c90491
5
5
  SHA512:
6
- metadata.gz: e0ee33db9ade2fa348d8cc32932eedf32b5e0597588c6dec72d670de5c38fca36d7fed32eb3eccf003395c75855a453c8749d4b4824b47b840d00c5e494977b8
7
- data.tar.gz: 4c83da5b63a58eec84f43224f4bcedb9fa60e7f0a542bf2be8de0a47e939421c03cea9cbce170aa708a70a9790dd8279c0ebb2492749edbcaf6e53103fd78bb8
6
+ metadata.gz: 8ec2713a12f89c42e7b9fb9117d94051ebed80c610f64123ec33ef8226c0c72934c2369cbaba4799da6a6511baecdd9be4946bd88c10c909f08f025fe5787c7c
7
+ data.tar.gz: b779ccb8781e2a9fc40208766dd87442024f70c2e6c1e643fc0a7270892093c2d00f5bfce7c6e3efa341cfef9a61f4f966a5e6a2900da44a2b73de3e55ebba39
data/README.md CHANGED
@@ -192,6 +192,49 @@ D, [2016-04-29T18:29:03.935451 #32379] DEBUG -- : Duracloud::Client HEAD https:/
192
192
  => false
193
193
  ```
194
194
 
195
+ ### Reports
196
+
197
+ The audit logs, bit integrity reports and manifests are accessible in their original TSV format and in normalized CSV tables.
198
+
199
+ #### Audit Log
200
+
201
+ ```
202
+ >> space = Duracloud::Space.find("rest-api-testing")
203
+ >> audit_log = space.audit_log
204
+ => #<Duracloud::AuditLog:0x007fd44c077f38 @space_id="rest-api-testing", @store_id=nil, @response=nil>
205
+
206
+ >> audit_log.csv
207
+ D, [2016-05-19T13:36:49.107520 #28754] DEBUG -- : Duracloud::Client GET https://duke.duracloud.org/durastore/audit/rest-api-testing 200 OK
208
+ => #<CSV::Table mode:col_or_row row_count:168>
209
+ ```
210
+
211
+ #### Manifest
212
+
213
+ ```
214
+ >> space = Duracloud::Space.find("rest-api-testing")
215
+ >> manifest = space.manifest
216
+ => #<Duracloud::Manifest:0x007fd44d3c7048 @space_id="rest-api-testing", @store_id=nil, @tsv_response=nil, @bagit_response=nil>
217
+
218
+ >> manifest.csv
219
+ D, [2016-05-19T13:37:39.831013 #28754] DEBUG -- : Duracloud::Client GET https://duke.duracloud.org/durastore/manifest/rest-api-testing 200 OK
220
+ => #<CSV::Table mode:col_or_row row_count:10>
221
+
222
+ >> manifest.csv.headers
223
+ => ["space_id", "content_id", "md5"]
224
+ ```
225
+
226
+ #### Bit Integrity Report
227
+
228
+ ```
229
+ >> space = Duracloud::Space.find("rest-api-testing")
230
+ >> bit_integrity_report = space.bit_integrity_report
231
+ => #<Duracloud::BitIntegrityReport:0x007f88e39a2950 @space_id="rest-api-testing", @store_id=nil, @report=nil, @properties=nil>
232
+
233
+ >> bit_integrity_report.csv
234
+ D, [2016-05-19T15:39:33.538448 #29974] DEBUG -- : Duracloud::Client GET https://duke.duracloud.org/durastore/bit-integrity/rest-api-testing 200 OK
235
+ => #<CSV::Table mode:col_or_row row_count:8>
236
+ ```
237
+
195
238
  ## Versioning
196
239
 
197
240
  We endeavor to follow semantic versioning. In particular, versions < 1.0 may introduce backward-incompatible changes without notice. Use at your own risk. Version 1.0 signals a stable API.
@@ -1,5 +1,6 @@
1
1
  module Duracloud
2
2
  class AuditLog
3
+ include TSV
3
4
 
4
5
  attr_reader :space_id, :store_id
5
6
 
@@ -9,10 +10,6 @@ module Duracloud
9
10
  @response = nil
10
11
  end
11
12
 
12
- def csv(opts = {})
13
- CSVReader.call(tsv, opts)
14
- end
15
-
16
13
  def tsv
17
14
  response.body
18
15
  end
@@ -2,6 +2,7 @@ require "date"
2
2
 
3
3
  module Duracloud
4
4
  class BitIntegrityReport
5
+ include TSV
5
6
 
6
7
  SUCCESS = "SUCCESS".freeze
7
8
  FAILURE = "FAILURE".freeze
@@ -29,10 +30,6 @@ module Duracloud
29
30
  properties[RESULT_HEADER].first
30
31
  end
31
32
 
32
- def csv(opts = {})
33
- CSVReader.new(tsv, opts)
34
- end
35
-
36
33
  def success?
37
34
  result == SUCCESS
38
35
  end
@@ -1,8 +1,6 @@
1
1
  module Duracloud
2
2
  class Manifest
3
-
4
- BAGIT = "BAGIT".freeze
5
- TSV = "TSV".freeze
3
+ include TSV
6
4
 
7
5
  attr_reader :space_id, :store_id
8
6
 
@@ -13,10 +11,6 @@ module Duracloud
13
11
  @bagit_response = nil
14
12
  end
15
13
 
16
- def csv(opts = {})
17
- CSVReader.call(tsv, opts)
18
- end
19
-
20
14
  def tsv
21
15
  tsv_response.body
22
16
  end
@@ -28,11 +22,11 @@ module Duracloud
28
22
  private
29
23
 
30
24
  def tsv_response
31
- @tsv_response ||= get_response(TSV)
25
+ @tsv_response ||= get_response("TSV")
32
26
  end
33
27
 
34
28
  def bagit_response
35
- @bagit_response ||= get_response(BAGIT)
29
+ @bagit_response ||= get_response("BAGIT")
36
30
  end
37
31
 
38
32
  def get_response(format)
@@ -170,7 +170,7 @@ module Duracloud
170
170
  # Return the bit integrity report for the space
171
171
  # @return [Duracloud::BitIntegrityReport] the report
172
172
  def bit_integrity_report
173
- BitIntergrityReport.new(space_id, store_id)
173
+ BitIntegrityReport.new(space_id, store_id)
174
174
  end
175
175
 
176
176
  # Return the manifest for the space
@@ -0,0 +1,32 @@
1
+ require "csv"
2
+
3
+ module Duracloud
4
+ module TSV
5
+ # @return [CSV::Table]
6
+ def csv
7
+ @csv ||= CSV::Table.new([]).tap do |csv|
8
+ header_line, rows = tsv.split(/\r?\n/, 2)
9
+ headers = header_line.split("\t").map { |h| h.downcase.gsub(/-/, "_") }
10
+ header_row = CSV::Row.new(headers, headers, true)
11
+ csv << header_row
12
+ rows.split(/\r?\n/).each do |row|
13
+ csv << row.split("\t")
14
+ end
15
+ end
16
+ end
17
+
18
+ # @return [Enumerator] rows as hashes
19
+ def rows
20
+ Enumerator.new do |e|
21
+ csv.by_row!.each do |row|
22
+ next if row.header_row?
23
+ e << row.to_hash
24
+ end
25
+ end
26
+ end
27
+
28
+ def tsv
29
+ raise NotImplementedError, "Including module must implement `tsv`."
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,3 @@
1
1
  module Duracloud
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/duracloud.rb CHANGED
@@ -9,7 +9,6 @@ module Duracloud
9
9
  autoload :Connection, "duracloud/connection"
10
10
  autoload :Content, "duracloud/content"
11
11
  autoload :ContentProperties, "duracloud/content_properties"
12
- autoload :CSVReader, "duracloud/csv_reader"
13
12
  autoload :DurastoreRequest, "duracloud/durastore_request"
14
13
  autoload :ErrorHandler, "duracloud/error_handler"
15
14
  autoload :HasProperties, "duracloud/has_properties"
@@ -23,4 +22,5 @@ module Duracloud
23
22
  autoload :SpaceAcls, "duracloud/space_acls"
24
23
  autoload :SpaceProperties, "duracloud/space_properties"
25
24
  autoload :Store, "duracloud/store"
25
+ autoload :TSV, "duracloud/tsv"
26
26
  end
@@ -0,0 +1,7 @@
1
+ account store-id space-id content-id content-md5 content-size content-mimetype content-properties space-acls source-space-id source-content-id timestamp action username
2
+ example 1065 myspace 2016-04-27T18:34:18.018 CREATE_SPACE bob@example.com
3
+ example 1065 myspace {acl-bob@example.com=WRITE} 2016-04-27T18:34:20.020 SET_SPACE_ACLS bob@example.com
4
+ example 1065 myspace METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925/manifest-md5.txt 21fef474787860ccfb67bdd99ddee93a 55 text/plain { "content-file-path" : "/duracloud/METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925/manifest-md5.txt", "creator" : "bob@example.com", "content-file-created" : "2016-05-02T15:04:59.059", "content-file-last-accessed" : "2016-05-02T15:04:59.059", "content-mimetype" : "text/plain", "content-file-modified" : "2016-05-02T15:04:59.059"} 2016-05-02T21:06:45.045 ADD_CONTENT bob@example.com
5
+ example 1065 myspace METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925/data/object-desc.rdf e5f8c32a4997d808538df98b893caee0 2383 application/octet-stream { "content-file-path" : "/duracloud/METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925/data/object-desc.rdf", "creator" : "bob@example.com", "content-file-created" : "2016-05-02T15:04:59.059", "content-file-last-accessed" : "2016-05-02T15:11:31.031", "content-mimetype" : "application/octet-stream", "content-file-modified" : "2016-05-02T15:04:59.059"} 2016-05-02T21:06:46.046 ADD_CONTENT bob@example.com
6
+ example 1065 myspace METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925.zip edeb8560a822aad5cfb43dd2d563903b 2406 application/zip { "content-file-path" : "/duracloud/METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925.zip", "creator" : "bob@example.com", "content-file-created" : "2016-05-02T15:04:59.059", "content-file-last-accessed" : "2016-05-02T15:11:15.015", "content-mimetype" : "application/zip", "content-file-modified" : "2016-05-02T15:04:59.059"} 2016-05-02T21:06:46.046 ADD_CONTENT bob@example.com
7
+ example 1065 myspace METADATA/f1/ee/ac/99/f1eeac99-4d9a-49d1-8e17-02a61e244642/20160426_120239.zip f69d67c54d2aa7f97fb55cb40f357f79 6858 application/zip { "content-file-path" : "/duracloud/METADATA/f1/ee/ac/99/f1eeac99-4d9a-49d1-8e17-02a61e244642/20160426_120239.zip", "creator" : "bob@example.com", "content-file-created" : "2016-05-02T15:43:40.040", "content-file-last-accessed" : "2016-05-02T15:43:40.040", "content-mimetype" : "application/zip", "content-file-modified" : "2016-05-02T15:43:40.040"} 2016-05-02T21:06:53.053 ADD_CONTENT bob@example.com
@@ -0,0 +1,4 @@
1
+ date-checked account store-id store-type space-id content-id result content-checksum provider-checksum manifest-checksum details
2
+ 2016-05-15T04:11:14 example 1065 AMAZON_S3 myspace BINARIES/00/00/e8/0000e819ac3e67d039d288adaab5b5e44c3c21d9 SUCCESS 27333f3c06a6d259863384799be68d30 27333f3c06a6d259863384799be68d30 27333f3c06a6d259863384799be68d30 --
3
+ 2016-05-15T04:11:21 example 1065 AMAZON_S3 myspace BINARIES/00/03/4a/00034a58075c694f54be09393cf59d90c683954f SUCCESS 12283b9c2772b45b290962753cd8f66d 12283b9c2772b45b290962753cd8f66d 12283b9c2772b45b290962753cd8f66d --
4
+ 2016-05-15T04:11:19 example 1065 AMAZON_S3 myspace BINARIES/00/03/7e/00037e755c26c7ddebedd159a87e98c8149461a2 SUCCESS 26cf06d36cbfe4f9fe50e5b14204eed1 26cf06d36cbfe4f9fe50e5b14204eed1 26cf06d36cbfe4f9fe50e5b14204eed1 --
@@ -0,0 +1,4 @@
1
+ space-id content-id MD5
2
+ myspace METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925/manifest-md5.txt 21fef474787860ccfb67bdd99ddee93a
3
+ myspace METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925/data/object-desc.rdf e5f8c32a4997d808538df98b893caee0
4
+ myspace METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925.zip 8de045d0dd989e0d778272a262645835
@@ -1,5 +1,22 @@
1
1
  module Duracloud
2
2
  RSpec.describe AuditLog do
3
3
 
4
+ let(:tsv) { File.read(File.join(File.expand_path('../../fixtures/audit_log.tsv', __FILE__))) }
5
+
6
+ before {
7
+ allow(subject).to receive(:tsv) { tsv }
8
+ }
9
+
10
+ subject { described_class.new("myspace") }
11
+
12
+ describe "CSV" do
13
+ specify {
14
+ expect(subject.csv.headers).to eq(%w(account store_id space_id content_id content_md5 content_size content_mimetype content_properties space_acls source_space_id source_content_id timestamp action username))
15
+ expect(subject.csv.size).to eq(7)
16
+ expect(subject.csv.to_s.split("\n").first).to eq("account,store_id,space_id,content_id,content_md5,content_size,content_mimetype,content_properties,space_acls,source_space_id,source_content_id,timestamp,action,username")
17
+ expect(subject.rows.next).to eq({"account"=>"example", "store_id"=>"1065", "space_id"=>"myspace", "content_id"=>"", "content_md5"=>"", "content_size"=>"", "content_mimetype"=>"", "content_properties"=>"", "space_acls"=>"", "source_space_id"=>"", "source_content_id"=>"", "timestamp"=>"2016-04-27T18:34:18.018", "action"=>"CREATE_SPACE", "username"=>"bob@example.com"})
18
+ }
19
+ end
20
+
4
21
  end
5
22
  end
@@ -1,5 +1,22 @@
1
1
  module Duracloud
2
2
  RSpec.describe BitIntegrityReport do
3
3
 
4
+ let(:tsv) { File.read(File.join(File.expand_path('../../fixtures/bit_integrity_report.tsv', __FILE__))) }
5
+
6
+ before {
7
+ allow(subject).to receive(:tsv) { tsv }
8
+ }
9
+
10
+ subject { described_class.new("myspace") }
11
+
12
+ describe "CSV" do
13
+ specify {
14
+ expect(subject.csv.headers).to eq(%w(date_checked account store_id store_type space_id content_id result content_checksum provider_checksum manifest_checksum details))
15
+ expect(subject.csv.size).to eq(4)
16
+ expect(subject.csv.to_s.split("\n").first).to eq("date_checked,account,store_id,store_type,space_id,content_id,result,content_checksum,provider_checksum,manifest_checksum,details")
17
+ expect(subject.rows.next).to eq({"date_checked"=>"2016-05-15T04:11:14", "account"=>"example", "store_id"=>"1065", "store_type"=>"AMAZON_S3", "space_id"=>"myspace", "content_id"=>"BINARIES/00/00/e8/0000e819ac3e67d039d288adaab5b5e44c3c21d9", "result"=>"SUCCESS", "content_checksum"=>"27333f3c06a6d259863384799be68d30", "provider_checksum"=>"27333f3c06a6d259863384799be68d30", "manifest_checksum"=>"27333f3c06a6d259863384799be68d30", "details"=>"--"})
18
+ }
19
+ end
20
+
4
21
  end
5
22
  end
@@ -109,11 +109,13 @@ module Duracloud
109
109
 
110
110
  describe "#properties" do
111
111
  before {
112
- stub_request(:head, url)
113
- .to_return(status: 200, headers: {'x-dura-meta-creator'=>'testuser'})
112
+ allow(Client).to receive(:get_content_properties)
113
+ .with("foo", "bar", hash_including(storeID: nil)) {
114
+ double(headers: {'x-dura-meta-creator'=>'testuser'},
115
+ content_type: 'text/plain')
116
+ }
114
117
  }
115
118
  specify {
116
- pending "A problem with Webmock / HTTPClient?"
117
119
  content = Content.find("foo", "bar")
118
120
  expect(content.properties.x_dura_meta_creator).to eq('testuser')
119
121
  }
@@ -1,12 +1,22 @@
1
1
  module Duracloud
2
2
  RSpec.describe Manifest do
3
3
 
4
- let(:body) { <<-EOS
5
- space-id content-id MD5
6
- auditlogs localhost/51/auditlogs/localhost_51_auditlogs-2014-09-10-15-56-07.tsv 6992f8e57dafb17335f766aa2acf5942
7
- auditlogs localhost/51/photos/localhost_51_photos-2014-09-10-15-55-01.tsv 820e786633fb495db447dc5d5cf0b2bd
8
- EOS
4
+ let(:tsv) { File.read(File.join(File.expand_path('../../fixtures/manifest.tsv', __FILE__))) }
5
+
6
+ before {
7
+ allow(subject).to receive(:tsv) { tsv }
9
8
  }
10
9
 
10
+ subject { described_class.new("myspace") }
11
+
12
+ describe "CSV" do
13
+ specify {
14
+ expect(subject.csv.headers).to eq(%w(space_id content_id md5))
15
+ expect(subject.csv.size).to eq(4)
16
+ expect(subject.csv.to_s.split("\n").first).to eq("space_id,content_id,md5")
17
+ expect(subject.rows.next).to eq({"space_id"=>"myspace", "content_id"=>"METADATA/d6/42/0c/9c/d6420c9c-82f8-4f6a-baf7-37b9be7f4c5f/20160502_172925/manifest-md5.txt", "md5"=>"21fef474787860ccfb67bdd99ddee93a"})
18
+ }
19
+ end
20
+
11
21
  end
12
22
  end
@@ -101,40 +101,70 @@ EOS
101
101
  }
102
102
  let(:url) { "https://example.com/durastore/foo" }
103
103
  before {
104
- stub_request(:head, url)
105
- .to_return(headers: {
106
- 'x-dura-meta-space-count'=>'3',
107
- 'x-dura-meta-space-created'=>'2016-04-05T17:59:11'
108
- })
109
- stub_request(:get, url).to_return(body: body)
104
+ stub_request(:head, "#{url}/foo1")
105
+ stub_request(:head, "#{url}/foo2")
106
+ stub_request(:head, "#{url}/foo3")
107
+ allow(Client).to receive(:get_space)
108
+ .with("foo", hash_including(storeID: nil)) {
109
+ double(body: body,
110
+ headers: {
111
+ 'x-dura-meta-space-count'=>'3',
112
+ 'x-dura-meta-space-created'=>'2016-04-05T17:59:11'
113
+ })
114
+ }
115
+ allow(Client).to receive(:get_space_properties)
116
+ .with("foo", hash_including(storeID: nil)) {
117
+ double(body: "",
118
+ headers: {
119
+ 'x-dura-meta-space-count'=>'3',
120
+ 'x-dura-meta-space-created'=>'2016-04-05T17:59:11'
121
+ })
122
+ }
110
123
  }
111
- describe ".content_ids", pending: "Correcting the stub request" do
112
- subject { Space.content_ids("foo") }
113
- its(:to_a) { is_expected.to eq(["foo1", "foo2", "foo3"]) }
124
+ describe "class methods" do
125
+ specify {
126
+ expect(Space.content_ids("foo").to_a).to eq(["foo1", "foo2", "foo3"])
127
+ }
128
+ specify {
129
+ expect(Space.items("foo").map(&:id)).to eq(["foo1", "foo2", "foo3"])
130
+ }
131
+ specify {
132
+ expect(Space.count("foo")).to eq(3)
133
+ }
114
134
  end
115
- describe "#content_ids" do
135
+ describe "instance methods" do
116
136
  subject { Space.find("foo") }
117
137
  specify {
118
- pending "Correcting the stub request"
119
138
  expect(subject.content_ids.to_a).to eq(["foo1", "foo2", "foo3"])
120
139
  }
140
+ specify {
141
+ expect(subject.items.map(&:id)).to eq(["foo1", "foo2", "foo3"])
142
+ }
143
+ its(:count) { is_expected.to eq(3) }
121
144
  end
122
-
123
- describe ".items"
124
- describe "#items"
125
-
126
- describe ".count"
127
- describe "#count"
128
145
  end
129
146
 
130
- describe ".audit_log"
131
- describe "#audit_log"
132
-
133
- describe ".bit_integrity_report"
134
- describe "#bit_integrity_report"
135
-
136
- describe ".manifest"
137
- describe "#manifest"
138
-
147
+ describe "reports" do
148
+ describe "class methods" do
149
+ before {
150
+ stub_request(:head, "https://example.com/durastore/foo")
151
+ }
152
+ specify {
153
+ expect(Space.audit_log("foo")).to be_a(AuditLog)
154
+ }
155
+ specify {
156
+ expect(Space.bit_integrity_report("foo")).to be_a(BitIntegrityReport)
157
+ }
158
+ specify {
159
+ expect(Space.manifest("foo")).to be_a(Manifest)
160
+ }
161
+ end
162
+ describe "instance methods" do
163
+ subject { described_class.new("foo") }
164
+ its(:audit_log) { is_expected.to be_a(AuditLog) }
165
+ its(:bit_integrity_report) { is_expected.to be_a(BitIntegrityReport) }
166
+ its(:manifest) { is_expected.to be_a(Manifest) }
167
+ end
168
+ end
139
169
  end
140
170
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duracloud-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
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: 2016-05-03 00:00:00.000000000 Z
11
+ date: 2016-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -160,7 +160,6 @@ files:
160
160
  - lib/duracloud/connection.rb
161
161
  - lib/duracloud/content.rb
162
162
  - lib/duracloud/content_properties.rb
163
- - lib/duracloud/csv_reader.rb
164
163
  - lib/duracloud/durastore_request.rb
165
164
  - lib/duracloud/error.rb
166
165
  - lib/duracloud/error_handler.rb
@@ -175,7 +174,11 @@ files:
175
174
  - lib/duracloud/space_acls.rb
176
175
  - lib/duracloud/space_properties.rb
177
176
  - lib/duracloud/store.rb
177
+ - lib/duracloud/tsv.rb
178
178
  - lib/duracloud/version.rb
179
+ - spec/fixtures/audit_log.tsv
180
+ - spec/fixtures/bit_integrity_report.tsv
181
+ - spec/fixtures/manifest.tsv
179
182
  - spec/spec_helper.rb
180
183
  - spec/unit/audit_log_spec.rb
181
184
  - spec/unit/bit_integrity_report_spec.rb
@@ -210,6 +213,9 @@ signing_key:
210
213
  specification_version: 4
211
214
  summary: Ruby client for communicating with DuraCloud
212
215
  test_files:
216
+ - spec/fixtures/audit_log.tsv
217
+ - spec/fixtures/bit_integrity_report.tsv
218
+ - spec/fixtures/manifest.tsv
213
219
  - spec/spec_helper.rb
214
220
  - spec/unit/audit_log_spec.rb
215
221
  - spec/unit/bit_integrity_report_spec.rb
@@ -1,19 +0,0 @@
1
- require "csv"
2
-
3
- module Duracloud
4
- class CSVReader
5
-
6
- CSV_OPTS = {
7
- col_sep: '\t',
8
- headers: :first_row,
9
- write_headers: true,
10
- return_headers: false,
11
- header_converters: [ ->(h){ h.downcase.gsub(/-/, "_") } ]
12
- }
13
-
14
- def self.call(data, opts = {})
15
- CSV.new(data, CSV_OPTS.merge(opts))
16
- end
17
-
18
- end
19
- end