rrx_api 0.1.0 → 8.0.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -1
  3. data/Gemfile +3 -4
  4. data/Gemfile.lock +127 -118
  5. data/README.md +1 -1
  6. data/app/controllers/concerns/rrx_api/authenticatable.rb +79 -0
  7. data/app/controllers/rrx_api/controller.rb +1 -0
  8. data/app/controllers/rrx_api/health_controller.rb +33 -0
  9. data/app/models/concerns/arel_query.rb +189 -0
  10. data/app/models/rrx_api/record.rb +12 -0
  11. data/config/routes.rb +13 -0
  12. data/lib/generators/rrx_api/base.rb +95 -0
  13. data/lib/generators/rrx_api/docker_generator.rb +19 -0
  14. data/lib/generators/rrx_api/github_generator.rb +83 -0
  15. data/lib/generators/rrx_api/install_generator.rb +120 -0
  16. data/lib/generators/rrx_api/templates/docker/Dockerfile.tt +1 -0
  17. data/lib/generators/rrx_api/templates/github/build/workflows/build.yml.tt +71 -0
  18. data/lib/generators/rrx_api/templates/github/deploy/workflows/deploy.yml.tt +62 -0
  19. data/lib/generators/rrx_api/templates/terraform/aws/iam.tf.tt +37 -0
  20. data/lib/generators/rrx_api/templates/terraform/aws/main.tf.tt +44 -0
  21. data/lib/generators/rrx_api/templates/terraform/aws/service.tf.tt +67 -0
  22. data/lib/generators/rrx_api/terraform_generator.rb +76 -0
  23. data/lib/rrx_api/auth/base.rb +29 -0
  24. data/lib/rrx_api/auth/firebase.rb +70 -0
  25. data/lib/rrx_api/engine.rb +111 -0
  26. data/lib/rrx_api/version.rb +3 -2
  27. data/lib/rrx_api.rb +1 -1
  28. metadata +69 -37
  29. data/.idea/.gitignore +0 -8
  30. data/.idea/inspectionProfiles/Project_Default.xml +0 -6
  31. data/.idea/modules.xml +0 -8
  32. data/.idea/rrx_api.iml +0 -255
  33. data/.idea/vcs.xml +0 -6
  34. data/exe/rrx_api_setup +0 -37
  35. data/exe/sources/config/initializers/cors.rb +0 -21
  36. data/exe/sources/config/initializers/generators.rb +0 -6
  37. data/lib/rrx_api/railtie.rb +0 -44
