rspec-resembles_json_matchers 0.9.0 → 0.9.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +117 -58
  3. data/.travis.yml +3 -2
  4. data/Appraisals +7 -5
  5. data/Gemfile +3 -1
  6. data/Guardfile +6 -5
  7. data/LICENSE.txt +13 -0
  8. data/README.md +5 -0
  9. data/Rakefile +2 -0
  10. data/examples/example_spec.rb +67 -63
  11. data/gemfiles/.bundle/config +3 -0
  12. data/gemfiles/rails_5.gemfile +1 -1
  13. data/gemfiles/rails_5.gemfile.lock +100 -67
  14. data/gemfiles/{rails_42.gemfile → rails_6.gemfile} +2 -2
  15. data/gemfiles/rails_6.gemfile.lock +236 -0
  16. data/lib/rspec/resembles_json_matchers.rb +4 -3
  17. data/lib/rspec/resembles_json_matchers/attribute_differ.rb +38 -43
  18. data/lib/rspec/resembles_json_matchers/attribute_matcher.rb +2 -5
  19. data/lib/rspec/resembles_json_matchers/helpers.rb +4 -3
  20. data/lib/rspec/resembles_json_matchers/json_matcher.rb +7 -6
  21. data/lib/rspec/resembles_json_matchers/matcherizer.rb +2 -3
  22. data/lib/rspec/resembles_json_matchers/resembles_any_of_matcher.rb +9 -13
  23. data/lib/rspec/resembles_json_matchers/resembles_array_matcher.rb +2 -4
  24. data/lib/rspec/resembles_json_matchers/resembles_boolean_matcher.rb +1 -0
  25. data/lib/rspec/resembles_json_matchers/resembles_class_matcher.rb +2 -1
  26. data/lib/rspec/resembles_json_matchers/resembles_date_matcher.rb +2 -0
  27. data/lib/rspec/resembles_json_matchers/resembles_hash_matcher.rb +11 -11
  28. data/lib/rspec/resembles_json_matchers/resembles_matcher.rb +8 -16
  29. data/lib/rspec/resembles_json_matchers/resembles_nil_matcher.rb +1 -0
  30. data/lib/rspec/resembles_json_matchers/resembles_numeric_matcher.rb +2 -1
  31. data/lib/rspec/resembles_json_matchers/resembles_route_matcher.rb +1 -0
  32. data/lib/rspec/resembles_json_matchers/resembles_string_matcher.rb +1 -0
  33. data/lib/rspec/resembles_json_matchers/string_indent.rb +4 -2
  34. data/lib/rspec/resembles_json_matchers/version.rb +3 -1
  35. data/rspec-resembles_json_matchers.gemspec +14 -9
  36. metadata +66 -24
  37. data/gemfiles/rails_42.gemfile.lock +0 -183
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 171dd3d381b09534f9c969e2ce6633e8132bb34fdc23e78121ba363db7bbef11
4
- data.tar.gz: 9823e5b275f1f8afce373ba250987feba065f22ad53bc1daced15392aaf7ddda
3
+ metadata.gz: 38281b311384de632c7193ac6934f3d75b7819cd398aa4f2972afb9180e21ef9
4
+ data.tar.gz: 39b792abbcdc3918090865625eeae4afa31943d5a95624a055be3b41e80872dd
5
5
  SHA512:
6
- metadata.gz: 8f678970b2c26c9d686eb91408a94e175d98ce5c129504826e89e7820628e874999053da7f8d60a4794082502b7188cd36231a649648f27e0db66c0ad15db8c6
7
- data.tar.gz: e39a63623c04f2aec16dcacccf56a64b2db8bff0c110cc1749ce134d4f770623c68862fcbf30c4ab2383e954cda0ca9195b57aa6d423bbd01458b4d4574249ac
6
+ metadata.gz: 88c84bf302ab7c9e91708e7a6d2a8547b550f13bbe270782adb9d71543a77f2e08bfc1d9c77b27cd1114ea22ed73bbba474ded3f2c7bf46765fab07d1b3daa56
7
+ data.tar.gz: bbcd7298a08f9382232320b91c95ef999b5ec25eca8617886fb6ae8b1a1a9cd3d49371abd801757c8dccc47f67c62a2e9c6c331e39ba4945d50005cb5dc6cf1c
@@ -1,96 +1,155 @@
1
- Rails:
2
- Enabled: true
1
+ inherit_from:
2
+ - https://relaxed.ruby.style/rubocop.yml
3
+
4
+ require:
5
+ - rubocop-rspec
6
+ - rubocop-performance
3
7
 
