Skip to content

Commit d25da2d

Browse files
authored
Merge pull request rails#52826 from jhawthorn/as_json_options_dup
Avoid repeated dup of as_json options
2 parents d96f25e + 5f73931 commit d25da2d

File tree

3 files changed

+7
-4
lines changed

3 files changed

+7
-4
lines changed

activemodel/lib/active_model/dirty.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,8 @@ def initialize_dup(other) # :nodoc:
256256
end
257257

258258
def as_json(options = {}) # :nodoc:
259-
options[:except] = [*options[:except], "mutations_from_database", "mutations_before_last_save"]
259+
except = [*options[:except], "mutations_from_database", "mutations_before_last_save"]
260+
options = options.merge except: except
260261
super(options)
261262
end
262263

activesupport/lib/active_support/core_ext/object/json.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ def as_json(options = nil) # :nodoc:
165165
class Array
166166
def as_json(options = nil) # :nodoc:
167167
if options
168-
map { |v| v.as_json(options.dup) }
168+
options = options.dup.freeze unless options.frozen?
169+
map { |v| v.as_json(options) }
169170
else
170171
map { |v| v.as_json }
171172
end
@@ -189,7 +190,8 @@ def as_json(options = nil) # :nodoc:
189190

190191
result = {}
191192
if options
192-
subset.each { |k, v| result[k.to_s] = v.as_json(options.dup) }
193+
options = options.dup.freeze unless options.frozen?
194+
subset.each { |k, v| result[k.to_s] = v.as_json(options) }
193195
else
194196
subset.each { |k, v| result[k.to_s] = v.as_json }
195197
end

activesupport/lib/active_support/json/encoding.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def initialize(options = nil)
3636
# Encode the given object into a JSON string
3737
def encode(value)
3838
unless options.empty?
39-
value = value.as_json(options.dup)
39+
value = value.as_json(options.dup.freeze)
4040
end
4141
json = stringify(jsonify(value))
4242

0 commit comments

Comments
 (0)