@@ -0,0 +1,37 @@
1
+ data "aws_iam_policy_document" "app_policy" {
2
+ source_policy_documents = [module.rrx_config.role_policy.json]
3
+
4
+ statement {
5
+ sid = "webrtc"
6
+ resources = ["*"]
7
+ actions = [
8
+ "ivs:CreateStage",
9
+ "ivs:CreateParticipantToken",
10
+ "ivs:DeleteStage",
11
+ "ivs:DisconnectParticipant",
12
+ "ivs:GetStage",
13
+ "ivs:GetStageSession",
14
+ "ivs:ListStages",
15
+ "ivs:ListStageSessions",
16
+ "ivs:TagResource",
17
+ "cloudwatch:DescribeAlarms",
18
+ "cloudwatch:GetMetricData",
19
+ "servicequotas:ListAWSDefaultServiceQuotas",
20
+ "servicequotas:ListRequestedServiceQuotaChangeHistoryByQuota",
21
+ "servicequotas:ListServiceQuotas",
22
+ "servicequotas:ListServices",
23
+ "servicequotas:ListTagsForResource"
24
+ ]
25
+ }
26
+ }
27
+
28
+ resource "aws_iam_user" "app" {
29
+ name = local.app_env_name
30
+ path = "/${module.tagging.environment}/services/"
31
+ force_destroy = true
32
+ }
33
+
34
+ resource "aws_iam_user_policy" "api" {
35
+ user = aws_iam_user.app.name
36
+ policy = data.aws_iam_policy_document.api.json
37
+ }
@@ -0,0 +1,44 @@
1
+ terraform {
2
+ required_version = "<%= terraform_version %>"
3
+
4
+ required_providers {
5
+ aws = {}
6
+ }
7
+
8
+ <% if s3_bucket.present? %>
9
+ # Configure the backend to store the state file in S3
10
+ backend "s3" {
11
+ bucket = "<%= s3_bucket %>"
12
+ key = "<%= s3_key %>"
13
+ <% if aws_profile %>
14
+ profile = "<%= aws_profile %>"
15
+ <% end %>
16
+ region = "<%= aws_region %>"
17
+ encrypt = true
18
+ }
19
+ <% end %>
20
+ }
21
+
22
+ provider "aws" {
23
+ <% if aws_profile %>
24
+ profile = "<%= aws_profile %>"
25
+ <% end %>
26
+ region = "<%= aws_region %>"
27
+ default_tags {
28
+ tags = module.tagging.default_tags
29
+ }
30
+ }
31
+
32
+ module "aws" {
33
+ source = "github.com/tfext/terraform-aws-base"
34
+ }
35
+
36
+ module "tagging" {
37
+ source = "github.com/tfext/terraform-utilities-tagging"
38
+ environments = <%= environments? %>
39
+ }
40
+
41
+ locals {
42
+ app_name = "<%= app_name %>"
43
+ app_env_name = "${local.app_name}${module.tagging.environment_suffix}"
44
+ }
@@ -0,0 +1,67 @@
1
+ module "rrx_config" {
2
+ source = "github.com/tfext/terraform-rrx-config"
3
+ environment = terraform.workspace
4
+ # aws_secret = "..."
5
+
6
+ db = {
7
+ resource_id = data.aws_db_instance.db.resource_id
8
+ type = "mariadb"
9
+ host = data.aws_db_instance.db.address
10
+ port = data.aws_db_instance.db.port
11
+ name = "liaisun"
12
+ user = "liaisun_api"
13
+ iam = true
14
+ }
15
+
16
+ config = {
17
+ default_identity_provider = {
18
+ user_pool_id = "us-west-2_Q8lbwSDZ3"
19
+ client_id = "27j0fkk6jdnc8fdcf1psuechtd"
20
+ domain = "auth-dev.liaisun.com"
21
+ }
22
+ }
23
+ }
24
+
25
+ resource "aws_cloudwatch_log_group" "service" {
26
+ name = "/${module.tagging.environment}/<%= app_name %>"
27
+ retention_in_days = module.tagging.production ? 3 : 1
28
+ }
29
+
30
+ module "container_definition" {
31
+ source = "github.com/tfext/terraform-aws-ecs-container-definition"
32
+ name = local.app_env_name
33
+ repository = module.ilibrium.docker_repository
34
+ image = "<%= app_name %>"
35
+ image_tag = "latest" # terraform.workspace
36
+ cpu = 1
37
+ memory_required = 512
38
+ environment = module.rrx_config.environment
39
+
40
+ ports = [{
41
+ port = 3000
42
+ public_port = 443
43
+ health_check = { path = "/healthcheck" }
44
+ }]
45
+
46
+ aws_logging = {
47
+ group = aws_cloudwatch_log_group.service.name
48
+ }
49
+ }
50
+
51
+ module "service" {
52
+ source = "github.com/tfext/terraform-aws-ecs-service"
53
+ name = local.app_env_name
54
+ cluster = <%= ecs_cluster %>
55
+ containers = [module.container_definition]
56
+ role_policy = data.aws_iam_policy_document.app.json
57
+ target_group_prefix = "<%= app_name %>${module.tagging.environment_suffix}"
58
+ wait_for_stable = false
59
+
60
+ load_balancers = [{
61
+ name = module.tagging.environment
62
+ short_name = module.tagging.short_env
63
+ dns_zone = "liaisun.com"
64
+ dns_subdomain = "api${module.tagging.environment_suffix}"
65
+ vpc = module.tagging.environment
66
+ }]
67
+ }
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'base'
3
+
4
+ module RrxApi
5
+ module Generators
6
+ class TerraformGenerator < Base
7
+ init! 'Generates Terraform scripts for deploying the service as a docker container.'
8
+
9
+ class_option :cloud,
10
+ default: 'aws',
11
+ enum: %w[aws],
12
+ desc: 'Cloud provider for deployment (currently only AWS is supported)'
13
+
14
+ class_option :bucket,
15
+ type: :string,
16
+ desc: 'S3 bucket name for storing Terraform state files (default: store state locally)'
17
+
18
+ class_option :key,
19
+ type: :string,
20
+ desc: 'S3 key for the Terraform state file (default: app name)'
21
+
22
+ class_option :aws_profile,
23
+ type: :string,
24
+ desc: 'AWS profile to use for deployment (default: current profile)'
25
+
26
+ class_option :aws_region,
27
+ type: :string,
28
+ default: 'us-west-2',
29
+ desc: 'AWS region for deployment (default: us-west-2)'
30
+
31
+ class_option :ecs_cluster,
32
+ type: :string,
33
+ desc: 'ECS cluster name for deployment (default: deployment environment name)'
34
+
35
+ class_option :environments,
36
+ type: :boolean,
37
+ default: false,
38
+ aliases: '-e',
39
+ desc: 'Generate terraform files that targets multiple environments (default: false)'
40
+
41
+ def terraform
42
+ directory "terraform/#{options[:cloud]}", 'terraform'
43
+ end
44
+
45
+ private
46
+
47
+ def environments?
48
+ options[:environments]
49
+ end
50
+
51
+ def terraform_version
52
+ '1.9'
53
+ end
54
+
55
+ def s3_bucket
56
+ options[:bucket]
57
+ end
58
+
59
+ def s3_key
60
+ options[:key] || app_name
61
+ end
62
+
63
+ def aws_profile
64
+ options[:aws_profile]
65
+ end
66
+
67
+ def aws_region
68
+ options[:aws_region]
69
+ end
70
+
71
+ def ecs_cluster
72
+ options.include?(:ecs_cluster) ? "'#{options[:ecs_cluster]}'" : 'terraform.workspace'
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RrxApi
4
+ module Auth
5
+ class TokenExpiredError < StandardError
6
+ def initialize
7
+ super('User token expired')
8
+ end
9
+ end
10
+
11
+ # Abstract authentication provider base class.
12
+ # Subclass and override {#id_from_token} (and optionally {#user_info}) to implement a provider.
13
+ class Base
14
+ # Verify a bearer token and return the provider user ID.
15
+ # @param _token [String]
16
+ # @return [String]
17
+ def id_from_token(_token)
18
+ raise NotImplementedError, "#{self.class}#id_from_token is not implemented"
19
+ end
20
+
21
+ # Fetch user info for a given provider UID (optional).
22
+ # @param _uid [String]
23
+ # @return [Object, nil]
24
+ def user_info(_uid)
25
+ nil
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RrxApi
6
+ module Auth
7
+ # Firebase authentication provider.
8
+ #
9
+ # Requires the +firebase-admin-sdk+ gem. It is intentionally not listed as a
10
+ # dependency of rrx_api — add it to your application's Gemfile when you want
11
+ # Firebase auth:
12
+ #
13
+ # gem 'firebase-admin-sdk'
14
+ #
15
+ # Configuration is read from +RrxConfig.firebase+ (project_id, client_email,
16
+ # private_key, etc.).
17
+ class Firebase < Base
18
+ def id_from_token(id_token)
19
+ require_firebase!
20
+ verified = auth.verify_id_token(id_token)
21
+ verified['sub']
22
+ rescue LoadError
23
+ raise
24
+ rescue => e
25
+ # Lazily match the expired-token error so this file can be parsed before
26
+ # the firebase-admin-sdk gem is loaded.
27
+ raise TokenExpiredError if e.class.name == 'Firebase::Admin::Auth::ExpiredTokenError'
28
+
29
+ raise
30
+ end
31
+
32
+ def user_info(uid)
33
+ require_firebase!
34
+ auth.get_user(uid)
35
+ end
36
+
37
+ private
38
+
39
+ def require_firebase!
40
+ require 'firebase-admin-sdk'
41
+ rescue LoadError
42
+ raise LoadError,
43
+ "firebase-admin-sdk is required for Firebase authentication. " \
44
+ "Add `gem 'firebase-admin-sdk'` to your Gemfile."
45
+ end
46
+
47
+ def credentials
48
+ @credentials ||= ::Firebase::Admin::Credentials.from_json(config.to_json)
49
+ end
50
+
51
+ def app
52
+ @app ||= begin
53
+ app_config = ::Firebase::Admin::Config.new(
54
+ project_id: config.project_id,
55
+ service_account_id: config.client_email
56
+ )
57
+ ::Firebase::Admin::App.new(credentials:, config: app_config)
58
+ end
59
+ end
60
+
61
+ def auth
62
+ @auth ||= ::Firebase::Admin::Auth::Client.new(app)
63
+ end
64
+
65
+ def config
66
+ RrxConfig.firebase
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,111 @@
1
+ require 'rails'
2
+ require 'active_model/railtie'
3
+ require 'active_record/railtie'
4
+ require 'action_controller/railtie'
5
+ require 'action_text/engine'
6
+ require 'action_view/railtie'
7
+ require 'jbuilder'
8
+ require 'rack/cors'
9
+ require 'actionpack/action_caching'
10
+ require_relative 'auth/base'
11
+ require_relative 'auth/firebase'
12
+
13
+ module RrxApi
14
+ class Engine < ::Rails::Engine
15
+ CORS_LOCALHOST_PATTERN = /\Ahttp:\/\/localhost(?::\d{4})?\z/.freeze
16
+
17
+ config.cors_origins = []
18
+
19
+ # Checks whether +source+ matches any of the configured CORS origins.
20
+ # Each entry in +cors_origins+ may be:
21
+ # - a String for exact match (e.g. "https://app.example.com")
22
+ # - a String with a leading wildcard (e.g. "*.example.com" matches "https://foo.example.com")
23
+ # - a Regexp (e.g. /\.example\.com\z/)
24
+ def self.cors_origin_allowed?(source, origins)
25
+ origins.any? do |origin|
26
+ case origin
27
+ when Regexp then origin.match?(source)
28
+ when String
29
+ if origin.start_with?('*.')
30
+ # Wildcard subdomain: *.example.com matches any scheme+subdomain of example.com
31
+ suffix = origin[1..] # => ".example.com"
32
+ source.end_with?(suffix)
33
+ else
34
+ source == origin
35
+ end
36
+ end
37
+ end
38
+ end
39
+ config.healthcheck = nil
40
+ config.healthcheck_route = 'healthcheck'
41
+
42
+ initializer 'rrx.active_support', before: 'active_support.set_configs' do |app|
43
+ app.config.active_support.to_time_preserves_timezone = :zone
44
+ end
45
+
46
+ initializer 'rrx.application', before: :initialize do |app|
47
+ app.config.time_zone = :utc
48
+ app.config.active_support.to_time_preserves_timezone = :zone
49
+ app.config.active_record.schema_format = :sql # Use SQL schema format for UUID support
50
+
51
+ app.config.generators.orm :active_record, primary_key_type: :uuid
52
+ app.config.session_store :cookie_store, key: '_rrx_session' # Make configurable in the future?
53
+ app.config.middleware.use ActionDispatch::Cookies # Required for all session management
54
+ app.config.middleware.use ActionDispatch::Session::CookieStore, app.config.session_options
55
+ end
56
+
57
+ initializer 'rrx.cors', before: :load_config_initializers do |app|
58
+ require 'rack/cors'
59
+
60
+ Rails.application.config.middleware.insert_before 0, Rack::Cors do
61
+ allow do
62
+ origins do |source, _env|
63
+ if Rails.env.development?
64
+ CORS_LOCALHOST_PATTERN.match? source
65
+ else
66
+ Engine.cors_origin_allowed?(source, app.config.cors_origins)
67
+ end
68
+ end
69
+
70
+ resource '*',
71
+ headers: :any,
72
+ credentials: true,
73
+ methods: [:get, :post, :put, :patch, :delete, :options, :head]
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ initializer 'rrx.api_docs_config', before: :load_config_initializers do |_app|
80
+ Rails.configuration.api_docs = { 'API' => 'swagger.yaml' }
81
+ end
82
+
83
+ initializer 'rrx.api_docs', after: :load_config_initializers do |app|
84
+ # Setup Swagger endpoints if docs exist
85
+ if swagger_root?
86
+ require 'rswag/api'
87
+ require 'rswag/ui'
88
+
89
+ Rswag::Api.configure do |c|
90
+ c.swagger_root = Rails.root.join('swagger')
91
+ end
92
+
93
+ Rswag::Ui.configure do |c|
94
+ app.config.api_docs.each_pair do |name, file|
95
+ c.swagger_endpoint "/api-docs/#{file}", name
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ private
102
+
103
+ def swagger_root
104
+ @swagger_root ||= Rails.root.join('swagger')
105
+ end
106
+
107
+ def swagger_root?
108
+ swagger_root.exist?
109
+ end
110
+ end
111
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RrxApi
4
- VERSION = "0.1.0"
5
- RAILS_VERSION = "~> 7.0"
4
+ VERSION = '8.0.3'
5
+ DEPENDENCY_VERSION = "~> #{VERSION}"
6
+ RAILS_VERSION = DEPENDENCY_VERSION
6
7
  end
