jsonapi.rb 1.7.0 → 2.0.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.
- checksums.yaml +4 -4
- data/README.md +14 -2
- data/lib/jsonapi/filtering.rb +6 -2
- data/lib/jsonapi/rails.rb +8 -10
- data/lib/jsonapi/version.rb +1 -1
- data/spec/dummy.rb +2 -3
- data/spec/errors_spec.rb +1 -1
- metadata +25 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d531366279855044f83d35f4526a72156c711895290ab4dbce73f1c7615f1079
|
4
|
+
data.tar.gz: 63bd2be61a78d79a64bc739cbb492ee75a9e2f90a95389d55f133a2565627abb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e602d6c993cd0259ac0b81c57eca16aee525f53ed0e5b4ac8014a0cb500528d579541375ce7735f0f191f3f732af9178ebbfdf7d4615eb967cfb244d1796cd36
|
7
|
+
data.tar.gz: 46a957ded4247be1607f6a4d84246da42a44fe41c58c55e2a34a914e958a28731531bc5e8a3f0d0141f571e17dce19c9c1f6f58845fc3e7db874d763dfcaffbb
|
data/README.md
CHANGED
@@ -39,7 +39,7 @@ The available features include:
|
|
39
39
|
[sparse fields](https://jsonapi.org/format/#fetching-sparse-fieldsets))
|
40
40
|
* [filtering](https://jsonapi.org/format/#fetching-filtering) and
|
41
41
|
[sorting](https://jsonapi.org/format/#fetching-sorting) of the data
|
42
|
-
(powered by Ransack)
|
42
|
+
(powered by Ransack, soft-dependency)
|
43
43
|
* [pagination](https://jsonapi.org/format/#fetching-pagination) support
|
44
44
|
|
45
45
|
## But how?
|
@@ -49,6 +49,16 @@ and [Ransack](https://github.com/activerecord-hackery/ransack).
|
|
49
49
|
|
50
50
|
Thanks to everyone who worked on these amazing projects!
|
51
51
|
|
52
|
+
## Sponsors
|
53
|
+
|
54
|
+
I'm grateful for the following companies for supporting this project!
|
55
|
+
|
56
|
+
<p align="center">
|
57
|
+
<a href="https://www.luneteyewear.com"><img src="https://user-images.githubusercontent.com/112147/136836142-2bfba96e-447f-4eb6-b137-2445aee81b37.png"/></a>
|
58
|
+
<a href="https://www.startuplandia.io"><img src="https://user-images.githubusercontent.com/112147/136836147-93f8ab17-2465-4477-a7ab-e38255483c66.png"/></a>
|
59
|
+
</p>
|
60
|
+
|
61
|
+
|
52
62
|
## Installation
|
53
63
|
|
54
64
|
Add this line to your application's Gemfile:
|
@@ -231,6 +241,8 @@ to filter and sort over a collection of records.
|
|
231
241
|
The support is pretty extended and covers also relationships and composite
|
232
242
|
matchers.
|
233
243
|
|
244
|
+
Please add `ransack` to your `Gemfile` in order to benefit from this functionality!
|
245
|
+
|
234
246
|
Here's an example:
|
235
247
|
|
236
248
|
```ruby
|
@@ -314,7 +326,7 @@ If you want to change the default number of items per page or define a custom lo
|
|
314
326
|
```ruby
|
315
327
|
def jsonapi_page_size(pagination_params)
|
316
328
|
per_page = pagination_params[:size].to_f.to_i
|
317
|
-
per_page = 30 if per_page > 30
|
329
|
+
per_page = 30 if per_page > 30 || per_page < 1
|
318
330
|
per_page
|
319
331
|
end
|
320
332
|
```
|
data/lib/jsonapi/filtering.rb
CHANGED
data/lib/jsonapi/rails.rb
CHANGED
@@ -37,7 +37,7 @@ module JSONAPI
|
|
37
37
|
# @return [NilClass]
|
38
38
|
def self.add_errors_renderer!
|
39
39
|
ActionController::Renderers.add(:jsonapi_errors) do |resource, options|
|
40
|
-
self.content_type
|
40
|
+
self.content_type = Mime[:jsonapi] if self.media_type.nil?
|
41
41
|
|
42
42
|
many = JSONAPI::Rails.is_collection?(resource, options[:is_collection])
|
43
43
|
resource = [resource] unless many
|
@@ -47,7 +47,7 @@ module JSONAPI
|
|
47
47
|
) unless resource.is_a?(ActiveModel::Errors)
|
48
48
|
|
49
49
|
errors = []
|
50
|
-
model = resource.instance_variable_get(
|
50
|
+
model = resource.instance_variable_get(:@base)
|
51
51
|
|
52
52
|
if respond_to?(:jsonapi_serializer_class, true)
|
53
53
|
model_serializer = jsonapi_serializer_class(model, false)
|
@@ -56,8 +56,8 @@ module JSONAPI
|
|
56
56
|
end
|
57
57
|
|
58
58
|
details = {}
|
59
|
-
if ::Rails
|
60
|
-
resource.
|
59
|
+
if ::Rails.gem_version >= Gem::Version.new('6.1')
|
60
|
+
resource.each do |error|
|
61
61
|
attr = error.attribute
|
62
62
|
details[attr] ||= []
|
63
63
|
details[attr] << error.detail.merge(message: error.message)
|
@@ -90,7 +90,7 @@ module JSONAPI
|
|
90
90
|
# @return [NilClass]
|
91
91
|
def self.add_renderer!
|
92
92
|
ActionController::Renderers.add(:jsonapi) do |resource, options|
|
93
|
-
self.content_type
|
93
|
+
self.content_type = Mime[:jsonapi] if self.media_type.nil?
|
94
94
|
|
95
95
|
JSONAPI_METHODS_MAPPING.to_a[0..1].each do |opt, method_name|
|
96
96
|
next unless respond_to?(method_name, true)
|
@@ -100,7 +100,7 @@ module JSONAPI
|
|
100
100
|
# If it's an empty collection, return it directly.
|
101
101
|
many = JSONAPI::Rails.is_collection?(resource, options[:is_collection])
|
102
102
|
if many && !resource.any?
|
103
|
-
return options.slice(:meta, :links).merge(data: []).to_json
|
103
|
+
return options.slice(:meta, :links).compact.merge(data: []).to_json
|
104
104
|
end
|
105
105
|
|
106
106
|
JSONAPI_METHODS_MAPPING.to_a[2..-1].each do |opt, method_name|
|
@@ -121,15 +121,13 @@ module JSONAPI
|
|
121
121
|
|
122
122
|
# Checks if an object is a collection
|
123
123
|
#
|
124
|
-
#
|
124
|
+
# Basically forwards it to a [JSONAPI::Serializer] as there's no public API
|
125
125
|
#
|
126
126
|
# @param resource [Object] to check
|
127
127
|
# @param force_is_collection [NilClass] flag to overwrite
|
128
128
|
# @return [TrueClass] upon success
|
129
129
|
def self.is_collection?(resource, force_is_collection = nil)
|
130
|
-
|
131
|
-
|
132
|
-
resource.respond_to?(:size) && !resource.respond_to?(:each_pair)
|
130
|
+
JSONAPI::ErrorSerializer.is_collection?(resource, force_is_collection)
|
133
131
|
end
|
134
132
|
|
135
133
|
# Resolves resource serializer class
|
data/lib/jsonapi/version.rb
CHANGED
data/spec/dummy.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'securerandom'
|
2
|
-
require '
|
3
|
-
require 'action_controller/railtie'
|
4
|
-
require 'jsonapi'
|
2
|
+
require 'rails/all'
|
5
3
|
require 'ransack'
|
4
|
+
require 'jsonapi'
|
6
5
|
|
7
6
|
Rails.logger = Logger.new(STDOUT)
|
8
7
|
Rails.logger.level = ENV['LOG_LEVEL'] || Logger::WARN
|
data/spec/errors_spec.rb
CHANGED
@@ -56,7 +56,7 @@ RSpec.describe NotesController, type: :request do
|
|
56
56
|
.to eq(Rack::Utils::HTTP_STATUS_CODES[422])
|
57
57
|
expect(response_json['errors'][0]['source'])
|
58
58
|
.to eq('pointer' => '/data/relationships/user')
|
59
|
-
if Rails
|
59
|
+
if Rails.gem_version >= Gem::Version.new('6.1')
|
60
60
|
expect(response_json['errors'][0]['detail'])
|
61
61
|
.to eq('User must exist')
|
62
62
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonapi.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stas Suscov
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jsonapi-serializer
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,13 +39,13 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
-
type: :
|
48
|
+
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
@@ -53,7 +53,21 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: ransack
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: railties
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -67,7 +81,7 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: activerecord
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -251,7 +265,7 @@ homepage: https://github.com/stas/jsonapi.rb
|
|
251
265
|
licenses:
|
252
266
|
- MIT
|
253
267
|
metadata: {}
|
254
|
-
post_install_message:
|
268
|
+
post_install_message: Install manually `ransack` gem before using `JSONAPI::Filtering`!
|
255
269
|
rdoc_options: []
|
256
270
|
require_paths:
|
257
271
|
- lib
|
@@ -266,8 +280,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
266
280
|
- !ruby/object:Gem::Version
|
267
281
|
version: '0'
|
268
282
|
requirements: []
|
269
|
-
rubygems_version: 3.
|
270
|
-
signing_key:
|
283
|
+
rubygems_version: 3.3.3
|
284
|
+
signing_key:
|
271
285
|
specification_version: 4
|
272
286
|
summary: So you say you need JSON:API support in your API...
|
273
287
|
test_files: []
|