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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: efeeb485371194984abf2c6b934132ec65724e82
4
- data.tar.gz: 4b176fba0cf6c9211162fa58dea000cb97bc56b2
3
+ metadata.gz: 5c4fbe95a59eab2568b0c6b4f03fefba6355a20c
4
+ data.tar.gz: c86de8201259ae4dfa56112cfcacbd2aeaaea3d2
5
5
  SHA512:
6
- metadata.gz: 2edeefa5538cd309f0c7e0dc57b9c92ec6f00841e74679c7c301df95a0a83fa713bd9f1fc1046ebf452c23f5243deb169707b15c4bdf5d2b89ac6a628c7bb285
7
- data.tar.gz: 9891db65c0a0b5f78d296f39cd59e2ff8c662fead0bb0525f00d8d776fde1b68a339c29ae58797c34fcf54cd040b35bdb6e4d6a65be7a09391b7c4b6902624e6
6
+ metadata.gz: 4f9dab50943c03f8a11469b57f54f6d7c4f8f91c42a94dc5881ea0424c7f52da3ff25004d0dc8524104dd0b57a0cd76e251f00ca3f1c3fa07c5600cf451ddcd2
7
+ data.tar.gz: 2756a3bca3a1b30cf28085b379f2dde7b179e7b05faa85265a5024e13fc8a113a0a76fe915617a7577279ba142e3ea681dc750c531abd69ea70f83b646f2ca21
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
- # RenderHash
2
-
1
+ # RenderHash [![Build Status](https://travis-ci.org/ducktyper/render_hash.svg?branch=master)](https://travis-ci.org/ducktyper/render_hash)
3
2
  RenderHash is an alternative to .as_json in rails providing simple syntax to
4
- generate nested hash from any ruby object
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
- user.render(:name, :age) #=> {name: "bob", age: 20}
23
+ * Include the module into a class
26
24
 
27
- or render directly
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
- RenderHash.render(user, :name, :age) #=> {name: "bob", age: 20}
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
- render from methods
34
-
35
- user.render(:name, :age) #=> {name: "bob", age: 20}
36
-
37
- render from methods with a custom key
38
-
39
- user.render({username: :name}, :age) #=> {username: "bob", age: 20}
40
-
41
- render a custom key and value
42
-
43
- user.render({hobby: "fishing"}) #=> {hobby: "fishing"}
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
- hash expressions can be grouped together
72
+ Render the method
73
+ ```ruby
74
+ user = User.new("bob")
75
+ user.render(:name) #=> {name: "bob"}
76
+ ```
46
77
 
47
- user.render({username: :name}, {hobby: "fishing"}) ==
48
- user.render({username: :name, hobby: "fishing"})
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
- render a custom key and value with lambda
84
+ Render the custom value
85
+ ```ruby
86
+ user = User.new("bob")
87
+ user.render({hobby: "fishing"}) #=> {hobby: "fishing"}
88
+ ```
51
89
 
52
- name_with_age = ->(user){"#{user.name}(#{user.age})"}
53
- user.render({name_with_age: name_with_age}) #=> {name_with_age: "bob(20)"}
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
- render nested hash from a method returns an array
97
+ Render nested methods
98
+ ```ruby
99
+ user = User.new("bob")
100
+ user.render([:name, :upcase]) #=> {name: {upcase: "BOB"}}
101
+ ```
56
102
 
57
- user.render([jobs: [:title]])
58
- #=> {jobs: [{title: "doctor"}, {title: "driver"}]}
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
- render with an array
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
- RenderHash.render([user1, user2], :name) #=> [{name: "bob"}, {name: "tom"}]
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
@@ -1,2 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
2
3
 
4
+ Rake::TestTask.new(:all) do |t|
5
+ t.name = 'test'
6
+ t.pattern = 'test/**/*_test.rb'
7
+ end
8
+
9
+ task default: ["test"]
@@ -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
- {task[0] => obj.send(task[0]).map {|x| render(x, *task[1])}}
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
@@ -1,3 +1,3 @@
1
1
  module RenderHash
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -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 name and return value" do
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 is not found" do
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 "raise if nested hash method does not return array" do
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 string" do
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 object" do
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 "hash can be ..." do
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 nested hash" do
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 self" do
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 with array" do
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.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: 2015-05-18 00:00:00.000000000 Z
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.5
79
+ rubygems_version: 2.4.3
79
80
  signing_key:
80
81
  specification_version: 4
81
82
  summary: Build a hash from an object