data/lib/rrx_api.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'rrx_api/version'
4
- require_relative 'rrx_api/railtie'
4
+ require_relative 'rrx_api/engine'
5
5
  require 'rrx_config'
6
6
  require 'rrx_logging'
7
7
  require 'rack/cors'
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rrx_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 8.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Drew
8
- autorequire:
9
- bindir: exe
8
+ bindir: bin
10
9
  cert_chain: []
11
- date: 2024-01-10 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: actionpack-action_caching
@@ -70,16 +69,16 @@ dependencies:
70
69
  name: jbuilder
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
- - - ">="
72
+ - - "~>"
74
73
  - !ruby/object:Gem::Version
75
- version: '0'
74
+ version: '2.13'
76
75
  type: :runtime
77
76
  prerelease: false
78
77
  version_requirements: !ruby/object:Gem::Requirement
79
78
  requirements:
80
- - - ">="
79
+ - - "~>"
81
80
  - !ruby/object:Gem::Version
82
- version: '0'
81
+ version: '2.13'
83
82
  - !ruby/object:Gem::Dependency
84
83
  name: kaminari
85
84
  requirement: !ruby/object:Gem::Requirement
@@ -128,28 +127,42 @@ dependencies:
128
127
  requirements:
129
128
  - - "~>"
130
129
  - !ruby/object:Gem::Version
