jsonapi_for_rails 0.1.7 → 0.2.0.pre
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
- checksums.yaml.gz.sig +0 -0
- data/README.md +11 -5
- data/Rakefile +2 -0
- data/lib/jsonapi_for_rails/controller/actions/object.rb +32 -27
- data/lib/jsonapi_for_rails/controller/actions/relationship.rb +6 -6
- data/lib/jsonapi_for_rails/controller/before_actions/content_negotiation.rb +52 -7
- data/lib/jsonapi_for_rails/controller/before_actions/record.rb +1 -1
- data/lib/jsonapi_for_rails/controller/before_actions/relationship.rb +1 -1
- data/lib/jsonapi_for_rails/controller/utils/render.rb +42 -23
- data/lib/jsonapi_for_rails/controller.rb +2 -2
- data/lib/jsonapi_for_rails/model.rb +22 -12
- data/lib/jsonapi_for_rails/version.rb +2 -1
- data/lib/jsonapi_for_rails.rb +11 -8
- data.tar.gz.sig +0 -0
- metadata +5 -10
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da54359b12e07d61046ce9a96b2b0c8edadb2af2
|
4
|
+
data.tar.gz: bef39399515bd6b7b6a10d5466d26d45c60807ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e422031d14cea9d91d30591ceafb5616f868b6cd4471c34a705a7ae7837c9aabc4c74acb6627efaa78f7e311b7a6ec640d9b35fe2533ccd419fc1d1d1acf34a
|
7
|
+
data.tar.gz: 5750ba36ebe04753855d98914a1fa700f23db4da0541a97d7551b9821c89713a256264f2c9d34fc0400d8a4c67c7f49e47a32d7b187db4e0f933e41692bbe0ee
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -34,7 +34,7 @@ $
|
|
34
34
|
$ # Check the used version
|
35
35
|
$ bin/rails console
|
36
36
|
irb(main):001:0> JsonapiForRails::VERSION
|
37
|
-
=> "0.
|
37
|
+
=> "0.2.0.pre"
|
38
38
|
irb(main):002:0> exit
|
39
39
|
$
|
40
40
|
```
|
@@ -70,6 +70,12 @@ class ApplicationController < ActionController::Base # or ActionController::API
|
|
70
70
|
end
|
71
71
|
```
|
72
72
|
|
73
|
+
`acts_as_jsonapi_resources` accepts the following keyword arguments:
|
74
|
+
|
75
|
+
* `content_negotiation`: Set this to `false` to disable
|
76
|
+
[content negotiation](http://jsonapi.org/format/1.0/#content-negotiation).
|
77
|
+
Default value is `true`. Usage example: `acts_as_jsonapi_resources content_negotiation: false`
|
78
|
+
|
73
79
|
If only some of your controllers are JSONAPI controllers, then create a parent controller for only those controllers, and enable JSONAPI inside that controller rather than `ApplicationController`.
|
74
80
|
|
75
81
|
```bash
|
@@ -128,7 +134,7 @@ After populating your database and launching the built-in Rails server with the
|
|
128
134
|
|
129
135
|
```bash
|
130
136
|
$ # Get the list of articles
|
131
|
-
$ # (the response body is
|
137
|
+
$ # (the returned HTTP response body is short and terse, but it is prettified here for legibility)
|
132
138
|
$ curl 'http://localhost:3000/api/v1/articles'
|
133
139
|
{
|
134
140
|
"data": [
|
@@ -142,7 +148,6 @@ $ curl 'http://localhost:3000/api/v1/articles'
|
|
142
148
|
}
|
143
149
|
]
|
144
150
|
}
|
145
|
-
$
|
146
151
|
$ # Get an article
|
147
152
|
$ curl 'http://localhost:3000/api/v1/articles/618037523'
|
148
153
|
{
|
@@ -165,7 +170,6 @@ $ curl 'http://localhost:3000/api/v1/articles/618037523'
|
|
165
170
|
}
|
166
171
|
}
|
167
172
|
}
|
168
|
-
$
|
169
173
|
$ # Get only the title and author of an article, include the author's name
|
170
174
|
$ curl 'http://localhost:3000/api/v1/articles/618037523?filter%5Barticles%5D=title,author;include=author;filter%5Bauthors%5D=name'
|
171
175
|
{
|
@@ -274,7 +278,8 @@ class ArticlesController < JsonapiResourcesController
|
|
274
278
|
# @jsonapi_record contains the current database record.
|
275
279
|
# It is available inside all action methods (including all relationship
|
276
280
|
# methods) except :index and :create.
|
277
|
-
@jsonapi_record.to_jsonapi_hash
|
281
|
+
@jsonapi_record.to_jsonapi_hash # => {data: {...}}
|
282
|
+
@jsonapi_record.to_jsonapi_errors_hash # => {errors: [...]}
|
278
283
|
|
279
284
|
# ...
|
280
285
|
end
|
@@ -305,6 +310,7 @@ The internal architecture is sound. Test coverage is currently being bulked up u
|
|
305
310
|
|
306
311
|
Feature support roundup:
|
307
312
|
|
313
|
+
* [Content negotiation](http://jsonapi.org/format/1.0/#content-negotiation) is not implemented.
|
308
314
|
* [Inclusion of related resources](http://jsonapi.org/format/1.0/#fetching-includes) is currently only implemented for requests that return a single resource, and relationship paths are not supported.
|
309
315
|
* [Sparse fieldsets](http://jsonapi.org/format/1.0/#fetching-sparse-fieldsets) is currently only implemented for requests that return a single resource.
|
310
316
|
* [Sorting](http://jsonapi.org/format/1.0/#fetching-sorting) is currently not implemented.
|
data/Rakefile
CHANGED
@@ -22,8 +22,9 @@ module JsonapiForRails::Controller
|
|
22
22
|
|
23
23
|
# implements Create and Update operations
|
24
24
|
def create
|
25
|
+
|
26
|
+
# attributes
|
25
27
|
begin
|
26
|
-
# attributes
|
27
28
|
attrs = received_attributes
|
28
29
|
if attrs
|
29
30
|
if @jsonapi_record
|
@@ -31,38 +32,42 @@ module JsonapiForRails::Controller
|
|
31
32
|
@jsonapi_record.update! attrs
|
32
33
|
else
|
33
34
|
# create
|
34
|
-
@jsonapi_record = jsonapi_model_class.
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
# relationships
|
39
|
-
received_relationships.each do |relationship|
|
40
|
-
# to-one
|
41
|
-
if relationship[:definition][:type] == :to_one
|
42
|
-
@jsonapi_record.send :"#{relationship[:definition][:name]}=", relationship[:params][:data]
|
43
|
-
next
|
44
|
-
end
|
45
|
-
|
46
|
-
# to-many
|
47
|
-
@jsonapi_record.send(relationship[:definition][:name]).send :clear # initialize the relation
|
48
|
-
|
49
|
-
relationship[:params][:data].each do |item|
|
50
|
-
object = relationship[:receiver][:class].find_by_id item[:id]
|
51
|
-
@jsonapi_record.send(relationship[:definition][:name]).send :<<, object
|
35
|
+
@jsonapi_record = jsonapi_model_class.new attrs
|
36
|
+
@jsonapi_record.save!
|
52
37
|
end
|
53
38
|
end
|
54
39
|
rescue NameError => e
|
55
|
-
|
56
|
-
# error when creating record
|
57
|
-
render_error 500, "Model class not found."
|
40
|
+
render_errors 500, "Model class not found."
|
58
41
|
return
|
59
42
|
rescue
|
60
|
-
|
61
|
-
@jsonapi_record.destroy if @jsonapi_record
|
62
|
-
|
63
|
-
render_error 500, "Record could not be created."
|
43
|
+
render_errors 500, @jsonapi_record.to_jsonapi_errors_hash
|
64
44
|
return
|
65
45
|
end
|
46
|
+
|
47
|
+
# relationships
|
48
|
+
received_relationships.each do |relationship|
|
49
|
+
begin
|
50
|
+
# to-one
|
51
|
+
if relationship[:definition][:type] == :to_one
|
52
|
+
@jsonapi_record.send :"#{relationship[:definition][:name]}=", relationship[:params][:data]
|
53
|
+
next
|
54
|
+
end
|
55
|
+
|
56
|
+
# to-many
|
57
|
+
@jsonapi_record.send(relationship[:definition][:name]).send :clear # initialize the relation
|
58
|
+
|
59
|
+
relationship[:params][:data].each do |item|
|
60
|
+
object = relationship[:receiver][:class].find_by_id item[:id]
|
61
|
+
@jsonapi_record.send(relationship[:definition][:name]).send :<<, object
|
62
|
+
end
|
63
|
+
|
64
|
+
rescue
|
65
|
+
# Should not happen
|
66
|
+
render_errors 500, "Relationship could not be created."
|
67
|
+
return
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
66
71
|
show
|
67
72
|
end
|
68
73
|
|
@@ -108,7 +113,7 @@ module JsonapiForRails::Controller
|
|
108
113
|
end
|
109
114
|
|
110
115
|
def destroy
|
111
|
-
|
116
|
+
render_errors 500, "Not implemented."
|
112
117
|
end
|
113
118
|
|
114
119
|
# private
|
@@ -35,7 +35,7 @@ module JsonapiForRails::Controller
|
|
35
35
|
# PATCH
|
36
36
|
def relationship_update
|
37
37
|
if @jsonapi_relationship[:definition][:type] == :to_many
|
38
|
-
|
38
|
+
render_errors 403, 'Replacing all members of a to-many relationship is forbidden.'
|
39
39
|
return
|
40
40
|
end
|
41
41
|
|
@@ -45,7 +45,7 @@ module JsonapiForRails::Controller
|
|
45
45
|
@jsonapi_relationship[:params][:data][:id]
|
46
46
|
)
|
47
47
|
unless related
|
48
|
-
|
48
|
+
render_errors 403, 'Record not found.'
|
49
49
|
return
|
50
50
|
end
|
51
51
|
end
|
@@ -57,7 +57,7 @@ module JsonapiForRails::Controller
|
|
57
57
|
# POST for to-many relations only
|
58
58
|
def relationship_add
|
59
59
|
unless @jsonapi_relationship[:definition][:type] == :to_many
|
60
|
-
|
60
|
+
render_errors 403, 'Operation allowed for to-many relationships only.'
|
61
61
|
return
|
62
62
|
end
|
63
63
|
|
@@ -66,7 +66,7 @@ module JsonapiForRails::Controller
|
|
66
66
|
record[:id]
|
67
67
|
)
|
68
68
|
unless record
|
69
|
-
|
69
|
+
render_errors 403, "Non-existing record #{record.inspect}."
|
70
70
|
return
|
71
71
|
end
|
72
72
|
record
|
@@ -80,7 +80,7 @@ module JsonapiForRails::Controller
|
|
80
80
|
# DELETE for to-many relations only
|
81
81
|
def relationship_remove
|
82
82
|
unless @jsonapi_relationship[:definition][:type] == :to_many
|
83
|
-
|
83
|
+
render_errors 403, 'Operation allowed for to-many relationships only.'
|
84
84
|
return
|
85
85
|
end
|
86
86
|
|
@@ -89,7 +89,7 @@ module JsonapiForRails::Controller
|
|
89
89
|
record[:id]
|
90
90
|
)
|
91
91
|
unless record
|
92
|
-
|
92
|
+
render_errors 403, "Non-existing record #{record.inspect}."
|
93
93
|
return
|
94
94
|
end
|
95
95
|
record
|
@@ -11,17 +11,62 @@ module JsonapiForRails::Controller
|
|
11
11
|
|
12
12
|
def self.run_macros receiver
|
13
13
|
receiver.instance_exec do
|
14
|
-
before_action :
|
15
|
-
|
14
|
+
before_action :jsonapi_content_negotiation, only: [
|
15
|
+
:create,
|
16
|
+
:update,
|
17
|
+
|
18
|
+
:relationship_update,
|
19
|
+
:relationship_add,
|
20
|
+
:relationship_remove
|
21
|
+
]
|
22
|
+
|
23
|
+
private :jsonapi_content_negotiation
|
16
24
|
end
|
17
25
|
end
|
18
26
|
|
19
27
|
module InstanceMethods
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
28
|
+
def jsonapi_content_negotiation
|
29
|
+
jsonapi = ::JsonapiForRails::Controller::Utils::Render::JSONAPI
|
30
|
+
|
31
|
+
# Verify request's Content-Type header #######################
|
32
|
+
content_type = request.headers['Content-Type']
|
33
|
+
if content_type.nil? or content_type.strip != jsonapi[:content_type]
|
34
|
+
# TODO: DEPRECATION WARNING: `:nothing` option is deprecated and will be removed in Rails 5.1. Use `head` method to respond with empty response body.
|
35
|
+
render status: :unsupported_media_type, nothing: true # 415
|
36
|
+
return
|
37
|
+
end
|
38
|
+
|
39
|
+
# Verify request's Accept header #############################
|
40
|
+
loop do
|
41
|
+
# Request must have Accept header
|
42
|
+
accept = request.headers['Accept']
|
43
|
+
break unless accept
|
44
|
+
|
45
|
+
# Accept header's media ranges must match the JSONAPI media type
|
46
|
+
acceptable = false
|
47
|
+
jsonapi[:media_ranges].each do |media_range|
|
48
|
+
index = accept.index media_range
|
49
|
+
next unless index
|
50
|
+
|
51
|
+
acceptable = true
|
52
|
+
|
53
|
+
# Generic media range match?
|
54
|
+
next unless media_range == jsonapi[:content_type]
|
55
|
+
|
56
|
+
# JSONAPI media type match
|
57
|
+
if accept[(index+media_range.size)..-1] =~ /^\s*;/
|
58
|
+
# Media type parameter detected
|
59
|
+
acceptable = false
|
60
|
+
break
|
61
|
+
end
|
62
|
+
end
|
63
|
+
break unless acceptable
|
64
|
+
|
65
|
+
return
|
66
|
+
end
|
67
|
+
|
68
|
+
# TODO: DEPRECATION WARNING: `:nothing` option is deprecated and will be removed in Rails 5.1. Use `head` method to respond with empty response body.
|
69
|
+
render :not_acceptable, nothing: true # 406
|
25
70
|
end
|
26
71
|
|
27
72
|
end
|
@@ -11,50 +11,69 @@ module JsonapiForRails::Controller
|
|
11
11
|
|
12
12
|
JSONAPI = {
|
13
13
|
specification: 'http://jsonapi.org/format/',
|
14
|
-
content_type: 'application/vnd.api+json'
|
14
|
+
content_type: 'application/vnd.api+json',
|
15
|
+
media_range: [
|
16
|
+
'*/*',
|
17
|
+
'application/*',
|
18
|
+
'application/vnd.api+json'
|
19
|
+
]
|
15
20
|
}.freeze
|
16
21
|
|
17
22
|
def self.run_macros receiver
|
18
23
|
receiver.instance_exec do
|
19
|
-
private :render_json, :
|
24
|
+
private :render_json, :render_errors
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
23
28
|
module InstanceMethods
|
24
29
|
def render_json object
|
25
|
-
|
26
|
-
render_error 500, 'No message specified.'
|
27
|
-
return
|
28
|
-
end
|
29
|
-
|
30
|
+
# Status code
|
30
31
|
@jsonapi_status = 200
|
31
|
-
@jsonapi_json = ['development', 'test'].include?(Rails.env) ? JSON.pretty_generate(object) : JSON.generate(object)
|
32
|
-
@jsonapi_content_type = JSONAPI[:content_type]
|
33
32
|
|
33
|
+
# Generate json
|
34
|
+
@jsonapi_json = JSON.generate(object)
|
35
|
+
|
36
|
+
# Render
|
34
37
|
render(
|
35
38
|
plain: @jsonapi_json,
|
36
|
-
|
37
|
-
status: @jsonapi_status,
|
38
|
-
content_type: @jsonapi_content_type
|
39
|
+
status: @jsonapi_status
|
39
40
|
)
|
41
|
+
|
42
|
+
# Set content type
|
43
|
+
@jsonapi_content_type = JSONAPI[:content_type]
|
44
|
+
response.headers['Content-Type'] = @jsonapi_content_type
|
40
45
|
end
|
41
46
|
|
42
|
-
def
|
47
|
+
def render_errors status, argument
|
48
|
+
# Status code
|
43
49
|
@jsonapi_status = status
|
44
|
-
object = {
|
45
|
-
errors: [
|
46
|
-
{title: title}
|
47
|
-
]
|
48
|
-
}
|
49
|
-
@jsonapi_json = ['development', 'test'].include?(Rails.env) ? JSON.pretty_generate(object) : JSON.generate(object)
|
50
|
-
@jsonapi_content_type = JSONAPI[:content_type]
|
51
50
|
|
51
|
+
# Generate json
|
52
|
+
if argument.kind_of? Hash
|
53
|
+
message = argument
|
54
|
+
elsif argument.kind_of? Array
|
55
|
+
message = {
|
56
|
+
errors: argument
|
57
|
+
}
|
58
|
+
else
|
59
|
+
message = {
|
60
|
+
errors: [
|
61
|
+
{detail: argument.to_s}
|
62
|
+
]
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
@jsonapi_json = JSON.generate(message)
|
67
|
+
|
68
|
+
# Render
|
52
69
|
render(
|
53
70
|
plain: @jsonapi_json,
|
54
|
-
|
55
|
-
status: @jsonapi_status,
|
56
|
-
content_type: @jsonapi_content_type
|
71
|
+
status: @jsonapi_status
|
57
72
|
)
|
73
|
+
|
74
|
+
# Set content type
|
75
|
+
@jsonapi_content_type = JSONAPI[:content_type]
|
76
|
+
response.headers['Content-Type'] = @jsonapi_content_type
|
58
77
|
end
|
59
78
|
end
|
60
79
|
|
@@ -17,12 +17,12 @@ module JsonapiForRails::Controller
|
|
17
17
|
end
|
18
18
|
|
19
19
|
class_methods do
|
20
|
-
def acts_as_jsonapi_resources model: nil
|
20
|
+
def acts_as_jsonapi_resources content_negotiation: true #, model: nil
|
21
21
|
#$stderr.puts "JsonapiForRails::Controller macro called from #{self}:\n acts_as_jsonapi_resources(model: #{model or 'nil'})"
|
22
22
|
|
23
23
|
include JsonapiForRails::Controller::Utils::Model
|
24
24
|
include JsonapiForRails::Controller::Utils::Render
|
25
|
-
include JsonapiForRails::Controller::BeforeActions::ContentNegotiation
|
25
|
+
include JsonapiForRails::Controller::BeforeActions::ContentNegotiation if content_negotiation
|
26
26
|
include JsonapiForRails::Controller::BeforeActions::SparseFieldsets
|
27
27
|
include JsonapiForRails::Controller::BeforeActions::Include
|
28
28
|
include JsonapiForRails::Controller::BeforeActions::Record
|
@@ -25,6 +25,7 @@ module JsonapiForRails::Model
|
|
25
25
|
if sparse_fieldset
|
26
26
|
next unless sparse_fieldset.find{|f| association.name == f}
|
27
27
|
end
|
28
|
+
|
28
29
|
relationship = {}
|
29
30
|
relationships[association.name] = relationship
|
30
31
|
|
@@ -47,7 +48,6 @@ module JsonapiForRails::Model
|
|
47
48
|
|
48
49
|
# to-one relationship
|
49
50
|
elsif [
|
50
|
-
|
51
51
|
ActiveRecord::Reflection::HasOneReflection,
|
52
52
|
ActiveRecord::Reflection::BelongsToReflection
|
53
53
|
].include? association.class
|
@@ -66,25 +66,35 @@ module JsonapiForRails::Model
|
|
66
66
|
|
67
67
|
# message
|
68
68
|
{
|
69
|
-
=begin
|
70
|
-
meta: {
|
71
|
-
generated_by_class: "#{self.class}"
|
72
|
-
},
|
73
|
-
=end
|
74
69
|
data: {
|
75
|
-
type:
|
76
|
-
id:
|
77
|
-
|
78
|
-
attributes: attrs,
|
79
|
-
|
70
|
+
type: jsonapi_model_type,
|
71
|
+
id: self.id.to_s,
|
72
|
+
attributes: attrs,
|
80
73
|
relationships: relationships
|
81
74
|
}
|
82
75
|
}
|
83
76
|
|
84
77
|
end
|
85
78
|
|
79
|
+
def to_jsonapi_errors_hash
|
80
|
+
{
|
81
|
+
errors: errors.messages.to_a.reduce([]){ |result, key_value|
|
82
|
+
attribute = key_value.first
|
83
|
+
messages = key_value.last
|
84
|
+
result + messages.map{ |message|
|
85
|
+
{
|
86
|
+
detail: message,
|
87
|
+
source: {
|
88
|
+
pointer: "/data/attributes/#{attribute}",
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
86
96
|
def jsonapi_model_type
|
87
|
-
|
97
|
+
self.class.to_s.underscore.pluralize.to_sym
|
88
98
|
end
|
89
99
|
|
90
100
|
private :jsonapi_model_type
|
data/lib/jsonapi_for_rails.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
|
-
|
2
|
-
# TODO:
|
3
|
-
# TODO:
|
4
|
-
# TODO:
|
5
|
-
# TODO:
|
6
|
-
# TODO:
|
7
|
-
# TODO:
|
8
|
-
# TODO:
|
1
|
+
|
2
|
+
# TODO: content negotiation tests
|
3
|
+
# TODO: apply sparse fieldsets _after_ including related resources
|
4
|
+
# TODO: Location header
|
5
|
+
# TODO: add 'links' to documents
|
6
|
+
# TODO: return conformant HTTP status codes
|
7
|
+
# TODO: options for 'acts_as_jsonapi_resources'? example: {content_negotiation: false}
|
8
|
+
# TODO: adding optional members to documents ('jsonapi', 'meta')
|
9
|
+
# TODO: conformant and rich 'errors' member
|
10
|
+
# TODO: should included resources list their relationships (which links to primary object)?
|
11
|
+
# TODO: do not support Client-Generated IDs?
|
9
12
|
|
10
13
|
# TODO: README.md: double-check the installation instructions
|
11
14
|
# TODO: README.md: describe @jsonapi_include ?
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonapi_for_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Doga Armangil
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
DcNXARPdnPlz0VQedZo89pKjngah8Nur01/wD97Q18Mr/av3H4Bg1sTF+RZAplU3
|
32
32
|
RX+xYPJjPMyjrD73KZ5UNtXo5jOP1T85SqXOl6ICfedTVgZMk9mzK8+PkP1croHi
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2016-03-
|
34
|
+
date: 2016-03-11 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rails
|
@@ -95,12 +95,7 @@ files:
|
|
95
95
|
homepage: https://github.com/doga/jsonapi_for_rails
|
96
96
|
licenses:
|
97
97
|
- MIT
|
98
|
-
metadata:
|
99
|
-
code: https://github.com/doga/jsonapi_for_rails
|
100
|
-
docs: https://github.com/doga/jsonapi_for_rails#jsonapiforrails
|
101
|
-
wiki: ''
|
102
|
-
mail: ''
|
103
|
-
bugs: https://github.com/doga/jsonapi_for_rails/issues
|
98
|
+
metadata: {}
|
104
99
|
post_install_message:
|
105
100
|
rdoc_options: []
|
106
101
|
require_paths:
|
@@ -112,9 +107,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
112
107
|
version: '2.0'
|
113
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
109
|
requirements:
|
115
|
-
- - "
|
110
|
+
- - ">"
|
116
111
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
112
|
+
version: 1.3.1
|
118
113
|
requirements: []
|
119
114
|
rubyforge_project:
|
120
115
|
rubygems_version: 2.5.1
|
metadata.gz.sig
CHANGED
Binary file
|