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
.clear ⇒ Object
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 48 49 50 51 52 53 54 |
# File 'lib/inventory.rb', line 30 def init(name, scope) dir = case scope when :local Narou.local_setting_dir when :global Narou.global_setting_dir else raise "Unknown scope" end return nil unless dir @mutex = Mutex.new @inventory_file_path = File.join(dir, name + ".yaml") return unless File.exist?(@inventory_file_path) self.merge!(Helper::CacheLoader.memo(@inventory_file_path) { |yaml| begin YAML.load(yaml) rescue Psych::SyntaxError unless restore(@inventory_file_path) error "#{@inventory_file_path} が壊れてるっぽい" raise end YAML.load_file(@inventory_file_path) end }) end |
#restore(path) ⇒ Object
65 66 67 68 69 70 |
# File 'lib/inventory.rb', line 65 def restore(path) backup_path = "#{path}.backup" return nil unless File.exist?(backup_path) FileUtils.copy(backup_path, path) true end |
#save ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/inventory.rb', line 56 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 |