module CustomRailsSettingsCached::ClassMethods

Public Instance Methods

build_custom_settings_methods(custom_settings) click to toggle source
# File lib/custom_rails_settings_cached.rb, line 65
def build_custom_settings_methods(custom_settings)
  if custom_settings.is_a?(Array)
    # Exam:
    # CUSTOM_RAILS_SETTINGS_KEYS = [:google_analytics, :facebook_pixel_ads]
    custom_settings.each do |setting_key|
      if setting_key.is_a?(Symbol)
        self.define_method "#{setting_key}" do
          self.get_settings setting_key
        end
        self.define_method "#{setting_key}=" do |setting_value|
          self.init_setting(setting_key, setting_value)
        end
      else
        self.build_custom_settings_methods setting_key
      end
    end
  elsif custom_settings.is_a?(Hash)
    # Exam:
    # CUSTOM_RAILS_SETTINGS_KEYS = {
    #   google_analytics: [:enabled, :tracking_code],
    #   facebook_pixel_ads: [:enabled, :tracking_code]
    # }
    custom_settings.each do |k, v|
      if v.is_a?(Array)
        v.each do |setting_key|
          # Use: Partner.first.google_analytics_enabled
          store_setting_key = "#{k}_#{setting_key}"
          self.define_method store_setting_key do
            self.get_settings store_setting_key
          end
          # Use: Partner.first.google_analytics_enabled = true
          self.define_method "#{store_setting_key}=" do |setting_value|
            self.init_setting(store_setting_key, setting_value)
          end
        end
      elsif v.is_a?(Symbol)
        # Use: Partner.first.google_analytics
        self.define_method "#{v}" do
          self.get_settings v
        end
        self.define_method "#{v}=" do |setting_value|
          self.init_setting(v, setting_value)
        end
      end
    end
  end
end