The Sword2Ruby gem provides Sword client functionality when run against a Sword 2.0 compliant server. It eases integration of Ruby applications with Sword servers, taking care of things like authentication, deposit-receipts and the parsing of Sword tags.
It was developed as part of the JISC Sword 2.0 project. For more information on Sword, see: http://www.swordapp.org/. The Sword 2 specification can be found at: http://sword-app.svn.sourceforge.net/viewvc/sword-app/spec/tags/sword-2.0/SWORDProfile.html?revision=377
This code lives at https://github.com/swordapp/sword2ruby
In order to use the Sword2Ruby gem, you will require:-
- A Sword 2.0 compliant server, such as Simple Sword Server 2 by Richard Jones: https://sword-app.svn.sourceforge.net/svnroot/sword-app/sss/branches/sss-2/
- The atom-tools gem (version 2.0.5): https://github.com/bct/atom-tools/
- The hpricot gem (version 0.8.6): https://github.com/hpricot/hpricot
- Ruby 1.9.3
- Bundler 1.0.21
To install Sword2Ruby and its associated dependencies, make sure you have Bundler installed (gem install bundler). Then update your project's Gemfile to include a reference to Sword2Ruby:
gem 'sword2ruby'
Then, on the command line inside your project folder, run to install all necessary gems:
bundle install
Finally, ensure you require a reference to the gem in your code:
require 'sword2ruby'
Refer to the Rdoc for full details of all the classes and their methods: http://www.rubydoc.info/github/CottageLabs/sword2ruby/master/frames
Make sure you have Ruby 1.9.3 (or perhaps later) running, and then run irb to enter the Ruby command line:
$ ruby -v ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0] $ irb
Now try and run the following statements to post a file to Sword and then update its title:-
#Example Sword2Ruby walkthrough #Require the Sword2Ruby library require 'Sword2Ruby' #Print out the version number puts "Running Sword2Ruby version #{Sword2Ruby::VERSION}" #Define the authentication credentials for the connection sword_user = Sword2Ruby::User.new('sword', 'sword') #Define the connection object using the username and password connection = Sword2Ruby::Connection.new(sword_user) #Get the Service Document service = Atom::Service.new('http://localhost:8080/sd-uri', connection) #Print out some properties for the Service puts "service.sword_version: #{service.sword_version}" puts "service.sword_max_upload_size: #{service.sword_max_upload_size}" puts "service.workspaces.count: #{service.workspaces.count}" puts "service.collections.count: #{service.collections.count}" #Get a collection collection = service.collections.last #Post a file to the collection deposit_receipt = collection.post_media!(:filepath=>"test.txt", :content_type=>"text/plain") #Print out the deposit receipt puts "deposit_receipt.has_entry: #{deposit_receipt.has_entry}" puts "deposit_receipt.entry.to_s: #{deposit_receipt.entry.to_s}" #Update the title using the Deposit Receipt's title deposit_receipt.entry.title = "New Title" deposit_receipt.entry.put! #Print out the URL to the webpage for the item puts "deposit_receipt.entry.alternate_uri: #{deposit_receipt.entry.alternate_uri}"