Module: QueryStream::DataResolver
- Defined in:
- lib/query_stream/data_resolver.rb
Overview
データファイル探索・読み込みモジュール
Constant Summary collapse
- EXTENSIONS =
サポートする拡張子(優先順位順)
%w[.yml .yaml .json].freeze
Class Method Summary collapse
-
.find_with_extensions(base_name, data_dir) ⇒ String?
指定名ですべての拡張子を試行する.
-
.load_records(file_path) ⇒ Array<Hash>
レコード群をファイルから読み込む.
-
.resolve(source_name, data_dir) ⇒ String?
データファイルのパスを解決する 指定名そのまま → 複数形(末尾に s を付与)→ 単数形の順で探索する.
Class Method Details
.find_with_extensions(base_name, data_dir) ⇒ String?
指定名ですべての拡張子を試行する
65 66 67 68 69 70 71 |
# File 'lib/query_stream/data_resolver.rb', line 65 def find_with_extensions(base_name, data_dir) EXTENSIONS.each do |ext| path = File.join(data_dir, "#{base_name}#{ext}") return path if File.exist?(path) end nil end |
.load_records(file_path) ⇒ Array<Hash>
レコード群をファイルから読み込む
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/query_stream/data_resolver.rb', line 49 def load_records(file_path) records = case File.extname(file_path).downcase when '.json' JSON.parse(File.read(file_path, encoding: 'utf-8'), symbolize_names: true) else YAML.load_file(file_path, symbolize_names: true) end records = [records] if records.is_a?(Hash) records end |
.resolve(source_name, data_dir) ⇒ String?
データファイルのパスを解決する指定名そのまま → 複数形(末尾に s を付与)→ 単数形の順で探索する
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/query_stream/data_resolver.rb', line 27 def resolve(source_name, data_dir) # そのまま試行 found = find_with_extensions(source_name, data_dir) return found if found # 複数形を試行(単数形→複数形: book → books) found = find_with_extensions("#{source_name}s", data_dir) return found if found # 単数形を試行(複数形→単数形: books → book) singular = Singularize.call(source_name) if singular != source_name found = find_with_extensions(singular, data_dir) return found if found end nil end |