4
8
  AllCops:
5
9
  DisplayCopNames: true
6
10
  DisplayStyleGuide: true
7
- TargetRailsVersion: 5.1
8
- TargetRubyVersion: 2.5
11
+ TargetRubyVersion: 2.6
9
12
 
10
- Include:
11
- - "**/Rakefile"
12
- - "**/config.ru"
13
13
  Exclude:
14
14
  - "vendor/**/*"
15
15
  - "spec/fixtures/**/*"
16
16
  - "bin/**/*"
17
- - "script/**/*"
18
- - "node_modules/**/*"
19
17
 
20
- inherit_from:
21
- - http://relaxed.ruby.style/rubocop.yml
22
- # Rules subject to debate
23
- Metrics/LineLength:
24
- Max: 120
18
+ Layout:
19
+ Severity: error
20
+ Lint:
21
+ Severity: error
25
22
 
23
+ Layout/HashAlignment:
24
+ EnforcedHashRocketStyle: table
25
+ EnforcedColonStyle: table
26
+ Layout/LineLength:
27
+ Enabled: true
28
+ Max: 140
29
+ Lint/AmbiguousBlockAssociation:
30
+ Exclude:
31
+ - "spec/**/*" # `expect { }.to change { }` is fine
32
+ Lint/BooleanSymbol:
33
+ Exclude:
34
+ - "spec/**/*" # Symbols like :true get used in these test quite a bit
35
+ Lint/ShadowingOuterLocalVariable:
36
+ # Shadowing outer local variables with block parameters is often useful to
37
+ # not reinvent a new name for the same thing, it highlights the relation
38
+ # between the outer variable and the parameter. The cases where it's actually
39
+ # confusing are rare, and usually bad for other reasons already, for example
40
+ # because the method is too long.
41
+ Enabled: false
26
42
  Metrics/BlockLength:
43
+ Exclude:
44
+ - Gemfile
45
+ - Guardfile
46
+ - shared_context
27
47
  ExcludedMethods:
28
- - describe
48
+ - configure
29
49
  - context
50
+ - define
51
+ - describe
30
52
  - it
53
+ - namespace
31
54
  - specify
55
+ - task
56
+ - shared_examples_for
57
+ - shared_context
58
+ - feature
59
+ Metrics/ClassLength:
32
60
  Exclude:
33
- - "lib/tasks/**/*"
34
- - "config/routes.rb"
35
- Rails/Date:
61
+ - "spec/**/*_spec.rb"
62
+ Naming/RescuedExceptionsVariableName:
63
+ PreferredName: ex
64
+ Naming/FileName:
36
65
  Enabled: false
37
- Rails/TimeZone:
66
+ Naming/MethodName:
67
+ Enabled: false # welcome to the visitor pattern
68
+ Naming/MethodParameterName:
38
69
  Enabled: false
39
- Rails/RelativeDateConstant:
70
+ Style/ClassAndModuleChildren:
40
71
  Enabled: false
41
- Style/AndOr:
42
- EnforcedStyle: conditionals
43
- Layout/CaseIndentation:
44
- IndentOneStep: true
45
- Style/Documentation:
72
+ Style/EmptyLiteral:
46
73
  Enabled: false
47
- Style/EachWithObject:
74
+ Style/FormatStringToken:
48
75
  Enabled: false
49
- Layout/ExtraSpacing:
50
- Exclude:
51
- - "config/routes.rb"
52
76
  Style/FrozenStringLiteralComment:
53
77
  Enabled: true
78
+ Style/HashEachMethods:
79
+ Enabled: true
54
80
  Style/HashSyntax:
55
81
  Exclude:
