mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 15:49:39 +02:00
* Reindent TimeSeries classes
* Fix spacing in time series tests
* Remove trend tests where current is nil
I think if we've gotten this far with a nil value for current, there's a data integrity problem.
If we allow this, we'll have to be very defensive in our code. Best to raise and fix early.
* Reindent Money class
* Refactor TimeSeries artifacts
* Use as_json in TimeSeries
* Bring back tests for trends where current is nil
* Bring back trend test
* Correctly enumerate trend test
* Use favorable_direction for trend_styles helper
* Make trend public in TimeSeries::Value
* Allow nil current values in trends
I think I might've gotten it wrong before, nils might appear in trends if values are unavailable for snapshots
* Clean up TimeSeries::Trend
* Skip trend values same class validations if any values are nil
* Refactor Money
* Remove object parsing in TimeSeries::Value
We're only every passing hashes
* Refactor trendline chart controller into a time series chart controller
* Replace trendline controller
* Implement empty state
* Port line-chart controller into time-series-chart
* Split out methods
* Group similar time series chart functionality
* Fix indicator color
* Fix empty state in time series chart
* Replace line-chart controller with time-series-chart controller
* Draw empty time series chart if less than 2 data points
* Fix favorable direction serialization
* Handle integers as well as money
* Fix favorable direction serialization
* Replace chart types with optional elements
* Prevent double-renders when displaying turbo caches of time series charts
* Remove ambiguities between time series and series data
* Improve time series chart property names
* Clean up tooltip template
* Match tooltip designs
* Apply trendline gradient
* Implement trendline split behavior
* Use same stroke width on all trend lines
* Sort time series data by date
* Support percentages
* Use data color for guideline circles
* Revert "Use data color for guideline circles"
This reverts commit f239a1e00f
.
* Use expected defaults for time series chart
* Include day in time-series chart x-axis labels
* favorableDirection -> favorable_direction
* data -> datum where appropriate
* Hide change data in tooltip for percentages
46 lines
1,012 B
Ruby
46 lines
1,012 B
Ruby
class TimeSeries::Value
|
|
include Comparable
|
|
include ActiveModel::Validations
|
|
|
|
attr_reader :value, :date, :original, :trend
|
|
|
|
validates :date, presence: true
|
|
validate :value_must_be_of_known_type
|
|
|
|
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
|
|
|
|
def <=>(other)
|
|
result = date <=> other.date
|
|
result = value <=> other.value if result == 0
|
|
result
|
|
end
|
|
|
|
def as_json
|
|
{
|
|
date: date.iso8601,
|
|
value: value.as_json,
|
|
trend: trend.as_json
|
|
}
|
|
end
|
|
|
|
private
|
|
attr_reader :series
|
|
|
|
def create_trend(previous_value)
|
|
TimeSeries::Trend.new \
|
|
current: value,
|
|
previous: previous_value,
|
|
series: series
|
|
end
|
|
|
|
def value_must_be_of_known_type
|
|
unless value.is_a?(Money) || value.is_a?(Numeric)
|
|
errors.add :value, "must be a Money or Numeric"
|
|
end
|
|
end
|
|
end
|