bullet_train-api 1.0.3 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5be2aee56fc837d4159a61c26b7e0f7c5a89e1da5823196cccc5b26bd7c96697
4
- data.tar.gz: 13f8db965f6df33908e6ef40d8cfe1f8f96c5cabdea49b18ccd14062baba7124
3
+ metadata.gz: 892999078661fe5c970b56d9718403df7fe909748b0764b31f8da8ff5f3ae166
4
+ data.tar.gz: 8cd26976c5abdbb57a838503f11b046364eae8d5165c1c94ff4bae231886230f
5
5
  SHA512:
6
- metadata.gz: 1f5350b9b438f680233ec7d39869a6c4b246e2ea33b17a3c96d875f61aa4f7534fd807b639173f9e59829e1eb5e49678ecfb46212275e81772ae748035092db4
7
- data.tar.gz: e9301047e1117f21f63de5f8ce215693ab77573aef93c0509256b12ea5537205070e8d9107f165c02385e47e840495d9b00890e3e6bac8d4ebcfb5f12476d53c
6
+ metadata.gz: 3a8290f40a81d4dd0ca8dded910b8a2907a96bd0e6c9ca03f339b310ac2d95ce62af5fc468a13266daffdcf84c06a5f3afcd97e3e2959aff340b43d6875c7307
7
+ data.tar.gz: 4029a5b7cc6d41141d280e2b55be9e638b45bac86cc3f8360c6a9eeba404d92df17aab8d89da4119768263f4006b1fe052d6534c853146f200a45e6cd82d5c72
@@ -1,79 +1,9 @@
1
1
  class Api::V1::TeamsEndpoint < Api::V1::Root
2
- helpers do
3
- params :id do
4
- requires :id, type: Integer, allow_blank: false, desc: Api.heading(:id)
5
- end
6
-
7
- params :team do
8
- optional :name, type: String, allow_blank: false, desc: Api.heading(:name)
9
- optional :locale, type: String, desc: Api.heading(:locale)
10
- # 🚅 super scaffolding will insert new fields above this line.
11
- # 🚅 super scaffolding will insert new arrays above this line.
12
-
13
- # 🚅 super scaffolding will insert processing for new fields above this line.
14
- end
2
+ PARAMS = proc do
3
+ # 🚅 super scaffolding will insert new fields above this line.
4
+ # 🚅 super scaffolding will insert new arrays above this line.
5
+ # 🚅 super scaffolding will insert processing for new fields above this line.
15
6
  end
16
7
 
17
- resource :teams, desc: Api.title(:actions) do
18
- after_validation do
19
- load_and_authorize_api_resource Team
20
- end
21
-
22
- desc Api.title(:index), &Api.index_desc
23
- oauth2
24
- paginate per_page: 100
25
- get "/" do
26
- @paginated_teams = paginate @teams
27
- render @paginated_teams, serializer: Api.serializer, adapter: :attributes
28
- end
29
-
30
- desc Api.title(:show), &Api.show_desc
31
- params do
32
- use :id
33
- end
34
- oauth2
35
- route_param :id do
36
- get do
37
- render @team, serializer: Api.serializer
38
- end
39
- end
40
-
41
- desc Api.title(:create), &Api.create_desc
42
- params do
43
- use :team
44
- end
45
- route_setting :api_resource_options, permission: :create
46
- oauth2 "write"
47
- post "/" do
48
- if @team.save
49
- # sets the team creator as the default admin
50
- @team.memberships.create(user: current_user, roles: [Role.admin])
51
-
52
- current_user.current_team = @team
53
- current_user.former_user = false
54
- current_user.save
55
-
56
- render @team, serializer: Api.serializer
57
- else
58
- record_not_saved @team
59
- end
60
- end
61
-
62
- desc Api.title(:update), &Api.update_desc
63
- params do
64
- use :id
65
- use :team
66
- end
67
- route_setting :api_resource_options, permission: :update
68
- oauth2 "write"
69
- route_param :id do
70
- put do
71
- if @team.update(declared(params, include_missing: false))
72
- render @team, serializer: Api.serializer
73
- else
74
- record_not_saved @team
75
- end
76
- end
77
- end
78
- end
8
+ include Api::V1::Teams::EndpointBase
79
9
  end
