Submit social housing lettings and sales data (CORE)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
MadeTech Dushan 023f1f66e3 make check answer header dynamic 3 years ago
.github/workflows Run rspec directly 3 years ago
app make check answer header dynamic 3 years ago
bin Move to Gov PaaS (#24) 3 years ago
config Use questions instead of pages in check answers 3 years ago
db Add local authority section 3 years ago
doc/adr Update the ADR 3 years ago
lib Add application skeleton to repo 3 years ago
log Add application skeleton to repo 3 years ago
public Add application skeleton to repo 3 years ago
spec linting fixes 3 years ago
storage Add application skeleton to repo 3 years ago
tmp Add application skeleton to repo 3 years ago
vendor Add application skeleton to repo 3 years ago
.browserslistrc Add application skeleton to repo 3 years ago
.cfignore Move to Gov PaaS (#24) 3 years ago
.dockerignore Add application skeleton to repo 3 years ago
.editorconfig Add application skeleton to repo 3 years ago
.env.example Avoid whitespace syntax mismatch between docker-compose and rails c 3 years ago
.gitignore Add simplecov 3 years ago
.overcommit.yml Add application skeleton to repo 3 years ago
.rspec Add application skeleton to repo 3 years ago
.rubocop.yml Add application skeleton to repo 3 years ago
.ruby-version Update Ruby version and Gov UK frontend component gem 3 years ago
Dockerfile Update Ruby version and Gov UK frontend component gem 3 years ago
Gemfile Let's not load more than we need to 3 years ago
Gemfile.lock Let's not load more than we need to 3 years ago
LICENSE Initial commit 3 years ago
README.md Add external lib docs to readme 3 years ago
Rakefile Add application skeleton to repo 3 years ago
babel.config.js Add application skeleton to repo 3 years ago
config.ru Add application skeleton to repo 3 years ago
docker-compose.yml Add application skeleton to repo 3 years ago
manifest.yml Single app name 3 years ago
package.json Bump stimulus now that it's out of beta 3 years ago
postcss.config.js Add application skeleton to repo 3 years ago
yarn.lock Bump stimulus now that it's out of beta 3 years ago

README.md

Data Collection App

This is the codebase for the Ruby/Rails app that will handle the submission of Lettings and Sales of Social Housing in England data.

Required Setup

Pre-requisites

  • Ruby
  • Rails
  • Postgres

Setup Quickstart

Copy the .env.example to .env and replace the database credentials with your local postgres user credentials.

Install the dependencies bundle install

Create the database rake db:create

Run the database migrations rake db:migrate

Start the rails server

rails s

This starts the rails server on localhost:3000

or using Docker

docker-compose build
docker-compose run --rm app rails db:create
docker-compose up

This exposes the rails server on localhost:8080.

Note docker-compose runs the production docker image (RAILS_ENV=production) as the Dockerfile doesn't include development gems to keep the image size down.

Infrastructure

This application is running on Gov PaaS. To deploy you need to:

  • Contact your organisation manager to get an account in dluhc-core organization and in the relevant spaces (sandbox/production).

  • Install the cloudfoundry cli https://docs.cloudfoundry.org/cf-cli/install-go-cli.html

  • Login
    cf login -a api.london.cloud.service.gov.uk -u <your_username>

  • Set your deployment target (sandbox/production)
    cf target -o dluhc-core -s <deploy_environment>

  • Deploy
    cf push dluhc-core --strategy rolling. This will use the manifest file

Once the app is deployed:

  • Get a rails console
    cf ssh dluhc-core -t -c "/tmp/lifecycle/launcher /home/vcap/app 'rails console' ''"

CI/CD

When a commit is made to main the following Github action jobs are triggered:

  1. Test - RSpec runs our test suite
  2. Deploy - If the Test stage passes, this deploys the app to our Gov PaaS account using the cloudfoundry cli

When a pull request is opened to main only the test stage runs.

Single log submission

The form for this is driven by a json file in /config/forms/{start_year}_{end_year}.json

The JSON should follow the structure:

{
  form_type: [lettings/sales]
  start_year: yyyy
  end_year: yyyy
  sections: {
    snake case section name string: {
      label: string,
      subsections: {
        snake case subsection name string: {
          label: string,
          pages: {
            snake case page name string: {
              header: string,
              description: string,
              questions: {
                snake case question name string: {
                  header: string,
                  hint_text: string,
                  type: [text / numeric / radio / checkbox / date ],
                  min: integer, (numeric only),
                  max: integer, (numeric only),
                  step: integer (numeric only),
                  answer_options: { (checkbox and radio only)
                    "0": string,
                    "1": string
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Assumptions made by the format:

  • All forms have at least 1 section
  • All sections have at least 1 subsection
  • All subsections have at least 1 page
  • All pages have at least 1 question
  • The ActiveRecord case log model has a field for each question name (must match)
  • Text not required by a page/question such as a header or hint text should be passed as an empty string

Useful documentation (external dependencies)

DfE Form Builder Gem
Alpha Gov UK frontend gem
Hotwire (Turbo/Stimulus)