appolo 1.2.2 → 2.0.0

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: 3a8dce19c2f19fd5335d2a1118e9c06a5f706132
4
- data.tar.gz: e37dc28eaa44895a5104527f717fea6e32b128c8
3
+ metadata.gz: ecc284a43e5df985d8dc112580091bbf85f59bb7
4
+ data.tar.gz: 78fbd70effa5701950d40863f8e732349012700a
5
5
  SHA512:
6
- metadata.gz: 170b6d32b06d178eaceb1e64aa8da24a4836c6ffce1862e59be3b6137a47ec8bc9ede5a1a47362701814c90be1abdf3f947102e6cf647b1dd5c3ad8933c6a467
7
- data.tar.gz: cfb7f57bc1d21431c20e7df831726933c5cc78e3a8ac2a4a6364064c5c9516684d8c67db8a79ff2a3d42abf829413391024b2ebb19038bdcc33f64bb5f59e091
6
+ metadata.gz: f4ba4b2b85bf5fa7765bf71e8848cca7e15e468c07efbb718a3fc0110c6c2e0811ef6e14fefa98e68069473d547bfe65d85c1cbc9859994f0c0cafe734afd3c5
7
+ data.tar.gz: c1965a86e1dd129fbc52b7e9dd5f6deca8b41fdd2bd028d8ddf5f0e4351f28d09f98d4f2081e03232ec679804c6fefa42a2aca37b9215dc644e7b0076a7878f2
data/README.md CHANGED
@@ -11,7 +11,9 @@ This project does not intends to show any super efficient or professional progra
11
11
  Add this line to your application's Gemfile:
12
12
 
13
13
  ```ruby
14
+
14
15
  gem 'Appolo'
16
+
15
17
  ```
16
18
 
17
19
  And then execute:
@@ -24,23 +26,41 @@ Or install it yourself as:
24
26
 
25
27
  ## Usage
26
28
 
29
+ In order to specify which element to get, you can use one of the following
30
+ symbols:
31
+
32
+ * :classes
33
+ * :students
34
+ * :programs
35
+ * :courses
36
+ * :lec_semesters
37
+ * :teachers
38
+
39
+ Take a look at the tests for more info.
40
+
41
+
27
42
  The following line of code
28
43
 
29
44
  ```ruby
30
- puts Appolo::get_student_by_id 38209
45
+
46
+ puts Appolo::get_element_by_id(:students,38209)
47
+
31
48
  ```
32
49
 
33
50
  will print the following info about a student with the id 38209:
34
51
 
35
52
  ```
53
+
36
54
  Pedro Almeida - 38209
55
+
37
56
  ```
38
57
 
39
58
  You can also get an instance related to the class with id 409 and
40
59
  afterwards all the lectures that were given there like this:
41
60
 
42
61
  ```ruby
43
- some_class = Appolo.get_class_by_id 409
62
+
63
+ some_class = Appolo.get_element_by_id(:classes, 409)
44
64
  all_lectures_now = some_class.lectures
45
65
 
46
66
  puts all_lectures[0].title
@@ -49,24 +69,30 @@ puts all_lectures[1].title
49
69
  # Aula 02 Distribuição e ligação de componetes em ambiente Unmanaged
50
70
  puts all_lectures[2].title
51
71
  # Aula 03 Características da distribuição e ligação de componentes Managed
72
+
52
73
  ```
53
74
 
54
75
  To get all the students participating in a certain class:
55
76
 
56
77
  ```ruby
57
- some_class = Appolo.get_class_by_id 409
78
+
79
+ some_class = .get_element_by_id(:classes, 409)
58
80
  participants = some_class.participants
59
81
 
60
82
  puts participants[0].name
61
- # Humberto Pedro Pinto da Silva
83
+ #Humberto Pedro Pinto da Silva
84
+
62
85
  ```
63
86
 
64
87
  For more information, just grab the id and get the specific student
