1- require 'active_support/concern'
2-
31module ActiveAdmin
42
53 # Adds a class method to a class to create settings with default values.
@@ -18,7 +16,10 @@ module ActiveAdmin
1816 # conf.site_title #=> "Override Default"
1917 #
2018 module Settings
21- extend ActiveSupport ::Concern
19+
20+ def self . included ( base )
21+ base . extend ClassMethods
22+ end
2223
2324 def read_default_setting ( name )
2425 default_settings [ name ]
@@ -34,10 +35,9 @@ module ClassMethods
3435
3536 def setting ( name , default )
3637 default_settings [ name ] = default
37- attr_accessor ( name )
38+ attr_writer name
3839
39- # Create an accessor that grabs from the defaults
40- # if @name has not been set yet
40+ # Creates a reader that will grab the default if no value has been set.
4141 class_eval <<-EOC , __FILE__ , __LINE__ + 1
4242 def #{ name }
4343 if instance_variable_defined? :@#{ name }
@@ -50,10 +50,10 @@ def #{name}
5050 end
5151
5252 def deprecated_setting ( name , default , message = nil )
53- message = message || "The #{ name } setting is deprecated and will be removed."
5453 setting ( name , default )
5554
56- ActiveAdmin ::Deprecation . deprecate self , name , message
55+ message ||= "The #{ name } setting is deprecated and will be removed."
56+ ActiveAdmin ::Deprecation . deprecate self , name , message
5757 ActiveAdmin ::Deprecation . deprecate self , :"#{ name } =" , message
5858 end
5959
@@ -62,5 +62,47 @@ def default_settings
6262 end
6363
6464 end
65+
66+
67+ # Allows you to define child classes that should receive the same
68+ # settings, as well as the same default values.
69+ #
70+ # Example from the codebase:
71+ #
72+ # class Application
73+ # include Settings
74+ # include Settings::Inheritance
75+ #
76+ # settings_inherited_by :Namespace
77+ #
78+ # inheritable_setting :root_to, 'dashboard#index'
79+ # end
80+ #
81+ module Inheritance
82+
83+ def self . included ( base )
84+ base . extend ClassMethods
85+ end
86+
87+ module ClassMethods
88+
89+ def settings_inherited_by ( heir )
90+ ( @setting_heirs ||= [ ] ) << heir
91+ heir . send :include , ActiveAdmin ::Settings
92+ end
93+
94+ def inheritable_setting ( name , default )
95+ setting name , default
96+ @setting_heirs . each { |c | c . setting name , default }
97+ end
98+
99+ def deprecated_inheritable_setting ( name , default )
100+ deprecated_setting name , default
101+ @setting_heirs . each { |c | c . deprecated_setting name , default }
102+ end
103+
104+ end
105+ end
106+
65107 end
66108end
0 commit comments