Class: Bmg::Database::DataFolder
- Inherits:
-
Bmg::Database
- Object
- Bmg::Database
- Bmg::Database::DataFolder
- 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
- #each_relation_pair ⇒ Object
-
#initialize(folder, options = {}) ⇒ DataFolder
constructor
A new instance of DataFolder.
- #method_missing(name, *args, &bl) ⇒ Object
Methods inherited from Bmg::Database
data_folder, #output_preferences_for, sequel, #to_data_folder, #to_xlsx, xlsx
Constructor Details
#initialize(folder, options = {}) ⇒ DataFolder
Returns a new instance of DataFolder.
11 12 13 14 |
# File 'lib/bmg/database/data_folder.rb', line 11 def initialize(folder, = {}) @folder = Path(folder) @options = DEFAULT_OPTIONS.merge() 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, = DEFAULT_OPTIONS) = DEFAULT_OPTIONS.merge() path = Path(path) path.mkdir_p database.each_relation_pair do |name, rel| filename = [: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 |