56
- - "lib/tasks/**/*"
57
- Layout/MultilineOperationIndentation:
58
- EnforcedStyle: indented
59
- Style/NumericLiterals:
82
+ - Rakefile
83
+ - "**/*.rake"
84
+ Style/HashTransformKeys:
60
85
  Enabled: true
61
- Exclude:
62
- - "spec/**/*"
63
- Layout/EmptyLinesAroundClassBody:
64
- EnforcedStyle: empty_lines_special
65
- Layout/EmptyLinesAroundModuleBody:
66
- EnforcedStyle: empty_lines_special
67
- Style/SingleLineBlockParams:
86
+ Style/HashTransformValues:
87
+ Enabled: true
88
+ Style/MethodCallWithoutArgsParentheses:
89
+ Enabled: true
90
+ Style/NumericLiterals:
68
91
  Enabled: false
69
92
  Style/StringLiterals:
93
+ Enabled: true
70
94
  EnforcedStyle: double_quotes
71
- Style/StringLiteralsInInterpolation:
72
- EnforcedStyle: double_quotes
73
- Layout/MultilineMethodCallIndentation:
74
- Exclude:
75
- - "spec/**/*.rb"
76
- Style/FormatString:
77
- Enabled: false
78
- Style/FormatStringToken:
79
- Enabled: false
80
95
  Style/SymbolArray:
81
96
  MinSize: 4
82
- Style/WordArray:
83
- MinSize: 4
84
- Lint/UnusedBlockArgument:
97
+
98
+ # 0.81
99
+ Lint/RaiseException:
100
+ Enabled: true
101
+ Lint/StructNewOverride:
102
+ Enabled: false
103
+
104
+ # 0.82
105
+ Layout/SpaceAroundMethodCallOperator:
106
+ Enabled: true
107
+ Style/ExponentialNotation:
108
+ Enabled: true
109
+
110
+ # 0.83
111
+ Layout/EmptyLinesAroundAttributeAccessor:
112
+ Enabled: true
113
+ Style/SlicingWithRange:
114
+ Enabled: true
115
+
116
+ # 0.84
117
+ Lint/DeprecatedOpenSSLConstant:
118
+ Enabled: true
119
+
120
+ # Rspec
121
+ Capybara/FeatureMethods:
122
+ Enabled: false
123
+ RSpec/ContextWording:
124
+ Enabled: false
125
+ RSpec/DescribeClass:
126
+ Enabled: false
127
+ RSpec/DescribedClass:
128
+ Enabled: false
129
+ RSpec/ExampleLength:
130
+ Max: 20
131
+ RSpec/ExampleWording:
132
+ Enabled: false
133
+ RSpec/ExpectChange:
134
+ EnforcedStyle: block
135
+ RSpec/FilePath:
136
+ Enabled: false
137
+ RSpec/ImplicitExpect:
138
+ Enabled: false
139
+ RSpec/LeadingSubject:
140
+ Enabled: false
141
+ RSpec/MessageSpies:
85
142
  Enabled: false
86
- Lint/UnusedMethodArgument:
143
+ RSpec/MultipleExpectations:
144
+ Max: 4
145
+ RSpec/NestedGroups:
146
+ Max: 4
147
+ RSpec/NotToNot:
87
148
  Enabled: false
88
- Performance/Casecmp:
149
+ RSpec/ExpectInHook:
89
150
  Enabled: false
90
- Performance/RedundantMerge:
91
- MaxKeyValuePairs: 1
92
- Style/ClassCheck:
151
+ RSpec/LetSetup:
93
152
  Enabled: false
94
- Style/SignalException:
153
+ RSpec/NamedSubject:
95
154
  Enabled: false
96
155
 
@@ -1,11 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - "2.4"
4
3
  - "2.5"
4
+ - "2.6"
5
+ - "2.7"
5
6
  before_install: gem update --system && gem install bundler
6
7
  gemfile:
7
- - gemfiles/rails_42.gemfile
8
8
  - gemfiles/rails_5.gemfile
9
+ - gemfiles/rails_6.gemfile
9
10
  matrix:
10
11
  fast_finish: true
