Class: StoreAgent::Node::Attachment

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Validator
Defined in:
lib/store_agent/node/attachment.rb

Overview

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

Direct Known Subclasses

Metadata, Permission

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Validator

#validates_to_be_excluded_slash!, #validates_to_be_not_guest_identifier!, #validates_to_be_not_nil_value!, #validates_to_be_not_superuser_identifier!, #validates_to_be_string_or_symbol!

Constructor Details

#initialize(object: nil) ⇒ Attachment

:nodoc:



28
29
30
31
# File 'lib/store_agent/node/attachment.rb', line 28

def initialize(object: nil) # :nodoc:
  @object = object
  validates_to_be_not_nil_value!(:object)
end

Instance Attribute Details

#objectObject (readonly)

Returns the value of attribute object.



25
26
27
# File 'lib/store_agent/node/attachment.rb', line 25

def object
  @object
end

Instance Method Details

#createObject

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



39
40
41
42
43
44
45
# 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

#dataObject

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



34
35
36
# File 'lib/store_agent/node/attachment.rb', line 34

def data
  @data ||= (load || initial_data)
end

#deleteObject

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



48
49
50
51
52
53
54
55
# 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

#inspectObject

:nodoc:



88
89
90
# File 'lib/store_agent/node/attachment.rb', line 88

def inspect # :nodoc:
  Oj.dump(data, mode: :compat, indent: 2)
end

#loadObject

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



72
73
74
75
76
77
78
79
80
# 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

#reloadObject

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



83
84
85
86
# File 'lib/store_agent/node/attachment.rb', line 83

def reload
  @data = nil
  self
end

#saveObject

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



58
59
60
61
62
63
64
65
66
67
68
69
# 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