Workbook
From mi-linux
XML and Web Services >> Workbook
Ruby install on a USB stick
- Download the One-click ruby installer from rubyforge http://rubyforge.org/frs/?group_id=167 (warning this is a big file!). The one I used was ruby186-25.exe but there may be a later version available. To be able to run the whole environment from a USB stick I’d really recommend you have about 500MB free (maybe it’s time to buy a new stick?)
- Double-click on the installer, after clicking next a few times, a screen like the one shown below is displayed.
- Ensure you install on your USB stick, not the C drive (check the drive letter, as shown. Mine is J:, yours may vary)
- Once Ruby is installed, open a cmd prompt (enter cmd into the ‘run’ box from the start menu) change to your ruby directory (e.g. j:\ruby ) and enter the follow command:
- gem install rails -y
- You may need to add the ruby directory to your system path, the setenv.bat file discussed in class will do this – the command is:
- set path=%PATH%;j:\ruby\bin;
- Remember to change the drive letter (j: in the example above) to match the letter assigned to your USB stick. This will probably be different for each system – it’s a windows foible – what a wonderful system :) (maybe you should try Linux? – ok Rant over.) This is why we suggested in the lecture that you put the command above in its own file, which we called setenv.bat, so that it’s easy to change.
- The gem command should install rails, see below for a database.
Exercises
Create one (or more) programs using ruby that can perform the following tasks:
- Create a program that can take a phrase as input and print it out in reverse.
- Create a program that can take a phrase as input and output it’s length as a number
- Create an application that can encrypt any phrase you enter using the rot13 algorithm
- Create an application that can take a temperature in F or C and convert to the other form
SQLite install on Windows
- Download the sqlite package from http://sqlite.org/download.html (you will need a file called sqlitedll-3_x_y.zip where x and y are numbers (they change, unfortunately). For reference I used sqlitedll-3_3_17.zip when I downloaded it. The download page is shown below:
- When you have downloaded the file, unzip it and extract it to a directory called sqlite on your usb stick (you may need to create this directory first.) You should then copy the sqlite3.dll file to your ruby\bin directory.
- Next use the gem command again to install the ruby-sqlite bindings so that ruby can use sqlite. The command is given below:
- gem install sqlite3-ruby (choose option 1 from the menu)
- Rails apps should be stored in their own directory – I tend to call it railsapps. Create this directory on your usb stick
- To test that rails is working properly type the following commands:
- cd railsapps
- rails mytest --database=sqlite3
- cd mytest
- ruby script/server
- Now start IE (ugh!?!?) or Firefox (yep!) and enter localhost:3000 into the URL bar, you should see the screen below. If not, try entering http://localhost:3000/ instead.
MVC & Controllers
- Using the instructions given above, create a new application called myapp, connected to a sqlite database, and cd into the directory.
- Create a controller using ruby script/generate controller Say
- cd into the app\controllers directory and open the say_controller.rb skeleton.
- Add the hello class as shown below:
- Create a new view template in the app\views\say directory, called hello.rhtml
- Code is given below:
- Test the above, what do you see?
- Add a goodbye method to the say controller using the instructions above.
- Create a goodbye view to accompany the goodbye method, but change the message to “see you later”
- Modify the hello view to have a link to the goodbye view, example below:
- What does the h helper do?
- Create a link from goodbye back to hello
- Investigate the formatting options/helpers available to make the time display more manageable.
Models and ORM
UPDATE: this has changed in Rails 2.0!! If you are using the latest version of rails do the following:
- create a model at the same time you scaffold by (for example) - ruby script/generate scaffold student name:string s_no:integer course:string
This creates a model called student (and by convention a db table called students) with a name of type string, a s_no that is an integer and a course that is a string. Before you can use this model - you need to create the table, this you do by running rake db:migrate If all is successful when you next run your application you will have 4 pages created automatically to create, edit, update and destroy the contents of your model/db!
- Start the application with ruby script/server, start a browser (firefox?) and navigate to http://localhost:3000/students (based on the example above)
- Add some data by clicking on ‘new student’ and filling in the boxes that are displayed – remember to click ‘create’ after each entry.
- What happens if you leave any field blank? Is this what you require?
- You can add validation by editing the ruby file that wraps the database – in this case student.rb – found at K:\Documents\railsapps\myapp\app\models\student.rb. Edit this file to read as below:
(EDIT) - IMAGE ATTACHED TO REFLECT WHAT IS WRITTEN IN INSTRUCTIONS
- Create a new entry, but leave the stud_no and course fields blank. What happens? Is this a useful function?
- Experiment with the validation helpers to see if you can ensure that the student number lies within a certain range.
Views & templates
- Create a controller called info using the ruby script command (see above). Edit the file to be as below:
- This code retrieves the student info from your database and stores it in a hash called students (the @ represents an instance variable, which keeps a classes state). This will allow us to use the data in a view.
- Next create a new view with the extension rxml – this tells rails it is a ‘builder’ class and it will automatically associate it with the builder library. Builder allows you to use ruby code to create xml files. Call the file stulist.rxml (to associate it with the controller we have already) and edit it to contain the following
- This will create an xml file as shown below (depending on the data stored):
- The next task is to create a form and utilise the data captured through it.