131
- version: '7.0'
130
+ version: 8.0.3
132
131
  type: :runtime
133
132
  prerelease: false
134
133
  version_requirements: !ruby/object:Gem::Requirement
135
134
  requirements:
136
135
  - - "~>"
137
136
  - !ruby/object:Gem::Version
138
- version: '7.0'
137
+ version: 8.0.3
139
138
  - !ruby/object:Gem::Dependency
140
- name: rails-healthcheck
139
+ name: rrx_config
141
140
  requirement: !ruby/object:Gem::Requirement
142
141
  requirements:
143
- - - ">="
142
+ - - "~>"
144
143
  - !ruby/object:Gem::Version
145
- version: '0'
144
+ version: 8.0.3
146
145
  type: :runtime
147
146
  prerelease: false
148
147
  version_requirements: !ruby/object:Gem::Requirement
149
148
  requirements:
150
- - - ">="
149
+ - - "~>"
151
150
  - !ruby/object:Gem::Version
152
- version: '0'
151
+ version: 8.0.3
152
+ - !ruby/object:Gem::Dependency
153
+ name: rrx_logging
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: 8.0.3
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: 8.0.3
153
166
  - !ruby/object:Gem::Dependency
154
167
  name: rswag-api
155
168
  requirement: !ruby/object:Gem::Requirement
