Sha256: bf2c174020be7cd4c6178faf35d3c9ee860074d775ffac19b7ce8c6327e19880

Contents?: true

Size: 1.9 KB

Versions: 6

Compression:

Stored size: 1.9 KB

Contents

require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'fathom'))
require 'open-uri'
require 'yaml'

class Fathom::YAMLImport < Fathom::Import
  def import_plausible_ranges
    assert_yaml_content
    plausible_ranges = extract_plausible_ranges
    [PlausibleRange, plausible_ranges]
  end
  
  def import_data_nodes
    assert_yaml_content
    data_nodes = extract_data_nodes
    [DataNode, data_nodes]
  end
  
  def import_facts
    assert_yaml_content
    facts = extract_facts
    [Fact, facts]
  end
  
  protected
    def assert_yaml_content
      return @yaml_content if @yaml_content
      begin
        file_contents = open(self.content).read
        raise ArgumentError, "Unable to extract YAML data out of the contents." unless file_contents
      rescue
        file_contents = self.content
      end
        @yaml_content = YAML.load(file_contents)
    end
    
    def extract_facts
      return [] unless @yaml_content
      output = []
      @yaml_content.each do |e|
        next unless e.is_a?(Array)
        next unless e.first.to_s.match(/fact/i)
        obj = e[1]
        next unless obj.is_a?(Hash)
        output << obj
      end
      output
    end
    
    def extract_plausible_ranges
      return [] unless @yaml_content
      @yaml_content.inject([]) do |list, array|
        name, value = array.first, array.last
        if value.is_a?(Hash)
          value = OptionsHash.new(value)
          # list << value.merge(:name => name) if value[:min] and value[:max]
          list << value.merge(:name => name)
        end
        list 
      end
    end
    
    def extract_data_nodes
      return [] unless @yaml_content
      @yaml_content.inject([]) do |list, array|
        name, value = array.first, array.last
        list << {:name => name, :values => value} if value.is_a?(Array)
        list 
      end
    end
end

if __FILE__ == $0
  Fathom::YAMLImport.import(:content => ARGV.first)
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
fathom-0.3.7 lib/fathom/import/yaml_import.rb
fathom-0.3.6 lib/fathom/import/yaml_import.rb
fathom-0.3.4 lib/fathom/import/yaml_import.rb
fathom-0.3.3 lib/fathom/import/yaml_import.rb
fathom-0.3.2 lib/fathom/import/yaml_import.rb
fathom-0.3.1 lib/fathom/import/yaml_import.rb