Skip to content

Eighteen versions (gradually implemented) of a Web and REST API app made with Ruby on Rails that aims to get the most out of the MVC/Rails Way.

Notifications You must be signed in to change notification settings

architecture/rails-way-app

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

MENU README | How to run locally | REST API doc | Web app screenshots | Branch descriptions

🚆 Rails Way App

Eighteen versions (gradually implemented) of a Web and REST API app made with Ruby on Rails that aims to get the most out of the MVC/Rails Way.

📚 Table of contents

📢 Disclaimer

Ruby on Rails is a highly productive MVC framework whose primary value proposition is to be a one-person framework. In other words, to empower and make individuals as productive as entire teams.

However, this proposal applies not only to individuals but also to giant teams. Shopify, for example, has thousands of developers working on a monolithic and modular application with millions of lines of code.

The main challenge of any medium to colossal system is to accommodate its complexity well. As the code grows, we need to have the freedom and capacity to separate responsibilities in the best possible way.

The project's main objective is to demonstrate different approaches to improving the design of a Rails application without compromising its conventions and structure.

It is a Web and REST API app with over 4,000 lines of code (implementation + tests) and was implemented in 18 versions. This is to gradually demonstrate the pros and cons of each approach. Enjoy! ✌️😊

⬆ back to top

🙌 Repository branches

This repository has eighteen branches that represent the application's evolution.

Every branch contains a README.md which explains the changes made in the codebase. However, you can access the documentation of all branches in the docs/03_BRANCH_DESCRIPTIONS.md file.

LOC / GRADE Branch
1326 / 89.23 010-one-controller-per-entity
1350 / 90.34 011-one-controller-per-entity_user-concerns
1342 / 91.34 020-multi-controllers-per-entity
1361 / 91.56 021-multi-controllers-per-entity_rest-actions-only
1361 / 91.56 030-resources-within-namespaces
1355 / 91.56 031-resources-within-namespaces_base-controllers
1355 / 91.56 032-resources-within-namespaces_partials-grouped-by-context
1356 / 91.56 033-resources-within-namespaces_mailers-under-entity-context
1356 / 91.56 034-resources-within-namespaces_nested-namespaces
1356 / 91.56 035-resources-within-namespaces_singular_resources
1359 / 91.56 040-models-within-namespaces
1462 / 94.04 050-separation-of-entry-points
1456 / 95.56 051-separation-of-entry-points_fat-models
1504 / 95.63 060-domain-model_account-member-poro
1519 / 95.68 061-domain-model_user-token-poro
1526 / 95.78 062-domain-model_task-constants
1563 / 95.77 063-domain-model_user-operations
1613 / 95.81 070-orthogonal-models

The following commands were used to generate the LOC and GRADE reports:

  • LOC (lines of code): bin/rails stats
  • GRADE (code quality): bin/rails rubycritic

⬆ back to top

👋 About

Rodrigo Serradura created this project. He is the creator of Solid Process, among other similar projects, such as solid-rails-app, which consists of demonstrating (in 12 gradual versions) how the implementation of processes as code (based on the concept of use cases) can add value to a Ruby and Rails codebase.

In the Rails community, we have people at different stages of their careers and companies in various phases (validating ideas, refining, scaling products); the goal here is to help them on their journey. By sharing knowledge and practical references.

Ruby and the Rails framework is excellent, and my mission here is to try to add value to such great tools (Ruby and Rails rocks!!! 🤘😎).

⬆ back to top

About

Eighteen versions (gradually implemented) of a Web and REST API app made with Ruby on Rails that aims to get the most out of the MVC/Rails Way.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published