lib/duracloud/bit_integrity_report.rb in duracloud-client-0.0.3 vs lib/duracloud/bit_integrity_report.rb in duracloud-client-0.1.0

- old
+ new

@@ -1,63 +1,77 @@ require "date" -require "csv" module Duracloud class BitIntegrityReport SUCCESS = "SUCCESS".freeze FAILURE = "FAILURE".freeze - CSV_OPTS = { - col_sep: '\t', - headers: :first_row, - write_headers: true, - return_headers: true, - } + COMPLETION_DATE_HEADER = "Bit-Integrity-Report-Completion-Date".freeze + RESULT_HEADER = "Bit-Integrity-Report-Result".freeze - def self.success?(space_id) - new(space_id).success? - end + attr_reader :space_id, :store_id - attr_reader :space_id - - def initialize(space_id) + def initialize(space_id, store_id = nil) @space_id = space_id + @store_id = store_id + @report, @properties = nil, nil end - def data + def tsv report.body end def completion_date - DateTime.parse(properties["Bit-Integrity-Report-Completion-Date"].first) + DateTime.parse(properties[COMPLETION_DATE_HEADER].first) end def result - properties["Bit-Integrity-Report-Result"].first + properties[RESULT_HEADER].first end def csv(opts = {}) - CSV.new(data, CSV_OPTS.merge(opts)) + CSVReader.new(tsv, opts) end def success? result == SUCCESS end - private - def report - @report ||= Client.get_bit_integrity_report(space_id) + @report ||= fetch_report end + def report_loaded? + !@report.nil? + end + def properties - @properties ||= if @report - report.headers - else - response = Client.get_bit_integrity_report_properties(space_id) - response.headers - end + @properties ||= fetch_properties + end + + private + + def fetch_report + reset_properties + Client.get_bit_integrity_report(space_id, **query) + end + + def reset_properties + @properties = nil + end + + def fetch_properties + if report_loaded? + report.headers + else + response = Client.get_bit_integrity_report_properties(space_id, **query) + response.headers + end + end + + def query + { storeID: store_id } end end end