Skip to content

Commit

Permalink
Merge pull request #31 from Lex2424/Add-core_course_search_courses-AP…
Browse files Browse the repository at this point in the history
…I-function

Add core_course_search_courses API function
  • Loading branch information
Lex2424 authored May 12, 2022
2 parents 53f7dc2 + f34be32 commit eaa3745
Show file tree
Hide file tree
Showing 6 changed files with 199 additions and 1 deletion.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ List all courses
moodle.courses.index
```

Search for a course by name
```
moodle.courses.search('My course')
```

Show a course
```
moodle.courses.show(course_id)
Expand Down
15 changes: 15 additions & 0 deletions lib/moodle_rb/courses.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,21 @@ def index
response.parsed_response
end

# Search courses by (name, module, block, tag)
def search(criteria_value, criteria_name = 'search')
response = self.class.get(
'/webservice/rest/server.php',
{
:query => query_hash('core_course_search_courses', token).merge({
:criterianame => criteria_name,
:criteriavalue => criteria_value
})
}.merge(query_options)
)
check_for_errors(response)
response.parsed_response
end

# required params:
# full_name
# short_name
Expand Down
2 changes: 1 addition & 1 deletion lib/moodle_rb/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module MoodleRb
VERSION = '2.0.0' unless defined?(self::VERSION)
VERSION = '2.1.0' unless defined?(self::VERSION)

