Exciting opportunity for an innovative Ruby on Rails developer to contribute to the development of a concept web application, and provide inputs into the future development strategy.
This web application is *not* a commercial or start-up project, but an opportunity to apply your coding skills to help address important social and environmental challenges.
A bare bones system includes the Twitter Bootstrap framework, Devise for authentication, and is able to import data from Excel spreadsheets uploaded from the browser or via email. The app is deployed on Heroku, and uses Github for versioning.
Your job is to:
1. Implement User roles and abilities. The roles required are: public, staff, supervisor, administrator. You may use Cancan or another solution, but will first briefly explain your approach. You will implement the following abilities:
- All (including guest) can view summarised data (i.e., graphs described below);
- Users can view and edit data they own;
- Staff can view or edit data they own, and view extended profiles for Users that share the same district;
- Supervisor can view and edit data from staff who share the same office;
- Administrator can view and edit all records.
2. The app requires two distinct user groups: Members and Officers. A User model already exists containing shared attributes (e.g., username, password). Members require additional attributes (e.g., village_id). Officers require different additional attributes (e.g., office_id). You will design and implement a solution. You may use STI or another approach, but will first briefly explain your method.
3. The app uses Highcharts to render three graphs. You will review and update the Ruby calculations on which these graphs are based. This will involve grouping data based on e.g. date, and then performing additional calculations (e.g., count, average).
4. A Village model includes latitude and longitude fields. You will add a clickable map to the Village index view. When village markers are clicked they should display a popup. The popup contents should be defined within a partial. This partial should contain Village.name as a title. You might decide to use GoogleMaps4Rails or another solution, but you will first briefly explain your approach.
5. A Graticule model contains details of map grid squares and polygons. You will propose and describe a solution to display this information on a map. This map should display clickable squares/areas that display a popup when clicked. This task differs from Task 4 in that the data to be mapped are polygons not points. A map and database of coordinates are available as references to help with this task. You will describe a solution, including performance considerations and time required, but will not implement this feature.
6. You will propose a basic data validation strategy. This strategy must detect data validation errors in imported Spreadsheets, and provide feedback to the User. You will describe the logic and UX of your solution, including time required to implement, but will not implement this solution.
You will fork this project from Github, work on your own repository, and submit pull requests for each task (topic branch) completed.
I estimate that the following time is required to complete these tasks:
Start up and familiarisation - 1 hour
Task 1 - 1 hour
Task 2 - 1 hour
Task 3 - 2 hours
Task 4 - 2 hours
Task 5 - 2 hours
Task 6 - 2 hours
Total - 10 hours
Your application should include your proposed fee, your relevant experience and skills, and an estimated completion data.
(NB While I prefer a test driven approach, unit tests are not required for these tasks.)