RenderHash 
RenderHash is an alternative to .as_json in rails providing simple syntax to generate the hash from any ruby object.
Installation
Add this line to your application's Gemfile:
gem 'render_hash'
And then execute:
$ bundle
Or install it yourself as:
$ gem install render_hash
Usage
- Include the module into a class
class User
include RenderHash
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
user = User.new("bob", 20)
user.render(:name) #=> {name: "bob", age: 20}
- Use the module directly
ruby class User attr_reader :name, :age def initialize(name, age) @name = name @age = age end end user = User.new("bob", 20) RenderHash.render(user, :name, :age) #=> {name: "bob", age: 20}
Syntax
Classes used in the examples
class User
include RenderHash
attr_reader :name, :age, :jobs
def initialize(name, age = nil, jobs = [])
@name = name
@age = age
@jobs = jobs
end
end
class Job
attr_reader :title
def initialize(title)
@title = title
end
end
Render the method
user = User.new("bob")
user.render(:name) #=> {name: "bob"}
Render the method with the custom name
user = User.new("bob")
user.render({username: :name}) #=> {username: "bob"}
Render the custom value
user = User.new("bob")
user.render({hobby: "fishing"}) #=> {hobby: "fishing"}
Render the custom function
user = User.new("bob", 20)
name_with_age = ->(user){"#{user.name}(#{user.age})"}
user.render({name_with_age: name_with_age}) #=> {name_with_age: "bob(20)"}
Render nested methods
user = User.new("bob")
user.render([:name, :upcase]) #=> {name: {upcase: "BOB"}}
Render the method from the array
jobs = [Job.new("doctor"), Job.new("driver")]
user = User.new("bob", 20, jobs)
user.render([jobs: [:title]]) #=> {jobs: [{title: "doctor"}, {title: "driver"}]}
You can merge multiple hashes
user = User.new("bob")
user.render({username: :name}, {hobby: "fishing"}) ==
user.render({username: :name, hobby: "fishing"})
Render from arrays using the module
users = [User.new("bob"), User.new("tom")]
RenderHash.render(users, :name) #=> [{name: "bob"}, {name: "tom"}]
Contributing
- Fork it ( https://github.com/[my-github-username]/render_hash/fork )
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request