Skip to content

Instantly share code, notes, and snippets.

@kpearson
Last active September 2, 2016 18:12
Show Gist options
  • Save kpearson/1af2668a701cf534764c1208a3cb1f72 to your computer and use it in GitHub Desktop.
Save kpearson/1af2668a701cf534764c1208a3cb1f72 to your computer and use it in GitHub Desktop.

How to run the test file

  1. First move the two files in to the same directory on to your system.

  2. Then install the gems 'minitest' and 'purdytest' with:

$ gem install 'minitest'
$ gem install 'purdytest'
  1. Run the test file from within the directory the ruby files are in.
ruby test_largert_storm_events.rb`.

If you have any questions leave them in the comments below. If you include an @kpearson I'll get a notification.

require "CSV"
class LargestStormEvents
attr_reader :file, :clean_data, :event_range
def initialize file
@file = file
@clean_data = data_cleaner file
end
def events_in_date_range time1, time2
date_time_range time1, time2
clean_data.select { |row| in_time_range? row }
end
private
def csv_reader file
CSV.read(file, headers: true, :header_converters => :symbol).map(&:to_hash)
end
def data_cleaner file
elements = ["A", "B", "C"]
cz_name_filtered = filter_data(csv_reader(file), elements, :cz_name)
filter_data(cz_name_filtered, elements, :tor_other_cz_name)
end
def in_time_range? event
event_range === event_time(event)
end
def date_time_range(start, finish)
@event_range = parse_date_time(start)..parse_date_time(finish)
end
protected
def event_time event
event_date = event[:begin_date_time] + "-#{offset(event[:cz_timezone])}:00"
parse_date_time event_date
end
def parse_date_time date
DateTime.parse(date).to_time
end
def offset number
number.size == 1 ? "0#{number}" : number
end
def filter_data(data, elements, field)
data.reject { |row| elements.include? row[field][0] if row[field] }
end
end
require "minitest/autorun"
require 'purdytest'
require "./largest_storm_events.rb"
class TestLargestStormEvents < Minitest::Test
@@storm_event = LargestStormEvents.new("2015_c20160810.csv")
def test_clean_data
assert_equal 45089, @@storm_event.clean_data.count
end
def test_events_in_date_range
start_date = "1-JUNE-15 00:00:00+05:00"
end_date = "31-DEC-15 00:00:00+05:00"
assert_equal 25047, @@storm_event.events_in_date_range(start_date, end_date).size
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment