Module: Inventory

Defined in:
lib/inventory.rb

Overview

Narou.rbのシステムが記録するデータ単位

.narou ディレクトリにYAMLファイルとして保存される scope に :global を指定するとユーザーディレクトリ/.narousetting に保存される

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.clearObject



26
27
28
# File 'lib/inventory.rb', line 26

def self.clear
  @@cache = {}
end

.load(name, scope = :local) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/inventory.rb', line 16

def self.load(name, scope = :local)
  @@cache ||= {}
  return @@cache[name] if @@cache[name]
  {}.tap { |h|
    h.extend(Inventory)
    h.init(name, scope)
    @@cache[name] = h
  }
end

Instance Method Details

#init(name, scope) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/inventory.rb', line 30

def init(name, scope)
  dir = case scope
        when :local
          Narou.get_local_setting_dir
        when :global
          Narou.get_global_setting_dir
        else
          raise "Unknown scope"
        end
  return nil unless dir
  @mutex = Mutex.new
  @inventory_file_path = File.join(dir, name + ".yaml")
  if File.exist?(@inventory_file_path)
    self.merge!(Helper::CacheLoader.memo(@inventory_file_path) { |yaml|
      YAML.load(yaml)
    })
  end
end

#saveObject



49
50
51
52
53
54
55
56
# File 'lib/inventory.rb', line 49

def save
  unless @inventory_file_path
    raise "not initialized setting dir yet"
  end
  @mutex.synchronize do
    File.write(@inventory_file_path, YAML.dump(self))
  end
end