Random 'concerns' folders and '.keep' files

GitVersion Control

Git Problem Overview


I am learning rails.

Somewhere along the line, I noticed that seemingly random folders and files are appearing in my rails app's directory. In some folders there is a concerns folder with a .keep file inside it. The .keep file appears to be empty. In other folders there is no concerns folder but an empty .keep file is present.

Does anyone know what the deal with these files/folders is?

Git Solutions


Solution 1 - Git

.keep files are 0 byte files that are there to stop empty folders from being ignored by all sorts of processes. Nothing to worry about.

Solution 2 - Git

.keep files are especially helpful when you want to commit empty directories with git.

Fun fact, the name .keep or .gitkeep is meaningless. you can call the file .foo for the same effect, its merely a readable convention.

The .keep files are also there to aid portage from one vcs to another, preventing the deletion of important directories when you un-merge something that would cause those directories to be empty.

For example, consider a script which attempts to cd dir into a directory that is untracked by git.

It's a software design paradigm which seeks to decrease the number of decisions that developers need to make, gaining simplicity, but not necessarily losing flexibility.

Solution 3 - Git

Concerns is a simple but powerful concept. It exists for code reusability. Basically, the idea is to extract common and / or context specific chunks of code in order to clean up the models and avoid them getting too fat and unmanageable.

I would like to specify explicitly that you should use service objects to provide functionality that's not the concern of the specific object. Eg a organisation has many users. Now the admin of organisation needs to export a CSV of all users for this organisation. This code can be placed in organisation model but since its not the responsibility of the organisation object, this code should be placed in a class where u just pass the organisation object and it returns the CSV of all users.

 class Services::GenerateCsv
     def self.get_users org
         #add logic the fetch users for the org and generate the CSV and return the CSV data
     end
 end

Whenever you need CSV generation, u can place to that logic in the above class. This approach keeps the object (in this case, the organisation model) clean from the code that shouldn't be its responsibility. A general principle that I follow is: if the code it's modifying the self object, move the code to a service object.

Note: Your question was regarding concerns but I thought of adding some extra stuff that I follow to keep the code base clean and manageable since it might help fellow programmers. That above approach is debatable.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlex VallejoView Question on Stackoverflow
Solution 1 - GitDickieBoyView Answer on Stackoverflow
Solution 2 - Gitlfender6445View Answer on Stackoverflow
Solution 3 - Gitprasad.suraseView Answer on Stackoverflow