render_hash 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/README.md +88 -29
- data/Rakefile +7 -0
- data/lib/render_hash.rb +8 -1
- data/lib/render_hash/version.rb +1 -1
- data/test/render_hash_test.rb +18 -19
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c4fbe95a59eab2568b0c6b4f03fefba6355a20c
|
4
|
+
data.tar.gz: c86de8201259ae4dfa56112cfcacbd2aeaaea3d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f9dab50943c03f8a11469b57f54f6d7c4f8f91c42a94dc5881ea0424c7f52da3ff25004d0dc8524104dd0b57a0cd76e251f00ca3f1c3fa07c5600cf451ddcd2
|
7
|
+
data.tar.gz: 2756a3bca3a1b30cf28085b379f2dde7b179e7b05faa85265a5024e13fc8a113a0a76fe915617a7577279ba142e3ea681dc750c531abd69ea70f83b646f2ca21
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
# RenderHash
|
2
|
-
|
1
|
+
# RenderHash [](https://travis-ci.org/ducktyper/render_hash)
|
3
2
|
RenderHash is an alternative to .as_json in rails providing simple syntax to
|
4
|
-
generate
|
3
|
+
generate the hash from any ruby object.
|
5
4
|
|
6
5
|
## Installation
|
7
6
|
|
@@ -20,46 +19,106 @@ Or install it yourself as:
|
|
20
19
|
$ gem install render_hash
|
21
20
|
|
22
21
|
## Usage
|
23
|
-
RenderHash module can be included to a class
|
24
22
|
|
25
|
-
|
23
|
+
* Include the module into a class
|
26
24
|
|
27
|
-
|
25
|
+
```ruby
|
26
|
+
class User
|
27
|
+
include RenderHash
|
28
|
+
attr_reader :name, :age
|
29
|
+
def initialize(name, age)
|
30
|
+
@name = name
|
31
|
+
@age = age
|
32
|
+
end
|
33
|
+
end
|
34
|
+
user = User.new("bob", 20)
|
35
|
+
user.render(:name) #=> {name: "bob", age: 20}
|
36
|
+
```
|
28
37
|
|
29
|
-
|
38
|
+
* Use the module directly
|
39
|
+
```ruby
|
40
|
+
class User
|
41
|
+
attr_reader :name, :age
|
42
|
+
def initialize(name, age)
|
43
|
+
@name = name
|
44
|
+
@age = age
|
45
|
+
end
|
46
|
+
end
|
47
|
+
user = User.new("bob", 20)
|
48
|
+
RenderHash.render(user, :name, :age) #=> {name: "bob", age: 20}
|
49
|
+
```
|
30
50
|
|
31
51
|
## Syntax
|
32
52
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
53
|
+
Classes used in the examples
|
54
|
+
```ruby
|
55
|
+
class User
|
56
|
+
include RenderHash
|
57
|
+
attr_reader :name, :age, :jobs
|
58
|
+
def initialize(name, age = nil, jobs = [])
|
59
|
+
@name = name
|
60
|
+
@age = age
|
61
|
+
@jobs = jobs
|
62
|
+
end
|
63
|
+
end
|
64
|
+
class Job
|
65
|
+
attr_reader :title
|
66
|
+
def initialize(title)
|
67
|
+
@title = title
|
68
|
+
end
|
69
|
+
end
|
70
|
+
```
|
44
71
|
|
45
|
-
|
72
|
+
Render the method
|
73
|
+
```ruby
|
74
|
+
user = User.new("bob")
|
75
|
+
user.render(:name) #=> {name: "bob"}
|
76
|
+
```
|
46
77
|
|
47
|
-
|
48
|
-
|
78
|
+
Render the method with the custom name
|
79
|
+
```ruby
|
80
|
+
user = User.new("bob")
|
81
|
+
user.render({username: :name}) #=> {username: "bob"}
|
82
|
+
```
|
49
83
|
|
50
|
-
|
84
|
+
Render the custom value
|
85
|
+
```ruby
|
86
|
+
user = User.new("bob")
|
87
|
+
user.render({hobby: "fishing"}) #=> {hobby: "fishing"}
|
88
|
+
```
|
51
89
|
|
52
|
-
|
53
|
-
|
90
|
+
Render the custom function
|
91
|
+
```ruby
|
92
|
+
user = User.new("bob", 20)
|
93
|
+
name_with_age = ->(user){"#{user.name}(#{user.age})"}
|
94
|
+
user.render({name_with_age: name_with_age}) #=> {name_with_age: "bob(20)"}
|
95
|
+
```
|
54
96
|
|
55
|
-
|
97
|
+
Render nested methods
|
98
|
+
```ruby
|
99
|
+
user = User.new("bob")
|
100
|
+
user.render([:name, :upcase]) #=> {name: {upcase: "BOB"}}
|
101
|
+
```
|
56
102
|
|
57
|
-
|
58
|
-
|
103
|
+
Render the method from the array
|
104
|
+
```ruby
|
105
|
+
jobs = [Job.new("doctor"), Job.new("driver")]
|
106
|
+
user = User.new("bob", 20, jobs)
|
107
|
+
user.render([jobs: [:title]]) #=> {jobs: [{title: "doctor"}, {title: "driver"}]}
|
108
|
+
```
|
59
109
|
|
60
|
-
|
110
|
+
You can merge multiple hashes
|
111
|
+
```ruby
|
112
|
+
user = User.new("bob")
|
113
|
+
user.render({username: :name}, {hobby: "fishing"}) ==
|
114
|
+
user.render({username: :name, hobby: "fishing"})
|
115
|
+
```
|
61
116
|
|
62
|
-
|
117
|
+
Render from arrays using the module
|
118
|
+
```ruby
|
119
|
+
users = [User.new("bob"), User.new("tom")]
|
120
|
+
RenderHash.render(users, :name) #=> [{name: "bob"}, {name: "tom"}]
|
121
|
+
```
|
63
122
|
|
64
123
|
## Contributing
|
65
124
|
|
data/Rakefile
CHANGED
data/lib/render_hash.rb
CHANGED
@@ -7,6 +7,7 @@ module RenderHash
|
|
7
7
|
# user.render(
|
8
8
|
# :name, :age,
|
9
9
|
# {username: :name, hobby: "fishing"},
|
10
|
+
# [:name, :upcase],
|
10
11
|
# {name_with_age: -> (user) {"#{user.name}(#{user.age})"}},
|
11
12
|
# [jobs: [:title]]
|
12
13
|
# )
|
@@ -15,6 +16,7 @@ module RenderHash
|
|
15
16
|
# age: 20,
|
16
17
|
# username: "bob",
|
17
18
|
# hobby: "finishig",
|
19
|
+
# name: {upcase: "BOB"},
|
18
20
|
# name_with_age: "bob(20)",
|
19
21
|
# jobs: [{title: "doctor"}]
|
20
22
|
# }
|
@@ -43,7 +45,12 @@ module RenderHash
|
|
43
45
|
)
|
44
46
|
end
|
45
47
|
when Array
|
46
|
-
|
48
|
+
val = obj.send(task[0])
|
49
|
+
if val.respond_to? :map
|
50
|
+
{task[0] => val.map {|x| render(x, *task[1])}}
|
51
|
+
else
|
52
|
+
{task[0] => render(val, *task[1])}
|
53
|
+
end
|
47
54
|
end
|
48
55
|
)
|
49
56
|
end
|
data/lib/render_hash/version.rb
CHANGED
data/test/render_hash_test.rb
CHANGED
@@ -23,58 +23,57 @@ describe RenderHash do
|
|
23
23
|
|
24
24
|
let(:bob) {User.new('bob', 20, [Job.new('doctor'), Job.new('driver')])}
|
25
25
|
|
26
|
-
it "add render method on include" do
|
26
|
+
it "should add render method on include" do
|
27
27
|
assert_equal({}, bob.render)
|
28
28
|
end
|
29
29
|
|
30
|
-
it "render method
|
30
|
+
it "should render the method" do
|
31
31
|
assert_equal({name: 'bob', age: 20}, bob.render(:name, :age))
|
32
32
|
end
|
33
33
|
|
34
|
-
it "raise if method
|
34
|
+
it "should raise if the method not found" do
|
35
35
|
assert_raises(NoMethodError) {bob.render(:method_not_exist)}
|
36
36
|
end
|
37
37
|
|
38
|
-
it "
|
39
|
-
assert_raises(NoMethodError) {bob.render(:age, [:name])}
|
40
|
-
end
|
41
|
-
|
42
|
-
it "rename method" do
|
38
|
+
it "should render the method with the custom name" do
|
43
39
|
assert_equal({username: 'bob'}, bob.render({username: :name}))
|
44
40
|
end
|
45
41
|
|
46
|
-
it "render custom
|
42
|
+
it "should render the custom value" do
|
47
43
|
assert_equal({name: 'tom'}, bob.render({name: 'tom'}))
|
48
44
|
end
|
49
45
|
|
50
|
-
it "render custom
|
51
|
-
hobby = 'fishing'
|
52
|
-
assert_equal({hobby: 'fishing'}, bob.render({hobby: hobby}))
|
53
|
-
end
|
54
|
-
|
55
|
-
it "render custom with object" do
|
46
|
+
it "should render the custom function" do
|
56
47
|
assert_equal(
|
57
48
|
{name_with_age: 'bob(20)'},
|
58
49
|
bob.render({name_with_age: ->(user){"#{user.name}(#{user.age})"}})
|
59
50
|
)
|
60
51
|
end
|
61
52
|
|
62
|
-
it "
|
53
|
+
it "should render nested methods" do
|
54
|
+
assert_equal({:age=>20, :name=>{:upcase=>"BOB"}},
|
55
|
+
bob.render(:age, [:name, :upcase]))
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
it "should be able to merge multiple hashes" do
|
63
60
|
assert_equal({username: 'bob', hobby: 'fishing'}, bob.render({username: :name, hobby: "fishing"}))
|
61
|
+
assert_equal(bob.render({username: :name}, {hobby: "fishing"}),
|
62
|
+
bob.render({username: :name, hobby: "fishing"}))
|
64
63
|
end
|
65
64
|
|
66
|
-
it "render
|
65
|
+
it "should render methods from the array" do
|
67
66
|
assert_equal(
|
68
67
|
{jobs: [{title: 'doctor'}, {title: 'driver'}]},
|
69
68
|
bob.render([:jobs, [:title]])
|
70
69
|
)
|
71
70
|
end
|
72
71
|
|
73
|
-
it "render from
|
72
|
+
it "should render directly from the module" do
|
74
73
|
assert_equal({name: 'bob'}, RenderHash.render(bob, :name))
|
75
74
|
end
|
76
75
|
|
77
|
-
it "render
|
76
|
+
it "should render from arrays using the module" do
|
78
77
|
assert_equal([{name: 'bob'}], RenderHash.render([bob], :name))
|
79
78
|
end
|
80
79
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: render_hash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ducksan Cho
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -47,6 +47,7 @@ extensions: []
|
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
49
|
- ".gitignore"
|
50
|
+
- ".travis.yml"
|
50
51
|
- Gemfile
|
51
52
|
- LICENSE.txt
|
52
53
|
- README.md
|
@@ -75,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
76
|
version: '0'
|
76
77
|
requirements: []
|
77
78
|
rubyforge_project:
|
78
|
-
rubygems_version: 2.4.
|
79
|
+
rubygems_version: 2.4.3
|
79
80
|
signing_key:
|
80
81
|
specification_version: 4
|
81
82
|
summary: Build a hash from an object
|