88
+
65
89
  ```ruby
90
+
66
91
  id = participants[0].id
67
- student = Appolo.get_student_by_id id
92
+ student = .get_element_by_id(:students, id)
68
93
  puts student.short_name
69
94
  # Humberto Silva
95
+
70
96
  ```
71
97
 
72
98
  ## Development
@@ -1,3 +1,3 @@
1
1
  module Appolo
2
- VERSION = '1.2.2'
2
+ VERSION = '2.0.0'
3
3
  end
data/lib/Appolo.rb CHANGED
@@ -11,19 +11,12 @@ require 'json'
11
11
 
12
12
  ##
13
13
  # This module is the main provider for the public API that
14
- # this gem contains.
14
+ # this gem provides.
15
15
 
16
16
  module Appolo
17
17
 
18
18
  private
19
19
 
20
- COURSES_API_CODENAME = 'courseUnits'
21
- TEACHERS_API_CODENAME = 'teachers'
22
- STUDENTS_API_CODENAME = 'students'
23
- CLASSES_API_CODENAME = 'classes'
24
- PROGRAMS_API_CODENAME = 'programs'
25
- LECTIVESEM_API_CODENAME = 'lectiveSemesters'
26
-
27
20
  $all_students = Hash.new
28
21
  $all_teachers = Hash.new
29
22
  $all_classes = Hash.new
@@ -31,16 +24,45 @@ module Appolo
31
24
  $all_courses = Hash.new
32
25
  $all_lective_sem = Hash.new
33
26
 
34
- #main API links
35
- TEACHERS_API_LINK = 'https://adeetc.thothapp.com/api/v1/teachers/'
36
- STUDENTS_API_LINK = 'https://adeetc.thothapp.com/api/v1/students/'
37
- CLASSES_API_LINK = 'https://adeetc.thothapp.com/api/v1/classes/'
38
- PROGRAMS_API_LINK = 'https://adeetc.thothapp.com/api/v1/programs/'
39
- COURSES_API_LINK = 'https://adeetc.thothapp.com/api/v1/courseunits/'
40
- LECTIVE_SEMESTERS_API_LINK = 'https://adeetc.thothapp.com/api/v1/lectivesemesters'
27
+ ##
28
+ # This hash contains each hash structure that contains the different
29
+ # elements after being requested by the method Appolo#get_set_of_elements
30
+ Elements = {
31
+ :students => $all_students,
32
+ :teachers => $all_teachers,
33
+ :classes => $all_classes,
34
+ :programs => $all_programs,
35
+ :courses => $all_courses,
36
+ :lec_semesters => $all_lective_sem
37
+ }
38
+
39
+ ##
40
+ # This hash structure contains the main web links in order to perform
41
+ # and build future http requests. This set of links are based upon the
42
+ # Thoth WebApp REST API.
43
+ # ---
44
+ # Check https://adeetc.thothapp.com/api/doc for more info.
45
+ Api_Links = {
46
+ :students => 'https://adeetc.thothapp.com/api/v1/students/',
47
+ :teachers => 'https://adeetc.thothapp.com/api/v1/teachers/',
48
+ :classes => 'https://adeetc.thothapp.com/api/v1/classes/',
49
+ :programs => 'https://adeetc.thothapp.com/api/v1/programs/',
50
+ :courses => 'https://adeetc.thothapp.com/api/v1/courseunits/',
51
+ :lec_semesters => 'https://adeetc.thothapp.com/api/v1/lectivesemesters'
52
+
53
+ }
54
+
55
+ Api_Codename = {
56
+ :students => 'students',
57
+ :teachers => 'teachers',
58
+ :classes => 'classes',
59
+ :programs => 'programs',
60
+ :courses => 'courseUnits',
61
+ :lec_semesters => 'lectiveSemesters'
62
+ }
41
63
 
42
- #TODO should raise exception when not 200
43
64
  def self.verify_response(resp)
65
+ #I dont like this nil..
44
66
  (resp.code == 200) ? resp : nil
45
67
  end
46
68
 
@@ -56,176 +78,48 @@ module Appolo
56
78
  Result.new(result, error)
57
79
  end
