Sha256: be5a283a2708244efc62bf1a44d3f521b3d64642caa50737453e8b8c510cfa31

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

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

1 entries across 1 versions & 1 rubygems

Version Path
data_miner-1.0.0 lib/data_miner/dictionary.rb