tramway-api 1.8.2.3 → 1.8.3

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: 022a3e30c40c67f5ea395f36d02ad064888501855af9e9d3cd3c17084ec4ae90
4
- data.tar.gz: ce519fcc07c446ca740141be4f737109a3bada820e22b813e497cfc4de5b165c
3
+ metadata.gz: 151b3c808fba04666fdb2cccbd5368d45c86c6539878c52e1c9fa93905a3eb85
4
+ data.tar.gz: 8eeaf9cde77e40c5f170c3c1d242c88025003d10176947e943ae59dd10520b25
5
5
  SHA512:
6
- metadata.gz: 5b38ee6bf57cbd0d3490c8f92e7d514454a1bbacaef1d792a28128b300ad4280cb15526c259c6fa4f146a297840989ded8104f27dcaa37509a582449356e7d32
7
- data.tar.gz: 29869a70b7712a098743976745a9bc497b37ab27154673a4048ccfa608e95529a52d03cef159646a1a1d1db0429e20747d422ce9c1cc2aa045a3e792c380d9d4
6
+ metadata.gz: 989b0c66ec542b84a55f803f676b0778b78ccd012ced6579ae858c0aaa31f0d345f9ff4ea737a64e393735a37ffa6285fe153ceb862b0b1dc692a4f1f2999ee3
7
+ data.tar.gz: ac301bb8e6fc9a7dc5e8ae7a2100703977cc7d9d58a4f2c384bdb02130ed30b02b214b1c682874b4b32fdce38f33017faadfa89352b8cb4081fad439305c3d23
data/README.md CHANGED
@@ -44,6 +44,7 @@ coming soon...
44
44
  gem 'state_machine', github: 'seuros/state_machine'
45
45
  gem 'knock'
46
46
  gem 'audited'
47
+ gem 'ransack'
47
48
  ```
48
49
 
49
50
  ## Usage
@@ -64,10 +65,24 @@ gem 'knock'
64
65
 
65
66
  Run `bundle install`
66
67
 
68
+ ### Initialize @application object
69
+
70
+ [How-to](https://github.com/Purple-Magic/tramway-core/blob/develop/README.md#every-tramway-application-need-initialized-application-object-or-if-you-create-tramway-plugin-it-should-be-application_engine-object)
71
+
72
+ *config/routes.rb*
73
+
74
+ ```ruby
75
+ Rails.application.routes.draw do
76
+ # ...
77
+ mount Tramway::Api::Engine, at: '/api'
78
+ # ...
79
+ end
80
+ ```
81
+
67
82
  Then generate User (you use another name, it's just an example) model
68
83
 
69
84
  ```
70
- rails g model user email:text password_digest:text username:text state:text uid:text
85
+ rails g model user email:text password_digest:text username:text state:text uuid:uuid
71
86
  ```
72
87
 
73
88
  Enable extension in your database:
@@ -100,11 +115,26 @@ class User < Tramway::Core::ApplicationRecord
100
115
  end
101
116
  ```
102
117
 
103
- Create file `config/initializers/tramway.rb`
118
+ #### Create file `config/initializers/tramway.rb`
119
+ #### If you need JWT authentication add this line to the `config/initializers/tramway.rb`
104
120
 
105
121
  ```ruby
106
122
  ::Tramway::Api.auth_config = { user_model: User, auth_attributes: %i[email username] }
107
- ::Tramway::Api.set_available_models user: { open: %i[create], closed: %i[update] }
123
+ ```
124
+
125
+ #### Configurate available models. Tramway will create end points according to this config
126
+
127
+ ```
128
+ ::Tramway::Api.set_available_models({
129
+ User => [
130
+ {
131
+ show: lambda do |record, current_user|
132
+ record.id == current_user.id # shows only current_user profile
133
+ end
134
+ }
135
+ ],
136
+ project: :your_project_name
137
+ })
108
138
  ```
109
139
 
110
140
  Run `rails g tramway:core:install`
@@ -316,7 +346,7 @@ Create serializer
316
346
  *app/serializers/user_serializer.rb*
317
347
 
318
348
  ```ruby
319
- class UserSerializer < Tramway::Core::ApplicationSerializer
349
+ class UserSerializer < Tramway::Api::V1::ApplicationSerializer
320
350
  attributes :username, :email
321
351
  end
322
352
  ```