58
80
 
81
+ Builder_Elements = {
82
+ students: lambda{|students| students.each{|student| stub , $all_students[stub.id] = Student.new(student), stub}},
83
+ teachers: lambda{|teachers| teachers.each{|teacher| stub, $all_teachers[stub.id] = Teacher.new(teacher), stub }},
84
+ classes: lambda{|classes| classes.each{|classe| stub, $all_classes[stub.id] = Classes.new(classe), stub}},
85
+ programs: lambda{|programs| programs.each{|program| stub, $all_programs[stub.id] = Program.new(program), stub}},
86
+ courses: lambda{|courses| courses.each{|course| stub, $all_courses[stub.id] = CourseUnit.new(course), stub}},
87
+ lec_semesters: lambda{|semesters| semesters.each{|lec_sem| stub, $all_lective_sem[stub.id] = LectiveSemester.new(lec_sem), stub}}
88
+ }
89
+
90
+ Builder_Element = {
91
+ students: lambda{|data| Student.new(verify_response data)},
92
+ teachers: lambda{|data| Teacher.new(verify_response data)},
93
+ classes: lambda{|data| Classes.new(verify_response data)},
94
+ programs: lambda{|data| Program.new(verify_response data)},
95
+ courses: lambda{|data| CourseUnit.new(verify_response data)},
96
+ lec_semesters: lambda{|data| LectiveSemester.new(verify_response data)}
97
+ }
59
98
 
60
99
  public
61
100
 
62
101
  ##
63
- #Returns an array of Student instances based upon the main API link.
64
-
65
- def self.get_students
66
- return $all_students unless $all_students.length == 0
67
- begin
68
- response = RestClient.get STUDENTS_API_LINK
69
- valid_resp = verify_response response
70
- students_temp = JSON.parse(valid_resp)[STUDENTS_API_CODENAME]
71
- students_temp.each do |student|
72
- stub = Student.new(student)
73
- $all_students[stub.id] = stub
74
- end
75
- $all_students
76
- rescue => e
77
- $all_students
78
- end
79
- end
80
-
81
-
82
- ##
83
- #Returns an array of Teacher instances based upon the main API link.
84
-
85
- def self.get_teachers
86
- return $all_teachers unless $all_teachers.length == 0
87
- begin
88
- response = RestClient.get TEACHERS_API_LINK
89
- valid_response = verify_response response
90
- teachers_temp = JSON.parse(valid_response)[TEACHERS_API_CODENAME]
91
- teachers_temp.each do |teacher|
92
- stub = Teacher.new(teacher)
93
- $all_teachers[stub.id] = stub
94
- end
95
- $all_teachers
96
- rescue => e
97
- $all_teachers
98
- end
99
- end
100
-
101
-
102
- ##
103
- # Returns an array of Program instances based upon the main API link.
104
-
105
- def self.get_programs
106
- return $all_programs unless $all_programs.length == 0
107
- begin
108
- response = RestClient.get PROGRAMS_API_LINK
109
- valid_resp = verify_response response
110
- programs_temp = JSON.parse(valid_resp)[PROGRAMS_API_CODENAME]
111
- programs_temp.each do |program|
112
- stub = Program.new program
113
- $all_programs[stub.id] = stub
114
- end
115
- $all_programs
116
- rescue => e
117
- $all_programs
118
- end
119
- end
120
-
121
-
122
- ##
123
- # Returns an array of CourseUnit instances based upon the main API link.
124
-
125
- def self.get_courses
126
- return $all_courses unless $all_courses.length == 0
127
- begin
128
- response = RestClient.get COURSES_API_LINK
129
- valid_resp = verify_response response #debug
130
- courses_temp = JSON.parse(valid_resp)[COURSES_API_CODENAME]
131
- courses_temp.each do |course|
132
- stub = CourseUnit.new course
133
- $all_courses[stub.id] = stub
134
- end
135
- $all_courses
136
- rescue => e
137
- $all_courses
138
- end
139
- end
140
-
141
-
142
- ##
143
- # Returns an array of LectiveSemester instances based upon the main API link.
102
+ #
144
103
 