11
12
  notifications:
data/Appraisals CHANGED
@@ -1,9 +1,11 @@
1
- appraise "rails-42" do
2
- gem "rails", "~> 4.2"
3
- gem "rspec", "~> 3.4"
4
- end
1
+ # frozen_string_literal: true
5
2
 
6
3
  appraise "rails-5" do
7
- gem "rails", "~> 5.1.0"
4
+ gem "rails", "~> 5.2.0"
8
5
  gem "rspec", "~> 3.6.0"
9
6
  end
7
+
8
+ appraise "rails-6" do
9
+ gem "rails", "~> 6.0.0"
10
+ gem "rspec", "~> 3.9.0"
11
+ end
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
2
4
 
3
5
  # Specify your gem's dependencies in rspec-json_api_matchers.gemspec
4
6
  gemspec
data/Guardfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # A sample Guardfile
2
4
  # More info at https://github.com/guard/guard#readme
3
5
 
@@ -26,12 +28,12 @@
26
28
 
27
29
  guard :rspec,
28
30
  # cmd: "bin/rspec --no-profile --fail-fast",
29
- cmd: "bin/rspec --no-profile",
30
- failed_mode: :focus,
31
- run_all: { cmd: "bin/rspec --no-profile --tag ~type:feature" }, # skip feature specs on "all"
31
+ cmd: "bin/rspec --no-profile",
32
+ failed_mode: :focus,
33
+ run_all: { cmd: "bin/rspec --no-profile --tag ~type:feature" }, # skip feature specs on "all"
32
34
  notification: true,
33
35
  all_on_start: false,
34
- all_on_pass: false do
36
+ all_on_pass: false do
35
37
  require "guard/rspec/dsl"
36
38
  dsl = Guard::RSpec::Dsl.new(self)
37
39
 
@@ -50,5 +52,4 @@ guard :rspec,
50
52
  watch(%r{^lib/rspec/resembles_json_matchers/(.+_matcher)\.rb$}) do |m|
51
53
  "spec/matchers/#{m[1]}_spec.rb"
52
54
  end
53
-
54
55
  end
