lib/relaton/db.rb in relaton-0.1.0 vs lib/relaton/db.rb in relaton-0.1.1

- old
+ new

@@ -42,26 +42,29 @@ end # @param key [String] # @return [Hash] def load_entry(key) - entry = @local_db.transaction { @local_db[key] } - return entry if entry + unless @local_db.nil? + entry = @local_db.transaction { @local_db[key] } + return entry if entry + end @db.transaction { @db[key] } end # @param key [String] # @param value [Hash] # @option value [Date] "fetched" # @option value [IsoBibItem::IsoBibliographicItem] "bib" def save_entry(key, value) - @db.transaction { @db[key] = value } - @local_db.transaction { @local_db[key] = value } + @db.nil? or @db.transaction { @db[key] = value } + @local_db.nil? or @local_db.transaction { @local_db[key] = value } end # list all entris as a serialization def to_xml + return nil if @db.nil? @db.transaction do Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml| xml.documents do @db.roots.each { |key| @db[key]["bib"].to_xml(xml, {}) } end @@ -98,23 +101,30 @@ ret += ":#{year}" if year ret += " (all parts)" if opts[:all_parts] ret end + def bib_retval(entry) + entry["bib"] == "not_found" ? nil : entry["bib"] + end + # @param code [String] # @param year [String] # @param opts [Hash] # @param stdclass [Symbol] def check_bibliocache(code, year, opts, stdclass) id = std_id(code, year, opts, stdclass) - return nil if @db.nil? # signals we will not be using isobib + return bib_retval(new_bib_entry(code, year, opts, stdclass)) if @db.nil? @db.transaction do @db.delete(id) unless valid_bib_entry?(@db[id], year) @db[id] ||= new_bib_entry(code, year, opts, stdclass) - @local_db.transaction do - @local_db[id] = @db[id] if !valid_bib_entry?(@local_db[id], year) - @local_db[id]["bib"] == "not_found" ? nil : @local_db[id]["bib"] + if @local_db.nil? then bib_retval(@db[id]) + else + @local_db.transaction do + @local_db[id] = @db[id] if !valid_bib_entry?(@local_db[id], year) + bib_retval(@local_db[id]) + end end end end # hash uses => , because the hash is imported from JSONo @@ -132,15 +142,16 @@ # if cached reference is undated, expire it after 60 days # @param bib [Hash] # @param year [String] def valid_bib_entry?(bib, year) bib&.is_a?(Hash) && bib&.has_key?("bib") && bib&.has_key?("fetched") && - (year || Date.today - bib["fetched"] < 60) + (year || Date.today - Date.iso8601(bib["fetched"]) < 60) end # @param filename [String] DB filename # @return [Hash] def open_cache_biblio(filename) + return nil if filename.nil? PStore.new filename # biblio = {} # return {} unless !filename.nil? && Pathname.new(filename).file? # File.open(filename, "r") { |f| biblio = JSON.parse(f.read) } # biblio.each { |_k, v| v["bib"] && (v["bib"] = from_xml(v["bib"])) }