active_model_serializers から jbuilder に乗り換えるためにスクリプトを書いた
こんにちは。焼き鳥は、ぼんじりとじゅんけいが好きです、きたけーです。
最近、プロジェクトでJSONを生成するときに rails-api/active_model_serializers · GitHub を使っていたのを、rails/jbuilder · GitHub に乗り換えることになったので、ぽちぽちコードを書いていたのですが、刺身の上にたんぽぽ載せてる感がはんぱないので、簡単に変換するスクリプトを書きました(がーっと書いたので改善とか工夫できるところはたくさんありそう)。こんなかんじ
require 'active_support/core_ext' class_name = '' ARGF.each do |line| if /class\s+(\w+)Serializer\s/ =~ line class_name = $1.downcase elsif /attributes\s+(.+)/ =~ line $1.chomp.split(/\,\s+/).each do |attribute| attribute.sub!(/\A:/, '') puts "json.#{attribute} @#{class_name}.#{attribute}" end elsif /attribute\s+\:(.+)\,\s+key\:\s+\:(.+)/ =~ line puts "json.#{$2.underscore} @#{class_name}.#{$1}" end end
つかいかた
bundle exec ruby ams_to_jbuilder.rb some_serializer.rb
こういうシリアライザのクラスがあったら
class SomeSerializer < ActiveModel::Serializer attributes :id, :alpha, :bravo, :charlie attribute :foo, key: :foo attribute :bar, key: :bar attribute :baz, key: :baz end
こういうかんじで出力される
json.id @some.id json.alpha @some.alpha json.bravo @some.bravo json.charlie @some.charlie json.foo @some.foo json.bar @some.bar json.baz @some.baz
追記
jbuilderの使い方みてたら、出力内容よりももっと簡潔に書けることに気づいた...