Sha256: 1bfcba98a1a144e3b672b4e7f0d1ea3dff212d839e270ee89a36a2766cbae957

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

module RedmineCrm
  class Settings
    SECTIONS = {
      'money' => { id: :money, label: :label_redmine_crm_money, partial: 'money' }
    }.freeze

    class << self
      # Initialize settings before using with this method
      # @example
      #   RedmineCrm::Settings.initialize_gem_settings
      def initialize_gem_settings
        return if Setting.respond_to?(:plugin_redmine_crm)

        if Setting.respond_to?(:define_setting)
          Setting.send(:define_setting, 'plugin_redmine_crm', 'default' => default_settings, 'serialized' => true)
        elsif Setting.respond_to?(:available_settings)
          Setting.available_settings['plugin_redmine_crm'] = { 'default' => default_settings, 'serialized' => true }
          Setting.class.send(:define_method, 'plugin_redmine_crm', -> { Setting['plugin_redmine_crm'] })
          Setting.class.send(:define_method, 'plugin_redmine_crm=', lambda do |val|
            setting = find_or_default('plugin_redmine_crm')
            setting.value = val || ''
            @cached_settings['plugin_redmine_crm'] = nil
            setting.save(validate: false)
            setting.value
          end)
        end
      end

      # Use apply instead attrs assign because it can rewrite other attributes
      def apply=(values)
        Setting.plugin_redmine_crm = Setting.plugin_redmine_crm.merge(values)
      end

      def values
        Object.const_defined?('Setting') ? Setting.plugin_redmine_crm : {}
      end

      def [](value)
        return Setting.plugin_redmine_crm[value] if Object.const_defined?('Setting')

        nil
      end

      private

      def default_settings
        {}
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
redmine_crm-0.0.49 lib/redmine_crm/settings.rb