@@ -353,9 +383,39 @@ Docs coming soon
353
383
 
354
384
  ### Show
355
385
 
356
- Production ready
386
+ #### Description
357
387
 
358
- Docs coming soon
388
+ It returns just one record, if it is not deleted.
389
+
390
+ #### Using
391
+
392
+ ##### Allow method show in tramway initializer for `YourModel`
393
+
394
+ *config/initializers/tramway.rb*
395
+
396
+ ```ruby
397
+ ::Tramway::Api.set_available_models({ YourModel => [ :show ] }, project: :your_project_name })
398
+ ```
399
+
400
+ ##### Create serializer
401
+
402
+ *app/serializers/user_serializer.rb*
403
+
404
+ ```ruby
405
+ class UserSerializer < Tramway::Core::ApplicationSerializer
406
+ attributes :username, :email
407
+ end
408
+ ```
409
+
410
+ ##### Run your server on the localhost `rails s`
411
+ ##### Made this query to test new API method (for example: you can create file `bin/test_tramway.rb` with this lines):
412
+
413
+ ```ruby
414
+ require 'net/http'
415
+
416
+ YourModel.create! attribute_1: 'some value', attribute_2: 'some_value'
417
+ Net::HTTP.get('localhost:3000', "/api/v1/records/#{YourModel.last.id}?model=YourModel")
418
+ ```
359
419
 
360
420
  ### Destroy
361
421
 
@@ -58,7 +58,9 @@ module Tramway
58
58
 
59
59
  def current_user
60
60
  Tramway::Api.user_based_models.map do |user_based_model|
61
- send("current_#{user_based_model.name.underscore}")
61
+ unless user_based_model == User
62
+ send("current_#{user_based_model.name.underscore}")
63
+ end
62
64
  end.compact.first
63
65
  end
64
66
  end
@@ -24,7 +24,8 @@ module Tramway
24
24
  private
25
25
 
26
26
  def record
27
- @record = model_class.find_by! uuid: params[:id] if params[:id].present?
27
+ id_method = Tramway::Api.id_method_of(model: model_class) || :uuid
28
+ @record = model_class.find_by! id_method => params[:id] if params[:id].present?
28
29
  end
29
30
 
30
31
  def records
@@ -100,12 +101,10 @@ module Tramway
100
101
  protected
101
102
 
102
103
  def model_class
103
- if params[:model].to_s.in? available_models_for_current_user
104
- begin
105
- params[:model].constantize
106
- rescue ActiveSupport::Concern::MultipleIncludedBlocks => e
107
- raise "#{e}. Maybe #{params[:model]} model doesn't exists or there is naming conflicts with it"
108
- end
104
+ begin
105
+ params[:model].constantize
106
+ rescue ActiveSupport::Concern::MultipleIncludedBlocks => e
107
+ raise "#{e}. Maybe #{params[:model]} model doesn't exists or there is naming conflicts with it"
109
108
  end
110
109
  end
111
110
 
@@ -6,7 +6,8 @@ class Tramway::Api::V1::ApplicationSerializer < ActiveModel::Serializer
6
6
  attribute :id
7
7
 
8
8
  def id
9
- object.uuid
9
+ id_method = Tramway::Api.id_method_of(model: object.class) || :uuid
10
+ object.send(id_method)
10
11
  end
11
12
 
12
13
  def created_at
@@ -83,6 +83,17 @@ module Tramway
83
83
  new_hash.merge! pair[0].to_s => pair[1]
84
84
  end
85
85
  end
86
+
87
+ def id_methods_of(options = {})
88
+ @@id_methods ||= {}
89
+ @@id_methods.merge!(options.reduce({}) do |hash, pair|
90
+ hash.merge! pair[0].to_s => pair[1]
91
+ end)
92
+ end
93
+
94
+ def id_method_of(model:)
95
+ @@id_methods[model.to_s]
96
+ end
86
97
  end
87
98
  end
88
99
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Api
5
- VERSION = '1.8.2.3'
5
+ VERSION = '1.8.3'
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.2.3
4
+ version: 1.8.3
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-04-30 00:00:00.000000000 Z
11
+ date: 2020-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers