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
28 29 30 |
# File 'lib/inventory.rb', line 28 def self.clear @@cache = {} end |
.load(name = "local_setting", scope = :local) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/inventory.rb', line 18 def self.load(name = "local_setting", 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
#group(group_name) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/inventory.rb', line 74 def group(group_name) result = {} each do |name, value| next unless name =~ /^#{group_name}\.(.+)$/ child_name = $1 result[child_name] = value lodashed_name = child_name.tr("-", "_") result[lodashed_name] = value if child_name != lodashed_name end OpenStruct.new(result) end |
#init(name, scope) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/inventory.rb', line 32 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.unsafe_load(yaml) rescue Psych::SyntaxError unless restore(@inventory_file_path) error "#{@inventory_file_path} が壊れてるっぽい" raise end YAML.unsafe_load_file(@inventory_file_path) end }) end |