Files
kiss-vscode/projects/bad-nlp/name-database/lib/name-database/entry.rb

52 lines
1.0 KiB
Ruby

class NameDatabase::Entry
attr_reader :name
attr_reader :set
attr_reader :file
attr_reader :meta
attr_reader :line
def initialize(set, file, data)
@set = set
@file = file
case data
when String then
@name = data
@meta = {}.with_indifferent_access
when Hash then
@name = data.keys.first
@meta = data.values.first.with_indifferent_access
end
end
def metadata_without_nesting
returning({}) do |result|
NameDatabase::Entry.flattened_meta("", result, meta)
end
end
def self.flattened_meta(prefix, result, meta)
meta.each do |key, value|
flattened_key = prefix.blank? ? key : "#{prefix}/#{key}"
case value
when Hash
result.merge! flattened_meta(flattened_key, result, value)
else
result[flattened_key] = value
end
end
end
def path()
set.data_file_path(name)
end
def merge(other)
new_data = {name => meta.merge(other.meta)}
NameDatabase::Entry.new(self.set, self.file, new_data)
end
end