nusmods 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ffd542cab0444df3984936ffcbea04c56a61b223
4
- data.tar.gz: 1013a0a5f86fe8e53110825a3b6c4df7654354f1
3
+ metadata.gz: 646705ac8ac19ea152e6561e8b773146dfc72d47
4
+ data.tar.gz: a4b77c00d38cb854d8bee3fdd32094d4b99155ea
5
5
  SHA512:
6
- metadata.gz: 2878d86aca5ee7de9ca47e18ae79c2088eaef9fa00d9cf38b9523690b18e44526dea6a0cd653299faed6fd6b87ed5cb292796b2e8b743916c29c036a19b4ad15
7
- data.tar.gz: 3a4b8afe98a740992f7c5925a0a298ca36c0b55f16946419356c06ea5bbe5b15ea5e9a4e1f7e683a4565bb871d60c0ee85fed09106071610d9749ba752daf23c
6
+ metadata.gz: d9782a618b38ea224086c6f00d2faf6189079d2d53cd7027c7e3fc8d0be5ac661880c2cd63319e3b25eae635260a37133b7844644398c470cfea7158f621a93d
7
+ data.tar.gz: 7f47afb0189bbff35ffc7f287ee9b6da7ca7d5c823f6671194f532b6638f0aa1a2b505c2d57a91c3ebb9455834aa067719c170bac92c2c7333637eb2700951e2
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'faraday'
4
+ gem 'faraday_middleware'
5
+ gem 'activesupport'
@@ -0,0 +1,105 @@
1
+ A ruby wrapper for the NUSModsAPI
2
+ ---
3
+
4
+ ### Disclaimer
5
+
6
+ This gem is not maintained by the creator of NUSMods.
7
+
8
+ NUSModsAPI repository: https://github.com/ahbeng/NUSModsAPI
9
+
10
+ ---
11
+
12
+ ### Installation
13
+
14
+ ```sh
15
+ gem install nusmods
16
+ ```
17
+
18
+ or add this line into your `Gemfile`
19
+
20
+ ```
21
+ gem 'nusmods'
22
+ ```
23
+
24
+ then, run `bundle install`.
25
+
26
+
27
+ ### Usage
28
+
29
+ ```rb
30
+ require 'nusmods' # => true
31
+ client = NUSMods::Client.new # => #<NUSMods::Client:0x007f85928efb10 @base_url="http://api.nusmods.com/">
32
+ ```
33
+
34
+ ### Endpoints
35
+
36
+ All methods are set to retrieve the current AY's records if you do not provide
37
+ any parameters for year or semester.
38
+
39
+ #### Faculty Departments
40
+
41
+ Retrieves the list of faculty departments/sub-departments.
42
+
43
+ ```rb
44
+ client.get_faculty_departments(year = 2014, semester = 1)
45
+ ```
46
+
47
+ #### Lesson Types
48
+
49
+ Retrieves a list of the types of lessons. This API call is not tied to a
50
+ specific AY or semester.
51
+
52
+ ```rb
53
+ client.get_lesson_types
54
+ ```
55
+
56
+ #### Module codes
57
+
58
+ Retrieves a list of all module codes offered in the semester.
59
+
60
+ ```rb
61
+ client.get_module_codes(year = 2014, semester = 1)
62
+ ```
63
+
64
+ #### Module codes with names
65
+
66
+ Retrieves a list of all module codes accompanied by their names.
67
+
68
+ ```rb
69
+ client.get_module_codes_with_names(year = 2014, semester = 1)
70
+ ```
71
+
72
+ #### Module details
73
+
74
+ Retrieves all information about a specific module
75
+
76
+ ```rb
77
+ client.get_module_details("MA1101R", year = 2014, semester = 1)
78
+ ```
79
+
80
+ #### All modules
81
+
82
+ Retrieves all information about every module.
83
+ Note: This retrieves a large dataset, so it will take a while. It is highly
84
+ suggested that you download a copy from the API directly and store it locally.
85
+
86
+ ```rb
87
+ client.get_modules(year = 2014, semester = 1)
88
+ ```
89
+
90
+ For more details, see [NUSModsAPI's README.][1]
91
+
92
+
93
+ [1]: https://github.com/ahbeng/NUSModsAPI/blob/master/README.md
94
+
95
+
96
+ ### Tests:
97
+
98
+ ```sh
99
+ gem install rspec
100
+ rspec spec/nusmods.rb
101
+ ```
102
+
103
+ ### License
104
+
105
+ http://opensource.org/licenses/MIT
@@ -1,68 +1,16 @@
1
- require 'json'
2
- require 'net/http'
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'nusmods/client'
3
4
 
4
- class NUSMods
5
+ directory = File.expand_path(File.dirname(__FILE__))
5
6
 
6
- def fetch_json(url)
7
- resp = Net::HTTP.get_response(URI.parse(url))
8
- JSON.parse(resp.body)
9
- end
10
-
11
- # Returns a Array of all module codes in the given year and semester
12
- def get_module_codes(year, semester)
13
- endpoint = "http://api.nusmods.com/#{year}-#{year + 1}/#{semester}/moduleCodes.json"
14
- begin
15
- fetch_json(endpoint)
16
- rescue
17
- raise "The requested resource is not available for the given year or semester."
18
- end
19
- end
20
-
21
- # Returns a Hash of all module codes as keys, and its respective module name as values.
22
- def get_module_codes_with_names(year, semester)
23
- endpoint = "http://api.nusmods.com/#{year}-#{year + 1}/#{semester}/moduleList.json"
24
- begin
25
- fetch_json(endpoint)
26
- rescue
27
- raise "The requested resource is not available for the given year or semester."
28
- end
29
- end
30
-
31
- # Returns a Hash of all faculties as keys, and departments under the respective faculties as values.
32
- def get_faculty_departments(year, semester)
33
- endpoint = "http://api.nusmods.com/#{year}-#{year + 1}/#{semester}/facultyDepartments.json"
34
- begin
35
- fetch_json(endpoint)
36
- rescue
37
- raise "The requested resource is not available for the given year or semester."
38
- end
39
- end
40
-
41
- def get_lesson_types(year, semester)
42
- endpoint = "http://api.nusmods.com/#{year}-#{year + 1}/#{semester}/lessonTypes.json"
43
- begin
44
- fetch_json(endpoint)
45
- rescue
46
- raise "The requested resource is not available for the given year or semester."
47
- end
48
- end
7
+ module NUSMods
8
+ class << self
49
9
 
50
- def get_module_details(year, semester, module_code)
51
- endpoint = "http://api.nusmods.com/#{year}-#{year + 1}/#{semester}/modules/#{module_code}.json"
52
- begin
53
- fetch_json(endpoint)
54
- rescue
55
- raise "The requested resource is not available for the given year or semester."
10
+ ## configure default
11
+ def configure
12
+ yield self
56
13
  end
57
- end
58
14
 
59
- def get_modules(year, semester)
60
- endpoint = "http://api.nusmods.com/#{year}-#{year + 1}/#{semester}/modules.json"
61
- begin
62
- fetch_json(endpoint)
63
- rescue
64
- raise "The requested resource is not available for the given year or semester."
65
- end
66
15
  end
67
-
68
16
  end
@@ -0,0 +1,34 @@
1
+ require 'nusmods/endpoints'
2
+ require 'active_support/notifications'
3
+
4
+ module NUSMods
5
+ class Client
6
+
7
+ include Endpoints
8
+
9
+ def initialize(opts = {})
10
+ @base_url = "http://api.nusmods.com/"
11
+ end
12
+
13
+ private
14
+
15
+ def connection
16
+ Faraday.new(url: @base_url) do |f|
17
+ f.response :json, :content_type => /\bjson$/
18
+ f.use :instrumentation
19
+ f.adapter Faraday.default_adapter
20
+ end
21
+ end
22
+
23
+ def get(url)
24
+ response = connection.get url
25
+ response.body
26
+ end
27
+
28
+ # Converts a provided year to the API requirements
29
+ def format_year(year)
30
+ "#{year}-#{year+1}"
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ module NUSMods
2
+ module Endpoints
3
+
4
+ CURRENT_YEAR = 2014
5
+ CURRENT_SEMESTER = 1
6
+
7
+ # Returns a Array of all module codes in the given year and semester
8
+ def get_module_codes(year = CURRENT_YEAR, semester = CURRENT_SEMESTER)
9
+ get "#{format_year(year)}/#{semester}/moduleCodes.json"
10
+ end
11
+
12
+ # Returns a Hash of all module codes as keys, and its respective module name as values.
13
+ def get_module_codes_with_names(year = CURRENT_YEAR, semester = CURRENT_SEMESTER)
14
+ get "#{format_year(year)}/#{semester}/moduleList.json"
15
+ end
16
+
17
+ # Returns a Hash of all faculties as keys, and departments under the respective faculties as values.
18
+ def get_faculty_departments(year = CURRENT_YEAR, semester = CURRENT_SEMESTER)
19
+ get "#{format_year(year)}/#{semester}/facultyDepartments.json"
20
+ end
21
+
22
+ # Returns the types of lessons (lecture, tutorial, etc) in a Hash
23
+ def get_lesson_types
24
+ get "lessonTypes.json"
25
+ end
26
+
27
+ def get_module_details(module_code, year = CURRENT_YEAR, semester = CURRENT_SEMESTER)
28
+ get "#{format_year(year)}/#{semester}/modules/#{module_code}.json"
29
+ end
30
+
31
+ def get_modules(year = CURRENT_YEAR, semester = CURRENT_SEMESTER)
32
+ get "#{format_year(year)}/#{semester}/modules.json"
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,3 @@
1
+ module NUSMods
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,23 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'nusmods/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'nusmods'
7
+ s.version = NUSMods::VERSION
8
+ s.date = Date.today.to_s
9
+ s.summary = "A ruby wrapper interface for NUSModsAPI."
10
+ s.description = s.summary
11
+ s.authors = ["Jingwen Chen"]
12
+ s.email = 'jin@crypt.sg'
13
+ s.files = ["lib/nusmods.rb"]
14
+ s.homepage =
15
+ 'http://rubygems.org/gems/nusmods'
16
+ s.license = 'MIT'
17
+
18
+ s.files = `git ls-files -z`.split("\x0")
19
+ s.require_paths = %w( lib )
20
+ s.add_dependency 'faraday'
21
+ s.add_dependency 'faraday_middleware'
22
+ s.add_dependency 'activesupport'
23
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe NUSMods do
4
+
5
+ before :all do
6
+ @nm = NUSMods::Client.new
7
+ end
8
+
9
+ describe "#get_module_codes" do
10
+ it "should return an array if the requested resource exist" do
11
+ resp = @nm.get_module_codes
12
+ expect(resp.class).to eq(Array)
13
+ end
14
+ end
15
+
16
+ describe "#get_module_codes_with_names" do
17
+ it "should return a Hash if the requested resource exist" do
18
+ resp = @nm.get_module_codes_with_names
19
+ expect(resp.class).to eq(Hash)
20
+ end
21
+ end
22
+
23
+ describe "#get_faculty_departments" do
24
+ it "should return a Hash if the requested resource exist" do
25
+ resp = @nm.get_faculty_departments
26
+ expect(resp.class).to eq(Hash)
27
+ end
28
+ end
29
+
30
+ describe "#get_lesson_types" do
31
+ it "should return a Hash if the requested resource exist" do
32
+ resp = @nm.get_lesson_types
33
+ expect(resp.class).to eq(Hash)
34
+ end
35
+ end
36
+
37
+ describe "#get_module_details" do
38
+ it "should return a Hash if the requested resource exist" do
39
+ resp = @nm.get_module_details("CS1010")
40
+ expect(resp.class).to eq(Hash)
41
+ end
42
+ end
43
+
44
+ # describe "#get_modules" do
45
+ # it "should return a Array if the requested resource exist" do
46
+ # resp = @nm.get_modules
47
+ # expect(resp.class).to eq(Array)
48
+ # end
49
+ # end
50
+
51
+ end
@@ -0,0 +1,20 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+
18
+ # points to the main nusmods.rb
19
+ require File.expand_path("../../lib/nusmods", __FILE__)
20
+ end
metadata CHANGED
@@ -1,23 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nusmods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jingwen Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-16 00:00:00.000000000 Z
12
- dependencies: []
13
- description: This rubygem aims to provide an easier way to fetch data from the NUSMods
14
- API, especially if you're building ruby apps.
11
+ date: 2014-10-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday_middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: A ruby wrapper interface for NUSModsAPI.
15
56
  email: jin@crypt.sg
16
57
  executables: []
17
58
  extensions: []
18
59
  extra_rdoc_files: []
19
60
  files:
61
+ - .rspec
62
+ - Gemfile
63
+ - README.md
20
64
  - lib/nusmods.rb
65
+ - lib/nusmods/client.rb
66
+ - lib/nusmods/endpoints.rb
67
+ - lib/nusmods/version.rb
68
+ - nusmods.gemspec
69
+ - spec/nusmods.rb
70
+ - spec/spec_helper.rb
21
71
  homepage: http://rubygems.org/gems/nusmods
22
72
  licenses:
23
73
  - MIT
@@ -28,18 +78,18 @@ require_paths:
28
78
  - lib
29
79
  required_ruby_version: !ruby/object:Gem::Requirement
30
80
  requirements:
31
- - - ">="
81
+ - - '>='
32
82
  - !ruby/object:Gem::Version
33
83
  version: '0'
34
84
  required_rubygems_version: !ruby/object:Gem::Requirement
35
85
  requirements:
36
- - - ">="
86
+ - - '>='
37
87
  - !ruby/object:Gem::Version
38
88
  version: '0'
39
89
  requirements: []
40
90
  rubyforge_project:
41
- rubygems_version: 2.2.2
91
+ rubygems_version: 2.0.14
42
92
  signing_key:
43
93
  specification_version: 4
44
- summary: A ruby interface for NUSModsAPI.
94
+ summary: A ruby wrapper interface for NUSModsAPI.
45
95
  test_files: []