8000 Merge pull request #5132 from varyonic/feature/cleanup-settings · stephancom/activeadmin@7a471ab · GitHub
[go: up one dir, main page]

Skip to content

Commit 7a471ab

Browse files
authored
Merge pull request activeadmin#5132 from varyonic/feature/cleanup-settings
Cleanup Settings changes
2 parents 06d0369 + c4ed871 commit 7a471ab

File tree

6 files changed

+25
-64
lines changed

6 files changed

+25
-64
lines changed

lib/active_admin/application.rb

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,28 @@ class Application
77

88
class << self
99
def default_settings
10-
@settings ||= SettingsNode.new
10+
@settings ||= SettingsNode.build
1111
end
1212

1313
def namespace_default_settings
14-
@namespace_settings ||= SettingsNode.new
14+
@namespace_settings ||= SettingsNode.build
1515
end
1616

1717
def setting(name, default)
18-
default_settings.settings[name] = default
18+
default_settings.register name, default
1919
end
2020

2121
def inheritable_setting(name, default)
22-
namespace_default_settings.settings[name] = default
23-
Namespace.default_settings.settings[name] = default
22+
namespace_default_settings.register name, default
2423
end
2524
end
2625

27-
def default_settings
28-
self.class.default_settings
29-
end
30-
3126
def settings
32-
@settings ||= SettingsNode.new(self.class.default_settings)
27+
@settings ||= SettingsNode.build(self.class.default_settings)
3328
end
3429

3530
def namespace_settings
36-
@namespace_settings ||= SettingsNode.new(self.class.namespace_default_settings)
31+
@namespace_settings ||= SettingsNode.build(self.class.namespace_default_settings)
3732
end
3833

3934
def respond_to_missing?(method, include_private = false)

lib/active_admin/engine.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
module ActiveAdmin
22
class Engine < ::Rails::Engine
33
initializer "active_admin.load_app_path" do |app|
4-
ActiveAdmin.application.instance_exec(app) do |app|
5-
default_settings[:app_path] = app.root
6-
default_settings[:load_paths] = [File.expand_path('app/admin', app.root)]
7-
end
4+
ActiveAdmin::Application.setting :app_path, app.root
5+
ActiveAdmin::Application.setting :load_paths, [File.expand_path('app/admin', app.root)]
86
end
97

108
initializer "active_admin.precompile", group: :all do |app|

lib/active_admin/namespace.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,8 @@ module ActiveAdmin
2626
#
2727
class Namespace
2828
class << self
29-
def default_settings
30-
@settings ||= SettingsNode.new
31-
end
32-
3329
def setting(name, default)
34-
default_settings.settings[name] = default
30+
Deprecation.warn "This method does not do anything and will be removed."
3531
end
3632
end
3733

@@ -52,7 +48,7 @@ def name
5248
end
5349

5450
def settings
55-
@settings ||= SettingsNode.new(application.namespace_settings)
51+
@settings ||= SettingsNode.build(application.namespace_settings)
5652
end
5753

5854
def respond_to_missing?(method, include_private = false)

lib/active_admin/settings_node.rb

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,18 @@
11
module ActiveAdmin
22

33
class SettingsNode
4-
def initialize(parent = nil)
5-
@parent = parent
6-
end
7-
8-
def settings
9-
@settings ||= {}
10-
end
11-
12-
delegate :[]=, to: :settings
13-
14-
protected
15-
16-
def parent
17-
@parent ||= self.class.new
18-
end
19-
20-
def has_key?(name)
21-
settings.has_key?(name.to_sym) || @parent && @parent.has_key?(name.to_sym)
22-
end
4+
class << self
5+
# Never instantiated. Variables are stored in the singleton_class.
6+
private_class_method :new
237

24-
def fetch(name)
25-
if settings.has_key?(name.to_sym)
26-
settings.fetch(name.to_sym)
27-
elsif @parent
28-
parent.fetch(name)
8+
# @returns anonymous class with same accessors as the superclass.
9+
def build(superclass = SettingsNode)
10+
Class.new(superclass)
2911
end
30-
end
31-
32-
def respond_to_missing?(method, include_private = false)
33-
has_key?(method.to_s.chomp '=') || super
34-
end
3512

36-
def method_missing(method, *args)
37-
name = method.to_s
38-
if has_key?(name.chomp '=')
39-
if name.chomp! '='
40-
settings[name.to_sym] = args.first
41-
else
42-
fetch(name)
43-
end
44-
else
45-
super
13+
def register(name, value)
14+
class_attribute name
15+
send "#{name}=", value
4616
end
4717
end
4818
end

spec/unit/namespace_spec.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@
5050
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
5151

5252
it "should inherit the site title from the application" do
53-
ActiveAdmin::Namespace.setting :site_title, "Not the Same"
53+
ActiveSupport::Deprecation.silence do
54+
ActiveAdmin::Namespace.setting :site_title, "Not the Same"
55+
end
5456
expect(namespace.site_title).to eq application.site_title
5557
end
5658

spec/unit/settings_node_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
require 'rails_helper'
22

33
RSpec.describe ActiveAdmin::SettingsNode do
4-
subject { ActiveAdmin::SettingsNode.new }
5-
let(:child) { ActiveAdmin::SettingsNode.new(subject) }
4+
subject { ActiveAdmin::SettingsNode.build }
5+
let!(:child) { ActiveAdmin::SettingsNode.build(subject) }
66

77
context 'parent setting includes foo' do
8-
before { subject.settings[:foo] = true }
8+
before { subject.register :foo, true }
99

1010
it 'returns parent settings' do
1111
expect(child.foo).to eq true

0 commit comments

Comments
 (0)
0