Module: RenderHash

Defined in:
lib/render_hash.rb,
lib/render_hash/version.rb

Constant Summary collapse

VERSION =
"1.0.1"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.render(obj, *args) ⇒ Object

Usage RenderHash.render(user, :name, :age)



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/render_hash.rb', line 29

def self.render(obj, *args)
  return obj.map {|x| render(x, *args)} if obj.is_a? Array

  args.inject({}) do |result, task|
    result.merge(
      case task
      when Symbol
        {task => obj.send(task)}
      when Hash
        task.inject({}) do |h, (k, v)|
          h.merge(k =>
            case v
            when Symbol then obj.send(v)
            when Proc   then v.call(obj)
            else             v
            end
          )
        end
      when Array
        val = obj.send(task[0])
        if val.respond_to? :map
          {task[0] => val.map {|x| render(x, *task[1])}}
        else
          {task[0] => render(val, *task[1])}
        end
      end
    )
  end
end

Instance Method Details

#render(*args) ⇒ Object

Usage User.include RenderHash user.render(

:name, :age,
{username: :name, hobby: "fishing"},
[:name, :upcase],
{name_with_age: -> (user) {"#{user.name}(#{user.age})"}},
[jobs:          [:title]]

)

>
name:          "bob",
age:           20,
username:      "bob",
hobby:         "finishig",
name:          {upcase: "BOB",
name_with_age: "bob(20)",
jobs:          ["doctor"]

}



23
24
25
# File 'lib/render_hash.rb', line 23

def render(*args)
  RenderHash.render(self, *args)
end