Friggin' fast Serializer gem extracted from chetan's adjustments to json_serialization_benchmark
Object serializer with
The initial code was copied from chetan
and wrapped into a gem with unit-tests and a bit more convenient API ( original links )
ApiView gives you all that and stays very small doing that.
## Add this line to your application's Gemfile:
gem 'api_view'
## And then execute:
$ bundle
object
/ obj
)instance_convert
-method for further customization of the serialization
-> field
- a setter method, that also accepts via: SomeSerializerApiView
class EventApiView < EventSummaryApiView
# default serializer for BoxScore, will be picked, if none other was given
for_model ::Event
# the attributes to copy from the object
attributes :share_url, :sport_name
# the name of your main object, optional
main_object :event
# the method to add additional logic + fields
def instance_convert
# just a setter method with optional serializer for that sub-object
field :box_score, event.box_score, via: BasketballBoxScoreApiView
end
end
## a more complete example
class Event
attr_accessor :game_date, :game_type, :status
end
class EventSerializer < ::ApiView::Base
attributes :game_date, :game_type, :status
main_object :event
for_model ::Event
# this is your chance to do extra work
def instance_convert
field :away_team, "any value here"
end
end
e = Event.new; e.game_date = Time.now; e.game_type = 'baseball'; e.status = 'won'
EventSerializer.render(e)
# because we configured the mapping from serializer to a Ruby class, this also works:
ApiView::Engine.render(e)
For more examples take a look into the example/
-folder and run the benchmark script via ruby example/benchmark.rb
.
# run tests
$ sh/test
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
) user system total real allocations memsize
RABL Ultra Simple 4.860000 0.620000 5.480000 ( 5.493406) 664 25787
AMS Ultra Simple 0.220000 0.000000 0.220000 ( 0.220079) 26 650
Presenters Ultra Simple 0.140000 0.000000 0.140000 ( 0.152729) 24 650
ApiView Ultra Simple 0.190000 0.000000 0.190000 ( 0.193124) 12 842
-------------------------------------------------------------------------------------------------------------------
RABL Simple 21.470000 3.330000 24.800000 ( 25.147988) 2265 114051
AMS Simple 1.060000 0.000000 1.060000 ( 1.066668) 105 2726
Presenters Simple 0.610000 0.000000 0.610000 ( 0.611980) 98 2918
ApiView Simple 0.280000 0.010000 0.290000 ( 0.292290) 17 2246
-------------------------------------------------------------------------------------------------------------------
RABL Complex 43.930000 6.850000 50.780000 ( 51.574975) 4325 248000
AMS Complex 2.150000 0.000000 2.150000 ( 2.160445) 209 5851
Presenters Complex 1.210000 0.010000 1.220000 ( 1.220806) 201 7395
ApiView Complex 0.270000 0.000000 0.270000 ( 0.270517) 21 1504
Collection tests:
user system total real allocations memsize
RABL Ultra Simple: Collection 3.560000 0.600000 4.160000 ( 4.182852) 43102 1977224
AMS Ultra Simple: Collection 0.120000 0.000000 0.120000 ( 0.124631) 1914 47786
Presenters Ultra Simple: Collection 0.100000 0.010000 0.110000 ( 0.109781) 3508 67594
ApiView Ultra Simple: Collection 0.050000 0.000000 0.050000 ( 0.050875) 311 46986
-------------------------------------------------------------------------------------------------------------------
RABL Simple: Collection 18.720000 3.150000 21.870000 ( 21.924020) 202905 11255130
AMS Simple: Collection 0.870000 0.010000 0.880000 ( 0.890479) 9714 236186
Presenters Simple: Collection 0.540000 0.000000 0.540000 ( 0.542100) 16108 380794
ApiView Simple: Collection 0.160000 0.000000 0.160000 ( 0.166484) 812 187386
-------------------------------------------------------------------------------------------------------------------
RABL Complex: Collection 41.190000 6.680000 47.870000 ( 48.438854) 408015 25251570
AMS Complex: Collection 2.170000 0.030000 2.200000 ( 2.211721) 20114 548686
Presenters Complex: Collection 1.380000 0.010000 1.390000 ( 1.389608) 34408 960494
ApiView Complex: Collection 0.150000 0.000000 0.150000 ( 0.145595) 1212 113186