Sha256: c54cac6edc070752a01ee39d912a88cb5edc4cf8c5449cc730cb130a56dfa292

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

require 'sidekiq'
require 'open-uri'
require 'mongoid'
require 'digest'
require 'date'
require_relative 'dollar'

Sidekiq.configure_client do |config|
  config.redis = { db: 1 }
end

Sidekiq.configure_server do |config|
  config.redis = { db: 1 }
end

class UpdateDatabase
  include Sidekiq::Worker
  Mongoid.load!('mongoid.yml', :development)

  def perform(url)
    download_file(url)
    attrs = process_csv_attributes
    clean_attrs = setup_attributes(attrs)
    update_database(clean_attrs)
  end

  def download_file(url)
    IO.copy_stream(open(url), 'csv/dollars.csv')
  end

  def process_csv_attributes
    file = File.open('csv/dollars.csv', 'r')
    count = 0
    attributes = []
    while line = file.gets
      # skip first 5 lines
      count += 1
      next if count < 6
      date, value = line.split(',')
      attributes << { date: Date.parse(date), value: value.strip.to_f }
    end
    attributes
  end

  def setup_attributes(attributes)
    # if it is the first time the database is being loaded
    return attributes.reverse if Dollar.count.zero?
    # if the database is already up to date
    return {} if attributes.first[:date] == Dollar.last.date
    # we nee to load some registers to update the database
    attributes.select { |dollar| dollar[:date] > Dollar.last.date }.reverse
  end

  def update_database(attrs)
    Dollar.create(attrs) unless attrs.empty?
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dollar_to_euro-0.1.1 lib/dollar_to_euro/worker.rb
dollar_to_euro-0.1.0 lib/dollar_to_euro/worker.rb