json-encodable 0.0.3 → 0.1.0
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/CHANGELOG.md +3 -0
- data/README.md +18 -0
- data/json-encodable.gemspec +1 -1
- data/lib/json/encodable.rb +12 -10
- data/lib/json/encodable/property.rb +18 -0
- data/lib/json/encodable/version.rb +1 -1
- data/spec/json/encodable_spec.rb +22 -4
- data/spec/spec_helper.rb +0 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e414ac50d8cfab870205ef14aa3bb3447f6919dd
|
4
|
+
data.tar.gz: 5b6924e2bb5fb84dde7e40ff53493b5605c6bbbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ade9a952eb1a3948f38adc341512917908bbf91ee484a1f90e387c3b9e07e3dc906f50fca4eadf7ee2f707d900dce43cc3fe86db2fe5102b5507eaf65ad0b997
|
7
|
+
data.tar.gz: 59296009778e8aec1c8d7f6f16b33e608c747a1070ba7b74ee32fb519048d2e86c94f7b2647a248f1e285121dd0d01c5b74e7e25f732edf679f2cd662f409c9b
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -42,3 +42,21 @@ Blog.new.as_json(only: [:id, :username])
|
|
42
42
|
Blog.new.as_json(except: :username)
|
43
43
|
#=> { "id" => 1, "title" => "wonderland" }
|
44
44
|
```
|
45
|
+
|
46
|
+
## Advanced
|
47
|
+
You can contain any optional meta-information on each properties,
|
48
|
+
and access to them by `.properties` method.
|
49
|
+
|
50
|
+
```rb
|
51
|
+
class Blog
|
52
|
+
include JSON::Encodable
|
53
|
+
|
54
|
+
property :id, type: Integer
|
55
|
+
property :title, type: String
|
56
|
+
property :username, type: String
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns an array of `JSON::Encodable::Property` instances.
|
60
|
+
# Each instance has `#name` and `#options` methods.
|
61
|
+
Blog.properties
|
62
|
+
```
|
data/json-encodable.gemspec
CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_dependency "activesupport"
|
20
20
|
spec.add_development_dependency "bundler", "~> 1.6"
|
21
21
|
spec.add_development_dependency "rake"
|
22
|
-
spec.add_development_dependency "rspec", "2.
|
22
|
+
spec.add_development_dependency "rspec", "3.2.0"
|
23
23
|
spec.add_development_dependency "rspec-json_matcher"
|
24
24
|
end
|
data/lib/json/encodable.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require "active_support/concern"
|
2
2
|
require "active_support/core_ext/object/json"
|
3
3
|
require "active_support/json"
|
4
|
-
|
4
|
+
require "json/encodable/property"
|
5
5
|
require "json/encodable/version"
|
6
6
|
|
7
7
|
# Makes an included module encodable into JSON format by putting .as_json method.
|
@@ -83,23 +83,25 @@ module JSON
|
|
83
83
|
module ClassMethods
|
84
84
|
attr_writer :property_names
|
85
85
|
|
86
|
-
#
|
87
|
-
# @return [Array]
|
86
|
+
# @return [Array<Symbol>]
|
88
87
|
def property_names
|
89
|
-
|
88
|
+
properties.map(&:name)
|
89
|
+
end
|
90
|
+
|
91
|
+
# @return [Array<JSON::Encodable::Property>]
|
92
|
+
def properties
|
93
|
+
@properies ||= []
|
90
94
|
end
|
91
95
|
|
92
|
-
#
|
93
|
-
|
94
|
-
|
95
|
-
property_names << property_name
|
96
|
+
# @param [Symbol] property_name
|
97
|
+
def property(property_name, options = {})
|
98
|
+
properties << ::JSON::Encodable::Property.new(property_name, options)
|
96
99
|
end
|
97
100
|
|
98
|
-
# Inherits property_names, while they are not shared between a parent and their children
|
99
101
|
# @note Override
|
100
102
|
def inherited(child)
|
101
103
|
super
|
102
|
-
child.
|
104
|
+
child.properties = properties.clone
|
103
105
|
end
|
104
106
|
end
|
105
107
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module JSON
|
2
|
+
module Encodable
|
3
|
+
class Property
|
4
|
+
# @return [Symbol]
|
5
|
+
attr_reader :name
|
6
|
+
|
7
|
+
# @return [Hash{Symbol => Object}]
|
8
|
+
attr_reader :options
|
9
|
+
|
10
|
+
# @param [Symbol] name
|
11
|
+
# @param [Hash{Symbol => Object}] options
|
12
|
+
def initialize(name, options = {})
|
13
|
+
@name = name
|
14
|
+
@options = options
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/json/encodable_spec.rb
CHANGED
@@ -9,9 +9,9 @@ describe JSON::Encodable do
|
|
9
9
|
Class.new do
|
10
10
|
include JSON::Encodable
|
11
11
|
|
12
|
-
property :id
|
13
|
-
property :title
|
14
|
-
property :username
|
12
|
+
property :id, type: Integer
|
13
|
+
property :title, type: String
|
14
|
+
property :username, type: String
|
15
15
|
|
16
16
|
# Dummy name to prevent defining a class in the global namespace
|
17
17
|
def self.name
|
@@ -40,7 +40,25 @@ describe JSON::Encodable do
|
|
40
40
|
klass.new
|
41
41
|
end
|
42
42
|
|
43
|
-
describe ".
|
43
|
+
describe ".properties" do
|
44
|
+
subject do
|
45
|
+
klass.properties
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns an Array of JSON::Encodable::Property objects" do
|
49
|
+
should match(
|
50
|
+
array_including(
|
51
|
+
[
|
52
|
+
instance_of(JSON::Encodable::Property),
|
53
|
+
instance_of(JSON::Encodable::Property),
|
54
|
+
instance_of(JSON::Encodable::Property),
|
55
|
+
],
|
56
|
+
),
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#to_json" do
|
44
62
|
context "without any options" do
|
45
63
|
it "returns an Object in JSON format" do
|
46
64
|
should be_json_as(
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-encodable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.
|
61
|
+
version: 3.2.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 2.
|
68
|
+
version: 3.2.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec-json_matcher
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- json-encodable.gemspec
|
97
97
|
- lib/json-encodable.rb
|
98
98
|
- lib/json/encodable.rb
|
99
|
+
- lib/json/encodable/property.rb
|
99
100
|
- lib/json/encodable/version.rb
|
100
101
|
- spec/json/encodable_spec.rb
|
101
102
|
- spec/spec_helper.rb
|
@@ -126,4 +127,3 @@ summary: Make a class encodable into JSON format.
|
|
126
127
|
test_files:
|
127
128
|
- spec/json/encodable_spec.rb
|
128
129
|
- spec/spec_helper.rb
|
129
|
-
has_rdoc:
|