Module: RenderHash
- Defined in:
- lib/render_hash.rb,
lib/render_hash/version.rb
Constant Summary collapse
- VERSION =
"1.0.1"
Class Method Summary collapse
-
.render(obj, *args) ⇒ Object
Usage RenderHash.render(user, :name, :age).
Instance Method Summary collapse
-
#render(*args) ⇒ Object
Usage User.include RenderHash user.render( :name, :age, :name, hobby: “fishing”, [:name, :upcase], -> (user) {“#{user.name(#useruser.age)”}}, [jobs: [:title]] ) => { name: “bob”, age: 20, username: “bob”, hobby: “finishig”, name: “BOB”, name_with_age: “bob(20)”, jobs: [“doctor”] }.
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"]
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 |