Features Anyone can create an account by filling out a form that comes up on the homepage of the app.  Any user with an account can post. A category must be associated with each post; students can select from categories created by the administrator. Students are also welcome to create and use their own tags.  Anyone (account or not) can search by user or content or category or tag, by using the Search box on the homepage. Also, (s)he can see all posts associated with that category when (s)he searches by category. This way if the category is homework1 user can see all posts associated with homework1.  Any logged-in user can edit/delete their own post/comment. Any logged-in user can “up vote” any post or comment. The system maintains a count of votes for each post. When the system displays a post or comment, next to the post or comment should be the number of votes. You cannot vote up your own posts or comment. You cannot vote up the same post or comment more than once. Any logged-in user can reply to a post (but not to a reply; i.e., only to a depth of 1).                    a.   A user can also vote up a reply (by someone else).     The “most active” questions are displayed at the top. “Most active” is determined by the combined number of votes on the posts and comments on that post, as well as time elapsed.  For example, you can assign each question a fixed weight, which decays over time. Use this weight along with the number of votes to calculate the final metric which decides the most active questions.  Feel free to design your own metric, along these general lines.  For example, you may wish to use a metric which eventually decays to 0, at which time the question is hidden. If a user logs in as an admin, (s)he sees a different interface from what non-admins see.       There should be a ‘super’ admin in system that his role of admin cannot be removed. There should be code to handle that this user cannot be deleted Administrators can create other admin accounts. An administrator can delete his/her own account, but no one other admin’s. Administrators can see the list of users with their credentials Administrators can delete posts users View reports on post activity during certain time period, including number of votes for each post such that it is possible to use this report to assign grades. For example, an admin can view reports from past 10/15/... days. An administrator can create categories for posts.  . Tables Tables must not be created directly in SQLite. Instead, you must use the db:migrate functionality of rails to create your database tables. Recall that Rails creates three versions of each db: production, testing, and development.  You should have a test target that populates the database with sufficient sample data to allow for testing. You should also have a production target that initializes the database in an empty state. The use of the development target is left up to you (you don’t have to submit one).  We expect your application to have at least the following tables: users posts votes (this is a join table between users and posts) category Testing You must submit unit, functional and integration tests for all classes.  The tests must cover all important branches of the code.  You may use Test::Unit or, for extra credit, RSpec.  If you use one of the GUI testing frameworks (such as Webrat) covered in Lecture 9, you will receive 10% extra credit.  Software Requirements You are required to use the following versions: Ruby 1.9.3 Rails 3.x (and associated dependencies). Do not use Rails 2.x for this project. SQLite 3.7.2 (on Windows, place the DLL and DEF file in C:\Ruby192\bin)  Do not use any additional Ruby Gems without explicit approval from  csc517-sup@wolfware.ncsu.edu.  During the course of the project, you will be assigned a port number. Your Ruby on Rails application must run using the following command:  ruby script/server server -p port  where port is your assigned port. Until you are assigned a port you can use the default port of 3000. During server initialization, you will be presented with a message similar to the following:  => Rails 3 application starting on http://0.0.0.0:3001  You can use this to verify that you have the correct version of Rails. Deliverables Test your code in a VCL image, to be specified later. Submit the program code, including internal documentation in the form of comments and a README file via Expertiza.