tramway-api 1.8.6.6 → 1.8.6.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +42 -9
- data/app/controllers/tramway/api/application_controller.rb +1 -3
- data/app/controllers/tramway/api/v1/application_controller.rb +6 -5
- data/app/controllers/tramway/api/v1/records_controller.rb +7 -0
- data/lib/tramway/api.rb +2 -1
- data/lib/tramway/api/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3206561c6202bb16eb547409a92afc1ffd3bd0577ab5924f0ba9142b2d2da5f7
|
4
|
+
data.tar.gz: fc82ca7b002060d3f2a1d49d723a26d0405f5765ffd34a0b7b6a287914d68018
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9311be67f963e06248ab95056f9e20a40d819b706e8ce9814dbe28b8c063439dac7ebc42bc7ef9f2f3495579db8fd641a9db6032ea9ef4ebbd7847d1c008987d
|
7
|
+
data.tar.gz: 6a0baa01d8e34556901407c738ceacf3facb379b6dbf5a27df2834347de75d79ca3bcf524f159d4a95fea9fc37e2eea8cf45a54f25f028e9bb1f443705f934b0
|
data/README.md
CHANGED
@@ -41,7 +41,6 @@ coming soon...
|
|
41
41
|
```ruby
|
42
42
|
gem 'active_model_serializers', '0.10.5'
|
43
43
|
gem 'tramway-core'
|
44
|
-
gem 'state_machine', github: 'seuros/state_machine'
|
45
44
|
gem 'knock'
|
46
45
|
gem 'audited'
|
47
46
|
gem 'ransack'
|
@@ -146,7 +145,7 @@ end
|
|
146
145
|
|
147
146
|
#### Configurate available models. Tramway will create end points according to this config
|
148
147
|
|
149
|
-
```
|
148
|
+
```ruby
|
150
149
|
::Tramway::Api.set_available_models({
|
151
150
|
User => [
|
152
151
|
{
|
@@ -294,7 +293,6 @@ RSpec.describe 'Post generate token', type: :feature do
|
|
294
293
|
|
295
294
|
end
|
296
295
|
end
|
297
|
-
|
298
296
|
```
|
299
297
|
|
300
298
|
Run `rspec` to test
|
@@ -340,11 +338,6 @@ this model must have field `password_digest`, because we use `bcrypt` gem for au
|
|
340
338
|
|
341
339
|
Sets ActiveRecord models which will be used in API
|
342
340
|
|
343
|
-
Argument is a hash. Keys are underscored models names, values are hashes with actions of available methods for every model.
|
344
|
-
* `open` key means that this action will be used without authentication
|
345
|
-
* `closed` key means that this action will be used with authentication
|
346
|
-
|
347
|
-
|
348
341
|
Enabled methods:
|
349
342
|
|
350
343
|
* create
|
@@ -360,7 +353,7 @@ Every model you've added in initializer will be able by URL `api/v1/records?mode
|
|
360
353
|
Just update your initializer:
|
361
354
|
|
362
355
|
```ruby
|
363
|
-
::Tramway::Api.set_available_models
|
356
|
+
::Tramway::Api.set_available_models({ User => { %i[index] })
|
364
357
|
```
|
365
358
|
|
366
359
|
Create serializer
|
@@ -436,6 +429,46 @@ Params Structure
|
|
436
429
|
}
|
437
430
|
```
|
438
431
|
|
432
|
+
Also, you can test it with this
|
433
|
+
|
434
|
+
*spec/factories/your_models.rb*
|
435
|
+
|
436
|
+
```ruby
|
437
|
+
FactoryBot.define do
|
438
|
+
factory :your_model do
|
439
|
+
attribute1 { # some code which generate value for this attribute }
|
440
|
+
attribute2 { # some code which generate value for this attribute }
|
441
|
+
name { generate :name }
|
442
|
+
end
|
443
|
+
end
|
444
|
+
```
|
445
|
+
|
446
|
+
*spec/api/your_model_spec.rb*
|
447
|
+
|
448
|
+
```ruby
|
449
|
+
require 'rails_helper'
|
450
|
+
|
451
|
+
RSpec.describe 'Post generate token', type: :feature do
|
452
|
+
describe 'POST /api/v1/user_token' do
|
453
|
+
let(:user) { create :user, password: '123456789' }
|
454
|
+
|
455
|
+
it 'returns created status' do
|
456
|
+
post '/api/v1/user_token', params: { auth: { login: user.email, password: '123456789' } }
|
457
|
+
|
458
|
+
expect(response.status).to eq 201
|
459
|
+
end
|
460
|
+
|
461
|
+
it 'returns token' do
|
462
|
+
post '/api/v1/user_token', params: { auth: { login: user.email, password: '123456789' } }
|
463
|
+
|
464
|
+
expect(json_response[:auth_token].present?).to be_truthy
|
465
|
+
expect(json_response[:user]).to include_json({ email: user.email, uuid: user.uuid })
|
466
|
+
end
|
467
|
+
|
468
|
+
end
|
469
|
+
end
|
470
|
+
```
|
471
|
+
|
439
472
|
### Update
|
440
473
|
|
441
474
|
*config/initializers/tramway.rb*
|
@@ -58,9 +58,7 @@ module Tramway
|
|
58
58
|
|
59
59
|
def current_user
|
60
60
|
Tramway::Api.user_based_models.map do |user_based_model|
|
61
|
-
unless user_based_model == User
|
62
|
-
send("current_#{user_based_model.name.underscore}")
|
63
|
-
end
|
61
|
+
send("current_#{user_based_model.name.underscore}") unless user_based_model == User
|
64
62
|
end.compact.first
|
65
63
|
end
|
66
64
|
end
|
@@ -4,6 +4,8 @@ module Tramway
|
|
4
4
|
module Api
|
5
5
|
module V1
|
6
6
|
class ApplicationController < ::Tramway::Api::ApplicationController
|
7
|
+
before_action :application
|
8
|
+
|
7
9
|
def render_errors_for(model)
|
8
10
|
render json: model, status: :unprocessable_entity, serializer: ::Tramway::Api::V1::ErrorSerializer
|
9
11
|
end
|
@@ -45,6 +47,7 @@ module Tramway
|
|
45
47
|
def check_available_model_class
|
46
48
|
unless model_class
|
47
49
|
head(:unauthorized) && return unless current_user
|
50
|
+
|
48
51
|
head(:unprocessable_entity) && return
|
49
52
|
end
|
50
53
|
end
|
@@ -109,11 +112,9 @@ module Tramway
|
|
109
112
|
protected
|
110
113
|
|
111
114
|
def model_class
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
raise "#{e}. Maybe #{params[:model]} model doesn't exists or there is naming conflicts with it"
|
116
|
-
end
|
115
|
+
params[:model].constantize
|
116
|
+
rescue ActiveSupport::Concern::MultipleIncludedBlocks => e
|
117
|
+
raise "#{e}. Maybe #{params[:model]} model doesn't exists or there is naming conflicts with it"
|
117
118
|
end
|
118
119
|
|
119
120
|
def decorator_class(model_name = nil)
|
@@ -5,6 +5,7 @@ module Tramway::Api::V1
|
|
5
5
|
before_action :check_available_model_class
|
6
6
|
before_action :check_available_model_action_for_record, only: %i[show update destroy]
|
7
7
|
before_action :authenticate_user_if_needed
|
8
|
+
before_action :application
|
8
9
|
|
9
10
|
def index
|
10
11
|
collection = available_action_for_collection
|
@@ -54,5 +55,11 @@ module Tramway::Api::V1
|
|
54
55
|
include: '*',
|
55
56
|
status: :no_content
|
56
57
|
end
|
58
|
+
|
59
|
+
def application
|
60
|
+
if ::Tramway::Core.application
|
61
|
+
@application = Tramway::Core.application&.model_class&.first || Tramway::Core.application
|
62
|
+
end
|
63
|
+
end
|
57
64
|
end
|
58
65
|
end
|
data/lib/tramway/api.rb
CHANGED
data/lib/tramway/api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tramway-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.6.
|
4
|
+
version: 1.8.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_model_serializers
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.9.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: uuid
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Engine for api
|
56
70
|
email:
|
57
71
|
- kalashnikovisme@gmail.com
|
@@ -102,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: '0'
|
104
118
|
requirements: []
|
105
|
-
rubygems_version: 3.1.
|
119
|
+
rubygems_version: 3.1.4
|
106
120
|
signing_key:
|
107
121
|
specification_version: 4
|
108
122
|
summary: Engine for api
|