appolo 2.0.0 → 2.0.1
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 +4 -4
- data/Appolo.gemspec +1 -1
- data/lib/Appolo/Models/element.rb +10 -1
- data/lib/Appolo/Models/main_model/classes.rb +8 -7
- data/lib/Appolo/Models/main_model/courses.rb +7 -4
- data/lib/Appolo/Models/main_model/lective_semester.rb +1 -1
- data/lib/Appolo/Models/main_model/program.rb +2 -1
- data/lib/Appolo/Models/main_model/student.rb +1 -1
- data/lib/Appolo/Models/main_model/teacher.rb +1 -2
- data/lib/Appolo/Models/model_utils.rb +1 -8
- data/lib/Appolo/Models/secondary/lecture.rb +5 -4
- data/lib/Appolo/Models/secondary/resource.rb +11 -7
- data/lib/Appolo/version.rb +1 -1
- data/lib/Appolo.rb +81 -9
- metadata +17 -6
- data/bin/console +0 -14
- data/bin/example.rb +0 -30
- data/bin/setup +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d6f5d7cf36b6b63bd48ef55d6f39ccf372fda45
|
4
|
+
data.tar.gz: db2e520a27f22384907daf918ee94c5318f7e35d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e82c51ff707d454a815571ff4f1107bdde56d1100aa10f90f5e93750a9065861b5caf8032c0e28aae55fb675a887eef67dfa1b93ceb76b390c2ea4258c6150a
|
7
|
+
data.tar.gz: 1ce9eb4e2aec62595ac51974158ba15c9b8810cacae09436ad54a00a4aec24cc4f7c9a457c3f468ed39a3b6e581abcaaf802690f89eaf0b15953dde9ac6e6d08
|
data/Appolo.gemspec
CHANGED
@@ -26,6 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
27
27
|
spec.add_development_dependency 'rest-client', '~> 1.8', '>= 1.8.0'
|
28
28
|
spec.add_development_dependency 'json', '~> 1.8', '>= 1.8.3'
|
29
|
-
|
29
|
+
spec.add_development_dependency 'parallel', '~> 1.6.1'
|
30
30
|
|
31
31
|
end
|
@@ -12,7 +12,16 @@ class Element
|
|
12
12
|
def initialize (id, s_name, links, type_for_links)
|
13
13
|
@id = id
|
14
14
|
@short_name = s_name
|
15
|
-
@links = Links.new(links, type_for_links)
|
15
|
+
@links = Links.new(links, type_for_links) unless links.nil?
|
16
|
+
end
|
17
|
+
|
18
|
+
def check_json_info(json_info)
|
19
|
+
if json_info.is_a? Hash
|
20
|
+
json_data = json_info
|
21
|
+
else
|
22
|
+
json_data = JSON.parse json_info
|
23
|
+
end
|
24
|
+
json_data
|
16
25
|
end
|
17
26
|
|
18
27
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'rest-client'
|
3
|
+
require 'parallel'
|
3
4
|
require_relative '../model_utils'
|
4
5
|
require_relative '../secondary/links'
|
5
6
|
require_relative '../secondary/avatar_url'
|
@@ -19,7 +20,7 @@ class Classes < Element
|
|
19
20
|
# Initiate an instance of Classes based upon +json_info*
|
20
21
|
# that can be an hash or a JSON string.
|
21
22
|
def initialize(json_info)
|
22
|
-
json_data =
|
23
|
+
json_data = check_json_info json_info
|
23
24
|
|
24
25
|
super(json_data[ModelUtils::ID],
|
25
26
|
json_data[ModelUtils::CLASS_NAME],
|
@@ -69,9 +70,9 @@ class Classes < Element
|
|
69
70
|
response_all_lectures = RestClient.get @links.lectures
|
70
71
|
all_lectures = JSON.parse response_all_lectures
|
71
72
|
temp = []
|
72
|
-
all_lectures['classLectures']
|
73
|
-
|
74
|
-
|
73
|
+
temp = Parallel.each(all_lectures['classLectures'], :in_processes => 1){
|
74
|
+
|lecture| temp.push Lecture.new lecture
|
75
|
+
}
|
75
76
|
temp
|
76
77
|
end
|
77
78
|
|
@@ -81,9 +82,9 @@ class Classes < Element
|
|
81
82
|
response_all_resources = RestClient.get @links.resources
|
82
83
|
all_resources = JSON.parse response_all_resources
|
83
84
|
temp = []
|
84
|
-
all_resources['classResources']
|
85
|
-
temp.push Resource.new resource
|
86
|
-
|
85
|
+
temp = Parallel.each(all_resources['classResources'], :in_processes => 1){
|
86
|
+
|resource| temp.push Resource.new resource
|
87
|
+
}
|
87
88
|
temp
|
88
89
|
end
|
89
90
|
|
@@ -8,11 +8,14 @@ class CourseUnit < Element
|
|
8
8
|
attr_reader :name, :programs
|
9
9
|
|
10
10
|
def initialize(json_info)
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
|
12
|
+
json_data = check_json_info json_info
|
13
|
+
|
14
|
+
super(json_data[ModelUtils::ID],
|
15
|
+
json_data[ModelUtils::SHORT_NAME],
|
16
|
+
json_data[ModelUtils::LINKS],
|
14
17
|
@@type_of_links)
|
15
|
-
@name =
|
18
|
+
@name = json_data[ModelUtils::NAME]
|
16
19
|
|
17
20
|
#@programs = TODO
|
18
21
|
end
|
@@ -9,7 +9,7 @@ class LectiveSemester < Element
|
|
9
9
|
@@type_of_links = 'lectiveSemesters'
|
10
10
|
|
11
11
|
def initialize(json_str)
|
12
|
-
json_data =
|
12
|
+
json_data = check_json_info json_str
|
13
13
|
|
14
14
|
super(json_data[ModelUtils::LECTIVE_ID],
|
15
15
|
json_data[ModelUtils::SHORT_NAME],
|
@@ -11,7 +11,7 @@ class Teacher < Element
|
|
11
11
|
|
12
12
|
|
13
13
|
def initialize(json_info)
|
14
|
-
json_data =
|
14
|
+
json_data = check_json_info json_info
|
15
15
|
|
16
16
|
super(json_data[ModelUtils::ID],
|
17
17
|
json_data[ModelUtils::SHORT_NAME],
|
@@ -24,7 +24,6 @@ class Teacher < Element
|
|
24
24
|
@avatar_url = AvatarUrl.new(json_data[ModelUtils::AVATAR_URL])
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
27
|
def to_s
|
29
28
|
"#{@id} - #{@short_name} : #{@academic_email}"
|
30
29
|
end
|
@@ -1,20 +1,21 @@
|
|
1
1
|
require_relative '../model_utils'
|
2
|
+
require_relative '../element'
|
2
3
|
require 'json'
|
3
4
|
require 'rest-client'
|
4
5
|
|
5
6
|
##
|
6
7
|
# This class represents a lecture given at some point in some class.
|
7
|
-
class Lecture
|
8
|
+
class Lecture < Element
|
8
9
|
|
9
|
-
attr_reader :
|
10
|
+
attr_reader :content, :date_created, :title
|
10
11
|
|
11
12
|
##
|
12
13
|
# Create an instance of Lecture based upon +json_str+
|
13
14
|
# that can be an hash or a JSON string.
|
14
15
|
def initialize (json_str)
|
15
|
-
json_data =
|
16
|
+
json_data = check_json_info json_str
|
16
17
|
|
17
|
-
|
18
|
+
super(json_data[ModelUtils::ID],nil,nil,nil)
|
18
19
|
@content = json_data[ModelUtils::CONTENT]
|
19
20
|
@date_created = json_data[ModelUtils::CREATED_WHEN]
|
20
21
|
@title = json_data[ModelUtils::TITLE]
|
@@ -1,19 +1,23 @@
|
|
1
1
|
require_relative 'links'
|
2
2
|
require_relative '../model_utils'
|
3
3
|
|
4
|
-
class Resource
|
4
|
+
class Resource < Element
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
@@type_of_links = 'resources'
|
7
|
+
|
8
|
+
attr_reader :description, :class_id, :title
|
8
9
|
|
9
10
|
def initialize(json_str)
|
10
|
-
json_data =
|
11
|
-
|
12
|
-
|
11
|
+
json_data = check_json_info json_str
|
12
|
+
|
13
|
+
super(json_data[ModelUtils::ID],
|
14
|
+
nil,
|
15
|
+
json_data[ModelUtils::LINKS],
|
16
|
+
@@type_of_links)
|
17
|
+
|
13
18
|
@description = json_data[ModelUtils::DESCRIPTION]
|
14
19
|
@class_id = json_data[ModelUtils::CLASS_ID]
|
15
20
|
@title = json_data[ModelUtils::TITLE]
|
16
|
-
@links = Links.new json_data[ModelUtils::LINKS], 'resources'
|
17
21
|
end
|
18
22
|
|
19
23
|
def to_s
|
data/lib/Appolo/version.rb
CHANGED
data/lib/Appolo.rb
CHANGED
@@ -26,7 +26,7 @@ module Appolo
|
|
26
26
|
|
27
27
|
##
|
28
28
|
# This hash contains each hash structure that contains the different
|
29
|
-
# elements after being requested by the method Appolo#get_set_of_elements
|
29
|
+
# elements after being requested by the method Appolo#get_set_of_elements.
|
30
30
|
Elements = {
|
31
31
|
:students => $all_students,
|
32
32
|
:teachers => $all_teachers,
|
@@ -49,9 +49,14 @@ module Appolo
|
|
49
49
|
:programs => 'https://adeetc.thothapp.com/api/v1/programs/',
|
50
50
|
:courses => 'https://adeetc.thothapp.com/api/v1/courseunits/',
|
51
51
|
:lec_semesters => 'https://adeetc.thothapp.com/api/v1/lectivesemesters'
|
52
|
-
|
53
52
|
}
|
54
53
|
|
54
|
+
##
|
55
|
+
# In order to build the hash of Link objects,
|
56
|
+
# each class must have a codename to append later
|
57
|
+
# during the construction. Since I dont believe in
|
58
|
+
# magical strings, I've putted all of those in here.
|
59
|
+
|
55
60
|
Api_Codename = {
|
56
61
|
:students => 'students',
|
57
62
|
:teachers => 'teachers',
|
@@ -78,15 +83,62 @@ module Appolo
|
|
78
83
|
Result.new(result, error)
|
79
84
|
end
|
80
85
|
|
86
|
+
##
|
87
|
+
# This hash contains the procs that build and populate the hashes
|
88
|
+
# that contain all the objects from the last made request.
|
89
|
+
# So, when we request all the students, the proc related to the symbol
|
90
|
+
# ":student" will be used to create the instances and insert them into the hash.
|
91
|
+
|
81
92
|
Builder_Elements = {
|
82
|
-
students: lambda{
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
93
|
+
students: lambda{
|
94
|
+
|students| students.each_with_index {
|
95
|
+
|student, idx|
|
96
|
+
stub = Student.new(student)
|
97
|
+
$all_students[idx] = stub
|
98
|
+
}
|
99
|
+
},
|
100
|
+
teachers: lambda{
|
101
|
+
|teachers| teachers.each_with_index {
|
102
|
+
|teacher, idx|
|
103
|
+
stub = Teacher.new(teacher)
|
104
|
+
$all_teachers[idx] =stub
|
105
|
+
}
|
106
|
+
},
|
107
|
+
classes: lambda{
|
108
|
+
|classes| classes.each_with_index{
|
109
|
+
|classe, idx|
|
110
|
+
stub = Classes.new(classe)
|
111
|
+
$all_classes[idx] = stub
|
112
|
+
}
|
113
|
+
},
|
114
|
+
programs: lambda{
|
115
|
+
|programs| programs.each_with_index{
|
116
|
+
|program, idx|
|
117
|
+
stub = Program.new(program)
|
118
|
+
$all_programs[idx] = stub
|
119
|
+
}
|
120
|
+
},
|
121
|
+
courses: lambda{
|
122
|
+
|courses| courses.each_with_index{
|
123
|
+
|course, idx|
|
124
|
+
stub = CourseUnit.new(course)
|
125
|
+
$all_courses[idx] = stub
|
126
|
+
}
|
127
|
+
},
|
128
|
+
lec_semesters: lambda{
|
129
|
+
|semesters| semesters.each_with_index{
|
130
|
+
|lec_sem, idx|
|
131
|
+
stub = LectiveSemester.new(lec_sem)
|
132
|
+
$all_lective_sem[idx] = stub
|
133
|
+
}
|
134
|
+
}
|
88
135
|
}
|
89
136
|
|
137
|
+
##
|
138
|
+
# This hash acts the same as Builder_Elements but instead of creating
|
139
|
+
# a set of elements, it creates only one since its purpose is to be used
|
140
|
+
# when the method Appolo#get_element_by_id is called.
|
141
|
+
|
90
142
|
Builder_Element = {
|
91
143
|
students: lambda{|data| Student.new(verify_response data)},
|
92
144
|
teachers: lambda{|data| Teacher.new(verify_response data)},
|
@@ -99,7 +151,14 @@ module Appolo
|
|
99
151
|
public
|
100
152
|
|
101
153
|
##
|
102
|
-
#
|
154
|
+
# Call this method in order to get an array of elements.
|
155
|
+
# To specify which element to search you must specify +element_name+ as:
|
156
|
+
# * :students -> Set of Students
|
157
|
+
# * :teachers -> Set of Teachers
|
158
|
+
# * :classes -> Set of Classes
|
159
|
+
# * :programs -> Set of Programs
|
160
|
+
# * :courses -> Set of Courses
|
161
|
+
# * :lec_semesters -> Set of Lective Semesters
|
103
162
|
|
104
163
|
def self.get_set_of_elements(element_name)
|
105
164
|
return Elements[element_name] unless Elements[element_name].length == 0
|
@@ -116,6 +175,19 @@ module Appolo
|
|
116
175
|
end
|
117
176
|
end
|
118
177
|
|
178
|
+
##
|
179
|
+
# Call this method in order to get a single element.
|
180
|
+
# To specify which element to search you must specify +element_name+ as:
|
181
|
+
# * :students -> Set of Students
|
182
|
+
# * :teachers -> Set of Teachers
|
183
|
+
# * :classes -> Set of Classes
|
184
|
+
# * :programs -> Set of Programs
|
185
|
+
# * :courses -> Set of Courses
|
186
|
+
# * :lec_semesters -> Set of Lective Semesters
|
187
|
+
#
|
188
|
+
# The +id+ specifies the *id* related to the element inside the Thoth API.
|
189
|
+
# _This gem is not responsible for the numbers used._
|
190
|
+
|
119
191
|
def self.get_element_by_id(element_name, id)
|
120
192
|
begin
|
121
193
|
response = RestClient.get Api_Links[element_name] + id.to_s
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appolo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pedro Gabriel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -92,6 +92,20 @@ dependencies:
|
|
92
92
|
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: 1.8.3
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: parallel
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.6.1
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 1.6.1
|
95
109
|
description: |-
|
96
110
|
Ruby gem that provides quick and easy access to the web api of Thoth WebApp -
|
97
111
|
https://adeetc.thothapp.com/
|
@@ -107,9 +121,6 @@ files:
|
|
107
121
|
- LICENSE.txt
|
108
122
|
- README.md
|
109
123
|
- Rakefile
|
110
|
-
- bin/console
|
111
|
-
- bin/example.rb
|
112
|
-
- bin/setup
|
113
124
|
- lib/Appolo.rb
|
114
125
|
- lib/Appolo/Models/element.rb
|
115
126
|
- lib/Appolo/Models/main_model/classes.rb
|
@@ -146,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
157
|
version: '0'
|
147
158
|
requirements: []
|
148
159
|
rubyforge_project:
|
149
|
-
rubygems_version: 2.4.
|
160
|
+
rubygems_version: 2.4.8
|
150
161
|
signing_key:
|
151
162
|
specification_version: 4
|
152
163
|
summary: Provides easy access to Thoth web API
|
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "Appolo"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start
|
data/bin/example.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'Appolo'
|
4
|
-
|
5
|
-
def any_key
|
6
|
-
puts '<<any key to continue>>'
|
7
|
-
gets
|
8
|
-
end
|
9
|
-
|
10
|
-
puts 'This program shows how this gem can be used by you.'
|
11
|
-
|
12
|
-
any_key
|
13
|
-
|
14
|
-
puts 'To start, let\'s get one student.'
|
15
|
-
puts 'We can get students by their ID so let\'s use the ID \'38209\':'
|
16
|
-
any_key
|
17
|
-
puts 'You can type \'puts Appolo::get_student_by_id 38209\' and we get:'
|
18
|
-
puts '<<' + Appolo.get_student_by_id(38209).to_s + '>>'
|
19
|
-
any_key
|
20
|
-
|
21
|
-
puts 'Now, let\'s get some teachers at once.'
|
22
|
-
puts 'You can do it by typing \'Appolo::get_teachers.each {|teacher| puts teacher}\''
|
23
|
-
puts 'and you will see something like:'
|
24
|
-
puts '1 - Carlos Guedes : cguedes@cc.isel.ipl.pt'
|
25
|
-
puts '2 - Ezequiel Conde : ezeq@cc.isel.ipl.pt'
|
26
|
-
puts '3 - Miguel Gamboa Carvalho : mcarvalho@cc.isel.ipl.pt'
|
27
|
-
puts '...'
|
28
|
-
any_key
|
29
|
-
|
30
|
-
puts 'Simple, right ? :)'
|