44 include_context 'movie class'
55 include_context 'ams movie class'
66 include_context 'jsonapi movie class'
7+ include_context 'jsonapi-serializers movie class'
78
89 include_context 'group class'
910 include_context 'ams group class'
1011 include_context 'jsonapi group class'
12+ include_context 'jsonapi-serializers group class'
1113
1214 before ( :all ) { GC . disable }
1315 after ( :all ) { GC . enable }
4244 end
4345 end
4446
45- def print_stats ( message , count , ams_time , jsonapi_time , our_time )
47+ def print_stats ( message , count , ams_time , jsonapi_time , jsonapis_time , our_time )
4648 format = '%-15s %-10s %s'
4749 puts ''
4850 puts message
4951 puts format ( format , 'Serializer' , 'Records' , 'Time' )
5052 puts format ( format , 'AMS serializer' , count , ams_time . round ( 2 ) . to_s + ' ms' )
5153 puts format ( format , 'jsonapi-rb serializer' , count , jsonapi_time . round ( 2 ) . to_s + ' ms' )
54+ puts format ( format , 'jsonapi-serializers' , count , jsonapis_time . round ( 2 ) . to_s + ' ms' )
5255 puts format ( format , 'Fast serializer' , count , our_time . round ( 2 ) . to_s + ' ms' )
5356 end
5457
55- def run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
56- our_time = Benchmark . measure { our_hash = our_serializer . serializable_hash } . real * 1000
57- ams_time = Benchmark . measure { ams_hash = ams_serializer . as_json } . real * 1000
58- jsonapi_time = Benchmark . measure { ams_hash = jsonapi_serializer . to_hash } . real * 1000
58+ def run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer , jsonapis_serializer )
59+ our_time = Benchmark . measure { our_serializer . serializable_hash } . real * 1000
60+ ams_time = Benchmark . measure { ams_serializer . as_json } . real * 1000
61+ jsonapi_time = Benchmark . measure { jsonapi_serializer . to_hash } . real * 1000
62+ jsonapis_time = Benchmark . measure { jsonapis_serializer . to_hash } . real * 1000
5963
60- print_stats ( message , movie_count , ams_time , jsonapi_time , our_time )
64+ print_stats ( message , movie_count , ams_time , jsonapi_time , jsonapis_time , our_time )
6165 end
6266
63- def run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
67+ def run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer , jsonapis_serializer )
6468 our_json = nil
6569 ams_json = nil
6670 jsonapi_json = nil
71+ jsonapis_json = nil
6772 our_time = Benchmark . measure { our_json = our_serializer . serialized_json } . real * 1000
6873 ams_time = Benchmark . measure { ams_json = ams_serializer . to_json } . real * 1000
6974 jsonapi_time = Benchmark . measure { jsonapi_json = jsonapi_serializer . to_json } . real * 1000
75+ jsonapis_time = Benchmark . measure { jsonapis_json = jsonapis_serializer . to_json } . real * 1000
7076
71- print_stats ( message , movie_count , ams_time , jsonapi_time , our_time )
72- return our_json , ams_json , jsonapi_json
77+ print_stats ( message , movie_count , ams_time , jsonapi_time , jsonapis_time , our_time )
78+ return our_json , ams_json , jsonapi_json , jsonapis_json
7379 end
7480
7581 context 'when comparing with AMS 0.10.x' do
@@ -79,15 +85,17 @@ def run_json_benchmark(message, movie_count, our_serializer, ams_serializer, jso
7985 ams_movies = build_ams_movies ( movie_count )
8086 movies = build_movies ( movie_count )
8187 jsonapi_movies = build_jsonapi_movies ( movie_count )
88+ jsonapis_movies = build_js_movies ( movie_count )
8289 our_serializer = MovieSerializer . new ( movies )
8390 ams_serializer = ActiveModelSerializers ::SerializableResource . new ( ams_movies )
8491 jsonapi_serializer = JSONAPISerializer . new ( jsonapi_movies )
92+ jsonapis_serializer = JSONAPISSerializer . new ( jsonapis_movies )
8593
8694 message = "Serialize to JSON string #{ movie_count } records"
87- our_json , ams_json , jsonapi_json = run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
95+ our_json , ams_json , _ , _ = run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer , jsonapis_serializer )
8896
8997 message = "Serialize to Ruby Hash #{ movie_count } records"
90- run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
98+ run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer , jsonapis_serializer )
9199
92100 expect ( our_json . length ) . to eq ams_json . length
93101 expect { our_serializer . serialized_json } . to perform_faster_than { ams_serializer . to_json } . at_least ( speed_factor ) . times
@@ -103,18 +111,20 @@ def run_json_benchmark(message, movie_count, our_serializer, ams_serializer, jso
103111 ams_movies = build_ams_movies ( movie_count )
104112 movies = build_movies ( movie_count )
105113 jsonapi_movies = build_jsonapi_movies ( movie_count )
114+ jsonapis_movies = build_js_movies ( movie_count )
106115 options = { }
107116 options [ :meta ] = { total : movie_count }
108117 options [ :include ] = [ :actors , :movie_type ]
109118 our_serializer = MovieSerializer . new ( movies , options )
110119 ams_serializer = ActiveModelSerializers ::SerializableResource . new ( ams_movies , include : options [ :include ] , meta : options [ :meta ] )
111120 jsonapi_serializer = JSONAPISerializer . new ( jsonapi_movies , include : options [ :include ] , meta : options [ :meta ] )
121+ jsonapis_serializer = JSONAPISSerializer . new ( jsonapis_movies , include : options [ :include ] . map { |i | i . to_s . dasherize } , meta : options [ :meta ] )
112122
113123 message = "Serialize to JSON string #{ movie_count } with includes and meta"
114- our_json , ams_json = run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
124+ our_json , ams_json = run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer , jsonapis_serializer )
115125
116126 message = "Serialize to Ruby Hash #{ movie_count } with includes and meta"
117- run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
127+ run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer , jsonapis_serializer )
118128
119129 expect ( our_json . length ) . to eq ams_json . length
120130 expect { our_serializer . serialized_json } . to perform_faster_than { ams_serializer . to_json } . at_least ( speed_factor ) . times
@@ -129,16 +139,19 @@ def run_json_benchmark(message, movie_count, our_serializer, ams_serializer, jso
129139 it "should serialize #{ group_count } records at least #{ speed_factor } times faster than AMS" do
130140 ams_groups = build_ams_groups ( group_count )
131141 groups = build_groups ( group_count )
142+ jsonapi_groups = build_jsonapi_groups ( group_count )
143+ jsonapis_groups = build_jsonapis_groups ( group_count )
132144 options = { }
133145 our_serializer = GroupSerializer . new ( groups , options )
134146 ams_serializer = ActiveModelSerializers ::SerializableResource . new ( ams_groups )
135147 jsonapi_serializer = JSONAPISerializerB . new ( jsonapi_groups )
148+ jsonapis_serializer = JSONAPISSerializerB . new ( jsonapis_groups )
136149
137150 message = "Serialize to JSON string #{ group_count } with polymorphic has_many"
138- our_json , ams_json , jsonapi_json = run_json_benchmark ( message , group_count , our_serializer , ams_serializer , jsonapi_serializer )
151+ our_json , ams_json , _ , _ = run_json_benchmark ( message , group_count , our_serializer , ams_serializer , jsonapi_serializer , jsonapis_serializer )
139152
140153 message = "Serialize to Ruby Hash #{ group_count } with polymorphic has_many"
141- run_hash_benchmark ( message , group_count , our_serializer , ams_serializer , jsonapi_serializer )
154+ run_hash_benchmark ( message , group_count , our_serializer , ams_serializer , jsonapi_serializer , jsonapis_serializer )
142155
143156 expect ( our_json . length ) . to eq ams_json . length
144157 expect { our_serializer . serialized_json } . to perform_faster_than { ams_serializer . to_json } . at_least ( speed_factor ) . times
0 commit comments