@@ -0,0 +1,13 @@
1
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
+ Version 2, December 2004
3
+
4
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
5
+
6
+ Everyone is permitted to copy and distribute verbatim or modified
7
+ copies of this license document, and changing it is allowed as long
8
+ as the name is changed.
9
+
10
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12
+
13
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
data/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/rspec-json_api_matchers.svg)](https://badge.fury.io/rb/rspec-json_api_matchers)[![Build Status](https://travis-ci.org/paul/rspec-json_api_matchers.svg?branch=master)](https://travis-ci.org/paul/rspec-json_api_matchers)
4
4
 
5
+
5
6
  This gem provides a set of matchers that make testing JSON documents (actually the hashes parsed from them) simpler and more elegant.
6
7
 
7
8
  ## `resemble` Matcher
@@ -193,3 +194,7 @@ Or install it yourself as:
193
194
 
194
195
  Bug reports and pull requests are welcome on GitHub at https://github.com/paul/rspec-json_api_matchers.
195
196
 
197
+ ## License
198
+
199
+
200
+ [![WTFPL](http://www.wtfpl.net/wp-content/uploads/2012/12/wtfpl-badge-4.png)][http://www.wtfpl.net/]
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
 
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "../spec/spec_helper"
2
4
 
3
5
  RSpec.describe "The resembles json matcher" do
4
6
  include RSpec::ResemblesJsonMatchers
5
7
 
6
- before :all do
8
+ before :suite do
7
9
  puts <<~WARNING
8
10
  NOTE: some of these are expected to fail, they are meant to demonstrate
9
11
  the output generated by failing specs
@@ -13,11 +15,11 @@ RSpec.describe "The resembles json matcher" do
13
15
  describe "a basic json document" do
14
16
  let(:document) do
15
17
  {
16
- "@id": "/posts/2016/test1",
17
- "@type": "Post",
18
- "title": "Hello World!",
19
- "body": "lorem ipsum",
20
- "created_at": "2016-03-01T00:03:42",
18
+ "@id": "/posts/2016/test1",
19
+ "@type": "Post",
20
+ "title": "Hello World!",
21
+ "body": "lorem ipsum",
22
+ "created_at": "2016-03-01T00:03:42",
21
23
  "published_at": "2016-03-10T15:35:00"
22
24
  }
23
25
  end
@@ -25,11 +27,11 @@ RSpec.describe "The resembles json matcher" do
25
27
  specify do
26
28
  expect(document).to resemble_json(
27
29
  {
28
- "@id": "/posts/:year/:title",
29
- "@type": eq("Post"),
30
- "title": "Hello World!",
31
- "body": "lorem ipsum",
32
- "created_at": "2016-03-01T00:03:42",
30
+ "@id": "/posts/:year/:title",
31
+ "@type": eq("Post"),
32
+ "title": "Hello World!",
33
+ "body": "lorem ipsum",
34
+ "created_at": "2016-03-01T00:03:42",
33
35
  "published_at": "2016-03-10T15:35:00"
34
36
  }
35
37
  )
@@ -39,11 +41,11 @@ RSpec.describe "The resembles json matcher" do
39
41
  specify do
40
42
  expect(document).to resemble_json(
41
43
  {
42
- "@id": "/posts/:year/:title",
43
- "@type": eq("PostCollection"),
44
- "title": 42.0,
45
- "body": "lorem ipsum",
46
- "created_at": "2016-03-01T00:03:42",
44
+ "@id": "/posts/:year/:title",
45
+ "@type": eq("PostCollection"),
46
+ "title": 42.0,
47
+ "body": "lorem ipsum",
48
+ "created_at": "2016-03-01T00:03:42",
47
49
  "published_at": "2016-03-10T15:35:00"
48
50
  }
49
51
  )
@@ -54,10 +56,10 @@ RSpec.describe "The resembles json matcher" do
54
56
  specify do
55
57
  expect(document).to resemble_json(
56
58
  {
57
- "@id": "/posts/:year/:title",
58
- "@type": eq("Post"),
59
- "body": "lorem ipsum",
60
- "created_at": "2016-03-01T00:03:42",
59
+ "@id": "/posts/:year/:title",
60
+ "@type": eq("Post"),
61
+ "body": "lorem ipsum",
62
+ "created_at": "2016-03-01T00:03:42",
61
63
  "published_at": "2016-03-10T15:35:00"
62
64
  }
63
65
  )
@@ -68,11 +70,13 @@ RSpec.describe "The resembles json matcher" do
68
70
  specify do
69
71
  expect(document).to resemble_json(
70
72
  {
71
- "@id": "/posts/:year/:title",
72
- "@type": eq("Post"),
73
- "body": "lorem ipsum",
74
- "created_at": "2016-03-01T00:03:42",
75
- "published_at": "2016-03-10T15:35:00"
73
+ "@id": "/posts/:year/:title",
74
+ "@type": eq("Post"),
75
+ "title": "Hello World!",
76
+ "body": "lorem ipsum",
77
+ "created_at": "2016-03-01T00:03:42",
78
+ "published_at": "2016-03-10T15:35:00",
79
+ "updated_at": "2016-03-10T15:40:00"
76
80
  }
77
81
  )
78
82
  end
@@ -82,16 +86,16 @@ RSpec.describe "The resembles json matcher" do
82
86
  describe "complex nested json documents" do
83
87
  let(:document) do
84
88
  {
85
- "@id": "/posts",
86
- "@type": "PostCollection",
89
+ "@id": "/posts",
90
+ "@type": "PostCollection",
87
91
  "nextPage": "/posts?page=2",
88
- "members": [
92
+ "members": [
89
93
  {
90
- "@id": "/posts/2016/test1",
91
- "@type": "Post",
92
- "title": "Hello World!",
93
- "body": "lorem ipsum",
94
- "created_at": "2016-03-01T00:03:42",
94
+ "@id": "/posts/2016/test1",
95
+ "@type": "Post",
96
+ "title": "Hello World!",
97
+ "body": "lorem ipsum",
98
+ "created_at": "2016-03-01T00:03:42",
95
99
  "published_at": "2016-03-10T15:35:00"
96
100
  }
97
101
  ]
@@ -101,16 +105,16 @@ RSpec.describe "The resembles json matcher" do
101
105
  specify do
102
106
  expect(document).to resemble_json(
103
107
  {
104
- "@id": "/posts",
105
- "@type": eq("PostCollection"),
108
+ "@id": "/posts",
109
+ "@type": eq("PostCollection"),
106
110
  "nextPage": "/posts?page=2",
107
- "members": [
111
+ "members": [
108
112
  {
109
- "@id": "/posts/:year/:title",
110
- "@type": eq("Post"),
111
- "title": "Hello World!",
112
- "body": "lorem ipsum",
113
- "created_at": "2016-03-01T00:03:42",
113
+ "@id": "/posts/:year/:title",
114
+ "@type": eq("Post"),
115
+ "title": "Hello World!",
116
+ "body": "lorem ipsum",
117
+ "created_at": "2016-03-01T00:03:42",
114
118
  "published_at": "2016-03-10T15:35:00"
115
119
  }
116
120
  ]
@@ -122,11 +126,11 @@ RSpec.describe "The resembles json matcher" do
122
126
  describe "empty nested documents" do
123
127
  let(:document) do
124
128
  {
125
- "@id": "/posts/2016/test1",
126
- "@type": "Post",
127
- "title": "Hello World!",
128
- "body": "lorem ipsum",
129
- "created_at": "2016-03-01T00:03:42",
129
+ "@id": "/posts/2016/test1",
130
+ "@type": "Post",
131
+ "title": "Hello World!",
132
+ "body": "lorem ipsum",
133
+ "created_at": "2016-03-01T00:03:42",
130
134
  "published_at": "2016-03-10T15:35:00"
131
135
  }
132
136
  end
@@ -134,15 +138,15 @@ RSpec.describe "The resembles json matcher" do
134
138
  specify do
135
139
  expect(document).to resemble_json(
136
140
  {
137
- "@id": "/posts/:year/:title",
138
- "@type": eq("Post"),
139
- "title": "Hello World!",
140
- "body": "lorem ipsum",
141
- "author": {
142
- "@id": "/authors/:id",
141
+ "@id": "/posts/:year/:title",
142
+ "@type": eq("Post"),
143
+ "title": "Hello World!",
144
+ "body": "lorem ipsum",
145
+ "author": {
146
+ "@id": "/authors/:id",
143
147
  "name": eq("Paul")
144
148
  },
145
- "created_at": "2016-03-01T00:03:42",
149
+ "created_at": "2016-03-01T00:03:42",
146
150
  "published_at": "2016-03-10T15:35:00"
147
151
  }
148
152
  )
@@ -152,8 +156,8 @@ RSpec.describe "The resembles json matcher" do
152
156
  describe "empty nested array documents" do
153
157
  let(:document) do
154
158
  {
155
- "@id": "/posts",
156
- "@type": "PostCollection",
159
+ "@id": "/posts",
160
+ "@type": "PostCollection",
157
161
  "nextPage": "/posts?page=2"
158
162
  }
159
163
  end
@@ -161,16 +165,16 @@ RSpec.describe "The resembles json matcher" do
161
165
  specify do
162
166
  expect(document).to resemble_json(
163
167
  {
164
- "@id": "/posts",
165
- "@type": eq("PostCollection"),
168
+ "@id": "/posts",
169
+ "@type": eq("PostCollection"),
166
170
  "nextPage": "/posts?page=2",
167
- "members": [
171
+ "members": [
168
172
  {
169
- "@id": "/posts/:year/:title",
170
- "@type": eq("Post"),
171
- "title": "Hello World!",
172
- "body": "lorem ipsum",
173
- "created_at": "2016-03-01T00:03:42",
173
+ "@id": "/posts/:year/:title",
174
+ "@type": eq("Post"),
175
+ "title": "Hello World!",
176
+ "body": "lorem ipsum",
177
+ "created_at": "2016-03-01T00:03:42",
174
178
  "published_at": "2016-03-10T15:35:00"
175
179
  }
176
180
  ]