Skip to content

Commit afd466b

Browse files
committed
Wrap namespace settings in a DynamicSetting class that can be subtyped to encapsulate behavior.
1 parent 0df2df0 commit afd466b

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed

lib/active_admin/dynamic_setting.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module ActiveAdmin
2+
3+
class DynamicSetting
4+
def self.build(setting)
5+
new(setting)
6+
end
7+
8+
def initialize(setting)
9+
@setting = setting
10+
end
11+
12+
def value(*_args)
13+
@setting
14+
end
15+
end
16+
17+
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
require 'active_admin/dynamic_setting'
2+
require 'active_admin/settings_node'
3+
4+
module ActiveAdmin
5+
6+
class DynamicSettingsNode < SettingsNode
7+
class << self
8+
def register(name, value)
9+
class_attribute "#{name}_setting"
10+
add_reader(name)
11+
add_writer(name)
12+
send "#{name}=", value
13+
end
14+
15+
def add_reader(name)
16+
define_singleton_method(name) do
17+
send("#{name}_setting").value
18+
end
19+
end
20+
21+
def add_writer(name)
22+
define_singleton_method("#{name}=") do |value|
23+
send("#{name}_setting=", DynamicSetting.build(value))
24+
end
25+
end
26+
end
27+
end
28+
end

lib/active_admin/namespace_settings.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
require 'active_admin/settings_node'
1+
require 'active_admin/dynamic_settings_node'
22

33
module ActiveAdmin
4-
class NamespaceSettings < SettingsNode
4+
class NamespaceSettings < DynamicSettingsNode
55
# The default number of resources to display on index pages
66
register :default_per_page, 30
77

lib/active_admin/settings_node.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class << self
66
private_class_method :new
77

88
# @returns anonymous class with same accessors as the superclass.
9-
def build(superclass = SettingsNode)
9+
def build(superclass = self)
1010
Class.new(superclass)
1111
end
1212

0 commit comments

Comments
 (0)