@@ -179,7 +192,7 @@ dependencies:
179
192
  - !ruby/object:Gem::Version
180
193
  version: '0'
181
194
  - !ruby/object:Gem::Dependency
182
- name: tzinfo-data
195
+ name: thor
183
196
  requirement: !ruby/object:Gem::Requirement
184
197
  requirements:
185
198
  - - ">="
@@ -193,7 +206,7 @@ dependencies:
193
206
  - !ruby/object:Gem::Version
194
207
  version: '0'
195
208
  - !ruby/object:Gem::Dependency
196
- name: rrx_logging
209
+ name: tzinfo-data
197
210
  requirement: !ruby/object:Gem::Requirement
198
211
  requirements:
199
212
  - - ">="
@@ -207,13 +220,13 @@ dependencies:
207
220
  - !ruby/object:Gem::Version
208
221
  version: '0'
209
222
  - !ruby/object:Gem::Dependency
210
- name: rrx_config
223
+ name: generator_spec
211
224
  requirement: !ruby/object:Gem::Requirement
212
225
  requirements:
213
226
  - - ">="
214
227
  - !ruby/object:Gem::Version
215
228
  version: '0'
216
- type: :runtime
229
+ type: :development
217
230
  prerelease: false
218
231
  version_requirements: !ruby/object:Gem::Requirement
219
232
  requirements:
@@ -221,7 +234,7 @@ dependencies:
221
234
  - !ruby/object:Gem::Version
222
235
  version: '0'
223
236
  - !ruby/object:Gem::Dependency
224
- name: rrx_dev
237
+ name: sqlite3
225
238
  requirement: !ruby/object:Gem::Requirement
