json_api_toolbox 1.5.1 → 2.0.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/.gitignore +2 -1
- data/.rubocop.yml +6 -0
- data/CHANGELOG.md +17 -0
- data/Dockerfile +18 -0
- data/Gemfile.lock +237 -0
- data/README.md +60 -48
- data/Rakefile +6 -1
- data/bin/setup.sh +54 -0
- data/bitbucket-pipelines.yml +52 -15
- data/docker-entrypoint.sh +3 -0
- data/json_api_toolbox.gemspec +11 -15
- data/lib/json_api_toolbox.rb +0 -1
- data/lib/json_api_toolbox/rspec.rb +82 -0
- data/lib/json_api_toolbox/version.rb +1 -1
- metadata +33 -72
- data/.ruby-version +0 -1
- data/.travis.yml +0 -5
- data/lib/json_api_toolbox/spec_support/shared_examples_for_controllers.rb +0 -86
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fc9706da38e740273930904f1f8c2921fa7172ac47f73a1f4130683c5774c624
|
|
4
|
+
data.tar.gz: dd5b01dfad5c434d8b569769ad6149da78e317aaa8bb3f58102e1eb53b8f4630
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 91111bdba8cbe7562eb92f1b73172fbefbf062c501e298546ff6a795573e585ee3e53dfcafeee86a78631735f8b5f8935d5f9f11e499f3a7f8e64de60425b399
|
|
7
|
+
data.tar.gz: 11a64750e2c53a541e9df20bce0032d122352bfacbf976500ebb22c1c8a2f949a9f93ee50570bb7dcf99dc905382b348c5e6089f9d5e3ac13fdb26c141499873
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,24 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [2.0.0] - 2021-06-23
|
|
8
10
|
### Added
|
|
11
|
+
- New README file describing the gem and it's uses
|
|
12
|
+
- Added support for default rubocop config
|
|
13
|
+
- New setup script
|
|
14
|
+
- Added docker to run rubocop and rspec
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- New 2.0 branch! With better support for semver and ruby updates
|
|
18
|
+
- Moved the rspec examples file for easier manual import
|
|
19
|
+
- Updated all dependencies
|
|
20
|
+
- Moved some dependencies into development dependencies
|
|
21
|
+
|
|
22
|
+
### Removed
|
|
23
|
+
- Removed support for ruby 2.5 series
|
|
24
|
+
- Removed unneeded files (old CI files, ruby version lock, etc…)
|
|
25
|
+
- Removed auto import for rspec examples. It now need to be added manually on `rails_helper.rb`
|
|
9
26
|
|
|
10
27
|
## [Released]
|
|
11
28
|
|
data/Dockerfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
FROM ruby:2.6-alpine
|
|
2
|
+
|
|
3
|
+
RUN apk update \
|
|
4
|
+
&& apk upgrade \
|
|
5
|
+
&& apk add --update \
|
|
6
|
+
git \
|
|
7
|
+
openssh \
|
|
8
|
+
build-base \
|
|
9
|
+
&& rm -rf /var/cache/apk/*
|
|
10
|
+
|
|
11
|
+
RUN gem update --system
|
|
12
|
+
|
|
13
|
+
WORKDIR /gem
|
|
14
|
+
COPY . .
|
|
15
|
+
|
|
16
|
+
ENTRYPOINT ["sh", "docker-entrypoint.sh"]
|
|
17
|
+
|
|
18
|
+
CMD ["rake", "lint-and-test"]
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
json_api_toolbox (2.0.0)
|
|
5
|
+
activerecord (>= 5.1.0)
|
|
6
|
+
activesupport (>= 5.1.0)
|
|
7
|
+
json-api-vanilla
|
|
8
|
+
jsonapi-serializable
|
|
9
|
+
log_toolbox
|
|
10
|
+
request_store
|
|
11
|
+
rest-client
|
|
12
|
+
will_paginate
|
|
13
|
+
|
|
14
|
+
GEM
|
|
15
|
+
remote: https://rubygems.org/
|
|
16
|
+
specs:
|
|
17
|
+
actioncable (6.1.4)
|
|
18
|
+
actionpack (= 6.1.4)
|
|
19
|
+
activesupport (= 6.1.4)
|
|
20
|
+
nio4r (~> 2.0)
|
|
21
|
+
websocket-driver (>= 0.6.1)
|
|
22
|
+
actionmailbox (6.1.4)
|
|
23
|
+
actionpack (= 6.1.4)
|
|
24
|
+
activejob (= 6.1.4)
|
|
25
|
+
activerecord (= 6.1.4)
|
|
26
|
+
activestorage (= 6.1.4)
|
|
27
|
+
activesupport (= 6.1.4)
|
|
28
|
+
mail (>= 2.7.1)
|
|
29
|
+
actionmailer (6.1.4)
|
|
30
|
+
actionpack (= 6.1.4)
|
|
31
|
+
actionview (= 6.1.4)
|
|
32
|
+
activejob (= 6.1.4)
|
|
33
|
+
activesupport (= 6.1.4)
|
|
34
|
+
mail (~> 2.5, >= 2.5.4)
|
|
35
|
+
rails-dom-testing (~> 2.0)
|
|
36
|
+
actionpack (6.1.4)
|
|
37
|
+
actionview (= 6.1.4)
|
|
38
|
+
activesupport (= 6.1.4)
|
|
39
|
+
rack (~> 2.0, >= 2.0.9)
|
|
40
|
+
rack-test (>= 0.6.3)
|
|
41
|
+
rails-dom-testing (~> 2.0)
|
|
42
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
43
|
+
actiontext (6.1.4)
|
|
44
|
+
actionpack (= 6.1.4)
|
|
45
|
+
activerecord (= 6.1.4)
|
|
46
|
+
activestorage (= 6.1.4)
|
|
47
|
+
activesupport (= 6.1.4)
|
|
48
|
+
nokogiri (>= 1.8.5)
|
|
49
|
+
actionview (6.1.4)
|
|
50
|
+
activesupport (= 6.1.4)
|
|
51
|
+
builder (~> 3.1)
|
|
52
|
+
erubi (~> 1.4)
|
|
53
|
+
rails-dom-testing (~> 2.0)
|
|
54
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
55
|
+
activejob (6.1.4)
|
|
56
|
+
activesupport (= 6.1.4)
|
|
57
|
+
globalid (>= 0.3.6)
|
|
58
|
+
activemodel (6.1.4)
|
|
59
|
+
activesupport (= 6.1.4)
|
|
60
|
+
activerecord (6.1.4)
|
|
61
|
+
activemodel (= 6.1.4)
|
|
62
|
+
activesupport (= 6.1.4)
|
|
63
|
+
activestorage (6.1.4)
|
|
64
|
+
actionpack (= 6.1.4)
|
|
65
|
+
activejob (= 6.1.4)
|
|
66
|
+
activerecord (= 6.1.4)
|
|
67
|
+
activesupport (= 6.1.4)
|
|
68
|
+
marcel (~> 1.0.0)
|
|
69
|
+
mini_mime (>= 1.1.0)
|
|
70
|
+
activesupport (6.1.4)
|
|
71
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
72
|
+
i18n (>= 1.6, < 2)
|
|
73
|
+
minitest (>= 5.1)
|
|
74
|
+
tzinfo (~> 2.0)
|
|
75
|
+
zeitwerk (~> 2.3)
|
|
76
|
+
ast (2.4.2)
|
|
77
|
+
builder (3.2.4)
|
|
78
|
+
byebug (11.1.3)
|
|
79
|
+
coderay (1.1.3)
|
|
80
|
+
concurrent-ruby (1.1.9)
|
|
81
|
+
crass (1.0.6)
|
|
82
|
+
diff-lcs (1.4.4)
|
|
83
|
+
domain_name (0.5.20190701)
|
|
84
|
+
unf (>= 0.0.5, < 1.0.0)
|
|
85
|
+
erubi (1.10.0)
|
|
86
|
+
globalid (0.4.2)
|
|
87
|
+
activesupport (>= 4.2.0)
|
|
88
|
+
http-accept (1.7.0)
|
|
89
|
+
http-cookie (1.0.4)
|
|
90
|
+
domain_name (~> 0.5)
|
|
91
|
+
i18n (1.8.10)
|
|
92
|
+
concurrent-ruby (~> 1.0)
|
|
93
|
+
json-api-vanilla (1.0.2)
|
|
94
|
+
jsonapi-renderer (0.2.2)
|
|
95
|
+
jsonapi-serializable (0.3.1)
|
|
96
|
+
jsonapi-renderer (~> 0.2.0)
|
|
97
|
+
log_toolbox (1.3.11)
|
|
98
|
+
lograge (>= 0.11.1)
|
|
99
|
+
logstash-event (>= 1.2.02)
|
|
100
|
+
logstash-logger (>= 0.26.1)
|
|
101
|
+
rails (>= 5.0)
|
|
102
|
+
lograge (0.11.2)
|
|
103
|
+
actionpack (>= 4)
|
|
104
|
+
activesupport (>= 4)
|
|
105
|
+
railties (>= 4)
|
|
106
|
+
request_store (~> 1.0)
|
|
107
|
+
logstash-event (1.2.02)
|
|
108
|
+
logstash-logger (0.26.1)
|
|
109
|
+
logstash-event (~> 1.2)
|
|
110
|
+
loofah (2.10.0)
|
|
111
|
+
crass (~> 1.0.2)
|
|
112
|
+
nokogiri (>= 1.5.9)
|
|
113
|
+
mail (2.7.1)
|
|
114
|
+
mini_mime (>= 0.1.1)
|
|
115
|
+
marcel (1.0.1)
|
|
116
|
+
method_source (1.0.0)
|
|
117
|
+
mime-types (3.3.1)
|
|
118
|
+
mime-types-data (~> 3.2015)
|
|
119
|
+
mime-types-data (3.2021.0704)
|
|
120
|
+
mini_mime (1.1.0)
|
|
121
|
+
minitest (5.14.4)
|
|
122
|
+
netrc (0.11.0)
|
|
123
|
+
nio4r (2.5.7)
|
|
124
|
+
nokogiri (1.11.7-x86_64-linux)
|
|
125
|
+
racc (~> 1.4)
|
|
126
|
+
parallel (1.20.1)
|
|
127
|
+
parser (3.0.1.1)
|
|
128
|
+
ast (~> 2.4.1)
|
|
129
|
+
pry (0.13.1)
|
|
130
|
+
coderay (~> 1.1)
|
|
131
|
+
method_source (~> 1.0)
|
|
132
|
+
pry-byebug (3.9.0)
|
|
133
|
+
byebug (~> 11.0)
|
|
134
|
+
pry (~> 0.13.0)
|
|
135
|
+
racc (1.5.2)
|
|
136
|
+
rack (2.2.3)
|
|
137
|
+
rack-test (1.1.0)
|
|
138
|
+
rack (>= 1.0, < 3)
|
|
139
|
+
rails (6.1.4)
|
|
140
|
+
actioncable (= 6.1.4)
|
|
141
|
+
actionmailbox (= 6.1.4)
|
|
142
|
+
actionmailer (= 6.1.4)
|
|
143
|
+
actionpack (= 6.1.4)
|
|
144
|
+
actiontext (= 6.1.4)
|
|
145
|
+
actionview (= 6.1.4)
|
|
146
|
+
activejob (= 6.1.4)
|
|
147
|
+
activemodel (= 6.1.4)
|
|
148
|
+
activerecord (= 6.1.4)
|
|
149
|
+
activestorage (= 6.1.4)
|
|
150
|
+
activesupport (= 6.1.4)
|
|
151
|
+
bundler (>= 1.15.0)
|
|
152
|
+
railties (= 6.1.4)
|
|
153
|
+
sprockets-rails (>= 2.0.0)
|
|
154
|
+
rails-dom-testing (2.0.3)
|
|
155
|
+
activesupport (>= 4.2.0)
|
|
156
|
+
nokogiri (>= 1.6)
|
|
157
|
+
rails-html-sanitizer (1.3.0)
|
|
158
|
+
loofah (~> 2.3)
|
|
159
|
+
railties (6.1.4)
|
|
160
|
+
actionpack (= 6.1.4)
|
|
161
|
+
activesupport (= 6.1.4)
|
|
162
|
+
method_source
|
|
163
|
+
rake (>= 0.13)
|
|
164
|
+
thor (~> 1.0)
|
|
165
|
+
rainbow (3.0.0)
|
|
166
|
+
rake (13.0.4)
|
|
167
|
+
regexp_parser (2.1.1)
|
|
168
|
+
request_store (1.5.0)
|
|
169
|
+
rack (>= 1.4)
|
|
170
|
+
rest-client (2.1.0)
|
|
171
|
+
http-accept (>= 1.7.0, < 2.0)
|
|
172
|
+
http-cookie (>= 1.0.2, < 2.0)
|
|
173
|
+
mime-types (>= 1.16, < 4.0)
|
|
174
|
+
netrc (~> 0.8)
|
|
175
|
+
rexml (3.2.5)
|
|
176
|
+
rspec (3.10.0)
|
|
177
|
+
rspec-core (~> 3.10.0)
|
|
178
|
+
rspec-expectations (~> 3.10.0)
|
|
179
|
+
rspec-mocks (~> 3.10.0)
|
|
180
|
+
rspec-core (3.10.1)
|
|
181
|
+
rspec-support (~> 3.10.0)
|
|
182
|
+
rspec-expectations (3.10.1)
|
|
183
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
184
|
+
rspec-support (~> 3.10.0)
|
|
185
|
+
rspec-mocks (3.10.2)
|
|
186
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
187
|
+
rspec-support (~> 3.10.0)
|
|
188
|
+
rspec-support (3.10.2)
|
|
189
|
+
rubocop (1.18.3)
|
|
190
|
+
parallel (~> 1.10)
|
|
191
|
+
parser (>= 3.0.0.0)
|
|
192
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
193
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
194
|
+
rexml
|
|
195
|
+
rubocop-ast (>= 1.7.0, < 2.0)
|
|
196
|
+
ruby-progressbar (~> 1.7)
|
|
197
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
|
198
|
+
rubocop-ast (1.7.0)
|
|
199
|
+
parser (>= 3.0.1.1)
|
|
200
|
+
ruby-progressbar (1.11.0)
|
|
201
|
+
shoulda-matchers (4.5.1)
|
|
202
|
+
activesupport (>= 4.2.0)
|
|
203
|
+
sprockets (4.0.2)
|
|
204
|
+
concurrent-ruby (~> 1.0)
|
|
205
|
+
rack (> 1, < 3)
|
|
206
|
+
sprockets-rails (3.2.2)
|
|
207
|
+
actionpack (>= 4.0)
|
|
208
|
+
activesupport (>= 4.0)
|
|
209
|
+
sprockets (>= 3.0.0)
|
|
210
|
+
thor (1.1.0)
|
|
211
|
+
tzinfo (2.0.4)
|
|
212
|
+
concurrent-ruby (~> 1.0)
|
|
213
|
+
unf (0.1.4)
|
|
214
|
+
unf_ext
|
|
215
|
+
unf_ext (0.0.7.7)
|
|
216
|
+
unicode-display_width (2.0.0)
|
|
217
|
+
websocket-driver (0.7.5)
|
|
218
|
+
websocket-extensions (>= 0.1.0)
|
|
219
|
+
websocket-extensions (0.1.5)
|
|
220
|
+
will_paginate (3.3.0)
|
|
221
|
+
zeitwerk (2.4.2)
|
|
222
|
+
|
|
223
|
+
PLATFORMS
|
|
224
|
+
x86_64-darwin-20
|
|
225
|
+
x86_64-linux
|
|
226
|
+
|
|
227
|
+
DEPENDENCIES
|
|
228
|
+
bundler
|
|
229
|
+
json_api_toolbox!
|
|
230
|
+
pry-byebug
|
|
231
|
+
rake
|
|
232
|
+
rspec
|
|
233
|
+
rubocop
|
|
234
|
+
shoulda-matchers
|
|
235
|
+
|
|
236
|
+
BUNDLED WITH
|
|
237
|
+
2.2.22
|
data/README.md
CHANGED
|
@@ -1,42 +1,32 @@
|
|
|
1
1
|
# JsonApiToolbox
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This toolbox serve as a JSON API helper within Guide TI specs
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The current features are:
|
|
6
|
+
- Integrates the gems `jsonapi-serializable`, `json-api-vanilla` and `log_toolbox`
|
|
7
|
+
- Rspec support through a series of shares examples
|
|
8
|
+
- Suport for JSON API services
|
|
6
9
|
|
|
7
10
|
## Installation
|
|
8
11
|
|
|
9
|
-
Add this line
|
|
12
|
+
Add this line in your `Gemfile`:
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
gem 'json_api_toolbox'
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
And then execute:
|
|
16
|
-
|
|
17
|
-
$ bundle
|
|
18
|
-
|
|
19
|
-
Or install it yourself as:
|
|
20
|
-
|
|
21
|
-
$ gem install json_api_toolbox
|
|
14
|
+
gem 'json_api_toolbox'
|
|
22
15
|
|
|
23
|
-
|
|
16
|
+
then execute:
|
|
24
17
|
|
|
25
|
-
|
|
18
|
+
$ bundle install
|
|
26
19
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
20
|
+
For rspec support, add this line on your `rails_helper.rb`:
|
|
30
21
|
|
|
31
|
-
|
|
22
|
+
require 'json_api_toolbox/rspec'
|
|
32
23
|
|
|
33
|
-
##
|
|
24
|
+
## Usage Examples
|
|
34
25
|
|
|
35
|
-
|
|
26
|
+
You can check some gem uses within the examples below:
|
|
36
27
|
|
|
37
|
-
|
|
28
|
+
### Service
|
|
38
29
|
|
|
39
|
-
#Service
|
|
40
30
|
```ruby
|
|
41
31
|
class MyService < JsonApiToolbox::Service
|
|
42
32
|
BASE_URL = 'http://localhost:3000/my_model'
|
|
@@ -61,9 +51,10 @@ class MyService < JsonApiToolbox::Service
|
|
|
61
51
|
end
|
|
62
52
|
```
|
|
63
53
|
|
|
64
|
-
|
|
54
|
+
### Renderizable
|
|
55
|
+
|
|
56
|
+
A simple render:
|
|
65
57
|
|
|
66
|
-
Render common
|
|
67
58
|
```ruby
|
|
68
59
|
render_object(Quota.all)
|
|
69
60
|
```
|
|
@@ -76,7 +67,7 @@ new Hash, the key must be 'Hash' and the value must be your Serializable.
|
|
|
76
67
|
render_object(QuotaGap.all, class: { Hash: SerializableQuotaGap })
|
|
77
68
|
```
|
|
78
69
|
|
|
79
|
-
|
|
70
|
+
### Paginable
|
|
80
71
|
|
|
81
72
|
To render a collection with a json api pagination, you will need to send a Hash
|
|
82
73
|
that contains two keys called 'links' and 'meta', and its values must be Hashs.
|
|
@@ -96,35 +87,33 @@ class MyController
|
|
|
96
87
|
end
|
|
97
88
|
```
|
|
98
89
|
|
|
99
|
-
|
|
90
|
+
### Rspec Shared Examples
|
|
100
91
|
|
|
101
|
-
it_behaves_like 'a http method'
|
|
102
|
-
|
|
92
|
+
`it_behaves_like 'a http method'`
|
|
93
|
+
- validate if your response have http status 200
|
|
103
94
|
|
|
104
|
-
it_behaves_like 'a get method'
|
|
105
|
-
|
|
106
|
-
|
|
95
|
+
`it_behaves_like 'a get method'`
|
|
96
|
+
- validate if your response have http status 200
|
|
97
|
+
- validate if your response responde to body method
|
|
107
98
|
|
|
108
|
-
it_behaves_like 'a json api response with included node'
|
|
109
|
-
|
|
99
|
+
`it_behaves_like 'a json api response with included node'`
|
|
100
|
+
- validate if yor response.body has included node
|
|
110
101
|
|
|
111
|
-
it_behaves_like 'a get with jsonapi with default value of', SomeModel
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
1 - for enums who have '_cd' in the end of attribute name, '_cd' is removed.
|
|
115
|
-
ex: enum_cd => enum
|
|
116
|
-
2 - id attributes are removed from validation
|
|
117
|
-
3 - for attributes who have _id in the end of attribute name, they are
|
|
118
|
-
removed from validation
|
|
102
|
+
`it_behaves_like 'a get with jsonapi with default value of', SomeModel`
|
|
103
|
+
- validate if all attributes are present on your data based on the current criteria:
|
|
104
|
+
1. for enums who have `_cd` in the end of attribute name, `_cd` is removed.
|
|
119
105
|
|
|
120
|
-
|
|
121
|
-
|
|
106
|
+
ex: `enum_cd` => `enum`
|
|
107
|
+
1. id attributes are removed from validation
|
|
108
|
+
1. for attributes who have `_id` in the end of attribute name, they are removed from validation
|
|
122
109
|
|
|
123
|
-
it_behaves_like 'a
|
|
124
|
-
|
|
110
|
+
`it_behaves_like 'a json api response with all relations of', SomeModel`
|
|
111
|
+
- validate if all relations are included on your data
|
|
125
112
|
|
|
126
|
-
|
|
113
|
+
`it_behaves_like 'a failed attempt to retrieve a resource'`
|
|
114
|
+
- checks if the api response will include an error when `find` raise a exception retrieving a resource.
|
|
127
115
|
|
|
116
|
+
## Test example
|
|
128
117
|
|
|
129
118
|
```ruby
|
|
130
119
|
# frozen_string_literal: true
|
|
@@ -221,3 +210,26 @@ RSpec.describe ManagersController, type: :controller do
|
|
|
221
210
|
end
|
|
222
211
|
end
|
|
223
212
|
```
|
|
213
|
+
|
|
214
|
+
## Development
|
|
215
|
+
|
|
216
|
+
To change the gem is simple, just clone this repository and run the `bin/setup` script
|
|
217
|
+
|
|
218
|
+
Then you can make your changes and check them with `rspec` or `rubocop .`.
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
### On docker
|
|
222
|
+
|
|
223
|
+
#### Building
|
|
224
|
+
```bash
|
|
225
|
+
docker build . -t json-api-toolbox-dev
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
#### Running tests
|
|
229
|
+
```bash
|
|
230
|
+
docker run --rm -it -v "$(echo $HOME)/.ssh:/root/.ssh" -v "$(pwd):/gem" json-api-toolbox-dev
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Contributing
|
|
234
|
+
|
|
235
|
+
> To be written
|
data/Rakefile
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
require "bundler/gem_tasks"
|
|
2
2
|
require "rspec/core/rake_task"
|
|
3
|
+
require "rubocop/rake_task"
|
|
3
4
|
|
|
4
5
|
RSpec::Core::RakeTask.new(:spec)
|
|
6
|
+
RuboCop::RakeTask.new(:lint)
|
|
5
7
|
|
|
6
|
-
task :
|
|
8
|
+
task default: :spec
|
|
9
|
+
|
|
10
|
+
desc 'Execute both RuboCop and RSpec'
|
|
11
|
+
task "lint-and-test" => [:lint, :spec]
|
data/bin/setup.sh
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#! /bin/sh
|
|
2
|
+
|
|
3
|
+
DEFAULT_REPO=git@bitbucket.org:guideinvestimentos/rails_defaults.git
|
|
4
|
+
STRICT=${1:-no}
|
|
5
|
+
ONE_WEEK_AGO=$(( $(date +%s) - 604800 ))
|
|
6
|
+
FILE_TIME=$(date +%s -r .rubocop.base.yml 2> /dev/null)
|
|
7
|
+
|
|
8
|
+
info(){
|
|
9
|
+
echo -e "\\e[34;1m$1\\e[0m"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
step(){
|
|
13
|
+
printf "- $1: \\e7\n"
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
success(){
|
|
17
|
+
printf "\\e8\\e[32;1mOK!\\e[0m\n\\e[2K"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
skipped(){
|
|
21
|
+
printf "\\e8\\e[33;1mSKIPPED ($1)\\e[0m\n\\e[2K"
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
error() {
|
|
25
|
+
printf "\\e8\\e[31;1mERRO!\\e[0m\n\\e[2K"
|
|
26
|
+
printf "\\e[31m $1\\e[0m\n"
|
|
27
|
+
[ $STRICT == "--strict" ] && exit $2
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
info "Configurando o projeto\n"
|
|
31
|
+
|
|
32
|
+
step "Atualizando configuração base do Rubocop"
|
|
33
|
+
|
|
34
|
+
if [ ${FILE_TIME:-0} -lt $ONE_WEEK_AGO ]; then
|
|
35
|
+
RUBOCOP_FILE=$(git archive --remote=$DEFAULT_REPO HEAD .rubocop.yml 2> /dev/null | tar xO 2> /dev/null)
|
|
36
|
+
|
|
37
|
+
if [ -z "$RUBOCOP_FILE" ]; then
|
|
38
|
+
error "Não foi possível baixar o arquivo de configuração" 1
|
|
39
|
+
else
|
|
40
|
+
echo "$RUBOCOP_FILE" > .rubocop.base.yml
|
|
41
|
+
success
|
|
42
|
+
fi
|
|
43
|
+
else
|
|
44
|
+
skipped "Arquivo recente"
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
step "Instalando dependências"
|
|
48
|
+
|
|
49
|
+
bundle check 2>&1 > /dev/null && skipped "up-to date" || {
|
|
50
|
+
RESULT=$(bundle install 2>&1 > /dev/null)
|
|
51
|
+
[ $? == 0 ] && success || error "$RESULT" 2
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
info "\nConfiguração executada com sucesso"
|
data/bitbucket-pipelines.yml
CHANGED
|
@@ -1,21 +1,58 @@
|
|
|
1
|
-
image: ruby:2.
|
|
1
|
+
image: ruby:2.6
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
-
|
|
3
|
+
definitions:
|
|
4
|
+
caches:
|
|
5
|
+
bundler-26: vendor/bundle
|
|
6
|
+
bundler-27: vendor/bundle
|
|
7
|
+
bundler-30: vendor/bundle
|
|
8
|
+
|
|
9
|
+
steps:
|
|
10
|
+
- step: &test
|
|
11
|
+
name: Testing
|
|
12
|
+
script:
|
|
13
|
+
- apt-get install git
|
|
14
|
+
- gem update --system
|
|
15
|
+
- bundle config set --local path "vendor/bundle"
|
|
16
|
+
- bin/setup.sh --strict
|
|
17
|
+
- bundle exec rake lint-and-test
|
|
18
|
+
- step: &release
|
|
19
|
+
name: Release gem
|
|
6
20
|
script:
|
|
7
|
-
-
|
|
21
|
+
- apt-get install git
|
|
22
|
+
- gem update --system
|
|
23
|
+
- bundle config set --local path "vendor/bundle"
|
|
8
24
|
- bundle install
|
|
9
|
-
- gem
|
|
10
|
-
-
|
|
11
|
-
-
|
|
25
|
+
- "[ -d ~/.gem/ ] || mkdir -p ~/.gem/"
|
|
26
|
+
- curl -u $RUBYGEMS_USERNAME:$RUBYGEMS_PASSWORD https://rubygems.org/api/v1/api_key.yaml -o ~/.gem/credentials
|
|
27
|
+
- chmod 0600 ~/.gem/credentials
|
|
28
|
+
- bundle exec rake release
|
|
29
|
+
caches:
|
|
30
|
+
- bundler-26
|
|
12
31
|
|
|
32
|
+
pipelines:
|
|
33
|
+
pull-requests:
|
|
34
|
+
'**':
|
|
35
|
+
- parallel:
|
|
36
|
+
- step:
|
|
37
|
+
<<: *test
|
|
38
|
+
name: Ruby 2.6
|
|
39
|
+
image: ruby:2.6
|
|
40
|
+
caches:
|
|
41
|
+
- bundler-26
|
|
42
|
+
- step:
|
|
43
|
+
<<: *test
|
|
44
|
+
name: Ruby 2.7
|
|
45
|
+
image: ruby:2.7
|
|
46
|
+
caches:
|
|
47
|
+
- bundler-27
|
|
48
|
+
- step:
|
|
49
|
+
<<: *test
|
|
50
|
+
name: Ruby 3.0
|
|
51
|
+
image: ruby:3.0
|
|
52
|
+
caches:
|
|
53
|
+
- bundler-30
|
|
13
54
|
branches:
|
|
14
55
|
master:
|
|
15
|
-
- step:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- mkdir /root/.gem
|
|
19
|
-
- curl -u $RUBYGEMS_USERNAME:$RUBYGEMS_PASSWORD https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
|
|
20
|
-
- chmod 0600 ~/.gem/credentials
|
|
21
|
-
- gem push $(ls *.gem)
|
|
56
|
+
- step: *release
|
|
57
|
+
'branch-1.x':
|
|
58
|
+
- step: *release
|
data/json_api_toolbox.gemspec
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# rubocop:disable Metrics/BlockLength
|
|
4
3
|
lib = File.expand_path('lib', __dir__)
|
|
5
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
5
|
require 'json_api_toolbox/version'
|
|
7
6
|
|
|
8
7
|
Gem::Specification.new do |spec|
|
|
9
|
-
spec.required_ruby_version = '
|
|
8
|
+
spec.required_ruby_version = '>= 2.6.0'
|
|
10
9
|
spec.name = 'json_api_toolbox'
|
|
11
10
|
spec.version = JsonApiToolbox::VERSION
|
|
11
|
+
|
|
12
12
|
spec.authors = ['Adriano Bacha']
|
|
13
13
|
spec.email = ['abacha@gmail.com']
|
|
14
14
|
|
|
@@ -20,23 +20,19 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
end
|
|
21
21
|
spec.require_paths = ['lib']
|
|
22
22
|
|
|
23
|
-
spec.add_dependency '
|
|
24
|
-
spec.add_dependency '
|
|
25
|
-
spec.add_dependency '
|
|
26
|
-
spec.add_dependency '
|
|
27
|
-
spec.add_dependency 'json-api-vanilla', '~> 1.0.1'
|
|
23
|
+
spec.add_dependency 'activerecord', '>= 5.1.0'
|
|
24
|
+
spec.add_dependency 'activesupport', '>= 5.1.0'
|
|
25
|
+
spec.add_dependency 'jsonapi-serializable'
|
|
26
|
+
spec.add_dependency 'json-api-vanilla'
|
|
28
27
|
spec.add_dependency 'log_toolbox'
|
|
29
|
-
spec.add_dependency 'request_store'
|
|
30
|
-
spec.add_dependency 'rest-client'
|
|
31
|
-
spec.add_dependency '
|
|
32
|
-
spec.add_dependency 'will_paginate', '>= 3.1.0'
|
|
28
|
+
spec.add_dependency 'request_store'
|
|
29
|
+
spec.add_dependency 'rest-client'
|
|
30
|
+
spec.add_dependency 'will_paginate'
|
|
33
31
|
|
|
34
32
|
spec.add_development_dependency 'bundler'
|
|
35
|
-
spec.add_development_dependency 'json'
|
|
36
|
-
spec.add_development_dependency 'pry'
|
|
37
33
|
spec.add_development_dependency 'pry-byebug'
|
|
38
34
|
spec.add_development_dependency 'rake'
|
|
35
|
+
spec.add_development_dependency 'rspec'
|
|
39
36
|
spec.add_development_dependency 'rubocop'
|
|
40
|
-
spec.add_development_dependency 'shoulda-matchers'
|
|
37
|
+
spec.add_development_dependency 'shoulda-matchers'
|
|
41
38
|
end
|
|
42
|
-
# rubocop:enable Metrics/BlockLength
|
data/lib/json_api_toolbox.rb
CHANGED
|
@@ -11,7 +11,6 @@ require 'json_api_toolbox/paginable'
|
|
|
11
11
|
require 'will_paginate'
|
|
12
12
|
require 'will_paginate/active_record'
|
|
13
13
|
|
|
14
|
-
require_relative 'json_api_toolbox/spec_support/shared_examples_for_controllers'
|
|
15
14
|
require_relative 'json_api_toolbox/serializables/serializable_enum_option'
|
|
16
15
|
require_relative 'json_api_toolbox/serializables/serializable_job'
|
|
17
16
|
require_relative 'json_api_toolbox/serializables/serializable_version'
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rspec'
|
|
4
|
+
|
|
5
|
+
module JsonApiToolbox
|
|
6
|
+
module Rspec
|
|
7
|
+
RSpec.shared_examples 'a http method' do
|
|
8
|
+
it 'returns http success' do
|
|
9
|
+
expect(response).to have_http_status(:success)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
RSpec.shared_examples 'a post with status 422 Unprocessable Entity' do
|
|
14
|
+
it 'returns http code 422 Unprocessable Entity' do
|
|
15
|
+
expect(response).to have_http_status(422)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
RSpec.shared_examples 'a get method' do
|
|
20
|
+
it_behaves_like 'a http method'
|
|
21
|
+
|
|
22
|
+
it 'response with JSON body' do
|
|
23
|
+
expect { response.body }.not_to raise_exception
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
RSpec.shared_examples 'a json api response with included node' do
|
|
28
|
+
it 'returns with included node' do
|
|
29
|
+
expect(JSON.parse(response.body)['included'].count).not_to eql(0)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
RSpec.shared_examples 'a get with jsonapi with default value of' do |model|
|
|
34
|
+
let(:attributes) { data['attributes'].keys }
|
|
35
|
+
let(:model_keys) do
|
|
36
|
+
enums = []
|
|
37
|
+
model.new.attributes.keys.map do |attr|
|
|
38
|
+
case attr
|
|
39
|
+
when /_cd$/
|
|
40
|
+
enums << attr
|
|
41
|
+
attr.gsub(/_cd/, '')
|
|
42
|
+
when /_id$|^id$/
|
|
43
|
+
nil
|
|
44
|
+
else
|
|
45
|
+
attr
|
|
46
|
+
end
|
|
47
|
+
end.compact + enums
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'returns response with default values' do
|
|
51
|
+
expect((model_keys & attributes).size).to eq(model_keys.size)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
RSpec.shared_examples 'a json api response with all relations of' do |model|
|
|
56
|
+
let(:attributes) { data['relationships'].keys }
|
|
57
|
+
let(:relation_keys) { model.reflections.keys }
|
|
58
|
+
|
|
59
|
+
it 'returns response with default relationships' do
|
|
60
|
+
expect(attributes).to match_array(relation_keys)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
RSpec.shared_examples 'a json api response' do
|
|
65
|
+
let(:body) { JSON.parse(response.body) }
|
|
66
|
+
let(:data) { body['data'].first }
|
|
67
|
+
|
|
68
|
+
it { expect(body).to have_key('data') }
|
|
69
|
+
it { expect(data).to have_key('type') }
|
|
70
|
+
it { expect(data).to have_key('id') }
|
|
71
|
+
it { expect(data).to have_key('attributes') }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
RSpec.shared_examples 'a failed attempt to retrieve a resource' do
|
|
75
|
+
let(:errors) { JSON.parse(response.body)['errors'] }
|
|
76
|
+
|
|
77
|
+
it 'returns response with error\'s title including RecordNotFound' do
|
|
78
|
+
expect(errors.first['title']).to eq('ActiveRecord::RecordNotFound')
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
metadata
CHANGED
|
@@ -1,85 +1,71 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: json_api_toolbox
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Adriano Bacha
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-08-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: actionpack
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: 4.0.0
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: 4.0.0
|
|
27
13
|
- !ruby/object:Gem::Dependency
|
|
28
14
|
name: activerecord
|
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
|
30
16
|
requirements:
|
|
31
17
|
- - ">="
|
|
32
18
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
19
|
+
version: 5.1.0
|
|
34
20
|
type: :runtime
|
|
35
21
|
prerelease: false
|
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
23
|
requirements:
|
|
38
24
|
- - ">="
|
|
39
25
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
26
|
+
version: 5.1.0
|
|
41
27
|
- !ruby/object:Gem::Dependency
|
|
42
28
|
name: activesupport
|
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
|
44
30
|
requirements:
|
|
45
31
|
- - ">="
|
|
46
32
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
33
|
+
version: 5.1.0
|
|
48
34
|
type: :runtime
|
|
49
35
|
prerelease: false
|
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
37
|
requirements:
|
|
52
38
|
- - ">="
|
|
53
39
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
40
|
+
version: 5.1.0
|
|
55
41
|
- !ruby/object:Gem::Dependency
|
|
56
42
|
name: jsonapi-serializable
|
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
|
58
44
|
requirements:
|
|
59
45
|
- - ">="
|
|
60
46
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0
|
|
47
|
+
version: '0'
|
|
62
48
|
type: :runtime
|
|
63
49
|
prerelease: false
|
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
51
|
requirements:
|
|
66
52
|
- - ">="
|
|
67
53
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0
|
|
54
|
+
version: '0'
|
|
69
55
|
- !ruby/object:Gem::Dependency
|
|
70
56
|
name: json-api-vanilla
|
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
|
72
58
|
requirements:
|
|
73
|
-
- - "
|
|
59
|
+
- - ">="
|
|
74
60
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
61
|
+
version: '0'
|
|
76
62
|
type: :runtime
|
|
77
63
|
prerelease: false
|
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
65
|
requirements:
|
|
80
|
-
- - "
|
|
66
|
+
- - ">="
|
|
81
67
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
68
|
+
version: '0'
|
|
83
69
|
- !ruby/object:Gem::Dependency
|
|
84
70
|
name: log_toolbox
|
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -96,60 +82,46 @@ dependencies:
|
|
|
96
82
|
version: '0'
|
|
97
83
|
- !ruby/object:Gem::Dependency
|
|
98
84
|
name: request_store
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: 1.3.2
|
|
104
|
-
type: :runtime
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: 1.3.2
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rest-client
|
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
|
114
86
|
requirements:
|
|
115
87
|
- - ">="
|
|
116
88
|
- !ruby/object:Gem::Version
|
|
117
|
-
version:
|
|
89
|
+
version: '0'
|
|
118
90
|
type: :runtime
|
|
119
91
|
prerelease: false
|
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
93
|
requirements:
|
|
122
94
|
- - ">="
|
|
123
95
|
- !ruby/object:Gem::Version
|
|
124
|
-
version:
|
|
96
|
+
version: '0'
|
|
125
97
|
- !ruby/object:Gem::Dependency
|
|
126
|
-
name:
|
|
98
|
+
name: rest-client
|
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
|
128
100
|
requirements:
|
|
129
101
|
- - ">="
|
|
130
102
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
103
|
+
version: '0'
|
|
132
104
|
type: :runtime
|
|
133
105
|
prerelease: false
|
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
107
|
requirements:
|
|
136
108
|
- - ">="
|
|
137
109
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
110
|
+
version: '0'
|
|
139
111
|
- !ruby/object:Gem::Dependency
|
|
140
112
|
name: will_paginate
|
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
|
142
114
|
requirements:
|
|
143
115
|
- - ">="
|
|
144
116
|
- !ruby/object:Gem::Version
|
|
145
|
-
version:
|
|
117
|
+
version: '0'
|
|
146
118
|
type: :runtime
|
|
147
119
|
prerelease: false
|
|
148
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
121
|
requirements:
|
|
150
122
|
- - ">="
|
|
151
123
|
- !ruby/object:Gem::Version
|
|
152
|
-
version:
|
|
124
|
+
version: '0'
|
|
153
125
|
- !ruby/object:Gem::Dependency
|
|
154
126
|
name: bundler
|
|
155
127
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -165,7 +137,7 @@ dependencies:
|
|
|
165
137
|
- !ruby/object:Gem::Version
|
|
166
138
|
version: '0'
|
|
167
139
|
- !ruby/object:Gem::Dependency
|
|
168
|
-
name:
|
|
140
|
+
name: pry-byebug
|
|
169
141
|
requirement: !ruby/object:Gem::Requirement
|
|
170
142
|
requirements:
|
|
171
143
|
- - ">="
|
|
@@ -179,7 +151,7 @@ dependencies:
|
|
|
179
151
|
- !ruby/object:Gem::Version
|
|
180
152
|
version: '0'
|
|
181
153
|
- !ruby/object:Gem::Dependency
|
|
182
|
-
name:
|
|
154
|
+
name: rake
|
|
183
155
|
requirement: !ruby/object:Gem::Requirement
|
|
184
156
|
requirements:
|
|
185
157
|
- - ">="
|
|
@@ -193,7 +165,7 @@ dependencies:
|
|
|
193
165
|
- !ruby/object:Gem::Version
|
|
194
166
|
version: '0'
|
|
195
167
|
- !ruby/object:Gem::Dependency
|
|
196
|
-
name:
|
|
168
|
+
name: rspec
|
|
197
169
|
requirement: !ruby/object:Gem::Requirement
|
|
198
170
|
requirements:
|
|
199
171
|
- - ">="
|
|
@@ -207,7 +179,7 @@ dependencies:
|
|
|
207
179
|
- !ruby/object:Gem::Version
|
|
208
180
|
version: '0'
|
|
209
181
|
- !ruby/object:Gem::Dependency
|
|
210
|
-
name:
|
|
182
|
+
name: rubocop
|
|
211
183
|
requirement: !ruby/object:Gem::Requirement
|
|
212
184
|
requirements:
|
|
213
185
|
- - ">="
|
|
@@ -221,7 +193,7 @@ dependencies:
|
|
|
221
193
|
- !ruby/object:Gem::Version
|
|
222
194
|
version: '0'
|
|
223
195
|
- !ruby/object:Gem::Dependency
|
|
224
|
-
name:
|
|
196
|
+
name: shoulda-matchers
|
|
225
197
|
requirement: !ruby/object:Gem::Requirement
|
|
226
198
|
requirements:
|
|
227
199
|
- - ">="
|
|
@@ -234,20 +206,6 @@ dependencies:
|
|
|
234
206
|
- - ">="
|
|
235
207
|
- !ruby/object:Gem::Version
|
|
236
208
|
version: '0'
|
|
237
|
-
- !ruby/object:Gem::Dependency
|
|
238
|
-
name: shoulda-matchers
|
|
239
|
-
requirement: !ruby/object:Gem::Requirement
|
|
240
|
-
requirements:
|
|
241
|
-
- - "~>"
|
|
242
|
-
- !ruby/object:Gem::Version
|
|
243
|
-
version: '3.1'
|
|
244
|
-
type: :development
|
|
245
|
-
prerelease: false
|
|
246
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
247
|
-
requirements:
|
|
248
|
-
- - "~>"
|
|
249
|
-
- !ruby/object:Gem::Version
|
|
250
|
-
version: '3.1'
|
|
251
209
|
description:
|
|
252
210
|
email:
|
|
253
211
|
- abacha@gmail.com
|
|
@@ -257,22 +215,25 @@ extra_rdoc_files: []
|
|
|
257
215
|
files:
|
|
258
216
|
- ".gitignore"
|
|
259
217
|
- ".rspec"
|
|
260
|
-
- ".
|
|
261
|
-
- ".travis.yml"
|
|
218
|
+
- ".rubocop.yml"
|
|
262
219
|
- CHANGELOG.md
|
|
220
|
+
- Dockerfile
|
|
263
221
|
- Gemfile
|
|
222
|
+
- Gemfile.lock
|
|
264
223
|
- README.md
|
|
265
224
|
- Rakefile
|
|
225
|
+
- bin/setup.sh
|
|
266
226
|
- bitbucket-pipelines.yml
|
|
227
|
+
- docker-entrypoint.sh
|
|
267
228
|
- json_api_toolbox.gemspec
|
|
268
229
|
- lib/enums.rb
|
|
269
230
|
- lib/json_api_toolbox.rb
|
|
270
231
|
- lib/json_api_toolbox/paginable.rb
|
|
232
|
+
- lib/json_api_toolbox/rspec.rb
|
|
271
233
|
- lib/json_api_toolbox/serializables/serializable_enum_option.rb
|
|
272
234
|
- lib/json_api_toolbox/serializables/serializable_exception.rb
|
|
273
235
|
- lib/json_api_toolbox/serializables/serializable_job.rb
|
|
274
236
|
- lib/json_api_toolbox/serializables/serializable_version.rb
|
|
275
|
-
- lib/json_api_toolbox/spec_support/shared_examples_for_controllers.rb
|
|
276
237
|
- lib/json_api_toolbox/version.rb
|
|
277
238
|
- lib/postable.rb
|
|
278
239
|
- lib/renderizable.rb
|
|
@@ -287,16 +248,16 @@ require_paths:
|
|
|
287
248
|
- lib
|
|
288
249
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
289
250
|
requirements:
|
|
290
|
-
- - "
|
|
251
|
+
- - ">="
|
|
291
252
|
- !ruby/object:Gem::Version
|
|
292
|
-
version: 2.
|
|
253
|
+
version: 2.6.0
|
|
293
254
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
294
255
|
requirements:
|
|
295
256
|
- - ">="
|
|
296
257
|
- !ruby/object:Gem::Version
|
|
297
258
|
version: '0'
|
|
298
259
|
requirements: []
|
|
299
|
-
rubygems_version: 3.
|
|
260
|
+
rubygems_version: 3.2.25
|
|
300
261
|
signing_key:
|
|
301
262
|
specification_version: 4
|
|
302
263
|
summary: Json API usefull tools
|
data/.ruby-version
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ruby-2.5.0
|
data/.travis.yml
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'rspec'
|
|
4
|
-
|
|
5
|
-
module JsonApiToolbox
|
|
6
|
-
module SpecSupport
|
|
7
|
-
module SharedExamplesForControllers
|
|
8
|
-
RSpec.shared_examples 'a http method' do
|
|
9
|
-
it 'returns http success' do
|
|
10
|
-
expect(response).to have_http_status(:success)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
RSpec.shared_examples 'a post with status 422 Unprocessable Entity' do
|
|
15
|
-
it 'returns http code 422 Unprocessable Entity' do
|
|
16
|
-
expect(response).to have_http_status(422)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
RSpec.shared_examples 'a get method' do
|
|
21
|
-
it_behaves_like 'a http method'
|
|
22
|
-
|
|
23
|
-
it 'response with JSON body' do
|
|
24
|
-
expect { response.body }.not_to raise_exception
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
RSpec.shared_examples 'a json api response with included node' do
|
|
29
|
-
it 'returns with included node' do
|
|
30
|
-
expect(JSON.parse(response.body)['included'].count).not_to eql(0)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
RSpec.
|
|
35
|
-
shared_examples 'a get with jsonapi with default value of' do |model|
|
|
36
|
-
let(:attributes) { data['attributes'].keys }
|
|
37
|
-
let(:model_keys) do
|
|
38
|
-
enums = []
|
|
39
|
-
model.new.attributes.keys.map do |attr|
|
|
40
|
-
case attr
|
|
41
|
-
when /_cd$/
|
|
42
|
-
enums << attr
|
|
43
|
-
attr.gsub(/_cd/, '')
|
|
44
|
-
when /_id$|^id$/
|
|
45
|
-
nil
|
|
46
|
-
else
|
|
47
|
-
attr
|
|
48
|
-
end
|
|
49
|
-
end.compact + enums
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it 'returns response with default values' do
|
|
53
|
-
expect((model_keys & attributes).size).to eq(model_keys.size)
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
RSpec.
|
|
58
|
-
shared_examples 'a json api response with all relations of' do |model|
|
|
59
|
-
let(:attributes) { data['relationships'].keys }
|
|
60
|
-
let(:relation_keys) { model.reflections.keys }
|
|
61
|
-
|
|
62
|
-
it 'returns response with default relationships' do
|
|
63
|
-
expect(attributes).to match_array(relation_keys)
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
RSpec.shared_examples 'a json api response' do
|
|
68
|
-
let(:body) { JSON.parse(response.body) }
|
|
69
|
-
let(:data) { body['data'].first }
|
|
70
|
-
|
|
71
|
-
it { expect(body).to have_key('data') }
|
|
72
|
-
it { expect(data).to have_key('type') }
|
|
73
|
-
it { expect(data).to have_key('id') }
|
|
74
|
-
it { expect(data).to have_key('attributes') }
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
RSpec.shared_examples 'a failed attempt to retrieve a resource' do
|
|
78
|
-
let(:errors) { JSON.parse(response.body)['errors'] }
|
|
79
|
-
|
|
80
|
-
it 'returns response with error\'s title including RecordNotFound' do
|
|
81
|
-
expect(errors.first['title']).to eq('ActiveRecord::RecordNotFound')
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|