Class: Bmg::Database::DataFolder
- Inherits:
-
Database
- Object
- Database
- Bmg::Database::DataFolder
show all
- Defined in:
- lib/bmg/database/data_folder.rb
Constant Summary
collapse
- DEFAULT_OPTIONS =
{
data_extensions: ['json', 'yml', 'yaml', 'csv'],
relname_from_file: ->(file) { file.basename.rm_ext.to_sym },
filename_from_relname: ->(relname) { relname },
}
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(folder, options = {}) ⇒ DataFolder
11
12
13
14
|
# File 'lib/bmg/database/data_folder.rb', line 11
def initialize(folder, options = {})
@folder = Path(folder)
@options = DEFAULT_OPTIONS.merge(options)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &bl) ⇒ Object
16
17
18
19
20
|
# File 'lib/bmg/database/data_folder.rb', line 16
def method_missing(name, *args, &bl)
return super(name, *args, &bl) unless args.empty? && bl.nil?
raise NotSuchRelationError(name.to_s) unless file = find_file(name)
read_file(file)
end
|
Class Method Details
.dump(database, path, ext = :json, options = DEFAULT_OPTIONS) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/bmg/database/data_folder.rb', line 34
def self.dump(database, path, ext = :json, options = DEFAULT_OPTIONS)
options = DEFAULT_OPTIONS.merge(options)
path = Path(path)
path.mkdir_p
database.each_relation_pair do |name, rel|
filename = options[:filename_from_relname].call(name)
if ext === :json
(path/"#{filename}.#{ext}").write(JSON.pretty_generate(rel))
else
(path/"#{filename}.#{ext}").write(rel.public_send(:"to_#{ext}"))
end
end
path
end
|
Instance Method Details
#each_relation_pair ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/bmg/database/data_folder.rb', line 22
def each_relation_pair
return to_enum(:each_relation_pair) unless block_given?
@folder.glob('*') do |path|
next unless path.file?
next unless @options[:data_extensions].find {|ext|
path.ext == ".#{ext}" || path.ext == ext
}
yield(@options[:relname_from_file].call(path), read_file(path))
end
end
|