From f7c7e002997fda82406e29f5a7d381eb8b60f484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pol=C3=ADvka?= Date: Thu, 5 Mar 2015 20:58:21 +0100 Subject: [PATCH 1/5] Semester resource. Minor documentation update. --- README.md | 29 ++++- lib/kosapi_client/api_client.rb | 1 + lib/kosapi_client/entity.rb | 1 + lib/kosapi_client/entity/semester.rb | 11 ++ lib/kosapi_client/resource.rb | 1 + .../resource/semesters_builder.rb | 115 ++++++++++++++++++ spec/integration/semesters_spec.rb | 46 +++++++ 7 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 lib/kosapi_client/entity/semester.rb create mode 100644 lib/kosapi_client/resource/semesters_builder.rb create mode 100644 spec/integration/semesters_spec.rb diff --git a/README.md b/README.md index ba2b5d3..7caefe6 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ And then execute: ```ruby # Creates a new instance of client with OAuth2 credentials -client = KOSapiClient.new(OAUTH_CLIENT_ID, OAUTH_SECRET) +client = KOSapiClient.new({client_id: OAUTH_CLIENT_ID, client_secret: OAUTH_SECRET}) # Retrieves first page of all course events course_events_page = client.course_events @@ -40,13 +40,38 @@ parallels_page = client.parallels.offset(0).limit(50).query('course.department' client.parallels.find(42).related ``` +## How to extent API functionality + +### Add resource + +1. Add concrete resource builder to `lib/kosapi_client/resource/`. Use current resources as an inspiration. +2. Register resource in `lib/kosapi_client/api_client.rb` like: + +```ruby +module KOSapiClient + + class ApiClient + include ResourceMapper + + # accessible resources definition + resource :courses + resource :course_events + resource :parallels + resource :exams + resource :semesters + resource :new_resource + + attr_reader :http_client + ... +``` + ## Configuration KOSapiClient can be created and configured in two ways. The simple way is to call `KOSapiClient.new`, which returns ApiClient instance. ```ruby -client = KOSapiClient.new(OAUTH_CLIENT_ID, OAUTH_SECRET) +client = KOSapiClient.new({client_id: OAUTH_CLIENT_ID, client_secret: OAUTH_SECRET}) client.parallels.find(42) ``` diff --git a/lib/kosapi_client/api_client.rb b/lib/kosapi_client/api_client.rb index 29f4880..5651764 100644 --- a/lib/kosapi_client/api_client.rb +++ b/lib/kosapi_client/api_client.rb @@ -8,6 +8,7 @@ class ApiClient resource :course_events resource :parallels resource :exams + resource :semesters attr_reader :http_client diff --git a/lib/kosapi_client/entity.rb b/lib/kosapi_client/entity.rb index 34c7ff1..513ed02 100644 --- a/lib/kosapi_client/entity.rb +++ b/lib/kosapi_client/entity.rb @@ -7,6 +7,7 @@ require 'kosapi_client/entity/data_mappings' require 'kosapi_client/entity/base_entity' require 'kosapi_client/entity/result_page' +require 'kosapi_client/entity/semester' require 'kosapi_client/entity/course_event' require 'kosapi_client/entity/course' require 'kosapi_client/entity/timetable_slot' diff --git a/lib/kosapi_client/entity/semester.rb b/lib/kosapi_client/entity/semester.rb new file mode 100644 index 0000000..b35a812 --- /dev/null +++ b/lib/kosapi_client/entity/semester.rb @@ -0,0 +1,11 @@ +module KOSapiClient + module Entity + class Semester < BaseEntity + + map_data :start_date, Time + map_data :end_date, Time + map_data :name, MLString + end + end +end + diff --git a/lib/kosapi_client/resource.rb b/lib/kosapi_client/resource.rb index 4e3e1d2..b90cdd1 100644 --- a/lib/kosapi_client/resource.rb +++ b/lib/kosapi_client/resource.rb @@ -3,6 +3,7 @@ require 'kosapi_client/resource/parallels_builder' require 'kosapi_client/resource/exams_builder' require 'kosapi_client/resource/course_events_builder' +require 'kosapi_client/resource/semesters_builder' module KOSapiClient module Resource diff --git a/lib/kosapi_client/resource/semesters_builder.rb b/lib/kosapi_client/resource/semesters_builder.rb new file mode 100644 index 0000000..143b1eb --- /dev/null +++ b/lib/kosapi_client/resource/semesters_builder.rb @@ -0,0 +1,115 @@ +module KOSapiClient + module Resource + class SemestersBuilder < RequestBuilder + ### + # Semestry: + # GET /semesters => client.semesters.items + # GET /semesters/{code} => client.semesters.find({code}) + # GET /semesters/current => client.semesters.current + # GET /semesters/next => client.semesters.next + # + # TODO: + # GET /semesters/prev + # GET /semesters/scheduling + ### + + ### + # GET /semesters + # Vrátí všechny semestry. + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/ + # + # Typ obsahu: Semester + # Parametry: fields, lang, limit, locEnums, multilang, offset, orderBy, query + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesters + ## + # Example: + # client.semesters.items + ### + + ### + # GET /semesters/{code} + # Vrátí konkrétní semestr podle jeho KOSího kódu. + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/{code} + # + # Typ obsahu: Semester + # Proměnné: {code} kód semestru + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesterscode + ## + # Example: + # client.semesters.find({code}) + ### + + ### + # GET /semesters/current + # Vrátí aktuální semestr, ve kterém probíhá výuka (v KOS parametr AKTSEM). + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/current + # Typ obsahu: Semester + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesterscurrent + ## + # Example: + # client.semesters.current + ### + def current + find 'current' + end + + ### + # GET /semesters/next + # Vrátí příští semestr, tj. následující po aktuálním. + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/next + # + # Typ obsahu: Semester + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersnext + ## + # Example: + # client.semesters.next + ### + def next + find 'next' + end + + ### + # TODO + # GET /semesters/prev + # Vrátí předchozí semestr. + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/prev + # + # Typ obsahu: Semester + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersprev + ## + # Example: + # + ### + + ### + # TODO + # GET /semesters/scheduling + # Vrátí semestr, ve kterém probíhají zápisy do rozvrhu (v KOS parametr SEMPROROZ). + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/scheduling + # + # Typ obsahu: Semester + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersscheduling + ## + # Example: + # + ### + end + end +end diff --git a/spec/integration/semesters_spec.rb b/spec/integration/semesters_spec.rb new file mode 100644 index 0000000..641ffcf --- /dev/null +++ b/spec/integration/semesters_spec.rb @@ -0,0 +1,46 @@ +require 'spec_helper' + +describe 'Semesters resource', :vcr, :integration do + + let(:credentials) { { client_id: ENV['KOSAPI_OAUTH_CLIENT_ID'], client_secret: ENV['KOSAPI_OAUTH_CLIENT_SECRET'] } } + subject(:client) { KOSapiClient.new(credentials) } + + it 'fetches semesters list' do + page = client.semesters.offset(0).limit(2) + expect(page.items.count).to eq 2 + end + + it 'parses entry ID properly' do + page = client.semesters + semester = page.items.first + expect(semester.id).not_to be_nil + end + + it 'parses updated properly' do + page = client.semesters + semester = page.items.first + expect(semester.updated).not_to be_nil + end + + it 'parses author properly' do + page = client.semesters + semester = page.items.first + expect(semester.author.name).not_to be_nil + end + + it 'parses entry link properly' do + page = client.semesters + semester = page.items.first + expect(semester.link).not_to be_nil + expect(semester.link.link_href).not_to be_nil + expect(semester.link.link_rel).not_to be_nil + end + + it 'fetches current semester' do + semester = client.semesters.current + expect(semester.start_date).not_to be_nil + expect(semester.end_date).not_to be_nil + + expect(Time.new).to be_between(semester.start_date, semester.end_date) + end +end From 42c6700ff85b28cf4ec7393dd68cfef572c33b2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pol=C3=ADvka?= Date: Thu, 5 Mar 2015 20:58:21 +0100 Subject: [PATCH 2/5] Semester resource. Minor documentation update. --- README.md | 29 ++++- lib/kosapi_client/api_client.rb | 1 + lib/kosapi_client/entity.rb | 1 + lib/kosapi_client/entity/semester.rb | 11 ++ lib/kosapi_client/resource.rb | 1 + .../resource/semesters_builder.rb | 115 ++++++++++++++++++ spec/integration/semesters_spec.rb | 46 +++++++ 7 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 lib/kosapi_client/entity/semester.rb create mode 100644 lib/kosapi_client/resource/semesters_builder.rb create mode 100644 spec/integration/semesters_spec.rb diff --git a/README.md b/README.md index ba2b5d3..7caefe6 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ And then execute: ```ruby # Creates a new instance of client with OAuth2 credentials -client = KOSapiClient.new(OAUTH_CLIENT_ID, OAUTH_SECRET) +client = KOSapiClient.new({client_id: OAUTH_CLIENT_ID, client_secret: OAUTH_SECRET}) # Retrieves first page of all course events course_events_page = client.course_events @@ -40,13 +40,38 @@ parallels_page = client.parallels.offset(0).limit(50).query('course.department' client.parallels.find(42).related ``` +## How to extent API functionality + +### Add resource + +1. Add concrete resource builder to `lib/kosapi_client/resource/`. Use current resources as an inspiration. +2. Register resource in `lib/kosapi_client/api_client.rb` like: + +```ruby +module KOSapiClient + + class ApiClient + include ResourceMapper + + # accessible resources definition + resource :courses + resource :course_events + resource :parallels + resource :exams + resource :semesters + resource :new_resource + + attr_reader :http_client + ... +``` + ## Configuration KOSapiClient can be created and configured in two ways. The simple way is to call `KOSapiClient.new`, which returns ApiClient instance. ```ruby -client = KOSapiClient.new(OAUTH_CLIENT_ID, OAUTH_SECRET) +client = KOSapiClient.new({client_id: OAUTH_CLIENT_ID, client_secret: OAUTH_SECRET}) client.parallels.find(42) ``` diff --git a/lib/kosapi_client/api_client.rb b/lib/kosapi_client/api_client.rb index 8252f36..468e9b9 100644 --- a/lib/kosapi_client/api_client.rb +++ b/lib/kosapi_client/api_client.rb @@ -8,6 +8,7 @@ class ApiClient resource :course_events resource :parallels resource :exams + resource :semesters attr_reader :http_client diff --git a/lib/kosapi_client/entity.rb b/lib/kosapi_client/entity.rb index 34c7ff1..513ed02 100644 --- a/lib/kosapi_client/entity.rb +++ b/lib/kosapi_client/entity.rb @@ -7,6 +7,7 @@ require 'kosapi_client/entity/data_mappings' require 'kosapi_client/entity/base_entity' require 'kosapi_client/entity/result_page' +require 'kosapi_client/entity/semester' require 'kosapi_client/entity/course_event' require 'kosapi_client/entity/course' require 'kosapi_client/entity/timetable_slot' diff --git a/lib/kosapi_client/entity/semester.rb b/lib/kosapi_client/entity/semester.rb new file mode 100644 index 0000000..b35a812 --- /dev/null +++ b/lib/kosapi_client/entity/semester.rb @@ -0,0 +1,11 @@ +module KOSapiClient + module Entity + class Semester < BaseEntity + + map_data :start_date, Time + map_data :end_date, Time + map_data :name, MLString + end + end +end + diff --git a/lib/kosapi_client/resource.rb b/lib/kosapi_client/resource.rb index 4e3e1d2..b90cdd1 100644 --- a/lib/kosapi_client/resource.rb +++ b/lib/kosapi_client/resource.rb @@ -3,6 +3,7 @@ require 'kosapi_client/resource/parallels_builder' require 'kosapi_client/resource/exams_builder' require 'kosapi_client/resource/course_events_builder' +require 'kosapi_client/resource/semesters_builder' module KOSapiClient module Resource diff --git a/lib/kosapi_client/resource/semesters_builder.rb b/lib/kosapi_client/resource/semesters_builder.rb new file mode 100644 index 0000000..143b1eb --- /dev/null +++ b/lib/kosapi_client/resource/semesters_builder.rb @@ -0,0 +1,115 @@ +module KOSapiClient + module Resource + class SemestersBuilder < RequestBuilder + ### + # Semestry: + # GET /semesters => client.semesters.items + # GET /semesters/{code} => client.semesters.find({code}) + # GET /semesters/current => client.semesters.current + # GET /semesters/next => client.semesters.next + # + # TODO: + # GET /semesters/prev + # GET /semesters/scheduling + ### + + ### + # GET /semesters + # Vrátí všechny semestry. + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/ + # + # Typ obsahu: Semester + # Parametry: fields, lang, limit, locEnums, multilang, offset, orderBy, query + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesters + ## + # Example: + # client.semesters.items + ### + + ### + # GET /semesters/{code} + # Vrátí konkrétní semestr podle jeho KOSího kódu. + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/{code} + # + # Typ obsahu: Semester + # Proměnné: {code} kód semestru + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesterscode + ## + # Example: + # client.semesters.find({code}) + ### + + ### + # GET /semesters/current + # Vrátí aktuální semestr, ve kterém probíhá výuka (v KOS parametr AKTSEM). + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/current + # Typ obsahu: Semester + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesterscurrent + ## + # Example: + # client.semesters.current + ### + def current + find 'current' + end + + ### + # GET /semesters/next + # Vrátí příští semestr, tj. následující po aktuálním. + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/next + # + # Typ obsahu: Semester + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersnext + ## + # Example: + # client.semesters.next + ### + def next + find 'next' + end + + ### + # TODO + # GET /semesters/prev + # Vrátí předchozí semestr. + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/prev + # + # Typ obsahu: Semester + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersprev + ## + # Example: + # + ### + + ### + # TODO + # GET /semesters/scheduling + # Vrátí semestr, ve kterém probíhají zápisy do rozvrhu (v KOS parametr SEMPROROZ). + # + # URI: https://kosapi.fit.cvut.cz/api/3/semesters/scheduling + # + # Typ obsahu: Semester + # Parametry: fields, lang, locEnums, multilang + # + # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersscheduling + ## + # Example: + # + ### + end + end +end diff --git a/spec/integration/semesters_spec.rb b/spec/integration/semesters_spec.rb new file mode 100644 index 0000000..641ffcf --- /dev/null +++ b/spec/integration/semesters_spec.rb @@ -0,0 +1,46 @@ +require 'spec_helper' + +describe 'Semesters resource', :vcr, :integration do + + let(:credentials) { { client_id: ENV['KOSAPI_OAUTH_CLIENT_ID'], client_secret: ENV['KOSAPI_OAUTH_CLIENT_SECRET'] } } + subject(:client) { KOSapiClient.new(credentials) } + + it 'fetches semesters list' do + page = client.semesters.offset(0).limit(2) + expect(page.items.count).to eq 2 + end + + it 'parses entry ID properly' do + page = client.semesters + semester = page.items.first + expect(semester.id).not_to be_nil + end + + it 'parses updated properly' do + page = client.semesters + semester = page.items.first + expect(semester.updated).not_to be_nil + end + + it 'parses author properly' do + page = client.semesters + semester = page.items.first + expect(semester.author.name).not_to be_nil + end + + it 'parses entry link properly' do + page = client.semesters + semester = page.items.first + expect(semester.link).not_to be_nil + expect(semester.link.link_href).not_to be_nil + expect(semester.link.link_rel).not_to be_nil + end + + it 'fetches current semester' do + semester = client.semesters.current + expect(semester.start_date).not_to be_nil + expect(semester.end_date).not_to be_nil + + expect(Time.new).to be_between(semester.start_date, semester.end_date) + end +end From 140537fb94edeb3ca612c161cdc88ae3b9b159d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pol=C3=ADvka?= Date: Sat, 11 Apr 2015 22:51:52 +0200 Subject: [PATCH 3/5] Fixed (parallel of TV does not have any timetable slot) --- spec/integration/parallels_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/integration/parallels_spec.rb b/spec/integration/parallels_spec.rb index 35117e4..db1f1dc 100644 --- a/spec/integration/parallels_spec.rb +++ b/spec/integration/parallels_spec.rb @@ -44,7 +44,7 @@ end it 'parses timetable slot ID' do - page = client.parallels + page = client.parallels.query('course.code' => 'MI-PAA') slot = page.items.first.timetable_slots.first expect(slot.id).not_to be_nil end From 096289d034141a2e7d9cd7d65e8b52eb1e8c1051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pol=C3=ADvka?= Date: Sat, 11 Apr 2015 23:53:32 +0200 Subject: [PATCH 4/5] Cleaned doc.Temporarly removed current semester (https://kosapi.fit.cvut.cz/issues/99) --- .../resource/semesters_builder.rb | 37 +------------------ spec/integration/semesters_spec.rb | 6 +-- 2 files changed, 5 insertions(+), 38 deletions(-) diff --git a/lib/kosapi_client/resource/semesters_builder.rb b/lib/kosapi_client/resource/semesters_builder.rb index 143b1eb..6201f48 100644 --- a/lib/kosapi_client/resource/semesters_builder.rb +++ b/lib/kosapi_client/resource/semesters_builder.rb @@ -2,26 +2,21 @@ module KOSapiClient module Resource class SemestersBuilder < RequestBuilder ### - # Semestry: + # Semesters: # GET /semesters => client.semesters.items # GET /semesters/{code} => client.semesters.find({code}) - # GET /semesters/current => client.semesters.current # GET /semesters/next => client.semesters.next # # TODO: + # GET /semesters/current => client.semesters.current # GET /semesters/prev # GET /semesters/scheduling ### ### # GET /semesters - # Vrátí všechny semestry. # # URI: https://kosapi.fit.cvut.cz/api/3/semesters/ - # - # Typ obsahu: Semester - # Parametry: fields, lang, limit, locEnums, multilang, offset, orderBy, query - # # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesters ## # Example: @@ -30,14 +25,8 @@ class SemestersBuilder < RequestBuilder ### # GET /semesters/{code} - # Vrátí konkrétní semestr podle jeho KOSího kódu. # # URI: https://kosapi.fit.cvut.cz/api/3/semesters/{code} - # - # Typ obsahu: Semester - # Proměnné: {code} kód semestru - # Parametry: fields, lang, locEnums, multilang - # # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesterscode ## # Example: @@ -46,30 +35,18 @@ class SemestersBuilder < RequestBuilder ### # GET /semesters/current - # Vrátí aktuální semestr, ve kterém probíhá výuka (v KOS parametr AKTSEM). # # URI: https://kosapi.fit.cvut.cz/api/3/semesters/current - # Typ obsahu: Semester - # Parametry: fields, lang, locEnums, multilang - # # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semesterscurrent ## # Example: # client.semesters.current ### - def current - find 'current' - end ### # GET /semesters/next - # Vrátí příští semestr, tj. následující po aktuálním. # # URI: https://kosapi.fit.cvut.cz/api/3/semesters/next - # - # Typ obsahu: Semester - # Parametry: fields, lang, locEnums, multilang - # # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersnext ## # Example: @@ -82,13 +59,8 @@ def next ### # TODO # GET /semesters/prev - # Vrátí předchozí semestr. # # URI: https://kosapi.fit.cvut.cz/api/3/semesters/prev - # - # Typ obsahu: Semester - # Parametry: fields, lang, locEnums, multilang - # # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersprev ## # Example: @@ -98,13 +70,8 @@ def next ### # TODO # GET /semesters/scheduling - # Vrátí semestr, ve kterém probíhají zápisy do rozvrhu (v KOS parametr SEMPROROZ). # # URI: https://kosapi.fit.cvut.cz/api/3/semesters/scheduling - # - # Typ obsahu: Semester - # Parametry: fields, lang, locEnums, multilang - # # @link: https://kosapi.fit.cvut.cz/projects/kosapi/wiki/Semesters#GET-semestersscheduling ## # Example: diff --git a/spec/integration/semesters_spec.rb b/spec/integration/semesters_spec.rb index 641ffcf..9a8b57a 100644 --- a/spec/integration/semesters_spec.rb +++ b/spec/integration/semesters_spec.rb @@ -36,11 +36,11 @@ expect(semester.link.link_rel).not_to be_nil end - it 'fetches current semester' do - semester = client.semesters.current + it 'fetches next semester' do + semester = client.semesters.next expect(semester.start_date).not_to be_nil expect(semester.end_date).not_to be_nil - expect(Time.new).to be_between(semester.start_date, semester.end_date) + expect(Time.new).to be < semester.start_date end end From d48436f66c34486ca441308ddfb15278cbe473a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pol=C3=ADvka?= Date: Sun, 12 Apr 2015 00:03:09 +0200 Subject: [PATCH 5/5] Fixed default response type with accept header --- lib/kosapi_client/request_builder.rb | 2 +- lib/kosapi_client/resource/semesters_builder.rb | 3 +++ spec/integration/semesters_spec.rb | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/kosapi_client/request_builder.rb b/lib/kosapi_client/request_builder.rb index 2fa046d..0c46c4b 100644 --- a/lib/kosapi_client/request_builder.rb +++ b/lib/kosapi_client/request_builder.rb @@ -37,7 +37,7 @@ def initialize(resource_name, http_client, url_builder = URLBuilder.new(resource @http_client = http_client @operation = :get @body = nil - @headers = {} + @headers = {'Accept' => 'application/atom+xml'} @url_builder = url_builder @id = nil end diff --git a/lib/kosapi_client/resource/semesters_builder.rb b/lib/kosapi_client/resource/semesters_builder.rb index 6201f48..7ae324c 100644 --- a/lib/kosapi_client/resource/semesters_builder.rb +++ b/lib/kosapi_client/resource/semesters_builder.rb @@ -42,6 +42,9 @@ class SemestersBuilder < RequestBuilder # Example: # client.semesters.current ### + def current + find 'current' + end ### # GET /semesters/next diff --git a/spec/integration/semesters_spec.rb b/spec/integration/semesters_spec.rb index 9a8b57a..ebc0b96 100644 --- a/spec/integration/semesters_spec.rb +++ b/spec/integration/semesters_spec.rb @@ -36,6 +36,14 @@ expect(semester.link.link_rel).not_to be_nil end + it 'fetches current semester' do + semester = client.semesters.current + expect(semester.start_date).not_to be_nil + expect(semester.end_date).not_to be_nil + + expect(Time.new).to be_between(semester.start_date, semester.end_date) + end + it 'fetches next semester' do semester = client.semesters.next expect(semester.start_date).not_to be_nil