Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: CI
on:
pull_request:
push:
branches: [ main ]
branches: [main]

jobs:
scan_ruby:
Expand Down Expand Up @@ -74,4 +74,4 @@ jobs:
RAILS_ENV: test
DATABASE_URL: postgres://postgres:postgres@localhost:5432
# REDIS_URL: redis://localhost:6379/0
run: bin/rails db:test:prepare test
run: bin/rails db:test:prepare db:seed test
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,5 @@

# Ignore master key for decrypting credentials and more.
/config/master.key

/config/credentials/staging.key
21 changes: 21 additions & 0 deletions app/controllers/ministers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class MinistersController < ApplicationController
before_action :set_minister, only: %i[ show ]

# GET /ministers
def index
@ministers = Minister.all

render json: @ministers
end

# GET /ministers/1
def show
render json: @minister
end

private
# Use callbacks to share common setup or constraints between actions.
def set_minister
@minister = Minister.find(params.expect(:id))
end
end
1 change: 1 addition & 0 deletions app/models/department.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
class Department < ApplicationRecord
belongs_to :government
has_many :ministers
end
4 changes: 4 additions & 0 deletions app/models/minister.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class Minister < ApplicationRecord
belongs_to :government
belongs_to :department
end
1 change: 1 addition & 0 deletions config/credentials/staging.yml.enc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
zzhZt2HaptbYfhrmuak0tSs4PWE+qnyBzAZUgYtjeiMPNuI/oxlwNTIhchCBhW5usn2HfwuUrnGAkh2WZWeskT73FlV6uYLmAz1TzvqFT04s9N+or4ey8hOftwzAEszqvwn5fJoLfEqzKR33M4MZ8Esl+QujOvofbNzAYxmH6zc6WLaiQ+kxgqgm8Y3TgndAthn5VnayZV5eehpBVjNOe3BDacRQIbQ9z+fHjeJLlmX6wskVL9y6eJBp0GOAtafBEYqB4x8FZONHyDhxAQ8zbKe7toNHkBbo0ycrMgq8Notkds0zRKgNveiWcXLxcTR8qtp6bdc7rCK9LQkTSpay6ZRLcfshNwqTETIfrsKKlo5Fq1mWxDmRw0NGvIiSXPphBle7EncAVE7/5LnqryS1rW5JFC7W1ZEenFLWGSdeu24EHwulCcgYXgTl80k3A1azh0ISx5usT7GSsVTsFK2VCElkx1xGh41HSEiEg946+BqhVouYY4QxDABJ--y0ACm/PCUMgn5cOI--2FGz5wcBz06WmfgGoCHHqQ==
2 changes: 1 addition & 1 deletion config/environments/production.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
# config.action_mailer.raise_delivery_errors = false

# Set host to be used by links generated in mailer templates.
config.action_mailer.default_url_options = { host: "example.com" }
config.action_mailer.default_url_options = { host: ENV["HOST"] }

# Specify outgoing SMTP server. Remember to add smtp/* credentials via rails credentials:edit.
# config.action_mailer.smtp_settings = {
Expand Down
86 changes: 86 additions & 0 deletions config/environments/staging.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
require "active_support/core_ext/integer/time"

Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.

# Code is not reloaded between requests.
config.enable_reloading = false

# Eager load code on boot for better performance and memory savings (ignored by Rake tasks).
config.eager_load = true

# Full error reports are disabled.
config.consider_all_requests_local = false

# Cache assets for far-future expiry since they are all digest stamped.
config.public_file_server.headers = { "cache-control" => "public, max-age=#{1.year.to_i}" }

# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.asset_host = "http://assets.example.com"

# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :local

# Assume all access to the app is happening through a SSL-terminating reverse proxy.
config.assume_ssl = true

# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true

# Skip http-to-https redirect for the default health check endpoint.
# config.ssl_options = { redirect: { exclude: ->(request) { request.path == "/up" } } }

# Log to STDOUT with the current request id as a default log tag.
config.log_tags = [ :request_id ]
config.logger = ActiveSupport::TaggedLogging.logger(STDOUT)

# Change to "debug" to log everything (including potentially personally-identifiable information!)
config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")

# Prevent health checks from clogging up the logs.
config.silence_healthcheck_path = "/up"

# Don't log any deprecations.
config.active_support.report_deprecations = false

# Replace the default in-process memory cache store with a durable alternative.
# config.cache_store = :mem_cache_store

# Replace the default in-process and non-durable queuing backend for Active Job.
# config.active_job.queue_adapter = :resque

# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false

# Set host to be used by links generated in mailer templates.
config.action_mailer.default_url_options = { host: ENV["HOST"] }

# Specify outgoing SMTP server. Remember to add smtp/* credentials via rails credentials:edit.
# config.action_mailer.smtp_settings = {
# user_name: Rails.application.credentials.dig(:smtp, :user_name),
# password: Rails.application.credentials.dig(:smtp, :password),
# address: "smtp.example.com",
# port: 587,
# authentication: :plain
# }

# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).
config.i18n.fallbacks = true

# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false

# Only use :id for inspections in production.
config.active_record.attributes_for_inspect = [ :id ]

# Enable DNS rebinding protection and other `Host` header attacks.
# config.hosts = [
# "example.com", # Allow requests from example.com
# /.*\.example\.com/ # Allow requests from subdomains like `www.example.com`
# ]
#
# Skip DNS rebinding protection for the default health check endpoint.
# config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
end
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
Rails.application.routes.draw do
resources :ministers, only: [ :index, :show ]
resources :departments, only: [ :index, :show ]
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

Expand Down
19 changes: 19 additions & 0 deletions db/migrate/20250612225202_create_ministers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class CreateMinisters < ActiveRecord::Migration[8.0]
def change
create_table :ministers do |t|
t.references :government, null: false, foreign_key: true
t.references :department, null: false, foreign_key: true
t.integer :order_of_precedence, null: false
t.string :person_short_honorific, null: false
t.timestamp :started_at, null: false
t.timestamp :ended_at, null: true
t.string :first_name, null: false
t.string :last_name, null: false
t.string :title, null: false
t.string :avatar_url, null: true
t.string :role, null: false

t.timestamps
end
end
end
26 changes: 23 additions & 3 deletions db/schema.rb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading