diff --git a/lib/segment/analytics/field_parser.rb b/lib/segment/analytics/field_parser.rb index 7918710..56e2f12 100644 --- a/lib/segment/analytics/field_parser.rb +++ b/lib/segment/analytics/field_parser.rb @@ -160,9 +160,10 @@ def parse_common_fields(fields) end def check_user_id!(fields) - unless fields[:user_id] || fields[:anonymous_id] - raise ArgumentError, 'Must supply either user_id or anonymous_id' - end + return unless blank?(fields[:user_id]) + return unless blank?(fields[:anonymous_id]) + + raise ArgumentError, 'Must supply either user_id or anonymous_id' end def check_timestamp!(timestamp) @@ -178,11 +179,15 @@ def add_context!(context) # obj - String|Number that must be non-blank # name - Name of the validated value def check_presence!(obj, name) - if obj.nil? || (obj.is_a?(String) && obj.empty?) + if blank?(obj) raise ArgumentError, "#{name} must be given" end end + def blank?(obj) + obj.nil? || (obj.is_a?(String) && obj.empty?) + end + def check_is_hash!(obj, name) raise ArgumentError, "#{name} must be a Hash" unless obj.is_a? Hash end diff --git a/spec/segment/analytics_spec.rb b/spec/segment/analytics_spec.rb index 17961b2..7d20611 100644 --- a/spec/segment/analytics_spec.rb +++ b/spec/segment/analytics_spec.rb @@ -12,6 +12,8 @@ class Analytics it 'errors without user_id or anonymous_id' do expect { analytics.track :event => 'event' }.to raise_error(ArgumentError) + expect { analytics.track :event => 'event', user_id: ''}.to raise_error(ArgumentError) + expect { analytics.track :event => 'event', anonymous_id:''}.to raise_error(ArgumentError) expect { analytics.track :event => 'event', user_id: '1234' }.to_not raise_error(ArgumentError) expect { analytics.track :event => 'event', anonymous_id: '2345' }.to_not raise_error(ArgumentError) end