In BlogPost, Rails, Ruby

What is rocket_pants?

Rocket pants is a gem that gives you a set of tools for building an API in Ruby with Rails.

Motivation for camel casing

The developer team decided we wanted to return camel-cased json responses, e.g.,

 

{ myResponse: “My response” }

 

Steps for camel casing

Since our Rails model attributes use the traditional snake case naming and rocket_pants by default in its response returns the default attributes, I needed a way to camel case the attribute names that were
returned in the response.

I’m omitting the steps you need (perhaps I’ll cover it in a future post if there’s demand for it), to install rocket_pants, but that’s pretty straightforward for the most part via the project’s README file.

Step 1 – Override the attributes method in your model.rb file


class Trial < ActiveRecord::Base def attributes info = { 'id' => nil, 'firstName' => nil, 'lastName' => nil,
'fullName' => nil }
super.replace info
end

end

Instead of replace, you could use merge but I used replace because replace ensures the API response when you call the expose method from rocket_pants only contains the attributes in the info hash. If I had used replace, then I would have gotten all the rest of the Trial model attributes.

If you need different responses for specific API versions, then you could override the serializable hash as indicated in this stackoverflow post

Step 2 – camelize the model attributes using metaprogramming


Trial.attribute_names.each do |attribute_name|
unless attribute_name == attribute_name.camelize(:lower)
define_method attribute_name.camelize(:lower) do
self.send(attribute_name)
end
end
end

In step 2, unless the model attribute is already camel-cased, I create one using define_method along with Rails’ camelize method.

Step 3 – camel case any method names being passed in the API response

 

class Trial < ActiveRecord::Base

def fullName
first_name + last_name
end

end

 

Notice how I have a camel-cased method called fullName which concatenates the first_name and _last_name attribute values for the Trial model.

This is how you can customize your API response via rocket_pants.

Recommended Posts