File tree Expand file tree Collapse file tree 3 files changed +38
-8
lines changed Expand file tree Collapse file tree 3 files changed +38
-8
lines changed Original file line number Diff line number Diff line change @@ -5,6 +5,15 @@ module RailsSettings
5
5
def self . can_protect_attributes?
6
6
( ActiveRecord ::VERSION ::MAJOR == 3 ) || defined? ( ProtectedAttributes )
7
7
end
8
+
9
+ def self . can_use_becomes?
10
+ ![
11
+ [ 3 , 0 ] ,
12
+ [ 3 , 1 ] ,
13
+ [ 3 , 2 ] ,
14
+ [ 4 , 0 ]
15
+ ] . include? ( [ ActiveRecord ::VERSION ::MAJOR , ActiveRecord ::VERSION ::MINOR ] )
16
+ end
8
17
end
9
18
10
19
require 'rails-settings/setting_object'
@@ -20,4 +29,3 @@ def self.has_settings(*args, &block)
20
29
extend RailsSettings ::Scopes
21
30
end
22
31
end
23
-
Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ def settings(var)
12
12
raise ArgumentError unless var . is_a? ( Symbol )
13
13
raise ArgumentError . new ( "Unknown key: #{ var } " ) unless self . class . setting_keys [ var ]
14
14
15
- fetch_settings_record ( var ) . becomes ( self . class . setting_keys [ var ] [ :class_name ] . constantize )
15
+ fetch_settings_record ( var )
16
16
end
17
17
18
18
def settings = ( value )
@@ -44,14 +44,22 @@ def fetch_settings_record(var)
44
44
end
45
45
46
46
def find_settings_record ( var )
47
- setting_objects . detect { |s | s . var == var . to_s }
47
+ setting_objects
48
+ . select { |s | s . var == var . to_s }
49
+ . map { |s | s . becomes self . class . setting_keys [ var ] [ :class_name ] . constantize }
50
+ . first
48
51
end
49
52
50
53
def build_settings_record ( var )
51
- if RailsSettings . can_protect_attributes?
52
- setting_objects . build ( { :var => var . to_s } , :without_protection => true )
53
- else
54
- setting_objects . build ( :var => var . to_s , :target => self )
54
+ build_args =
55
+ if RailsSettings . can_protect_attributes?
56
+ [ { :var => var . to_s } , :without_protection => true ]
57
+ else
58
+ [ :var => var . to_s , :target => self ]
59
+ end
60
+
61
+ setting_objects . build ( *build_args ) do |record |
62
+ record . becomes self . class . setting_keys [ var ] [ :class_name ] . constantize
55
63
end
56
64
end
57
65
end
Original file line number Diff line number Diff line change @@ -28,6 +28,15 @@ def respond_to?(method_name, include_priv=false)
28
28
super || method_name . to_s =~ REGEX_SETTER || _setting? ( method_name )
29
29
end
30
30
31
+ # Annoying hack for old Rails
32
+ unless RailsSettings . can_use_becomes?
33
+ def becomes ( klass )
34
+ became = super ( klass )
35
+ became . instance_variable_set ( "@changed_attributes" , @changed_attributes )
36
+ became
37
+ end
38
+ end
39
+
31
40
def method_missing ( method_name , *args , &block )
32
41
if block_given?
33
42
super
@@ -78,7 +87,12 @@ def _target_class
78
87
end
79
88
80
89
def _setting? ( method_name )
81
- _target_class . setting_keys [ var . to_sym ] [ :default_value ] . keys . include? ( method_name . to_s )
90
+ return false if target_id . nil? || target_type . nil?
91
+
92
+ _target_class
93
+ . setting_keys [ var . to_sym ] [ :default_value ]
94
+ . keys
95
+ . include? ( method_name . to_s )
82
96
end
83
97
end
84
98
end
You can’t perform that action at this time.
0 commit comments