collection_json_serializer 0.3.6 → 0.4.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/README.md +22 -18
- data/lib/collection_json_serializer/items.rb +5 -0
- data/lib/collection_json_serializer/objects/query.rb +3 -3
- data/lib/collection_json_serializer/serializer.rb +36 -23
- data/lib/collection_json_serializer/version.rb +1 -1
- data/test/builder/builder_test.rb +18 -0
- data/test/extensions/open_attrs_test.rb +4 -4
- data/test/fixtures/serializers/invalid_serializer.rb +1 -1
- data/test/fixtures/serializers/user_serializer.rb +5 -3
- data/test/fixtures/serializers/valid_serializer.rb +1 -1
- data/test/minitest_helper.rb +5 -5
- data/test/objects/item_test.rb +16 -4
- data/test/serializer/dsl_test.rb +2 -1
- data/test/serializer/href_test.rb +3 -3
- data/test/serializer/items/attributes_test.rb +4 -2
- data/test/serializer/links_test.rb +1 -1
- data/test/serializer/queries_test.rb +13 -11
- data/test/serializer/spec_test.rb +3 -3
- data/test/validator/invalid_test.rb +9 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3261f2fef5892978bcfe9c28b592538995524b2
|
4
|
+
data.tar.gz: 006a703ad51bc4914e2bbc3c6d6199c9c5d0789a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c72dd15101792c1773f136d6ec5f954b2b42b28d9aaec2b7e269885dd8a2c4bd53635dc5af1193552f7e910da4c0dd748d2257a0d90c70c943803ee7b0143710
|
7
|
+
data.tar.gz: dc76bbc18ec5c33fd613624553cb9927d300a0ff8285ea5d872d769821c71296fbfad6873538da0b7e94c70661b0bb669cec9bd636dc0f6c63543160cfa5b043
|
data/README.md
CHANGED
@@ -4,11 +4,16 @@
|
|
4
4
|
|
5
5
|
| :warning: This is _not finished_ yet, so use it at your own risk. |
|
6
6
|
--------------------------------------------------------------------
|
7
|
+
| :warning: Until version 1.X breaking changes might happen |
|
8
|
+
-------------------------------------------------------------
|
7
9
|
|
8
10
|
CollectionJson::Serializer serializes Ruby objects to Collection+JSON, the hypermedia type by Mike Amudsen.
|
9
11
|
|
10
12
|
Please note that CollectionJson::Serializer _only serializes data_. You still need to set the proper Headers or media-types in your app.
|
11
13
|
|
14
|
+
If you're working on a Rails app, you might want to use [Collection+JSON
|
15
|
+
Rails](https://github.com/carlesjove/collection_json_rails) instead.
|
16
|
+
|
12
17
|
## Installation
|
13
18
|
|
14
19
|
Add this line to your application's Gemfile:
|
@@ -32,16 +37,14 @@ class UserSerializer < CollectionJson::Serializer
|
|
32
37
|
|
33
38
|
template :name
|
34
39
|
template email: { prompt: "My email" }
|
35
|
-
# This could be written in a single line, too, wrapping the hash:
|
36
|
-
# template :name, { email: { ... } }
|
37
40
|
|
38
|
-
|
39
|
-
links dashboard: { href: "http://example.com/my-dashboard" }
|
41
|
+
link dashboard: { href: "http://example.com/my-dashboard" }
|
40
42
|
|
41
|
-
|
43
|
+
query search: {
|
42
44
|
href: "http://example.com/search",
|
43
45
|
name: false # Don't automatically include the name attribute
|
44
|
-
}
|
46
|
+
}
|
47
|
+
query pagination: {
|
45
48
|
rel: "page",
|
46
49
|
href: "http://example.com/page",
|
47
50
|
prompt: "Select a page number",
|
@@ -50,9 +53,13 @@ class UserSerializer < CollectionJson::Serializer
|
|
50
53
|
]
|
51
54
|
}
|
52
55
|
|
53
|
-
|
54
|
-
|
56
|
+
items do
|
57
|
+
attribute :id
|
58
|
+
attribute name: { prompt: "Your full name" }}
|
59
|
+
attribute :email
|
60
|
+
|
55
61
|
href "http://example.com/users/{id}"
|
62
|
+
|
56
63
|
link avatar: { href: "http://assets.example.com/avatar.jpg", render: "image" }
|
57
64
|
end
|
58
65
|
end
|
@@ -67,7 +74,7 @@ Then, you pass your objects to the serializer:
|
|
67
74
|
user_serializer = UserSerializer.new(@user)
|
68
75
|
|
69
76
|
# You can also pass an array of objects
|
70
|
-
# user_serializer = UserSerializer.new([@user1, @user2
|
77
|
+
# user_serializer = UserSerializer.new([@user1, @user2])
|
71
78
|
|
72
79
|
# Pass the serializer to the builder
|
73
80
|
collection = CollectionJson::Serializer::Builder.new(user_serializer)
|
@@ -139,10 +146,10 @@ All placeholders will be called, so you can use more than one if necessary, but
|
|
139
146
|
```ruby
|
140
147
|
class UserSerializer < CollectionJson::Serializer
|
141
148
|
items do
|
142
|
-
# This
|
149
|
+
# This will work
|
143
150
|
href "http://example.com/users/{id}/{username}"
|
144
151
|
|
145
|
-
# This
|
152
|
+
# This won't work
|
146
153
|
href "http://example.com/users/{id}-{username}"
|
147
154
|
end
|
148
155
|
end
|
@@ -163,19 +170,16 @@ class UserSerializer < CollectionJson::Serializer
|
|
163
170
|
|
164
171
|
# Now you can use your crazy properties everywhere
|
165
172
|
items do
|
166
|
-
|
173
|
+
attribute name: { css_class: "people" }
|
167
174
|
end
|
168
175
|
|
169
176
|
template name: { regex: "/\A[a-zA-Z0-9_]*\z/" }
|
170
177
|
|
171
|
-
|
178
|
+
link profile: { on_click: "reboot_universe" }
|
172
179
|
end
|
173
180
|
```
|
174
181
|
|
175
182
|
## Contributing
|
176
183
|
|
177
|
-
|
178
|
-
|
179
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
180
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
181
|
-
5. Create a new Pull Request
|
184
|
+
Please, all Pull Request should point to the `dev` branch. `master` is for the
|
185
|
+
latest release only.
|
@@ -18,6 +18,11 @@ module CollectionJson
|
|
18
18
|
@attributes ||= args
|
19
19
|
end
|
20
20
|
|
21
|
+
def attribute(args)
|
22
|
+
@attributes = Array.new unless @attributes.is_a?(Array)
|
23
|
+
@attributes << args
|
24
|
+
end
|
25
|
+
|
21
26
|
def link(args)
|
22
27
|
@links = Array.new unless @links.is_a?(Array)
|
23
28
|
@links << args
|
@@ -4,9 +4,9 @@ module CollectionJson
|
|
4
4
|
class Query
|
5
5
|
def initialize(serializer, item: 0)
|
6
6
|
@serializer = serializer
|
7
|
-
|
8
|
-
@key = @serializer.queries
|
9
|
-
@resource = @serializer.queries.
|
7
|
+
index = item >= 0 ? item : 0
|
8
|
+
@key = @serializer.queries[index].keys.first
|
9
|
+
@resource = @serializer.queries[index].fetch(@key)
|
10
10
|
@query = Hash.new
|
11
11
|
end
|
12
12
|
|
@@ -1,40 +1,53 @@
|
|
1
1
|
module CollectionJson
|
2
2
|
class Serializer
|
3
3
|
class << self
|
4
|
-
attr_accessor :
|
5
|
-
attr_accessor :
|
6
|
-
attr_accessor :
|
7
|
-
attr_accessor :
|
8
|
-
attr_accessor :
|
4
|
+
attr_accessor :_extensions
|
5
|
+
attr_accessor :_href
|
6
|
+
attr_accessor :_template
|
7
|
+
attr_accessor :_links
|
8
|
+
attr_accessor :_queries
|
9
9
|
attr_accessor :_items
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.inherited(base)
|
13
|
-
base.
|
14
|
-
base.
|
15
|
-
base.
|
16
|
-
base.
|
17
|
-
base.
|
13
|
+
base._extensions = []
|
14
|
+
base._href = []
|
15
|
+
base._template = []
|
16
|
+
base._links = []
|
17
|
+
base._queries = []
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.extensions(*attrs)
|
21
|
-
@
|
21
|
+
@_extensions.concat attrs
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.href(*attrs)
|
25
|
-
@
|
25
|
+
@_href.concat attrs
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.template(*attrs)
|
29
|
-
@
|
29
|
+
@_template.concat attrs
|
30
30
|
end
|
31
31
|
|
32
|
+
def self.link(*attrs)
|
33
|
+
@_links.concat attrs
|
34
|
+
end
|
35
|
+
|
36
|
+
# DEPRECATED
|
32
37
|
def self.links(*attrs)
|
33
|
-
|
38
|
+
warn "links has been deprecated and will be removed soon. " <<
|
39
|
+
"Please, use `link` instead"
|
40
|
+
@_links.concat attrs
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.query(*attrs)
|
44
|
+
@_queries.concat attrs
|
34
45
|
end
|
35
46
|
|
36
47
|
def self.queries(*attrs)
|
37
|
-
|
48
|
+
warn "`queries` has been deprecated and will be removed soon. " <<
|
49
|
+
"Please, use `query` instead"
|
50
|
+
@_queries.concat attrs
|
38
51
|
end
|
39
52
|
|
40
53
|
def self.items(&block)
|
@@ -53,35 +66,35 @@ module CollectionJson
|
|
53
66
|
end
|
54
67
|
|
55
68
|
def extensions
|
56
|
-
self.class.
|
69
|
+
self.class._extensions
|
57
70
|
end
|
58
71
|
|
59
72
|
def href
|
60
|
-
self.class.
|
73
|
+
self.class._href.first
|
61
74
|
end
|
62
75
|
|
63
76
|
def template
|
64
|
-
self.class.
|
77
|
+
self.class._template
|
65
78
|
end
|
66
79
|
|
67
80
|
def template?
|
68
|
-
self.class.
|
81
|
+
self.class._template.present?
|
69
82
|
end
|
70
83
|
|
71
84
|
def links
|
72
|
-
self.class.
|
85
|
+
self.class._links
|
73
86
|
end
|
74
87
|
|
75
88
|
def links?
|
76
|
-
self.class.
|
89
|
+
self.class._links.present?
|
77
90
|
end
|
78
91
|
|
79
92
|
def queries
|
80
|
-
self.class.
|
93
|
+
self.class._queries
|
81
94
|
end
|
82
95
|
|
83
96
|
def queries?
|
84
|
-
self.class.
|
97
|
+
self.class._queries.present?
|
85
98
|
end
|
86
99
|
|
87
100
|
def items
|
@@ -73,6 +73,15 @@ module CollectionJson
|
|
73
73
|
{
|
74
74
|
rel: "search",
|
75
75
|
href: "http://example.com/search"
|
76
|
+
},
|
77
|
+
{
|
78
|
+
rel: "page",
|
79
|
+
href: "http://example.com/page",
|
80
|
+
name: "pagination",
|
81
|
+
prompt: "Select a page number",
|
82
|
+
data: [
|
83
|
+
{ name: "page", value: "" }
|
84
|
+
]
|
76
85
|
}
|
77
86
|
]
|
78
87
|
}
|
@@ -168,6 +177,15 @@ module CollectionJson
|
|
168
177
|
{
|
169
178
|
rel: "search",
|
170
179
|
href: "http://example.com/search"
|
180
|
+
},
|
181
|
+
{
|
182
|
+
rel: "page",
|
183
|
+
href: "http://example.com/page",
|
184
|
+
name: "pagination",
|
185
|
+
prompt: "Select a page number",
|
186
|
+
data: [
|
187
|
+
{ name: "page", value: "" }
|
188
|
+
]
|
171
189
|
}
|
172
190
|
]
|
173
191
|
}
|
@@ -8,8 +8,8 @@ module CollectionJson
|
|
8
8
|
def setup
|
9
9
|
@user = User.new(name: "Carles Jove", email: "hola@carlus.cat")
|
10
10
|
@serializer = empty_serializer_for(@user)
|
11
|
-
@serializer.class.
|
12
|
-
@serializer.class.
|
11
|
+
@serializer.class._extensions = [:open_attrs]
|
12
|
+
@serializer.class._template = [
|
13
13
|
email: {
|
14
14
|
prompt: "My email",
|
15
15
|
anything: "at all"
|
@@ -27,13 +27,13 @@ module CollectionJson
|
|
27
27
|
anything: "at all"
|
28
28
|
}
|
29
29
|
]
|
30
|
-
@serializer.class.
|
30
|
+
@serializer.class._links = [
|
31
31
|
dashboard: {
|
32
32
|
href: "http://example.com/my-dashboard",
|
33
33
|
anything: "at all"
|
34
34
|
}
|
35
35
|
]
|
36
|
-
@serializer.class.
|
36
|
+
@serializer.class._queries = [
|
37
37
|
search: {
|
38
38
|
href: "http://example.com/search",
|
39
39
|
rel: "search",
|
@@ -5,12 +5,13 @@ class UserSerializer < CollectionJson::Serializer
|
|
5
5
|
template email: { prompt: "My email" }
|
6
6
|
template :password
|
7
7
|
|
8
|
-
|
8
|
+
link dashboard: { href: "http://example.com/my-dashboard" }
|
9
9
|
|
10
|
-
|
10
|
+
query search: {
|
11
11
|
href: "http://example.com/search",
|
12
12
|
name: false
|
13
|
-
}
|
13
|
+
}
|
14
|
+
query pagination: {
|
14
15
|
rel: "page",
|
15
16
|
href: "http://example.com/page",
|
16
17
|
prompt: "Select a page number",
|
@@ -22,6 +23,7 @@ class UserSerializer < CollectionJson::Serializer
|
|
22
23
|
items do
|
23
24
|
href "http://example.com/users/{id}"
|
24
25
|
attributes :name, :email
|
26
|
+
attribute date_created: { prompt: "Member since" }
|
25
27
|
link avatar: { href: "http://assets.example.com/avatar.jpg" }
|
26
28
|
link bio: { href: "http://example.com/bio" }
|
27
29
|
end
|
data/test/minitest_helper.rb
CHANGED
@@ -10,11 +10,11 @@ Dir.glob(File.dirname(__FILE__) + "/fixtures/serializers/**/*.rb") { |file| requ
|
|
10
10
|
module TestHelper
|
11
11
|
def empty_serializer_for(object)
|
12
12
|
serializer = CollectionJson::Serializer.new(object)
|
13
|
-
serializer.class.
|
14
|
-
serializer.class.
|
15
|
-
serializer.class.
|
16
|
-
serializer.class.
|
17
|
-
serializer.class.
|
13
|
+
serializer.class._extensions = []
|
14
|
+
serializer.class._href = []
|
15
|
+
serializer.class._links = []
|
16
|
+
serializer.class._template = []
|
17
|
+
serializer.class._queries = []
|
18
18
|
serializer.class.items {}
|
19
19
|
serializer.items.attributes = []
|
20
20
|
serializer
|
data/test/objects/item_test.rb
CHANGED
@@ -8,8 +8,10 @@ module CollectionJson
|
|
8
8
|
include TestHelper
|
9
9
|
|
10
10
|
def setup
|
11
|
-
@user1 = User.new(name: "Carles Jove", email: "hola@carlus.cat"
|
12
|
-
|
11
|
+
@user1 = User.new(name: "Carles Jove", email: "hola@carlus.cat",
|
12
|
+
date_created: "2015-02-01")
|
13
|
+
@user2 = User.new(name: "Aina Jove", email: "hola@example.com",
|
14
|
+
date_created: "2015-02-02")
|
13
15
|
@user_serializer = UserSerializer.new(@user1)
|
14
16
|
@item = Item.new(@user_serializer)
|
15
17
|
end
|
@@ -19,7 +21,12 @@ module CollectionJson
|
|
19
21
|
href: "http://example.com/users/#{@user1.id}",
|
20
22
|
data: [
|
21
23
|
{ name: "name", value: "Carles Jove" },
|
22
|
-
{ name: "email", value: "hola@carlus.cat" }
|
24
|
+
{ name: "email", value: "hola@carlus.cat" },
|
25
|
+
{
|
26
|
+
name: "date_created",
|
27
|
+
value: "2015-02-01",
|
28
|
+
prompt: "Member since"
|
29
|
+
}
|
23
30
|
],
|
24
31
|
links: [
|
25
32
|
{
|
@@ -46,7 +53,12 @@ module CollectionJson
|
|
46
53
|
href: "http://example.com/users/#{@user2.id}",
|
47
54
|
data: [
|
48
55
|
{ name: "name", value: "Aina Jove" },
|
49
|
-
{ name: "email", value: "hola@example.com" }
|
56
|
+
{ name: "email", value: "hola@example.com" },
|
57
|
+
{
|
58
|
+
name: "date_created",
|
59
|
+
value: "2015-02-02",
|
60
|
+
prompt: "Member since"
|
61
|
+
}
|
50
62
|
],
|
51
63
|
links: [
|
52
64
|
{
|
data/test/serializer/dsl_test.rb
CHANGED
@@ -4,7 +4,8 @@ module CollectionJson
|
|
4
4
|
class Serializer
|
5
5
|
class TestDSL < Minitest::Test
|
6
6
|
def setup
|
7
|
-
@user = User.new(name: "Carles Jove", email: "hola@carlus.cat"
|
7
|
+
@user = User.new(name: "Carles Jove", email: "hola@carlus.cat",
|
8
|
+
date_created: "2015-02-01")
|
8
9
|
@serializer = Serializer.new(@user)
|
9
10
|
end
|
10
11
|
|
@@ -11,14 +11,14 @@ module CollectionJson
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_href_object
|
14
|
-
assert_equal ["http://example.com/users"], @user_serializer.class.
|
14
|
+
assert_equal ["http://example.com/users"], @user_serializer.class._href
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_that_only_one_href_value_is_passed_to_builder
|
18
18
|
serializer = empty_serializer_for(@user)
|
19
|
-
serializer.class.
|
19
|
+
serializer.class._href = %w(/a /b /c)
|
20
20
|
|
21
|
-
assert_equal %w(/a /b /c), serializer.class.
|
21
|
+
assert_equal %w(/a /b /c), serializer.class._href
|
22
22
|
assert_equal "/a", serializer.href
|
23
23
|
end
|
24
24
|
end
|
@@ -4,12 +4,14 @@ module CollectionJson
|
|
4
4
|
class Serializer
|
5
5
|
class TestAttributes < Minitest::Test
|
6
6
|
def setup
|
7
|
-
@user = User.new(name: "Carles Jove", email: "hola@carlus.cat"
|
7
|
+
@user = User.new(name: "Carles Jove", email: "hola@carlus.cat",
|
8
|
+
date_created: "2015-02-01")
|
8
9
|
@user_serializer = UserSerializer.new(@user)
|
9
10
|
end
|
10
11
|
|
11
12
|
def test_attributes_properties
|
12
|
-
|
13
|
+
expected_attributes = [:name, :email, { date_created: { prompt: "Member since" } }]
|
14
|
+
assert_equal expected_attributes, @user_serializer.items.attributes
|
13
15
|
end
|
14
16
|
end
|
15
17
|
end
|
@@ -12,7 +12,7 @@ module CollectionJson
|
|
12
12
|
|
13
13
|
def test_item_links_attributes
|
14
14
|
expected = [dashboard: { href: "http://example.com/my-dashboard" }]
|
15
|
-
assert_equal expected, @user_serializer.class.
|
15
|
+
assert_equal expected, @user_serializer.class._links
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -10,21 +10,23 @@ module CollectionJson
|
|
10
10
|
|
11
11
|
def test_template_attributes
|
12
12
|
expected = [
|
13
|
-
search: {
|
14
|
-
|
15
|
-
|
13
|
+
{ search: {
|
14
|
+
href: "http://example.com/search",
|
15
|
+
name: false
|
16
|
+
}
|
16
17
|
},
|
17
|
-
pagination: {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
{ pagination: {
|
19
|
+
rel: "page",
|
20
|
+
href: "http://example.com/page",
|
21
|
+
prompt: "Select a page number",
|
22
|
+
data: [
|
23
|
+
{ name: "page" }
|
24
|
+
]
|
25
|
+
}
|
24
26
|
}
|
25
27
|
]
|
26
28
|
|
27
|
-
assert_equal expected, @user_serializer.class.
|
29
|
+
assert_equal expected, @user_serializer.class._queries
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
@@ -10,16 +10,16 @@ module CollectionJson
|
|
10
10
|
serializer.items.attributes = [
|
11
11
|
name: { unknown: "this should not be valid" }
|
12
12
|
]
|
13
|
-
serializer.items.links = serializer.class.
|
13
|
+
serializer.items.links = serializer.class._links = [
|
14
14
|
dashboard: {
|
15
15
|
href: "http://example.com",
|
16
16
|
unknown: "this should not be valid"
|
17
17
|
}
|
18
18
|
]
|
19
|
-
serializer.class.
|
19
|
+
serializer.class._template = [
|
20
20
|
name: { whatever: "this should not be valid" }
|
21
21
|
]
|
22
|
-
serializer.class.
|
22
|
+
serializer.class._queries = [
|
23
23
|
name: {
|
24
24
|
href: "http://example.com",
|
25
25
|
whatever: "this should be invalid",
|
@@ -23,7 +23,7 @@ module CollectionJson
|
|
23
23
|
|
24
24
|
# Href
|
25
25
|
def test_that_href_generates_errors
|
26
|
-
@invalid.class.
|
26
|
+
@invalid.class._href = [self: "/users/1", collection: "www.users.com"]
|
27
27
|
|
28
28
|
assert @invalid.invalid?
|
29
29
|
assert @invalid.errors.include? :href
|
@@ -32,7 +32,7 @@ module CollectionJson
|
|
32
32
|
assert @invalid.errors[:href][1].
|
33
33
|
include? "href:collection is an invalid URL"
|
34
34
|
|
35
|
-
@invalid.class.
|
35
|
+
@invalid.class._href = ["/users/1"]
|
36
36
|
|
37
37
|
assert @invalid.invalid?
|
38
38
|
assert @invalid.errors.include? :href
|
@@ -42,13 +42,13 @@ module CollectionJson
|
|
42
42
|
|
43
43
|
# Links
|
44
44
|
def test_that_links_generates_errors
|
45
|
-
@invalid.class.
|
45
|
+
@invalid.class._links = [dashboard: { href: "/my-dashboard" }]
|
46
46
|
assert @invalid.invalid?
|
47
47
|
assert @invalid.errors.include? :links
|
48
48
|
assert @invalid.errors[:links].first.
|
49
49
|
include? "links:dashboard:href is an invalid URL"
|
50
50
|
|
51
|
-
@invalid.class.
|
51
|
+
@invalid.class._links = [
|
52
52
|
dashboard: {
|
53
53
|
href: "http://valid.url.com",
|
54
54
|
prompt: /invalid/
|
@@ -61,7 +61,7 @@ module CollectionJson
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def test_that_links_missing_href_generates_error
|
64
|
-
@invalid.class.
|
64
|
+
@invalid.class._links = [dashboard: {}]
|
65
65
|
assert @invalid.invalid?
|
66
66
|
assert @invalid.errors.include? :links
|
67
67
|
assert @invalid.errors[:links].first.
|
@@ -103,7 +103,7 @@ module CollectionJson
|
|
103
103
|
# Template
|
104
104
|
def test_that_template_values_validate
|
105
105
|
values_for_test(:invalid).each do |invalidate|
|
106
|
-
@invalid.class.
|
106
|
+
@invalid.class._template = [
|
107
107
|
name: {
|
108
108
|
prompt: invalidate,
|
109
109
|
name: invalidate
|
@@ -123,7 +123,7 @@ module CollectionJson
|
|
123
123
|
|
124
124
|
# Queries
|
125
125
|
def test_that_queries_validate_href_format
|
126
|
-
@invalid.class.
|
126
|
+
@invalid.class._queries = [
|
127
127
|
search: {
|
128
128
|
href: "not-valid"
|
129
129
|
}
|
@@ -138,7 +138,7 @@ module CollectionJson
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def test_that_queries_href_is_required
|
141
|
-
@invalid.class.
|
141
|
+
@invalid.class._queries = [
|
142
142
|
search: {
|
143
143
|
name: "missing href"
|
144
144
|
}
|
@@ -153,7 +153,7 @@ module CollectionJson
|
|
153
153
|
|
154
154
|
def test_that_queries_values_are_validated
|
155
155
|
values_for_test(:invalid).each do |invalidate|
|
156
|
-
@invalid.class.
|
156
|
+
@invalid.class._queries = [
|
157
157
|
search: {
|
158
158
|
href: "http://example.com/",
|
159
159
|
name: invalidate,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: collection_json_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carles Jove i Buxeda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|