module ShouldaMatchmakers::Model::ActiveRecord::Matchmaker::Serialize
Public Instance Methods
serialize_matcher_tests()
click to toggle source
# File lib/model/active_record/matchmakers/serialize.rb, line 8 def serialize_matcher_tests serialized_attributes = @app_class_name.constantize.serialized_attributes if serialized_attributes.present? generate_serialize_matcher_tests(serialized_attributes) else [] end end
Private Instance Methods
generate_custom_serialize_test(attribute, cast_type, object_class)
click to toggle source
# File lib/model/active_record/matchmakers/serialize.rb, line 47 def generate_custom_serialize_test(attribute, cast_type, object_class) if object_class == nil custom_serializer_class = cast_type.to_s custom_serializer_class = custom_serializer_class.gsub(/#\</, "").gsub(/:.*\z/, "") if cast_type.to_s.include?("#<") custom_serialize_test = " it { is_expected.to serialize(:#{ attribute }).as(#{ custom_serializer_class }) }" else custom_serializer_class = object_class.to_s custom_serializer_class = custom_serializer_class.gsub(/#\</, "").gsub(/:.*\z/, "") if object_class.to_s.include?("#<") custom_serialize_test = " it { is_expected.to serialize(:#{ attribute }).as_instance_of(#{ custom_serializer_class }) }" end if custom_serialize_test.length > @working_generated_code_line_length custom_serialize_test = custom_serialize_test.sub(" it { ", " it do\n ").sub(").as", ").\n as").sub("}) }", "})\n end") end custom_serialize_test end
generate_serialize_matcher_tests(serialized_attributes)
click to toggle source
# File lib/model/active_record/matchmakers/serialize.rb, line 20 def generate_serialize_matcher_tests(serialized_attributes) serialize_tests = [] serialized_attributes.map do |attribute, cast_type| object_class = cast_type.try(:object_class) if %w(Array Hash Object).include?(object_class.to_s) || (object_class == nil && cast_type.to_s.include?("JSON")) serialize_test = generate_serialize_test(attribute, object_class) serialize_tests = append_element(serialize_test, serialize_tests) else custom_serialize_test = generate_custom_serialize_test(attribute, cast_type, object_class) serialize_tests = append_element(custom_serialize_test, serialize_tests) end end format_tests(serialize_tests) end
generate_serialize_test(attribute, object_class)
click to toggle source
# File lib/model/active_record/matchmakers/serialize.rb, line 35 def generate_serialize_test(attribute, object_class) case object_class.to_s when "Array", "Hash" serialize_test = " it { is_expected.to serialize(:#{ attribute }).as(#{ object_class }) }" when "Object" serialize_test = " it { is_expected.to serialize(:#{ attribute }) }" else serialize_test = " it { is_expected.to serialize(:#{ attribute }).as(JSON) }" end serialize_test end