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.
- checksums.yaml +4 -4
- data/.rspec +1 -1
- data/Gemfile +3 -4
- data/Gemfile.lock +127 -118
- data/README.md +1 -1
- data/app/controllers/concerns/rrx_api/authenticatable.rb +79 -0
- data/app/controllers/rrx_api/controller.rb +1 -0
- data/app/controllers/rrx_api/health_controller.rb +33 -0
- data/app/models/concerns/arel_query.rb +189 -0
- data/app/models/rrx_api/record.rb +12 -0
- data/config/routes.rb +13 -0
- data/lib/generators/rrx_api/base.rb +95 -0
- data/lib/generators/rrx_api/docker_generator.rb +19 -0
- data/lib/generators/rrx_api/github_generator.rb +83 -0
- data/lib/generators/rrx_api/install_generator.rb +120 -0
- data/lib/generators/rrx_api/templates/docker/Dockerfile.tt +1 -0
- data/lib/generators/rrx_api/templates/github/build/workflows/build.yml.tt +71 -0
- data/lib/generators/rrx_api/templates/github/deploy/workflows/deploy.yml.tt +62 -0
- data/lib/generators/rrx_api/templates/terraform/aws/iam.tf.tt +37 -0
- data/lib/generators/rrx_api/templates/terraform/aws/main.tf.tt +44 -0
- data/lib/generators/rrx_api/templates/terraform/aws/service.tf.tt +67 -0
- data/lib/generators/rrx_api/terraform_generator.rb +76 -0
- data/lib/rrx_api/auth/base.rb +29 -0
- data/lib/rrx_api/auth/firebase.rb +70 -0
- data/lib/rrx_api/engine.rb +111 -0
- data/lib/rrx_api/version.rb +3 -2
- data/lib/rrx_api.rb +1 -1
- metadata +69 -37
- data/.idea/.gitignore +0 -8
- data/.idea/inspectionProfiles/Project_Default.xml +0 -6
- data/.idea/modules.xml +0 -8
- data/.idea/rrx_api.iml +0 -255
- data/.idea/vcs.xml +0 -6
- data/exe/rrx_api_setup +0 -37
- data/exe/sources/config/initializers/cors.rb +0 -21
- data/exe/sources/config/initializers/generators.rb +0 -6
- 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
|
data/lib/rrx_api/version.rb
CHANGED
data/lib/rrx_api.rb
CHANGED
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.
|
|
4
|
+
version: 8.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dan Drew
|
|
8
|
-
|
|
9
|
-
bindir: exe
|
|
8
|
+
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
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: '
|
|
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: '
|
|
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:
|
|
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:
|
|
137
|
+
version: 8.0.3
|
|
139
138
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
139
|
+
name: rrx_config
|
|
141
140
|
requirement: !ruby/object:Gem::Requirement
|
|
142
141
|
requirements:
|
|
143
|
-
- - "
|
|
142
|
+
- - "~>"
|
|
144
143
|
- !ruby/object:Gem::Version
|
|
145
|
-
version:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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: :
|
|
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:
|
|
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
|
-
|
|
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
|
-
-
|
|
262
|
-
-
|
|
263
|
-
-
|
|
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/
|
|
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:
|
|
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.
|
|
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: []
|