class StoreAgent::Node::Attachment

メタデータや権限情報など、オブジェクトに付属する情報
データはJSON形式のファイルで保存され、ハッシュ形式のデータとしてアクセスできる

Attributes

object[R]

Public Instance Methods

create() click to toggle source

オブジェクトの作成時に一緒に作成される

# File lib/store_agent/node/attachment.rb, line 39
def create
  dirname = File.dirname(file_path)
  if !File.exists?(dirname)
    FileUtils.mkdir(dirname)
  end
  save
end
data() click to toggle source

ハッシュ形式のデータにアクセスするためのメソッド

# File lib/store_agent/node/attachment.rb, line 34
def data
  @data ||= (load || initial_data)
end
delete() click to toggle source

オブジェクトの削除時に一緒に削除される

# File lib/store_agent/node/attachment.rb, line 48
def delete
  if object.directory?
    FileUtils.remove_dir(File.dirname(file_path))
  else
    FileUtils.rm(file_path)
  end
  object.workspace.version_manager.remove(file_path)
end
load() click to toggle source

データをファイルから読み込むメソッド

# File lib/store_agent/node/attachment.rb, line 72
def load
  if File.exists?(file_path)
    encoded_data = open(file_path, "rb").read
    json_data = StoreAgent.config.attachment_data_encoders.reverse.inject(encoded_data) do |data, encoder|
      encoder.decode(data)
    end
    Oj.load(json_data)
  end
end
reload() click to toggle source

保存されていない変更を破棄する

# File lib/store_agent/node/attachment.rb, line 83
def reload
  @data = nil
  self
end
save() click to toggle source

データをファイルに保存するメソッド

# File lib/store_agent/node/attachment.rb, line 58
def save
  json_data = Oj.dump(data, mode: :compat, indent: StoreAgent.config.json_indent_level)
  encoded_data = StoreAgent.config.attachment_data_encoders.inject(json_data) do |data, encoder|
    encoder.encode(data)
  end
  open(file_path, File::WRONLY | File::CREAT) do |f|
    f.truncate(0)
    f.write encoded_data
  end
  object.workspace.version_manager.add(file_path)
  reload
end