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"])) }