tramway-api 1.8.6.6 → 1.8.6.7
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 +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
|