AWD: Project Requirements
Due: Start of Lab in Week 10
Significant changes are marked in green text on
yellow.
Design your own web application using the Rails framework.
At a minimum, your web application must satisfy the following requirements:
- You must have at least three controllers. For single-student projects,
each controller must have at least two actions. For pair projects, you
must have at least 10 actions overall spread through your controllers;
you can either get to this level by adding more controllers or more
actions to existing controllers.
- You must have several model classes (tables).
- Single-student projects: at least 4 model classes with at least 4,
useful methods (4 methods overall - some model classes
may not need methods)
- Pair projects: at least 6 model classes with at least 8, useful
methods (8 methods overall)
- You must make use of relationships between objects (such as orders
containing order lines).
- You must enter (useful) seed data. I will use
this data as a starting point to evaluate your solution.
- You must implement at least 3 tests. For multi-person
projects, each
person is to write three tests. The tests need not completely cover a
feature, but they should have some reasonable chance of failing.
- You may use the scaffolding code as one of your controllers, but you
must add enough CSS and functionality that it does not look like thr
out-of-the-box scaffolding. You can use additional scaffolding in your
project, but these cannot count towards your minimum number of
controllers.
- Make sure your system has some non-trivial logic to it such as
interesting interactions between controllers or computing statistics across
multiple objects.
- If security is an integral part of your project, you must add passwords
but may use clear-text passwords. If security is only needed for
administrative tasks such as adding new users or item categories, you
need not implement passwords for this security. However, scaffolding you
set up for these administrative tasks cannot count as one of your
required controllers.
- Do not implement login forms unless it's in addition to a signficant
amount of other functionality. Login is not interesting: it consists of
reading and comparing strings.
- Use embedded JavaScript in at least one non-trivial application such as
making sections appear without reloading a form. However, do not put
signficant business logic into JavaScript; critical logic must be on
the server in Rails applications, and this project is more about
Ruby on Rails than JavaScript.
- Introduce enough CSS to make your system reasonably well
formatted. Extensive CSS and JavaScript support will not improve your
grade, but you do need to have some.
- Modify the file
your_project/public/index.html so it contains basic
instructions and links for accessing your rails project. This file will
contain pure HTML code (no embedded Ruby), and must contain the following
basic pieces of information:
- Who wrote the application (your names).
- What the system does.
- Any interesting features about the system.
- A link to the starting point.
- Links to any critical scaffolding (code needed to maintain lists or do
other operations that would be done only by administrators).
- A list of valid usernames and passwords (if appropriate).
- A checklist showing that you meet all requirements.
Treat this project like a term paper: barely covering the requirements with a
barely adequate implementation may get you a passing score, but to get full
credit you need to put in the effort to make sure your solution works well
and is well-engineered. In particular, be sure you use good OO principles
(solid abstractions with high cohesion, minimize the coupling between
classes) and make effective use of the Rails framework.
Possible Projects
If you are having difficulties coming up with your own project, here are
some potential ideas:
- A calendar tool which allows the user to enter todo items for specific
dates, lists upcoming events, and allows the user to todo items as
completed. You would need to augment this with such features as
categorizing todo items by a task and listing both the done and not done
items for a specific task. You may also need to add support for multiple
users to make the problem large enough.
- A meeting system which allows users to post potential meetings and sign
up for existing meetings. You'd probably want to add a feature to list
meetings by keywords.
- An animal lost&found system: allow users to post pictures and
descriptions of lost animals (and information such as where the animal was
last seen and how to contact the owner), and allow other users to search by
cities (where the animal was last seen) and possibly even animal
characteristics (dog vs. cat vs. other, color, hair length, etc.). There
should be a way to mark animals as having been found - at the very least,
such a feature would be an important marketing tool for your system!
- A system to record time spent on various tasks. Allow users to define
a set of tasks, probably organized into projects. When a user wants to
record time, she or he would log in to the project, pick a task, and click
on a "start timer" link. When done, the user would click on a "stop
timer" link. The system would then save the start and stop times to the
database. You would then provide reports to show how much time was spent
on each task by either all people in a particular project as well as by the
individual user.
Certainly do not hesitate to talk to your instructor if you need to develop
ideas or get help in general.
Submitting
You will submit your solutions in BitBucket. In
particular, check in all sources needed to run your project (but not
sqlite, tmp, and log files) to the same BitBucket repository you
created for lab 2. Make sure your code is in the subfolder project
(in all lower case) to keep it separate from any other code in your
repository. Also, check in a file Sample.pdf which
includes screen shots from all forms and enough additional text to
capture what the system does. lso capture evidence (such as a screen
shot) that the tests pass. The document does not need to be very
formal - simple notes are adequate, and feel free to add annotations to
your screen shots if you find it easier to explain what the system
does.