Module: Indexer::Importer::FileImportation
- Included in:
- Indexer::Importer
- Defined in:
- lib/indexer/importer/file.rb
Overview
Import metadata from individual files.
Instance Method Summary collapse
-
#import(source) ⇒ Object
Files import procedure.
-
#load_directory(folder) ⇒ Object
Import files from a given directory.
-
#load_field_file(file) ⇒ Object
Import a field setting from a file.
Instance Method Details
#import(source) ⇒ Object
Files import procedure.
12 13 14 15 16 17 18 19 |
# File 'lib/indexer/importer/file.rb', line 12 def import(source) if File.directory?(source) load_directory(source) true else super(source) if defined?(super) end end |
#load_directory(folder) ⇒ Object
TODO:
Subdirectories are simply omitted. Maybe do otherwise in future?
Import files from a given directory. This will only import files that have a name corresponding to a metadata attribute, unless the file is listed in a ‘.index_extra` file within the directory.
However, files with an extension of ‘.yml` or `.yaml` will be loaded wholeclothe and not as a single attribute.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/indexer/importer/file.rb', line 31 def load_directory(folder) if File.directory?(folder) extra = [] extra_file = File.join(folder, '.index_extra') if File.exist?(extra_file) extra = File.read(extra_file).split("\n") extra = extra.collect{ |pattern| pattern.strip } extra = extra.reject { |pattern| pattern.empty? } extra = extra.collect{ |pattern| Dir[File.join(folder, pattern)] }.flatten end files = Dir[File.join(folder, '*')] files.each do |file| next if File.directory?(file) name = File.basename(file).downcase next load_yaml(file) if %w{.yaml .yml}.include?(File.extname(file)) next load_field_file(file) if extra.include?(name) next load_field_file(file) if .attributes.include?(name.to_sym) end end end |
#load_field_file(file) ⇒ Object
Import a field setting from a file.
TODO: Ultimately support JSON and maybe other types, and possibly use mime-types library to recognize them.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/indexer/importer/file.rb', line 58 def load_field_file(file) if File.directory?(file) # ... else case File.extname(file).downcase when '.yaml', '.yml' name = File.basename(file).downcase name = name.chomp('.yaml').chomp('.yml') [name] = YAML.load_file(file) # TODO: should yaml files with explict extension by merged instead? #metadata.merge!(YAML.load_file(file)) when '.text', '.txt' name = File.basename(file).downcase name = name.chomp('.text').chomp('.txt') text = File.read(file) [name] = text.strip else text = File.read(file) if /\A---/ =~ text name = File.basename(file).downcase [name] = YAML.load(text) else name = File.basename(file).downcase [name] = text.strip end end end end |