Initialize mutations for Drops only if necessary (#7657)
Merge pull request 7657
This commit is contained in:
parent
6a604daa5a
commit
965aef60e6
|
@ -30,7 +30,6 @@ module Jekyll
|
|||
# Returns nothing
|
||||
def initialize(obj)
|
||||
@obj = obj
|
||||
@mutations = {} # only if mutable: true
|
||||
end
|
||||
|
||||
# Access a method in the Drop or a field in the underlying hash data.
|
||||
|
@ -42,8 +41,8 @@ module Jekyll
|
|||
#
|
||||
# Returns the value for the given key, or nil if none exists
|
||||
def [](key)
|
||||
if self.class.mutable? && @mutations.key?(key)
|
||||
@mutations[key]
|
||||
if self.class.mutable? && mutations.key?(key)
|
||||
mutations[key]
|
||||
elsif self.class.invokable? key
|
||||
public_send key
|
||||
else
|
||||
|
@ -70,7 +69,7 @@ module Jekyll
|
|||
public_send("#{key}=", val)
|
||||
elsif respond_to?(key.to_s)
|
||||
if self.class.mutable?
|
||||
@mutations[key] = val
|
||||
mutations[key] = val
|
||||
else
|
||||
raise Errors::DropMutationException, "Key #{key} cannot be set in the drop."
|
||||
end
|
||||
|
@ -100,7 +99,7 @@ module Jekyll
|
|||
# Returns true if the given key is present
|
||||
def key?(key)
|
||||
return false if key.nil?
|
||||
return true if self.class.mutable? && @mutations.key?(key)
|
||||
return true if self.class.mutable? && mutations.key?(key)
|
||||
|
||||
respond_to?(key) || fallback_data.key?(key)
|
||||
end
|
||||
|
@ -113,7 +112,7 @@ module Jekyll
|
|||
# Returns an Array of unique keys for content for the Drop.
|
||||
def keys
|
||||
(content_methods |
|
||||
@mutations.keys |
|
||||
mutations.keys |
|
||||
fallback_data.keys).flatten
|
||||
end
|
||||
|
||||
|
@ -204,6 +203,12 @@ module Jekyll
|
|||
return yield(key) unless block.nil?
|
||||
return default unless default.nil?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def mutations
|
||||
@mutations ||= {}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue