README.md
# Moodle
[![Build Status](https://travis-ci.org/robertboloc/moodle.png)](https://travis-ci.org/robertboloc/moodle)
[![Code Climate](https://codeclimate.com/github/robertboloc/moodle.png)](https://codeclimate.com/github/robertboloc/moodle)
[![Gem Version](https://badge.fury.io/rb/moodle.png)](http://badge.fury.io/rb/moodle)
Ruby gem to interact with Moodle via web services.
## Table of contents
- [Installation](#installation)
- [Usage](#usage)
- [Protocols](#protocols)
- [Services](#services)
## Installation
```shell
gem install moodle
```
## Usage
To use this gem you must first have configured the moodle web services. To do that use the official documentation.
### Without a token
If you don't have a token, you can create an instance of the client using your username and password.
The client will then obtain a token for you.
```ruby
client = Moodle::Client.new(
:username => 'myusername',
:password => 'secret',
:protocol => 'rest',
:domain => 'http://mydomain/moodle',
:service => 'myservice',
:format => 'json'
)
```
### Using a token
If you already have a token the client can be created without a username and password:
```ruby
client = Moodle::Client.new(
:token => 'b31dde13bade28f25d548a31fa994816',
:protocol => 'rest',
:domain => 'http://mydomain/moodle',
:service => 'myservice',
:format => 'json'
)
```
### Short syntax
When creating the client you can use a shorter and simpler syntax:
```ruby
client = Moodle.new(
:token => 'b31dde13bade28f25d548a31fa994816',
:protocol => 'rest',
:domain => 'http://mydomain/moodle',
:service => 'myservice',
:format => 'json'
)
```
### Global configuration
Configuration can be set globally.
```ruby
# Using a hash
Moodle.configure(
:token => 'b31dde13bade28f25d548a31fa994816',
:protocol => 'rest',
:domain => 'http://mydomain/moodle',
:service => 'myservice',
:format => 'json'
)
# Using a file
Moodle.configure_with(/path/to/yaml/file)
client = Moodle.new
```
Once you have an instance of the client it's only a matter of calling the moodle web services functions.
## Protocols
Moodle implements 4 protocols: AMF, REST, SOAP, XML-RPC. Currently this gem only supports REST.
## Services
These are the currently implemented web services functions:
### Cohorts
#### core_cohort_get_cohorts
Returns cohort details
```ruby
cohorts = client.core_cohort_get_cohorts([1])
cohorts.each do |cohort|
cohort.id # => 1
cohort.name # => Test
cohort.idnumber # => 1
cohort.description # => Test Cohort
cohort.descriptionformat # => 1
end
```
### Courses
#### core_course_get_courses
Retrieve courses details by ids
```ruby
courses = client.core_course_get_courses([2, 3])
courses.each do |course|
course.id # => 2
course.shortname # => T
course.categoryid # => 1
course.categorysortorder # => 10002
course.fullname # => Test
course.idnumber # => TX
course.summary # => test
course.summaryformat # => 1
course.format # => weeks
course.showgrades # => 1
course.newsitems # => 5
course.startdate # => 1393718400
course.numsections # => 10
course.maxbytes # => 0
course.showreports # => 0
course.visible # => 1
course.hiddensections # => 0
course.groupmode # => 0
course.groupmodeforce # => 0
course.defaultgroupingid # => 0
course.timecreated # => 1393693092
course.timemodified # => 1393693092
course.enablecompletion # => 0
course.completionnotify # => 0
course.lang # => en
course.forcetheme # => test
course.courseformatoptions.each do |format|
format.name # => numsections
value # => 10
end
end
```
### Users
#### core_user_get_users_by_field
Retrieve users information for a specified unique field
```ruby
user = client.core_user_get_users_by_field('id', [2])
user.id # => 2,
user.firstname # => Test
user.lastname # => User
user.fullname # => Test User
user.email # => webservicetester@gmail.com
user.firstaccess # => 139240932,
user.lastaccess # => 1392471263
user.profileimageurlsmall # => http://mydomain/moodle/pluginfile.php/5/user/icon/f2
user.profileimageurl # => http://mydomain/moodle/pluginfile.php/5/user/icon/f1
```
#### core_user_get_users
Search for users matching the criteria
```ruby
users = client.core_user_get_users({:email => 'suchemail@test.com'})
users.each do |user|
user.id # => 2,
user.firstname # => Test
user.lastname # => User
user.fullname # => Test User
user.email # => suchemail@test.com
user.firstaccess # => 139240932,
user.lastaccess # => 1392471263
user.profileimageurlsmall # => http://mydomain/moodle/pluginfile.php/5/user/icon/f2
user.profileimageurl # => http://mydomain/moodle/pluginfile.php/5/user/icon/f1
end
```
### Webservices
#### core_webservice_get_site_info
Return some site info / user info / list web service functions
```ruby
info = client.core_webservice_get_site_info
info.sitename # => Webservice test
info.username # => test
info.firstname # => Test
info.lastname # => Webservice
info.fullname # => Test Webservice
info.lang # => en
info.userid # => 3
info.siteurl # => http://mydomain/moodle
info.userpictureurl # => http://mydomain/moodle/pluginfile.php/15/user/icon/f1
info.functions.each do |f|
f.name # => core_user_get_users_by_field
f.version # => 2013111800.09
end
info.downloadfiles # => 0
info.uploadfiles # => 0
info.release # => 2.6+ (Build: 20140110)
info.version # => 2013111800.09
info.mobilecssurl # => ""
```