From 2183232aec06514ff252b5b66ec219a03491d1c2 Mon Sep 17 00:00:00 2001 From: Zach Gollwitzer Date: Thu, 22 May 2025 11:58:06 -0400 Subject: [PATCH] Use resolver for trade builder --- app/models/security/resolver.rb | 7 ++++++- app/models/trade_builder.rb | 12 +++--------- test/models/security/resolver_test.rb | 5 ++--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/app/models/security/resolver.rb b/app/models/security/resolver.rb index abd37419..2b0e13bc 100644 --- a/app/models/security/resolver.rb +++ b/app/models/security/resolver.rb @@ -1,6 +1,6 @@ class Security::Resolver def initialize(symbol, exchange_operating_mic: nil, country_code: nil) - @symbol = symbol + @symbol = validate_symbol!(symbol) @exchange_operating_mic = exchange_operating_mic @country_code = country_code end @@ -22,6 +22,11 @@ class Security::Resolver private attr_reader :symbol, :exchange_operating_mic, :country_code + def validate_symbol!(symbol) + raise ArgumentError, "Symbol is required and cannot be blank" if symbol.blank? + symbol.strip.upcase + end + def offline_security security = Security.find_or_initialize_by( ticker: symbol, diff --git a/app/models/trade_builder.rb b/app/models/trade_builder.rb index 3893a3e0..72d9aa01 100644 --- a/app/models/trade_builder.rb +++ b/app/models/trade_builder.rb @@ -1,8 +1,6 @@ class TradeBuilder include ActiveModel::Model - Error = Class.new(StandardError) - attr_accessor :account, :date, :amount, :currency, :qty, :price, :ticker, :manual_ticker, :type, :transfer_account_id @@ -131,13 +129,9 @@ class TradeBuilder def security ticker_symbol, exchange_operating_mic = ticker.present? ? ticker.split("|") : [ manual_ticker, nil ] - unless ticker_symbol.present? - raise Error, "Ticker symbol is required to create a trade" - end - - Security.find_or_create_by!( - ticker: ticker_symbol, + Security::Resolver.new( + ticker_symbol, exchange_operating_mic: exchange_operating_mic - ) + ).resolve end end diff --git a/test/models/security/resolver_test.rb b/test/models/security/resolver_test.rb index b0c35621..1a557f22 100644 --- a/test/models/security/resolver_test.rb +++ b/test/models/security/resolver_test.rb @@ -72,8 +72,7 @@ class Security::ResolverTest < ActiveSupport::TestCase end test "returns nil when symbol blank" do - assert_no_difference "Security.count" do - assert_nil Security::Resolver.new(nil).resolve - end + assert_raises(ArgumentError) { Security::Resolver.new(nil).resolve } + assert_raises(ArgumentError) { Security::Resolver.new("").resolve } end end