diff --git a/app/javascript/controllers/maps_controller.js b/app/javascript/controllers/maps_controller.js index c2e7f0fd..7161d356 100644 --- a/app/javascript/controllers/maps_controller.js +++ b/app/javascript/controllers/maps_controller.js @@ -47,7 +47,7 @@ export default class extends BaseController { this.clearFogRadius = parseInt(this.userSettings.fog_of_war_meters) || 50; this.fogLinethreshold = parseInt(this.userSettings.fog_of_war_threshold) || 90; this.routeOpacity = parseFloat(this.userSettings.route_opacity) || 0.6; - this.distanceUnit = this.userSettings.maps.distance_unit || "km"; + this.distanceUnit = this.userSettings.distance_unit || "km"; this.pointsRenderingMode = this.userSettings.points_rendering_mode || "raw"; this.liveMapEnabled = this.userSettings.live_map_enabled || false; this.countryCodesMap = countryCodesMap(); diff --git a/app/services/users/safe_settings.rb b/app/services/users/safe_settings.rb index 6e0d0743..64b1209a 100644 --- a/app/services/users/safe_settings.rb +++ b/app/services/users/safe_settings.rb @@ -3,12 +3,30 @@ class Users::SafeSettings attr_reader :settings - def initialize(settings) - @settings = settings + DEFAULT_VALUES = { + 'fog_of_war_meters' => 50, + 'meters_between_routes' => 500, + 'preferred_map_layer' => 'OpenStreetMap', + 'speed_colored_routes' => false, + 'points_rendering_mode' => 'raw', + 'minutes_between_routes' => 30, + 'time_threshold_minutes' => 30, + 'merge_threshold_minutes' => 15, + 'live_map_enabled' => true, + 'route_opacity' => 0.6, + 'immich_url' => nil, + 'immich_api_key' => nil, + 'photoprism_url' => nil, + 'photoprism_api_key' => nil, + 'maps' => { 'distance_unit' => 'km' } + }.freeze + + def initialize(settings = {}) + @settings = DEFAULT_VALUES.dup.merge(settings) end # rubocop:disable Metrics/MethodLength - def config + def default_settings { fog_of_war_meters: fog_of_war_meters, meters_between_routes: meters_between_routes, @@ -31,45 +49,43 @@ class Users::SafeSettings # rubocop:enable Metrics/MethodLength def fog_of_war_meters - settings['fog_of_war_meters'] || 50 + settings['fog_of_war_meters'] end def meters_between_routes - settings['meters_between_routes'] || 500 + settings['meters_between_routes'] end def preferred_map_layer - settings['preferred_map_layer'] || 'OpenStreetMap' + settings['preferred_map_layer'] end def speed_colored_routes - settings['speed_colored_routes'] || false + settings['speed_colored_routes'] end def points_rendering_mode - settings['points_rendering_mode'] || 'raw' + settings['points_rendering_mode'] end def minutes_between_routes - settings['minutes_between_routes'] || 30 + settings['minutes_between_routes'] end def time_threshold_minutes - settings['time_threshold_minutes'] || 30 + settings['time_threshold_minutes'] end def merge_threshold_minutes - settings['merge_threshold_minutes'] || 15 + settings['merge_threshold_minutes'] end def live_map_enabled - return settings['live_map_enabled'] if settings.key?('live_map_enabled') - - true + settings['live_map_enabled'] end def route_opacity - settings['route_opacity'] || 0.6 + settings['route_opacity'] end def immich_url @@ -89,10 +105,10 @@ class Users::SafeSettings end def maps - settings['maps'] || {} + settings['maps'] end def distance_unit - settings.dig('maps', 'distance_unit') || 'km' + settings.dig('maps', 'distance_unit') end end diff --git a/spec/services/users/safe_settings_spec.rb b/spec/services/users/safe_settings_spec.rb index a07a213d..54dfdfd1 100644 --- a/spec/services/users/safe_settings_spec.rb +++ b/spec/services/users/safe_settings_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true RSpec.describe Users::SafeSettings do - describe '#config' do + describe '#default_settings' do context 'with default values' do let(:settings) { {} } let(:safe_settings) { described_class.new(settings) } it 'returns default configuration' do - expect(safe_settings.config).to eq( + expect(safe_settings.default_settings).to eq( { fog_of_war_meters: 50, meters_between_routes: 500, @@ -23,7 +23,7 @@ RSpec.describe Users::SafeSettings do immich_api_key: nil, photoprism_url: nil, photoprism_api_key: nil, - maps: {}, + maps: { "distance_unit" => "km" }, distance_unit: 'km' } ) @@ -53,24 +53,23 @@ RSpec.describe Users::SafeSettings do let(:safe_settings) { described_class.new(settings) } it 'returns custom configuration' do - expect(safe_settings.config).to eq( + expect(safe_settings.settings).to eq( { - fog_of_war_meters: 100, - meters_between_routes: 1000, - preferred_map_layer: 'Satellite', - speed_colored_routes: true, - points_rendering_mode: 'simplified', - minutes_between_routes: 60, - time_threshold_minutes: 45, - merge_threshold_minutes: 20, - live_map_enabled: false, - route_opacity: 0.8, - immich_url: 'https://immich.example.com', - immich_api_key: 'immich-key', - photoprism_url: 'https://photoprism.example.com', - photoprism_api_key: 'photoprism-key', - maps: { 'name' => 'custom', 'url' => 'https://custom.example.com' }, - distance_unit: 'km' + "fog_of_war_meters" => 100, + "meters_between_routes" => 1000, + "preferred_map_layer" => "Satellite", + "speed_colored_routes" => true, + "points_rendering_mode" => "simplified", + "minutes_between_routes" => 60, + "time_threshold_minutes" => 45, + "merge_threshold_minutes" => 20, + "live_map_enabled" => false, + "route_opacity" => 0.8, + "immich_url" => "https://immich.example.com", + "immich_api_key" => "immich-key", + "photoprism_url" => "https://photoprism.example.com", + "photoprism_api_key" => "photoprism-key", + "maps" => { "name" => "custom", "url" => "https://custom.example.com" } } ) end @@ -98,7 +97,7 @@ RSpec.describe Users::SafeSettings do expect(safe_settings.immich_api_key).to be_nil expect(safe_settings.photoprism_url).to be_nil expect(safe_settings.photoprism_api_key).to be_nil - expect(safe_settings.maps).to eq({}) + expect(safe_settings.maps).to eq({ "distance_unit" => "km" }) end end