Sha256: 216e14447c70e009fecac7ca41a211e9507f60c6f6d3f32ba205590af387d8f5

Contents?: true

Size: 1.09 KB

Versions: 7

Compression:

Stored size: 1.09 KB

Contents

require 'remote_table'
class DataMiner
  class Dictionary
    attr_reader :options
    def initialize(options = {})
      @options = options.dup
      @options.stringify_keys!
    end
    
    def key_name
      options['input']
    end
    
    def value_name
      options['output']
    end
    
    def sprintf
      options['sprintf'] || '%s'
    end
    
    def table
      @table ||= ::RemoteTable.new options['url']
    end

    def lookup(key)
      find key_name, key, value_name, 'sprintf' => sprintf
    end
    
    def find(key_name, key, value_name, options = {})
      if match = table.detect { |row| normalize_for_comparison(key, options) == normalize_for_comparison(row[key_name], options) }
        match[value_name].to_s
      end
    end

    private

    def normalize_for_comparison(string, options = {})
      if options['sprintf']
        if /\%[0-9\.]*f/.match options['sprintf']
          string = string.to_f
        elsif /\%[0-9\.]*d/.match options['sprintf']
          string = string.to_i
        end
        string = sprintf % string
      end
      string.to_s.strip
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
data_miner-1.1.5 lib/data_miner/dictionary.rb
data_miner-1.1.4 lib/data_miner/dictionary.rb
data_miner-1.1.3 lib/data_miner/dictionary.rb
data_miner-1.1.2 lib/data_miner/dictionary.rb
data_miner-1.1.1 lib/data_miner/dictionary.rb
data_miner-1.1.0 lib/data_miner/dictionary.rb
data_miner-1.0.1 lib/data_miner/dictionary.rb