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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c073884812f246c0b76d5367b19c2f1348dbe8539286b08027487e716e2dd959
4
- data.tar.gz: d49ede45c33a877a8deea8dcb9fb0285d1ef0d2154cd9e44109b0801e0280e4c
3
+ metadata.gz: 3206561c6202bb16eb547409a92afc1ffd3bd0577ab5924f0ba9142b2d2da5f7
4
+ data.tar.gz: fc82ca7b002060d3f2a1d49d723a26d0405f5765ffd34a0b7b6a287914d68018
5
5
  SHA512:
6
- metadata.gz: a26de6225b11387505eac518f7d2ddec5ea0d3070007f6838e4d5192e9296793eed0f2c38af2a445286fffc0fc4f2bdb65fb449f32a6c64e4be13d2c51ce1270
7
- data.tar.gz: 33e67a11a31f45d4413d8f24a8f7a75075a38f74f3f99cb0456be838f59ccf38acf0f3cf4649cc27c6fb054e0f4349ff0b78fbf241a66204650685ab7f95d4b7
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 user: { open: %i[create], closed: %i[update index] } # we've added index method
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
- begin
113
- params[:model].constantize
114
- rescue ActiveSupport::Concern::MultipleIncludedBlocks => e
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
@@ -96,7 +96,8 @@ module Tramway
96
96
  end
97
97
 
98
98
  def default_id_method_of(model:)
99
- @@id_methods[model.to_s][:default]
99
+ @@id_methods ||= {}
100
+ @@id_methods.dig(model.to_s, :default)
100
101
  end
101
102
  end
102
103
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Api
5
- VERSION = '1.8.6.6'
5
+ VERSION = '1.8.6.7'
6
6
  end
7
7
  end
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.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: 2020-08-10 00:00:00.000000000 Z
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.2
119
+ rubygems_version: 3.1.4
106
120
  signing_key:
107
121
  specification_version: 4
108
122
  summary: Engine for api