jsonapi_for_rails 0.1.0 → 0.1.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 +48 -37
- data/lib/jsonapi_for_rails/controller/actions/object.rb +2 -1
- data/lib/jsonapi_for_rails/version.rb +1 -1
- data/lib/jsonapi_for_rails.rb +15 -3
- 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: ab53c32125f8532906979ab579f4a60532a47b63
|
4
|
+
data.tar.gz: ef207d433646246f46a7dbeb2b4810cab9ea8f9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21223af6d72a1bd0e7704894745e41c7bf23c52bb5c0c2a4954ee187006e76de3ef24f1c02719d2057110267abdee2a910f10b4af07a2af9b5a61ce76714257f
|
7
|
+
data.tar.gz: 8b42752921a41e1c8f403158de7407eb7e25bb4a76e6ed0e41ba8a81bcb4b29b5ce7eab4c7e254973997102de739bbae6e2d13c4c3515dc2f46ddc58530db55e
|
data/README.md
CHANGED
@@ -1,6 +1,33 @@
|
|
1
1
|
# JsonapiForRails
|
2
2
|
A [Rails](http://rubyonrails.org/) 5+ plugin for providing a [JSONAPI v1.0](http://jsonapi.org/format/1.0/) API from your application with very little coding.
|
3
3
|
|
4
|
+
## Installation
|
5
|
+
|
6
|
+
### Official version
|
7
|
+
|
8
|
+
```bash
|
9
|
+
$ # Go to the root directory of your existing Rails application
|
10
|
+
$ cd path/to/railsapp
|
11
|
+
$
|
12
|
+
$ # Update the gem file
|
13
|
+
$ cat >> Gemfile
|
14
|
+
gem 'jsonapi_for_rails'
|
15
|
+
$
|
16
|
+
$ # Install
|
17
|
+
$ bundle install
|
18
|
+
```
|
19
|
+
|
20
|
+
### Edge version
|
21
|
+
|
22
|
+
```bash
|
23
|
+
$ cd path/to/railsapp
|
24
|
+
$ cat >> Gemfile
|
25
|
+
group :development do
|
26
|
+
gem 'jsonapi_for_rails', git: 'https://github.com/doga/jsonapi_for_rails.git'
|
27
|
+
end
|
28
|
+
$ bundle install
|
29
|
+
```
|
30
|
+
|
4
31
|
## Usage
|
5
32
|
|
6
33
|
### 1. Set up one API controller per model
|
@@ -8,16 +35,15 @@ A [Rails](http://rubyonrails.org/) 5+ plugin for providing a [JSONAPI v1.0](http
|
|
8
35
|
Generate a controller for each model that will be accessible from your API. Controller names need to be the plural version of your model names.
|
9
36
|
|
10
37
|
```bash
|
11
|
-
$ # Go to the root directory of your existing Rails application
|
12
38
|
$ cd path/to/railsapp
|
13
39
|
$
|
14
40
|
$ # Generate your models
|
15
|
-
$ bin/rails generate model author
|
16
41
|
$ bin/rails generate model article
|
42
|
+
$ bin/rails generate model author
|
17
43
|
$
|
18
44
|
$ # Generate your API controllers
|
19
|
-
$ bin/rails generate controller authors
|
20
45
|
$ bin/rails generate controller articles
|
46
|
+
$ bin/rails generate controller authors
|
21
47
|
```
|
22
48
|
|
23
49
|
Then enable JSONAPI in a parent class of your API controllers.
|
@@ -46,14 +72,14 @@ end
|
|
46
72
|
```
|
47
73
|
|
48
74
|
```ruby
|
49
|
-
# app/controllers/
|
75
|
+
# app/controllers/articles_controller.rb
|
50
76
|
|
51
77
|
# Change the API controller's parent class
|
52
|
-
class
|
78
|
+
class ArticlesController < JsonapiResourcesController
|
53
79
|
# ...
|
54
80
|
end
|
55
81
|
|
56
|
-
# Do the same with
|
82
|
+
# Do the same with AuthorsController
|
57
83
|
```
|
58
84
|
|
59
85
|
### 2. Configure your API controller routes
|
@@ -67,7 +93,7 @@ Rails.application.routes.draw do
|
|
67
93
|
scope '/api/v1' do # Optional scoping
|
68
94
|
|
69
95
|
[ # List your API controllers here
|
70
|
-
:
|
96
|
+
:articles, :authors
|
71
97
|
].each do |resources_name|
|
72
98
|
resources resources_name do
|
73
99
|
controller resources_name do
|
@@ -98,7 +124,7 @@ $ # Get an article
|
|
98
124
|
$ curl 'http://localhost:3000/api/v1/articles/184578894'
|
99
125
|
{"data":{"type":"articles","id":618037523,"attributes":{"title":"UK bank pay and bonuses in the spotlight as results season starts","content":"The pay deals handed to the bosses of Britain’s biggest banks will be in focus ...","created_at":"2016-02-22T16:57:43.401Z","updated_at":"2016-02-22T16:57:43.401Z"},"relationships":{"author":{"data":{"type":"authors","id":1023487079}}}}}
|
100
126
|
$
|
101
|
-
$ # Get only the title of an article, include the author name
|
127
|
+
$ # Get only the title and author of an article, include the author's name
|
102
128
|
$ curl 'http://localhost:3000/api/v1/articles/184578894?filter%5Barticles%5D=title,author;include=author;filter%5Bauthors%5D=name'
|
103
129
|
{"data":{"type":"articles","id":618037523,"attributes":{"title":"UK bank pay and bonuses in the spotlight as results season starts"},"relationships":{"author":{"data":{"type":"authors","id":1023487079}}}},"include":[{"data":{"type":"authors","id":1023487079,"attributes":{"name":"..."},"relationships":{}}}]}
|
104
130
|
|
@@ -167,7 +193,6 @@ class ArticlesController < JsonapiResourcesController
|
|
167
193
|
|
168
194
|
def index
|
169
195
|
jsonapi_model_class # => Article
|
170
|
-
jsonapi_model_class_name # => "Article"
|
171
196
|
jsonapi_model_type # => :articles
|
172
197
|
|
173
198
|
# ...
|
@@ -180,7 +205,19 @@ class ArticlesController < JsonapiResourcesController
|
|
180
205
|
end
|
181
206
|
|
182
207
|
def relationship_show
|
183
|
-
@jsonapi_relationship
|
208
|
+
# @jsonapi_relationship is available in all relationship actions.
|
209
|
+
# @jsonapi_relationship[:definition] describes the current relationship.
|
210
|
+
@jsonapi_relationship # => {:definition=>{:name=>:author, :type=>:to_one, :receiver=>{:type=>:authors, :class=>Author}}}
|
211
|
+
|
212
|
+
# ...
|
213
|
+
end
|
214
|
+
|
215
|
+
def relationship_update
|
216
|
+
# @jsonapi_relationship[:params] contains the parsed request body.
|
217
|
+
# It is available for all relationship actions except relationship_show.
|
218
|
+
# @jsonapi_relationship[:params][:data] is a Hash for relationships
|
219
|
+
# of type :to_one, and an Array for relationships of type :to_many.
|
220
|
+
@jsonapi_relationship # => {:definition=>{...}, :params=>{"data"=>{"type"=>"authors", "id"=>"234455384"}}}
|
184
221
|
|
185
222
|
# ...
|
186
223
|
end
|
@@ -196,34 +233,8 @@ end
|
|
196
233
|
* [Deleting resources](http://jsonapi.org/format/1.0/#crud-deleting) is currently not implemented.
|
197
234
|
* Test coverage is sparse.
|
198
235
|
|
199
|
-
## Installation
|
200
|
-
|
201
|
-
### Edge version
|
202
|
-
|
203
|
-
```bash
|
204
|
-
$ # Clone this repository
|
205
|
-
$ git clone 'https://github.com/doga/jsonapi_for_rails.git'
|
206
|
-
$
|
207
|
-
$ # Update your Rails application's gem file
|
208
|
-
$ cat >> path/to/Gemfile
|
209
|
-
|
210
|
-
group :development do
|
211
|
-
gem 'jsonapi_for_rails', path: 'path/to/jsonapi_for_rails'
|
212
|
-
#gem 'jsonapi_for_rails', git: 'https://github.com/doga/jsonapi_for_rails.git'
|
213
|
-
end
|
214
|
-
```
|
215
|
-
|
216
|
-
### Latest stable version
|
217
|
-
|
218
|
-
```bash
|
219
|
-
$ # Update your Rails application's gem file
|
220
|
-
$ cat >> path/to/Gemfile
|
221
|
-
|
222
|
-
gem 'jsonapi_for_rails'
|
223
|
-
```
|
224
|
-
|
225
236
|
## Contributing
|
226
|
-
If you find a bug in this project, have trouble following the documentation or have a question about the project – create an [issue](https://
|
237
|
+
If you find a bug in this project, have trouble following the documentation or have a question about the project – create an [issue](https://github.com/doga/jsonapi_for_rails/issues).
|
227
238
|
|
228
239
|
## License
|
229
240
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -170,6 +170,7 @@ module JsonapiForRails::Controller
|
|
170
170
|
end.compact
|
171
171
|
end
|
172
172
|
|
173
|
+
# TODO: define a separate method for relationship actions (i.e. when params[:relationship] != nil)
|
173
174
|
def received_relationships
|
174
175
|
rels = relationships
|
175
176
|
if params[:relationship] # only one relationship received for relationship action
|
@@ -230,7 +231,7 @@ module JsonapiForRails::Controller
|
|
230
231
|
conformant = false
|
231
232
|
break
|
232
233
|
end
|
233
|
-
conformant = false unless received_params[:data][:type] == relationship[:receiver][:type]
|
234
|
+
conformant = false unless received_params[:data][:type].to_sym == relationship[:receiver][:type]
|
234
235
|
|
235
236
|
break
|
236
237
|
end
|
data/lib/jsonapi_for_rails.rb
CHANGED
@@ -1,7 +1,19 @@
|
|
1
1
|
|
2
|
-
# TODO:
|
3
|
-
# TODO:
|
4
|
-
# TODO:
|
2
|
+
# TODO: JSONAPI: id of resource object is a string
|
3
|
+
# TODO: JSONAPI: adding optional members to documents ('jsonapi', 'meta')
|
4
|
+
# TODO: JSONAPI: return conformant HTTP status codes
|
5
|
+
# TODO: JSONAPI: conformant and rich 'errors' member
|
6
|
+
# TODO: JSONAPI: content negotiation
|
7
|
+
# TODO: JSONAPI: apply sparse fieldsets _after_ including related resources
|
8
|
+
# TODO: JSONAPI: should included resources list their relationships (which links to primary object)?
|
9
|
+
# TODO: JSONAPI: do not support Client-Generated IDs?
|
10
|
+
# TODO: JSONAPI: Location header
|
11
|
+
|
12
|
+
# TODO: README.md: double-check the installation instructions
|
13
|
+
# TODO: README.md: better describe @jsonapi_relationship (what can it contain besides 'definition'?)
|
14
|
+
# TODO: README.md: describe @jsonapi_include?
|
15
|
+
# TODO: README.md: describe @jsonapi_sparse_fieldsets?
|
16
|
+
|
5
17
|
|
6
18
|
require "jsonapi_for_rails/version"
|
7
19
|
require "jsonapi_for_rails/controller"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonapi_for_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Doga Armangil
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -44,8 +44,8 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
|
-
description: Jsonapi for Rails empowers your JSON API
|
48
|
-
|
47
|
+
description: Jsonapi for Rails empowers your JSON API compliant APIs. Requires with
|
48
|
+
very little coding. http://jsonapi.org/format/
|
49
49
|
email:
|
50
50
|
- doga.armangil@alumni.epfl.ch
|
51
51
|
executables: []
|
@@ -91,5 +91,5 @@ rubyforge_project:
|
|
91
91
|
rubygems_version: 2.5.1
|
92
92
|
signing_key:
|
93
93
|
specification_version: 4
|
94
|
-
summary:
|
94
|
+
summary: Jsonapi for Rails empowers your JSON API compliant APIs
|
95
95
|
test_files: []
|