Skip to content

Instantly share code, notes, and snippets.

@anggiaj
Forked from teamon/post_representer.rb
Created June 17, 2014 14:41
Show Gist options
  • Save anggiaj/c6f64c52471d98a7079e to your computer and use it in GitHub Desktop.
Save anggiaj/c6f64c52471d98a7079e to your computer and use it in GitHub Desktop.
module PostRepresenter
include Representer
using Representer
def basic(post)
select(post, :id, :name)
end
def details(post)
basic(post) & comments(post)
end
def comments(post)
{ comments: post.comments.map {|c| CommentRepresenter.basic(c) }
end
end
# requires ruby 2.1+
module Representer
extend ActiveSupport::Concern
refine Hash do
alias_method :&, :merge
end
included do
extend self
end
protected
def select(obj, *fields)
fields.map {|field| { field => obj.send(field) } }.inject({}, :merge)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment