json_serializable 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 +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +43 -0
- data/json_serializable.gemspec +1 -1
- data/lib/json_serializable.rb +14 -5
- data/lib/json_serializable/version.rb +1 -1
- metadata +8 -6
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm ruby-1.9.3-p0@Playground
|
data/Gemfile.lock
CHANGED
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#JsonSerializable
|
2
|
+
In my projects I have found the basic as_json method that you get from Rails to be quite limiting. For example, as_json takes :methods, but the hash key can only be the method's name. Similar restriction applies to the :only option. So, I am extending this method in JsonSerializable so that you can customize your JSON output with a simple declarative syntax.
|
3
|
+
|
4
|
+
|
5
|
+
##In you Gemfile:
|
6
|
+
|
7
|
+
gem :json_serializable
|
8
|
+
|
9
|
+
|
10
|
+
##Or install directly:
|
11
|
+
|
12
|
+
gem install json_serializable
|
13
|
+
|
14
|
+
|
15
|
+
##In your model:
|
16
|
+
|
17
|
+
class Content
|
18
|
+
include JsonSerializable
|
19
|
+
|
20
|
+
json_serializable [:name, :description], private: lambda {|content| content.secret_data.upcase}, :street => :address
|
21
|
+
|
22
|
+
def street
|
23
|
+
"#{street_number} #{street_name}"
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
##If your model has the following data:
|
29
|
+
|
30
|
+
calgaryNews = Content.new(name: 'Sunny', description: 'Awesome sunny and bright day', secret_data: 'ggh98',
|
31
|
+
street_number: 2301, street_number: 'Varsity DR NW')
|
32
|
+
|
33
|
+
|
34
|
+
##JsonSerializable will produce the following Hash for your json:
|
35
|
+
|
36
|
+
calgaryNews.as_json
|
37
|
+
#==>
|
38
|
+
{
|
39
|
+
name: 'Sunny', description: 'Awesome sunny and bright day', private: 'GGH98',
|
40
|
+
address: "2301 Varsity DR NW'
|
41
|
+
}
|
42
|
+
|
43
|
+
Released under DWTFYW (Do What the F* You Want) License.
|
data/json_serializable.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = JsonSerializable::VERSION
|
8
8
|
s.authors = ["smsohan"]
|
9
9
|
s.email = ["sohan39@gmail.com"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "https://github.com/smsohan/json_serializer"
|
11
11
|
s.summary = %q{Provides a clean approach to custom JSON serialize your AR models}
|
12
12
|
s.description = %q{Use custom names in JSON keys and your custom logic in JSON values}
|
13
13
|
|
data/lib/json_serializable.rb
CHANGED
@@ -21,25 +21,34 @@ module JsonSerializable
|
|
21
21
|
module InstanceMethods
|
22
22
|
|
23
23
|
def as_json(options = {})
|
24
|
+
super(custom_options(self.class.json_field_names, options)).merge hash_from_mappings(self.class.json_mappings)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def custom_options(fields, options)
|
24
29
|
options ||= {}
|
25
|
-
|
26
|
-
|
30
|
+
if fields.size > 0
|
31
|
+
options[:only] ||= []
|
32
|
+
options[:only] |= fields
|
33
|
+
end
|
34
|
+
options
|
35
|
+
end
|
27
36
|
|
28
|
-
|
37
|
+
def hash_from_mappings(mappings)
|
38
|
+
custom_hash = {}
|
39
|
+
mappings.each_pair do |key, value|
|
29
40
|
if value.is_a?(Symbol)
|
30
41
|
custom_hash[value] = self.send(key)
|
31
42
|
else
|
32
43
|
custom_hash[key] = value[self]
|
33
44
|
end
|
34
45
|
end
|
35
|
-
|
36
46
|
custom_hash
|
37
47
|
end
|
38
48
|
end
|
39
49
|
|
40
50
|
module ClassMethods
|
41
51
|
|
42
|
-
|
43
52
|
def json_serializable field_names, mappings = {}
|
44
53
|
@@json_field_names = field_names
|
45
54
|
@@json_mappings = mappings
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_serializable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-07 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &2168965380 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2168965380
|
25
25
|
description: Use custom names in JSON keys and your custom logic in JSON values
|
26
26
|
email:
|
27
27
|
- sohan39@gmail.com
|
@@ -31,14 +31,16 @@ extra_rdoc_files: []
|
|
31
31
|
files:
|
32
32
|
- .gitignore
|
33
33
|
- .rspec
|
34
|
+
- .rvmrc
|
34
35
|
- Gemfile
|
35
36
|
- Gemfile.lock
|
37
|
+
- README.md
|
36
38
|
- Rakefile
|
37
39
|
- json_serializable.gemspec
|
38
40
|
- lib/json_serializable.rb
|
39
41
|
- lib/json_serializable/version.rb
|
40
42
|
- spec/json_serializable_spec.rb
|
41
|
-
homepage:
|
43
|
+
homepage: https://github.com/smsohan/json_serializer
|
42
44
|
licenses: []
|
43
45
|
post_install_message:
|
44
46
|
rdoc_options: []
|
@@ -52,7 +54,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
52
54
|
version: '0'
|
53
55
|
segments:
|
54
56
|
- 0
|
55
|
-
hash:
|
57
|
+
hash: 2466998277856228953
|
56
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
59
|
none: false
|
58
60
|
requirements:
|
@@ -61,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
63
|
version: '0'
|
62
64
|
segments:
|
63
65
|
- 0
|
64
|
-
hash:
|
66
|
+
hash: 2466998277856228953
|
65
67
|
requirements: []
|
66
68
|
rubyforge_project: json_serializable
|
67
69
|
rubygems_version: 1.8.17
|