226
239
  requirements:
227
240
  - - ">="
@@ -234,20 +247,27 @@ dependencies:
234
247
  - - ">="
235
248
  - !ruby/object:Gem::Version
236
249
  version: '0'
237
- description:
250
+ - !ruby/object:Gem::Dependency
251
+ name: rrx_dev
252
+ requirement: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: 8.0.3
257
+ type: :development
258
+ prerelease: false
259
+ version_requirements: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
262
+ - !ruby/object:Gem::Version
263
+ version: 8.0.3
238
264
  email:
239
265
  - dan.drew@hotmail.com
240
- executables:
241
- - rrx_api_setup
266
+ executables: []
242
267
  extensions: []
243
268
  extra_rdoc_files: []
244
269
  files:
245
270
  - ".editorconfig"
246
- - ".idea/.gitignore"
247
- - ".idea/inspectionProfiles/Project_Default.xml"
248
- - ".idea/modules.xml"
249
- - ".idea/rrx_api.iml"
250
- - ".idea/vcs.xml"
251
271
  - ".rspec"
252
272
  - ".rubocop.yml"
253
273
  - CODE_OF_CONDUCT.md
@@ -256,13 +276,27 @@ files:
256
276
  - LICENSE.txt
257
277
  - README.md
258
278
  - Rakefile
279
+ - app/controllers/concerns/rrx_api/authenticatable.rb
259
280
  - app/controllers/rrx_api/controller.rb
281
+ - app/controllers/rrx_api/health_controller.rb
282
+ - app/models/concerns/arel_query.rb
260
283
  - app/models/rrx_api/record.rb
261
- - exe/rrx_api_setup
262
- - exe/sources/config/initializers/cors.rb
263
- - exe/sources/config/initializers/generators.rb
284
+ - config/routes.rb
285
+ - lib/generators/rrx_api/base.rb
286
+ - lib/generators/rrx_api/docker_generator.rb
287
+ - lib/generators/rrx_api/github_generator.rb
288
+ - lib/generators/rrx_api/install_generator.rb
289
+ - lib/generators/rrx_api/templates/docker/Dockerfile.tt
290
+ - lib/generators/rrx_api/templates/github/build/workflows/build.yml.tt
291
+ - lib/generators/rrx_api/templates/github/deploy/workflows/deploy.yml.tt
292
+ - lib/generators/rrx_api/templates/terraform/aws/iam.tf.tt
293
+ - lib/generators/rrx_api/templates/terraform/aws/main.tf.tt
294
+ - lib/generators/rrx_api/templates/terraform/aws/service.tf.tt
295
+ - lib/generators/rrx_api/terraform_generator.rb
264
296
  - lib/rrx_api.rb
265
- - lib/rrx_api/railtie.rb
297
+ - lib/rrx_api/auth/base.rb
298
+ - lib/rrx_api/auth/firebase.rb
299
+ - lib/rrx_api/engine.rb
266
300
  - lib/rrx_api/version.rb
267
301
  - sig/rrx_api.rbs
268
302
  homepage: https://github.com/rails-rrx/rrx_api
@@ -271,23 +305,21 @@ licenses:
271
305
  metadata:
272
306
  homepage_uri: https://github.com/rails-rrx/rrx_api
273
307
  source_code_uri: https://github.com/rails-rrx/rrx_api
274
- post_install_message:
275
308
  rdoc_options: []
276
309
  require_paths:
277
310
  - lib
278
311
  required_ruby_version: !ruby/object:Gem::Requirement
279
312
  requirements:
280
- - - ">="
313
+ - - "~>"
281
314
  - !ruby/object:Gem::Version
282
- version: '3.1'
315
+ version: 3.4.0
283
316
  required_rubygems_version: !ruby/object:Gem::Requirement
284
317
  requirements:
285
318
  - - ">="
286
319
  - !ruby/object:Gem::Version
287
320
  version: '0'
288
321
  requirements: []
289
- rubygems_version: 3.4.10
290
- signing_key:
322
+ rubygems_version: 3.6.7
291
323
  specification_version: 4
292
324
  summary: Ruby on Rails core API support
293
325
  test_files: []
data/.idea/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- # Default ignored files
2
- /shelf/
3
- /workspace.xml
4
- # Editor-based HTTP Client requests
5
- /httpRequests/
6
- # Datasource local storage ignored files
7
- /dataSources/
8
- /dataSources.local.xml