From 08dce5e60792112ca8df4aa5de3663fd7ad51e77 Mon Sep 17 00:00:00 2001 From: alpaca-tc Date: Thu, 25 May 2017 21:14:36 +0900 Subject: [PATCH] Refactor Setting (#3302) * @object is not needed * Remove unneeded dependencies * Do not call private method * Prefer #respond_to_missing? over #respond_to? `#respond_to?` doesn't support `User.settings.method(:method_name)` * Use find_or_initialize_by instead of --- app/lib/settings/extend.rb | 2 -- app/lib/settings/scoped_settings.rb | 13 ++++++------- app/models/setting.rb | 4 +--- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/app/lib/settings/extend.rb b/app/lib/settings/extend.rb index 884b49874..5fb2c8aae 100644 --- a/app/lib/settings/extend.rb +++ b/app/lib/settings/extend.rb @@ -2,8 +2,6 @@ module Settings module Extend - extend ActiveSupport::Concern - def settings @settings ||= ScopedSettings.new(self) end diff --git a/app/lib/settings/scoped_settings.rb b/app/lib/settings/scoped_settings.rb index 68f97b5ae..de4af3009 100644 --- a/app/lib/settings/scoped_settings.rb +++ b/app/lib/settings/scoped_settings.rb @@ -21,7 +21,7 @@ module Settings end # rubocop:enable Style/MethodMissing - def respond_to?(_method_name, _include_private = false) + def respond_to_missing?(*) true end @@ -29,7 +29,7 @@ module Settings vars = thing_scoped records = vars.map { |r| [r.var, r] }.to_h - Setting.send(:default_settings).each do |key, default_value| + Setting.default_settings.each do |key, default_value| next if records.key?(key) || default_value.is_a?(Hash) records[key] = Setting.new(var: key, value: default_value) end @@ -39,9 +39,8 @@ module Settings def []=(key, value) key = key.to_s - record = thing_scoped.find_by(var: key) || thing_scoped.new(var: key) - record.value = value - record.save! + record = thing_scoped.find_or_initialize_by(var: key) + record.update!(value: value) Rails.cache.write(Setting.cache_key(key, @object), value) value @@ -51,11 +50,11 @@ module Settings Rails.cache.fetch(Setting.cache_key(key, @object)) do db_val = thing_scoped.find_by(var: key.to_s) if db_val - default_value = Setting.send(:default_settings)[key] + default_value = Setting.default_settings[key] return default_value.with_indifferent_access.merge!(db_val.value) if default_value.is_a?(Hash) db_val.value else - Setting.send(:default_settings)[key] + Setting.default_settings[key] end end end diff --git a/app/models/setting.rb b/app/models/setting.rb index f5c95777a..e0107dd83 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -23,7 +23,7 @@ class Setting < RailsSettings::Base def [](key) return super(key) unless rails_initialized? - val = Rails.cache.fetch(cache_key(key, @object)) do + val = Rails.cache.fetch(cache_key(key, nil)) do db_val = object(key) if db_val @@ -50,8 +50,6 @@ class Setting < RailsSettings::Base records end - private - def default_settings return {} unless RailsSettings::Default.enabled? RailsSettings::Default.instance