def self.version
VERSION
Expand Down
102 changes: 102 additions & 0 deletions spec/cassettes/MoodleRb_Courses/_search/.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
http_interactions:
- request:
method: get
uri: http://localhost:8888/moodle28/webservice/rest/server.php?criterianame=search&criteriavalue=My%20course&moodlewsrestformat=json&wsfunction=core_course_search_courses&wstoken=60fc9c9415259404795094957e4ab32f
body:
encoding: US-ASCII
string: ''
headers:
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
- "*/*"
User-Agent:
- Ruby
response:
status:
code: 200
message: OK
headers:
Accept-Ranges:
- bytes
Access-Control-Allow-Origin:
- "*"
Age:
- '0'
Cache-Control:
- private, must-revalidate, pre-check=0, post-check=0, max-age=0
Content-Type:
- application/json
Date:
- Wed, 11 May 2022 03:43:20 GMT
Expires:
- Thu, 01 Jan 1970 00:00:00 GMT
Pragma:
- no-cache
Server:
- Moodle
X-Cache:
- MISS
X-Clacks-Overhead:
- GNU Terry Pratchett
X-Powered-By:
- Moodle Ninjas
Content-Length:
- '3946'
Connection:
- keep-alive
body:
encoding: UTF-8
string: '{"total":1,"courses":[{"id":316,"fullname":"My large course","displayname":"My
large course","shortname":"MLC","categoryid":8,"categoryname":"VETtrak testing","sortorder":50002,"summary":"Test
course 1<br \/>\nLorem ipsum dolor sit amet, consectetuer adipiscing elit.
Nulla non arcu lacinia neque faucibus fringilla. Vivamus porttitor turpis
ac leo. Integer in sapien. Nullam eget nisl. Aliquam erat volutpat. Cras elementum.
Mauris suscipit, ligula sit amet pharetra semper, nibh ante cursus purus,
vel sagittis velit mauris vel metus. Integer malesuada. Nullam lectus justo,
vulputate eget mollis sed, tempor sed magna. Mauris elementum mauris vitae
tortor. Aliquam erat volutpat.<br \/>\nTemporibus autem quibusdam et aut officiis
debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae
sint et molestiae non recusandae. Pellentesque ipsum. Cras pede libero, dapibus
nec, pretium sit amet, tempor quis. Aliquam ante. Proin in tellus sit amet
nibh dignissim sagittis. Vivamus porttitor turpis ac leo. Duis bibendum, lectus
ut viverra rhoncus, dolor nunc faucibus libero, eget facilisis enim ipsum
id lacus. In sem justo, commodo ut, suscipit at, pharetra vitae, orci. Aliquam
erat volutpat. Nulla est.<br \/>\nVivamus luctus egestas leo. Aenean fermentum
risus id tortor. Mauris dictum facilisis augue. Aliquam erat volutpat. Aliquam
ornare wisi eu metus. Aliquam id dolor. Duis condimentum augue id magna semper
rutrum. Donec iaculis gravida nulla. Pellentesque ipsum. Etiam dictum tincidunt
diam. Quisque tincidunt scelerisque libero. Etiam egestas wisi a erat.<br
\/>\nInteger lacinia. Cum sociis natoque penatibus et magnis dis parturient
montes, nascetur ridiculus mus. Mauris tincidunt sem sed arcu. Nullam feugiat,
turpis at pulvinar vulputate, erat libero tristique tellus, nec bibendum odio
risus sit amet ante. Aliquam id dolor. Maecenas sollicitudin. Et harum quidem
rerum facilis est et expedita distinctio. Mauris suscipit, ligula sit amet
pharetra semper, nibh ante cursus purus, vel sagittis velit mauris vel metus.
Nullam dapibus fermentum ipsum. Pellentesque habitant morbi tristique senectus
et netus et malesuada fames ac turpis egestas. Nemo enim ipsam voluptatem
quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni
dolores eos qui ratione voluptatem sequi nesciunt. Pellentesque sapien. Duis
risus. Mauris elementum mauris vitae tortor. Suspendisse nisl. Integer rutrum,
orci vestibulum ullamcorper ultricies, lacus quam ultricies odio, vitae placerat
pede sem sit amet enim.<br \/>\nIn laoreet, magna id viverra tincidunt, sem
odio bibendum justo, vel imperdiet sapien wisi sed libero. Proin pede metus,
vulputate nec, fermentum fringilla, vehicula vitae, justo. Nullam justo enim,
consectetuer nec, ullamcorper ac, vestibulum in, elit. Quis autem vel eum
iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur,
vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Maecenas lorem.
Etiam posuere lacus quis dolor. Class aptent taciti sociosqu ad litora torquent
per conubia nostra, per inceptos hymenaeos. Curabitur ligula sapien, pulvinar
a vestibulum quis, facilisis vel sapien. Nam sed tellus id magna elementum
tincidunt. Suspendisse nisl. Vivamus luctus egestas leo. Nulla non arcu lacinia
neque faucibus fringilla. Etiam dui sem, fermentum vitae, sagittis id, malesuada
in, quam. Etiam dictum tincidunt diam. Etiam commodo dui eget wisi. Nemo enim
ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia
consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Proin
pede metus, vulputate nec, fermentum fringilla, vehicula vitae, justo. Duis
ante orci, molestie vitae vehicula venenatis, tincidunt ac pede. Pellentesque
sapien.","summaryformat":1,"summaryfiles":[],"overviewfiles":[],"showactivitydates":true,"showcompletionconditions":true,"contacts":[],"enrollmentmethods":["manual"]}],"warnings":[]}'
http_version:
recorded_at: Wed, 11 May 2022 03:42:46 GMT
recorded_with: VCR 2.9.3
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
http_interactions:
- request:
method: get
uri: http://localhost:8888/moodle28/webservice/rest/server.php?criterianame=search&criteriavalue=My%20course&moodlewsrestformat=json&wsfunction=core_course_search_courses&wstoken=
body:
encoding: US-ASCII
string: ''
headers:
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
- "*/*"
User-Agent:
- Ruby
response:
status:
code: 200
message: OK
headers:
Accept-Ranges:
- bytes
Access-Control-Allow-Origin:
- "*"
Age:
- '0'
Cache-Control:
- private, must-revalidate, pre-check=0, post-check=0, max-age=0
Content-Type:
- application/json
Date:
- Wed, 11 May 2022 03:43:20 GMT
Expires:
- Thu, 01 Jan 1970 00:00:00 GMT
Pragma:
- no-cache
Server:
- Moodle
X-Cache:
- MISS
X-Clacks-Overhead:
- GNU Terry Pratchett
X-Powered-By:
- Moodle Ninjas
Content-Length:
- '103'
Connection:
- keep-alive
body:
encoding: UTF-8
string: '{"exception":"moodle_exception","errorcode":"invalidtoken","message":"Invalid
token - token not found"}'
http_version:
recorded_at: Wed, 11 May 2022 03:42:46 GMT
recorded_with: VCR 2.9.3
21 changes: 21 additions & 0 deletions spec/lib/moodle_rb/courses_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,27 @@
end
end

describe '#search', :vcr => {
:match_requests_on => [:body, :path], :record => :once
} do
let(:result) { course_moodle_rb.search('My course') }

specify do
expect(result["total"]).to eq 1
expect(result["courses"]).to be_a Array
end

context 'when using invalid token' do
let(:token) { '' }
specify do
expect{ course_moodle_rb.search('My course') }.to raise_error(
MoodleRb::MoodleError,
'Invalid token - token not found'
)
end
end
end

describe '#create', :vcr => {
:match_requests_on => [:path], :record => :once
} do
Expand Down

0 comments on commit eaa3745

Please sign in to comment.