Question

I'm trying to convert a webservice response into a object in my Rails application, I'm receiving the following json:

{
    "id": 1,
    "status": true,
    "password": "123",
    "userType": {
        "description": "description",
        "userTypeId": 1
    },
    "email": "abc@gmail.com"
}

I want to convert the userType attribute in a UserType Ruby class like this:

class UserType
  attr_accessor :userTypeId, :description
end

I'm using ActiveResource to communicate with the webservice, I tried use the attribute method for convert the userType json attribute into UserType class but the attribute method doesn't accept complex types, only string, integer e etc...

How can I convert the userType (webservice response) into UserType Ruby Class?

Rails 3.2.12 and Ruby 1.9.3p194

Was it helpful?

Solution

You should be able to implement userType as an instance method.

class MyResource < ActiveResource::Base
  self.site = "http://api.example.com/"

  def userType
    UserType.new(userTypeId: super.userTypeId, description: super.description) 
  end
end

This works because ActiveResource automatically creates a "getter" method for each of the keys in the attributes hash that you pass into the class constructor. When the called attribute method corresponds to a hash value, ActiveResource returns an instance of an automatically generated class MyResource::UserType, which respectively will respond to the userTypeId and the description methods. You can get hold of this instance by calling super within the overridden method, and passing the value of userTypeId and description to your own class.

Edit: - Corrected class name

PS: Have a look at the ActiveResource#load method for more details on how attribute getter methods get generated.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top