145
- def self.get_lective_semesters
146
- return $all_lective_sem unless $all_lective_sem.length == 0
104
+ def self.get_set_of_elements(element_name)
105
+ return Elements[element_name] unless Elements[element_name].length == 0
147
106
  begin
148
- response = RestClient.get LECTIVE_SEMESTERS_API_LINK
107
+ response = RestClient.get Api_Links[element_name]
149
108
  valid_resp = verify_response response
150
- lective_temp = JSON.parse(valid_resp)[LECTIVESEM_API_CODENAME]
151
- lective_temp.each do |lec_sem|
152
- stub = LectiveSemester.new lec_sem
153
- $all_lective_sem[stub.id] = stub
154
- end
155
- $all_lective_sem
109
+ element_api_codename = Api_Codename[element_name]
110
+ set_of_elements = JSON.parse(valid_resp)
111
+ set_of_elements = set_of_elements[element_api_codename]
112
+ Builder_Elements[element_name].call(set_of_elements)
113
+ Elements[element_name]
156
114
  rescue => e
157
- $all_lective_sem
115
+ Elements[element_name]
158
116
  end
159
117
  end
160
118
 
161
-
162
- ##
163
- # Returns an array of Classes instances based upon the main API link.
164
-
165
- def self.get_classes
166
- return $all_classes unless $all_classes.length == 0
167
- begin
168
- response = RestClient.get CLASSES_API_LINK
169
- valid_resp = verify_response response
170
- classes_temp = JSON.parse(valid_resp)[CLASSES_API_CODENAME]
171
- classes_temp.each do |classe|
172
- stub = Classes.new classe
173
- $all_classes[stub.id] = stub
174
- end
175
- $all_classes
176
- rescue => e
177
- $all_classes
178
- end
179
- end
180
-
181
- ##
182
- # Return a single instance of Teacher based upon the +id+ given.
183
-
184
- def self.get_teacher_by_id(id)
185
- #return $all_teachers[id] unless $all_teachers.count == 0
186
- begin
187
- response = RestClient.get TEACHERS_API_LINK + id.to_s
188
- Teacher.new(verify_response response)
189
- rescue => e
190
- e
191
- end
192
- end
193
-
194
-
195
- ##
196
- # Return a single instance of Classes based upon the +id+ given.
197
-
198
- def self.get_class_by_id(id)
199
- #return $all_classes[id] unless $all_classes.count == 0
200
- begin
201
- response = RestClient.get CLASSES_API_LINK + id.to_s
202
- Classes.new(verify_response response)
203
- rescue => e
204
- e
205
- end
206
- end
207
-
208
- ##
209
- # Return a single instance of Student based upon the +id+ given.
210
-
211
- def self.get_student_by_id(id)
212
- #return $all_students[id] unless $all_students.count == 0
213
- begin
214
- response = RestClient.get STUDENTS_API_LINK + id.to_s
215
- Student.new(verify_response response)
216
- rescue => e
217
- e
218
- end
219
- end
220
-
221
- ##
222
- # Return a single instance of program based upon the +id+ given.
223
-
224
- def self.get_program_by_id(id)
225
- #return $all_programs[id] unless $all_programs.count == 0
119
+ def self.get_element_by_id(element_name, id)
226
120
  begin
227
- response = RestClient.get PROGRAMS_API_LINK + id.to_s
228
- Program.new(verify_response response)
121
+ response = RestClient.get Api_Links[element_name] + id.to_s
122
+ Builder_Element[element_name].call(response)
229
123
  rescue => e
230
124
  e
231
125
  end
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: 1.2.2
4
+ version: 2.0.0
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-03 00:00:00.000000000 Z
11
+ date: 2015-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -102,7 +102,6 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - ".gitignore"
105
- - ".travis.yml"
106
105
  - Appolo.gemspec
107
106
  - Gemfile
108
107
  - LICENSE.txt
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.2
4
-
5
- sudo: required