From ee920f359c487057b97b6e535cd6e91b77b5b8b6 Mon Sep 17 00:00:00 2001 From: Jose Farias Date: Thu, 18 Apr 2024 22:57:50 -0600 Subject: [PATCH] Remove object parsing in TimeSeries::Value We're only every passing hashes --- app/models/time_series.rb | 4 ++-- app/models/time_series/value.rb | 25 +++++-------------------- test/models/family_test.rb | 6 +++--- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/app/models/time_series.rb b/app/models/time_series.rb index 0f07b77c..14342a13 100644 --- a/app/models/time_series.rb +++ b/app/models/time_series.rb @@ -49,8 +49,8 @@ class TimeSeries private def initialize_values(data) [ nil, *data ].each_cons(2).map do |previous, current| - TimeSeries::Value.new current, - previous: (TimeSeries::Value.new(previous) if previous), + TimeSeries::Value.new **current, + previous_value: previous.try(:[], :value), series: self end end diff --git a/app/models/time_series/value.rb b/app/models/time_series/value.rb index 62e74748..e691159d 100644 --- a/app/models/time_series/value.rb +++ b/app/models/time_series/value.rb @@ -7,10 +7,9 @@ class TimeSeries::Value validates :date, presence: true validate :value_must_be_of_known_type - def initialize(obj, series: nil, previous: nil) - @date, @value, @original = parse_object obj - @series = series - @trend = create_trend previous + def initialize(date:, value:, original: nil, series: nil, previous_value: nil) + @date, @value, @original, @series = date, value, original, series + @trend = create_trend previous_value validate! end @@ -32,24 +31,10 @@ class TimeSeries::Value private attr_reader :series - def parse_object(obj) - if obj.is_a?(Hash) - date = obj[:date] - value = obj[:value] - original = obj.fetch(:original, obj) - else - date = obj.date - value = obj.value - original = obj - end - - [ date, value, original ] - end - - def create_trend(previous) + def create_trend(previous_value) TimeSeries::Trend.new \ current: value, - previous: previous&.value, + previous: previous_value, series: series end diff --git a/test/models/family_test.rb b/test/models/family_test.rb index 9fe168e0..7e01a9c8 100644 --- a/test/models/family_test.rb +++ b/test/models/family_test.rb @@ -73,9 +73,9 @@ class FamilyTest < ActiveSupport::TestCase assert_equal @expected_snapshots.count, net_worth_series.values.count @expected_snapshots.each_with_index do |row, index| - expected_assets = TimeSeries::Value.new({ date: row["date"], value: Money.new(row["assets"].to_d) }) - expected_liabilities = TimeSeries::Value.new({ date: row["date"], value: Money.new(row["liabilities"].to_d) }) - expected_net_worth = TimeSeries::Value.new({ date: row["date"], value: Money.new(row["net_worth"].to_d) }) + expected_assets = TimeSeries::Value.new(date: row["date"], value: Money.new(row["assets"].to_d)) + expected_liabilities = TimeSeries::Value.new(date: row["date"], value: Money.new(row["liabilities"].to_d)) + expected_net_worth = TimeSeries::Value.new(date: row["date"], value: Money.new(row["net_worth"].to_d)) assert_in_delta expected_assets.value.amount, Money.new(asset_series.values[index].value).amount, 0.01 assert_in_delta expected_liabilities.value.amount, Money.new(liability_series.values[index].value).amount, 0.01