hash-serializer 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +2 -0
- data/README.md +36 -5
- data/lib/hash-serializer.rb +60 -2
- data/lib/hash-serializer/version.rb +1 -1
- data/spec/hash-serializer-spec.rb +9 -9
- metadata +5 -16
data/.rvmrc
ADDED
data/README.md
CHANGED
@@ -1,16 +1,43 @@
|
|
1
1
|
|
2
2
|
# INTRODUCTION
|
3
3
|
|
4
|
-
The aim of this gem is to enable an easy way to serialize an object in a Hash object or a JSON data structure using
|
5
|
-
the attributes name as keys.
|
4
|
+
The aim of this gem is to enable an easy way to serialize an object in a Hash object or a JSON data structure using attributes name as keys.
|
6
5
|
|
7
|
-
This can be useful if you need to work with XSD schemas while using code generators that convert an schema in
|
8
|
-
ruby objects but still you haven't a way to convert to JSON or any other format.
|
6
|
+
This can be useful if you need to work with XSD schemas while using code generators that convert an schema in ruby objects but still you haven't a way to convert to JSON or any other format.
|
9
7
|
|
10
8
|
# INSTALLATION
|
11
9
|
gem install hash-serializer
|
12
10
|
|
13
|
-
#
|
11
|
+
# HOT TO USE v0.2.0
|
12
|
+
require 'hash-serializer'
|
13
|
+
|
14
|
+
class User
|
15
|
+
attr_accessor :nickname
|
16
|
+
attr_accessor :email
|
17
|
+
attr_accessor :password
|
18
|
+
|
19
|
+
def initialize(nickname = nil, email = nil, password = nil)
|
20
|
+
@nickname = nickname
|
21
|
+
@email = email
|
22
|
+
@password = password
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
u = User.new("juandebravo", "juan at pollinimini dot net", "*******")
|
27
|
+
|
28
|
+
HashSerializer.to_hash(u)
|
29
|
+
=> {"nickname"=>"juandebravo", "email"=>"juan at pollinimini dot net", "password"=>"*******"}
|
30
|
+
|
31
|
+
HashSerializer.to_hash(u, u.nickname)
|
32
|
+
=> {"juandebravo"=>{"nickname"=>"juandebravo", "email"=>"juan at pollinimini dot net", "password"=>"*******"}}
|
33
|
+
|
34
|
+
puts HashSerializer.to_json(u)
|
35
|
+
=> {"nickname":"juandebravo","email":"juan at pollinimini dot net","password":"*******"}
|
36
|
+
|
37
|
+
puts HashSerializer.to_json(u, "user")
|
38
|
+
=> {"user":{"nickname":"juandebravo","email":"juan at pollinimini dot net","password":"*******"}}
|
39
|
+
|
40
|
+
# HOW TO USE v0.1.0
|
14
41
|
|
15
42
|
require 'hash-serializer'
|
16
43
|
|
@@ -40,3 +67,7 @@ ruby objects but still you haven't a way to convert to JSON or any other format.
|
|
40
67
|
puts u.serialize_to_json("user")
|
41
68
|
=> {"user":{"nickname":"juandebravo","email":"juan at pollinimini dot net","password":"*******"}}
|
42
69
|
|
70
|
+
# CHANGES
|
71
|
+
|
72
|
+
* v0.2.0 does not monkey patch Object class anymore. Always seems to be a bad idea this, so v0.2.0
|
73
|
+
is incompatible backwards.
|
data/lib/hash-serializer.rb
CHANGED
@@ -1,4 +1,62 @@
|
|
1
|
-
|
1
|
+
# Include json only if it's not loaded before
|
2
|
+
Object.respond_to? :to_json or require 'json'
|
3
|
+
|
2
4
|
module HashSerializer
|
3
|
-
|
5
|
+
|
6
|
+
class << self
|
7
|
+
#
|
8
|
+
# Instance method to parse an object to an equivalent Hash format
|
9
|
+
# Used to serialize body data
|
10
|
+
#
|
11
|
+
def to_hash(obj, root_name = nil)
|
12
|
+
result = Hash.new
|
13
|
+
obj.instance_variables.each do |column|
|
14
|
+
aux = obj.instance_variable_get(column)
|
15
|
+
unless aux.nil?
|
16
|
+
if aux.instance_of?(String) or aux.kind_of?(String)
|
17
|
+
# It's required to erase any '_' character because
|
18
|
+
# soap4r has included it (not idea about the reason)
|
19
|
+
result[get_column_value(column)] = aux.to_s
|
20
|
+
else
|
21
|
+
if aux.is_a?(Array)
|
22
|
+
result_aux = Array.new
|
23
|
+
aux.each do |elem|
|
24
|
+
result_aux << HashSerializer.to_hash(elem)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
result_aux = HashSerializer.to_hash(aux)
|
28
|
+
end
|
29
|
+
result[get_column_value(column)] = result_aux
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
unless root_name.nil?
|
34
|
+
temp = result
|
35
|
+
result = {}
|
36
|
+
result[root_name] = temp
|
37
|
+
end
|
38
|
+
result
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# Convert the Hashed object to a String containing the object JSON format
|
43
|
+
#
|
44
|
+
def to_json(obj, root_name = nil)
|
45
|
+
to_hash(obj, root_name).to_json
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
#
|
51
|
+
# Retrieves the attribute name
|
52
|
+
#
|
53
|
+
def get_column_value(column)
|
54
|
+
column = column.to_s.sub(/@/, '')
|
55
|
+
unless column.index('_').nil?
|
56
|
+
column = column.split('_')[1]
|
57
|
+
end
|
58
|
+
column
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
4
62
|
end
|
@@ -24,7 +24,7 @@ describe "hash-serializer" do
|
|
24
24
|
|
25
25
|
describe "object to json extension" do
|
26
26
|
it "converts properly a basic object with root name" do
|
27
|
-
json_obj =
|
27
|
+
json_obj = HashSerializer.to_json(obj, "object")
|
28
28
|
json_obj.should be_a_kind_of(String)
|
29
29
|
json_obj = JSON.parse(json_obj)
|
30
30
|
json_obj.should be_a_kind_of(Hash)
|
@@ -37,7 +37,7 @@ describe "hash-serializer" do
|
|
37
37
|
|
38
38
|
|
39
39
|
it "converts properly a basic object without root name" do
|
40
|
-
json_obj = obj
|
40
|
+
json_obj = HashSerializer.to_json(obj)
|
41
41
|
json_obj.should be_a_kind_of(String)
|
42
42
|
json_obj = JSON.parse(json_obj)
|
43
43
|
json_obj.should be_a_kind_of(Hash)
|
@@ -50,7 +50,7 @@ describe "hash-serializer" do
|
|
50
50
|
|
51
51
|
describe "object to hash extension" do
|
52
52
|
it "converts properly a basic object without root name" do
|
53
|
-
json_obj = obj
|
53
|
+
json_obj = HashSerializer.to_hash(obj)
|
54
54
|
|
55
55
|
json_obj.should be_a_kind_of(Hash)
|
56
56
|
json_obj.should have_key("foo")
|
@@ -58,7 +58,7 @@ describe "hash-serializer" do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it "converts properly a basic object with root name" do
|
61
|
-
json_obj =
|
61
|
+
json_obj = HashSerializer.to_hash(obj, "foo")
|
62
62
|
json_obj.should be_a_kind_of(Hash)
|
63
63
|
json_obj.should have_key("foo")
|
64
64
|
|
@@ -68,7 +68,7 @@ describe "hash-serializer" do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it "converts properly a basic object with a symbol as root name" do
|
71
|
-
json_obj =
|
71
|
+
json_obj = HashSerializer.to_hash(obj, :foo)
|
72
72
|
json_obj.should be_a_kind_of(Hash)
|
73
73
|
json_obj.should have_key(:foo)
|
74
74
|
|
@@ -84,7 +84,7 @@ describe "hash-serializer" do
|
|
84
84
|
describe "object to hash extension" do
|
85
85
|
it "converts properly a complex object without root name" do
|
86
86
|
|
87
|
-
json_obj = complex_obj
|
87
|
+
json_obj = HashSerializer.to_hash(complex_obj)
|
88
88
|
|
89
89
|
["foo", "bar", "bazz"].each { |key|
|
90
90
|
json_obj.should have_key(key)
|
@@ -98,7 +98,7 @@ describe "hash-serializer" do
|
|
98
98
|
|
99
99
|
it "converts properly a complex object wit root name" do
|
100
100
|
|
101
|
-
json_obj =
|
101
|
+
json_obj = HashSerializer.to_hash(complex_obj, :object)
|
102
102
|
|
103
103
|
json_obj.should be_a_kind_of(Hash)
|
104
104
|
json_obj.should have_key(:object)
|
@@ -122,7 +122,7 @@ describe "hash-serializer" do
|
|
122
122
|
describe "object to hash extension" do
|
123
123
|
it "converts properly a complex object without root name" do
|
124
124
|
|
125
|
-
json_obj = complex_obj
|
125
|
+
json_obj = HashSerializer.to_hash(complex_obj)
|
126
126
|
|
127
127
|
["foo", "bar", "bazz", "array"].each { |key|
|
128
128
|
json_obj.should have_key(key)
|
@@ -140,7 +140,7 @@ describe "hash-serializer" do
|
|
140
140
|
describe "object to json extension" do
|
141
141
|
|
142
142
|
it "converts properly a basic object with root name" do
|
143
|
-
json_obj = complex_obj
|
143
|
+
json_obj = HashSerializer.to_json(complex_obj)
|
144
144
|
json_obj.should be_a_kind_of(String)
|
145
145
|
json_obj = JSON.parse(json_obj)
|
146
146
|
json_obj.should be_a_kind_of(Hash)
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash-serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
version: 0.1.0
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Juan de Bravo
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-
|
13
|
+
date: 2011-06-22 00:00:00 +03:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,10 +21,6 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ">="
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 1
|
30
|
-
- 4
|
31
|
-
- 3
|
32
24
|
version: 1.4.3
|
33
25
|
type: :runtime
|
34
26
|
version_requirements: *id001
|
@@ -43,6 +35,7 @@ extra_rdoc_files: []
|
|
43
35
|
|
44
36
|
files:
|
45
37
|
- .gitignore
|
38
|
+
- .rvmrc
|
46
39
|
- Gemfile
|
47
40
|
- README.md
|
48
41
|
- Rakefile
|
@@ -65,21 +58,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
65
58
|
requirements:
|
66
59
|
- - ">="
|
67
60
|
- !ruby/object:Gem::Version
|
68
|
-
segments:
|
69
|
-
- 0
|
70
61
|
version: "0"
|
71
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
63
|
none: false
|
73
64
|
requirements:
|
74
65
|
- - ">="
|
75
66
|
- !ruby/object:Gem::Version
|
76
|
-
segments:
|
77
|
-
- 0
|
78
67
|
version: "0"
|
79
68
|
requirements: []
|
80
69
|
|
81
70
|
rubyforge_project: hash-serializer
|
82
|
-
rubygems_version: 1.
|
71
|
+
rubygems_version: 1.6.2
|
83
72
|
signing_key:
|
84
73
|
specification_version: 3
|
85
74
|
summary: This gem provides an easy way to wrap a class attributes in a key-value representation (Hash object in ruby)
|