@@ -6,9 +6,12 @@
6
6
 
7
7
  module Api
8
8
  def self.topic
9
- path = caller.find { |path| path.include?("controllers/api") && !path.include?("app/controllers/api.rb") }
10
- path.gsub!(/^#{Rails.root}\/app\/controllers\/api\/v\d+\//, "")
11
- path.split("_endpoint.").first
9
+ path = caller.find { |path| (path.include?("controllers/api") || path.include?("app/controllers/concerns/api")) && !path.include?("app/controllers/api.rb") && !path.include?("app/controllers/api/v1/root.rb") && !path.include?("app/controllers/api/base.rb") }
10
+ if path.include?("controllers/api")
11
+ path.split(/\/app\/controllers\/api\/v\d+\//).last.split("_endpoint.").first
12
+ elsif path.include?("app/controllers/concerns/api")
13
+ path.split(/\/app\/controllers\/concerns\/api\/v\d+\//).last.split("/endpoint_base.").first
14
+ end
12
15
  end
13
16
 
14
17
  def self.serializer
@@ -0,0 +1,30 @@
1
+ module Api::V1::Base
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ include Api::V1::Defaults
6
+ include Api::V1::LoadsAndAuthorizesApiResource
7
+
8
+ version "v1"
9
+ use ::WineBouncer::OAuth2
10
+
11
+ rescue_from :all do |error|
12
+ handle_api_error(error)
13
+ end
14
+
15
+ BulletTrain::Api.endpoints.each do |endpoint_class|
16
+ mount endpoint_class.constantize
17
+ end
18
+ end
19
+
20
+ class_methods do
21
+ # TODO I actually don't know of any way to make this work. This was supposed to be run after all other endpoints
22
+ # are registered, but I don't know of a way to know when we're done running `initializer` blocks from the engines
23
+ # a user may have included.
24
+ def handle_not_found
25
+ route :any, "*path" do
26
+ raise StandardError, "Unable to find API endpoint"
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,87 @@
1
+ module Api::V1::Teams::EndpointBase
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ helpers do
6
+ params :id do
7
+ requires :id, type: Integer, allow_blank: false, desc: Api.heading(:id)
8
+ end
9
+
10
+ params :team do
11
+ optional :name, type: String, allow_blank: false, desc: Api.heading(:name)
12
+ optional :locale, type: String, desc: Api.heading(:locale)
13
+
14
+ # TODO I don't like this, but I can't figure out a better way to accomplish the same thing. I'm open to any
15
+ # suggestions on this. I don't know why `@api.class` returns `Class` but `@api.to_s` returns e.g.
16
+ # `Api::V1::TeamsEndpoint`, but since we can get the latter, we'll use that to fetch whatever proc is defined
17
+ # in ADDITIONAL_PARAMS.
18
+ if defined?(@api.to_s.constantize::PARAMS)
19
+ instance_eval &@api.to_s.constantize::PARAMS
20
+ end
21
+ end
22
+ end
23
+
24
+ resource :teams, desc: Api.title(:actions) do
25
+ after_validation do
26
+ load_and_authorize_api_resource Team
27
+ end
28
+
29
+ desc Api.title(:index), &Api.index_desc
30
+ oauth2
31
+ paginate per_page: 100
32
+ get "/" do
33
+ @paginated_teams = paginate @teams
34
+ render @paginated_teams, serializer: Api.serializer, adapter: :attributes
35
+ end
36
+
37
+ desc Api.title(:show), &Api.show_desc
38
+ params do
39
+ use :id
40
+ end
41
+ oauth2
42
+ route_param :id do
43
+ get do
44
+ render @team, serializer: Api.serializer
45
+ end
46
+ end
47
+
48
+ desc Api.title(:create), &Api.create_desc
49
+ params do
50
+ use :team
51
+ end
52
+ route_setting :api_resource_options, permission: :create
53
+ oauth2 "write"
54
+ post "/" do
55
+ if @team.save
56
+ # sets the team creator as the default admin
57
+ @team.memberships.create(user: current_user, roles: [Role.admin])
58
+
59
+ current_user.current_team = @team
60
+ current_user.former_user = false
61
+ current_user.save
62
+
63
+ render @team, serializer: Api.serializer
64
+ else
65
+ record_not_saved @team
66
+ end
67
+ end
68
+
69
+ desc Api.title(:update), &Api.update_desc
70
+ params do
71
+ use :id
72
+ use :team
73
+ end
74
+ route_setting :api_resource_options, permission: :update
75
+ oauth2 "write"
76
+ route_param :id do
77
+ put do
78
+ if @team.update(declared(params, include_missing: false))
79
+ render @team, serializer: Api.serializer
80
+ else
81
+ record_not_saved @team
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,8 @@
1
+ class Api::V1::InvitationSerializer < Api::V1::ApplicationSerializer
2
+ include Api::V1::Invitations::SerializerBase
3
+
4
+ # The `:id` entries are redundant, but for the moment they help us generate valid code.
5
+ attributes :id,
6
+ # 🚅 super scaffolding will insert new fields above this line.
7
+ :id
8
+ end
@@ -0,0 +1,8 @@
1
+ class Api::V1::MembershipSerializer < Api::V1::ApplicationSerializer
2
+ include Api::V1::Memberships::SerializerBase
3
+
4
+ # The `:id` entries are redundant, but for the moment they help us generate valid code.
5
+ attributes :id,
6
+ # 🚅 super scaffolding will insert new fields above this line.
7
+ :id
8
+ end
@@ -0,0 +1,8 @@
1
+ class Api::V1::TeamSerializer < Api::V1::ApplicationSerializer
2
+ include Api::V1::Teams::SerializerBase
3
+
4
+ # The `:id` entries are redundant, but for the moment they help us generate valid code.
5
+ attributes :id,
6
+ # 🚅 super scaffolding will insert new fields above this line.
7
+ :id
8
+ end
@@ -0,0 +1,8 @@
1
+ class Api::V1::UserSerializer < Api::V1::ApplicationSerializer
2
+ include Api::V1::Users::SerializerBase
3
+
4
+ # The `:id` entries are redundant, but for the moment they help us generate valid code.
5
+ attributes :id,
6
+ # 🚅 super scaffolding will insert new fields above this line.
7
+ :id
8
+ end
@@ -0,0 +1,17 @@
1
+ module Api::V1::Invitations::SerializerBase
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ set_type "invitation"
6
+
7
+ attributes :id,
8
+ :team_id,
9
+ :email,
10
+ :from_membership_id,
11
+ :created_at,
12
+ :updated_at
13
+
14
+ belongs_to :from_membership, serializer: Api::V1::MembershipSerializer
15
+ has_one :membership, serializer: Api::V1::MembershipSerializer
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ module Api::V1::Memberships::SerializerBase
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ set_type "membership"
6
+
7
+ attributes :id,
8
+ :team_id,
9
+ :user_id,
10
+ :invitation_id,
11
+ :user_first_name,
12
+ :user_last_name,
13
+ :user_profile_photo_id,
14
+ :user_email,
15
+ :added_by_id,
16
+ :created_at,
17
+ :updated_at
18
+
19
+ belongs_to :user, serializer: Api::V1::UserSerializer
20
+ belongs_to :team, serializer: Api::V1::TeamSerializer
21
+ belongs_to :invitation, serializer: Api::V1::InvitationSerializer
22
+ belongs_to :added_by, serializer: Api::V1::MembershipSerializer
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ module Api::V1::Teams::SerializerBase
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ set_type "team"
6
+
7
+ attributes :id,
8
+ :name,
9
+ :time_zone,
10
+ :locale,
11
+ :created_at,
12
+ :updated_at
13
+
14
+ has_many :scaffolding_absolutely_abstract_creative_concepts, serializer: Api::V1::Scaffolding::AbsolutelyAbstract::CreativeConceptSerializer
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ module Api::V1::Users::SerializerBase
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ set_type "user"
6
+
7
+ attributes :id,
8
+ :email,
9
+ :first_name,
10
+ :last_name,
11
+ :time_zone,
12
+ :profile_photo_id,
13
+ :former_user,
14
+ :locale,
15
+ :platform_agent_of_id,
16
+ :created_at,
17
+ :updated_at
18
+
19
+ has_many :teams, serializer: Api::V1::TeamSerializer
20
+ has_many :memberships, serializer: Api::V1::MembershipSerializer
21
+ end
22
+ end
@@ -11,6 +11,12 @@ require "rack/cors"
11
11
  module BulletTrain
12
12
  module Api
13
13
  class Engine < ::Rails::Engine
14
+ initializer "bullet_train.api.register_api_endpoints" do |app|
15
+ if BulletTrain::Api
16
+ BulletTrain::Api.endpoints << "Api::V1::MeEndpoint"
17
+ BulletTrain::Api.endpoints << "Api::V1::TeamsEndpoint"
18
+ end
19
+ end
14
20
  end
15
21
  end
16
22
  end
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Api
3
- VERSION = "1.0.3"
3
+ VERSION = "1.0.7"
4
4
  end
5
5
  end
@@ -3,6 +3,6 @@ require "bullet_train/api/engine"
3
3
 
4
4
  module BulletTrain
5
5
  module Api
6
- # Your code goes here...
6
+ mattr_accessor :endpoints, default: []
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-31 00:00:00.000000000 Z
11
+ date: 2022-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -169,9 +169,18 @@ files:
169
169
  - app/controllers/api/v1/exceptions_handler.rb
170
170
  - app/controllers/api/v1/loads_and_authorizes_api_resource.rb
171
171
  - app/controllers/api/v1/me_endpoint.rb
172
- - app/controllers/api/v1/root.rb
173
172
  - app/controllers/api/v1/teams_endpoint.rb
173
+ - app/controllers/concerns/api/v1/base.rb
174
+ - app/controllers/concerns/api/v1/teams/endpoint_base.rb
174
175
  - app/models/platform/application.rb
176
+ - app/serializers/api/v1/invitation_serializer.rb
177
+ - app/serializers/api/v1/membership_serializer.rb
178
+ - app/serializers/api/v1/team_serializer.rb
179
+ - app/serializers/api/v1/user_serializer.rb
180
+ - app/serializers/concerns/api/v1/invitations/serializer_base.rb
181
+ - app/serializers/concerns/api/v1/memberships/serializer_base.rb
182
+ - app/serializers/concerns/api/v1/teams/serializer_base.rb
183
+ - app/serializers/concerns/api/v1/users/serializer_base.rb
175
184
  - app/views/account/platform/applications/_application.json.jbuilder
176
185
  - app/views/account/platform/applications/_breadcrumbs.html.erb
177
186
  - app/views/account/platform/applications/_form.html.erb
@@ -1,27 +0,0 @@
1
- class Api::V1::Root < Api::Base
2
- include Api::V1::Defaults
3
- include Api::V1::LoadsAndAuthorizesApiResource
4
-
5
- version "v1"
6
- use ::WineBouncer::OAuth2
7
-
8
- rescue_from :all do |error|
9
- handle_api_error(error)
10
- end
11
-
12
- unless scaffolding_things_disabled?
13
- mount Api::V1::Scaffolding::AbsolutelyAbstract::CreativeConceptsEndpoint
14
- mount Api::V1::Scaffolding::CompletelyConcrete::TangibleThingsEndpoint
15
- end
16
-
17
- mount Api::V1::MeEndpoint
18
- mount Api::V1::TeamsEndpoint
19
- mount Api::V1::Webhooks::Outgoing::EndpointsEndpoint
20
- mount Api::V1::Webhooks::Outgoing::DeliveriesEndpoint
21
- mount Api::V1::Webhooks::Outgoing::DeliveryAttemptsEndpoint
22
- # 🚅 super scaffolding will mount new endpoints above this line.
23
-
24
- route :any, "*path" do
25
- raise StandardError, "Unable to find API endpoint"
26
- end
27
- end