diff --git a/lib/pickle/session/conversion.rb b/lib/pickle/session/conversion.rb index 36899129..9c1cb5ba 100644 --- a/lib/pickle/session/conversion.rb +++ b/lib/pickle/session/conversion.rb @@ -24,15 +24,27 @@ def attributes(fields) end end - private - def convert_hash_attributes(fields) - fields.stringify_keys! - fields.each do |key, value| - if value =~ /^#{pickle_ref.source}$/ - begin - fields[key] = retrieve(value) - rescue Pickle::UnknownModelError, Pickle::InvalidPickleRefError - end + private + def retrieve_model_from_value(value) + value =~ /^#{pickle_ref.source}$/ && retrieve(value) + rescue Pickle::UnknownModelError, Pickle::InvalidPickleRefError + end + + def parse_value(value) + case value + when /^"(.*)"$/ then $1 + when /^'(.*)'$/ then $1 + when /^(#{match_value})$/ then eval($1) + else + raise UnknownFieldsFormatError, "#{value.inspect} is in an unknown format" + end + end + + def convert_hash_attributes(attrs) + attrs.stringify_keys! + attrs.each do |key, value| + if model = retrieve_model_from_value(value) + attrs[key] = model end end end @@ -42,20 +54,7 @@ def convert_string_attributes(fields) fields.scan(match_field) do |field| key, value = field.split(':', 2) value.strip! - - model = begin - value = retrieve(value) - rescue Pickle::UnknownModelError, Pickle::InvalidPickleRefError - value = case value - when /^"(.*)"$/ then $1 - when /^'(.*)'$/ then $1 - when /^(#{match_value})$/ then eval($1) - else - raise UnknownFieldsFormatError, "#{field.inspect} is in an unknown format" - end - end - - attrs[key] = value + attrs[key] = retrieve_model_from_value(value) || parse_value(value) end attrs end