clever-ruby 0.14.0 → 1.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.
Files changed (297) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile +4 -1
  4. data/Makefile +10 -0
  5. data/README.md +175 -68
  6. data/Rakefile +6 -36
  7. data/circle.yml +1 -1
  8. data/clever-ruby.gemspec +43 -33
  9. data/docs/BadRequest.md +8 -0
  10. data/docs/DataApi.md +2144 -0
  11. data/docs/District.md +10 -0
  12. data/docs/DistrictAdmin.md +12 -0
  13. data/docs/DistrictAdminResponse.md +8 -0
  14. data/docs/DistrictAdminsResponse.md +8 -0
  15. data/docs/DistrictObject.md +8 -0
  16. data/docs/DistrictResponse.md +8 -0
  17. data/docs/DistrictStatus.md +15 -0
  18. data/docs/DistrictStatusResponse.md +8 -0
  19. data/docs/DistrictsCreated.md +10 -0
  20. data/docs/DistrictsDeleted.md +10 -0
  21. data/docs/DistrictsResponse.md +8 -0
  22. data/docs/DistrictsUpdated.md +10 -0
  23. data/docs/Event.md +9 -0
  24. data/docs/EventResponse.md +8 -0
  25. data/docs/EventsApi.md +424 -0
  26. data/docs/EventsResponse.md +8 -0
  27. data/docs/GradeLevelsResponse.md +8 -0
  28. data/docs/InternalError.md +8 -0
  29. data/docs/Location.md +13 -0
  30. data/docs/Name.md +10 -0
  31. data/docs/NotFound.md +8 -0
  32. data/docs/Principal.md +9 -0
  33. data/docs/School.md +22 -0
  34. data/docs/SchoolAdmin.md +14 -0
  35. data/docs/SchoolAdminObject.md +8 -0
  36. data/docs/SchoolAdminResponse.md +8 -0
  37. data/docs/SchoolAdminsResponse.md +8 -0
  38. data/docs/SchoolObject.md +8 -0
  39. data/docs/SchoolResponse.md +8 -0
  40. data/docs/SchooladminsCreated.md +10 -0
  41. data/docs/SchooladminsDeleted.md +10 -0
  42. data/docs/SchooladminsUpdated.md +10 -0
  43. data/docs/SchoolsCreated.md +10 -0
  44. data/docs/SchoolsDeleted.md +10 -0
  45. data/docs/SchoolsResponse.md +8 -0
  46. data/docs/SchoolsUpdated.md +10 -0
  47. data/docs/Section.md +25 -0
  48. data/docs/SectionObject.md +8 -0
  49. data/docs/SectionResponse.md +8 -0
  50. data/docs/SectionsCreated.md +10 -0
  51. data/docs/SectionsDeleted.md +10 -0
  52. data/docs/SectionsResponse.md +8 -0
  53. data/docs/SectionsUpdated.md +10 -0
  54. data/docs/Student.md +27 -0
  55. data/docs/StudentContact.md +16 -0
  56. data/docs/StudentContactObject.md +8 -0
  57. data/docs/StudentContactResponse.md +8 -0
  58. data/docs/StudentContactsResponse.md +8 -0
  59. data/docs/StudentObject.md +8 -0
  60. data/docs/StudentResponse.md +8 -0
  61. data/docs/StudentcontactsCreated.md +10 -0
  62. data/docs/StudentcontactsDeleted.md +10 -0
  63. data/docs/StudentcontactsUpdated.md +10 -0
  64. data/docs/StudentsCreated.md +10 -0
  65. data/docs/StudentsDeleted.md +10 -0
  66. data/docs/StudentsResponse.md +8 -0
  67. data/docs/StudentsUpdated.md +10 -0
  68. data/docs/Teacher.md +19 -0
  69. data/docs/TeacherObject.md +8 -0
  70. data/docs/TeacherResponse.md +8 -0
  71. data/docs/TeachersCreated.md +10 -0
  72. data/docs/TeachersDeleted.md +10 -0
  73. data/docs/TeachersResponse.md +8 -0
  74. data/docs/TeachersUpdated.md +10 -0
  75. data/docs/Term.md +10 -0
  76. data/git_push.sh +55 -0
  77. data/instructions.md +12 -0
  78. data/lib/clever-ruby.rb +89 -318
  79. data/lib/clever-ruby/api/data_api.rb +2090 -0
  80. data/lib/clever-ruby/api/events_api.rb +429 -0
  81. data/lib/clever-ruby/api_client.rb +401 -0
  82. data/lib/clever-ruby/api_error.rb +37 -0
  83. data/lib/clever-ruby/configuration.rb +187 -25
  84. data/lib/clever-ruby/models/bad_request.rb +187 -0
  85. data/lib/clever-ruby/models/district.rb +205 -0
  86. data/lib/clever-ruby/models/district_admin.rb +223 -0
  87. data/lib/clever-ruby/models/district_admin_response.rb +187 -0
  88. data/lib/clever-ruby/models/district_admins_response.rb +189 -0
  89. data/lib/clever-ruby/models/district_object.rb +187 -0
  90. data/lib/clever-ruby/models/district_response.rb +187 -0
  91. data/lib/clever-ruby/models/district_status.rb +250 -0
  92. data/lib/clever-ruby/models/district_status_response.rb +187 -0
  93. data/lib/clever-ruby/models/districts_created.rb +206 -0
  94. data/lib/clever-ruby/models/districts_deleted.rb +207 -0
  95. data/lib/clever-ruby/models/districts_response.rb +189 -0
  96. data/lib/clever-ruby/models/districts_updated.rb +207 -0
  97. data/lib/clever-ruby/models/event.rb +201 -0
  98. data/lib/clever-ruby/models/event_response.rb +187 -0
  99. data/lib/clever-ruby/models/events_response.rb +189 -0
  100. data/lib/clever-ruby/models/grade_levels_response.rb +189 -0
  101. data/lib/clever-ruby/models/internal_error.rb +187 -0
  102. data/lib/clever-ruby/models/location.rb +232 -0
  103. data/lib/clever-ruby/models/name.rb +205 -0
  104. data/lib/clever-ruby/models/not_found.rb +187 -0
  105. data/lib/clever-ruby/models/principal.rb +196 -0
  106. data/lib/clever-ruby/models/school.rb +313 -0
  107. data/lib/clever-ruby/models/school_admin.rb +243 -0
  108. data/lib/clever-ruby/models/school_admin_object.rb +187 -0
  109. data/lib/clever-ruby/models/school_admin_response.rb +187 -0
  110. data/lib/clever-ruby/models/school_admins_response.rb +189 -0
  111. data/lib/clever-ruby/models/school_object.rb +187 -0
  112. data/lib/clever-ruby/models/school_response.rb +187 -0
  113. data/lib/clever-ruby/models/schooladmins_created.rb +207 -0
  114. data/lib/clever-ruby/models/schooladmins_deleted.rb +207 -0
  115. data/lib/clever-ruby/models/schooladmins_updated.rb +207 -0
  116. data/lib/clever-ruby/models/schools_created.rb +207 -0
  117. data/lib/clever-ruby/models/schools_deleted.rb +207 -0
  118. data/lib/clever-ruby/models/schools_response.rb +189 -0
  119. data/lib/clever-ruby/models/schools_updated.rb +207 -0
  120. data/lib/clever-ruby/models/section.rb +344 -0
  121. data/lib/clever-ruby/models/section_object.rb +187 -0
  122. data/lib/clever-ruby/models/section_response.rb +187 -0
  123. data/lib/clever-ruby/models/sections_created.rb +207 -0
  124. data/lib/clever-ruby/models/sections_deleted.rb +207 -0
  125. data/lib/clever-ruby/models/sections_response.rb +189 -0
  126. data/lib/clever-ruby/models/sections_updated.rb +207 -0
  127. data/lib/clever-ruby/models/student.rb +360 -0
  128. data/lib/clever-ruby/models/student_contact.rb +259 -0
  129. data/lib/clever-ruby/models/student_contact_object.rb +187 -0
  130. data/lib/clever-ruby/models/student_contact_response.rb +187 -0
  131. data/lib/clever-ruby/models/student_contacts_response.rb +189 -0
  132. data/lib/clever-ruby/models/student_object.rb +187 -0
  133. data/lib/clever-ruby/models/student_response.rb +187 -0
  134. data/lib/clever-ruby/models/studentcontacts_created.rb +207 -0
  135. data/lib/clever-ruby/models/studentcontacts_deleted.rb +207 -0
  136. data/lib/clever-ruby/models/studentcontacts_updated.rb +207 -0
  137. data/lib/clever-ruby/models/students_created.rb +196 -0
  138. data/lib/clever-ruby/models/students_deleted.rb +206 -0
  139. data/lib/clever-ruby/models/students_response.rb +189 -0
  140. data/lib/clever-ruby/models/students_updated.rb +207 -0
  141. data/lib/clever-ruby/models/teacher.rb +288 -0
  142. data/lib/clever-ruby/models/teacher_object.rb +187 -0
  143. data/lib/clever-ruby/models/teacher_response.rb +187 -0
  144. data/lib/clever-ruby/models/teachers_created.rb +207 -0
  145. data/lib/clever-ruby/models/teachers_deleted.rb +207 -0
  146. data/lib/clever-ruby/models/teachers_response.rb +189 -0
  147. data/lib/clever-ruby/models/teachers_updated.rb +207 -0
  148. data/lib/clever-ruby/models/term.rb +205 -0
  149. data/lib/clever-ruby/version.rb +12 -4
  150. data/override/api_client.rb +401 -0
  151. data/override/config.json +5 -0
  152. data/override/models/districts_created.rb +206 -0
  153. data/override/models/districts_deleted.rb +207 -0
  154. data/override/models/districts_updated.rb +207 -0
  155. data/override/models/schooladmins_created.rb +207 -0
  156. data/override/models/schooladmins_deleted.rb +207 -0
  157. data/override/models/schooladmins_updated.rb +207 -0
  158. data/override/models/schools_created.rb +207 -0
  159. data/override/models/schools_deleted.rb +207 -0
  160. data/override/models/schools_updated.rb +207 -0
  161. data/override/models/sections_created.rb +207 -0
  162. data/override/models/sections_deleted.rb +207 -0
  163. data/override/models/sections_updated.rb +207 -0
  164. data/override/models/studentcontacts_created.rb +207 -0
  165. data/override/models/studentcontacts_deleted.rb +207 -0
  166. data/override/models/studentcontacts_updated.rb +207 -0
  167. data/override/models/students_created.rb +196 -0
  168. data/override/models/students_deleted.rb +206 -0
  169. data/override/models/students_updated.rb +207 -0
  170. data/override/models/teachers_created.rb +207 -0
  171. data/override/models/teachers_deleted.rb +207 -0
  172. data/override/models/teachers_updated.rb +207 -0
  173. data/override/override.sh +9 -0
  174. data/sample/sample.rb +16 -0
  175. metadata +252 -293
  176. data/.document +0 -5
  177. data/.gitignore +0 -22
  178. data/.rubocop.yml +0 -4
  179. data/.yardopts +0 -2
  180. data/LICENSE.txt +0 -20
  181. data/lib/clever-ruby/api_operations/list.rb +0 -130
  182. data/lib/clever-ruby/api_operations/nested_list.rb +0 -95
  183. data/lib/clever-ruby/api_operations/page.rb +0 -71
  184. data/lib/clever-ruby/api_operations/pagelist.rb +0 -43
  185. data/lib/clever-ruby/api_operations/results_list.rb +0 -31
  186. data/lib/clever-ruby/api_resource.rb +0 -174
  187. data/lib/clever-ruby/clever_object.rb +0 -246
  188. data/lib/clever-ruby/district.rb +0 -75
  189. data/lib/clever-ruby/district_admin.rb +0 -45
  190. data/lib/clever-ruby/errors/api_connection_error.rb +0 -5
  191. data/lib/clever-ruby/errors/api_error.rb +0 -5
  192. data/lib/clever-ruby/errors/authentication_error.rb +0 -5
  193. data/lib/clever-ruby/errors/clever_error.rb +0 -52
  194. data/lib/clever-ruby/errors/invalid_request_error.rb +0 -17
  195. data/lib/clever-ruby/event.rb +0 -61
  196. data/lib/clever-ruby/json.rb +0 -34
  197. data/lib/clever-ruby/nested_resource.rb +0 -41
  198. data/lib/clever-ruby/school.rb +0 -17
  199. data/lib/clever-ruby/school_admin.rb +0 -19
  200. data/lib/clever-ruby/section.rb +0 -17
  201. data/lib/clever-ruby/student.rb +0 -30
  202. data/lib/clever-ruby/teacher.rb +0 -17
  203. data/lib/clever-ruby/util.rb +0 -108
  204. data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_district_properly.yml +0 -52
  205. data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_event_properly.yml +0 -52
  206. data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_school_admin_properly.yml +0 -52
  207. data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_school_properly.yml +0 -52
  208. data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_section_properly.yml +0 -52
  209. data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_student_properly.yml +0 -52
  210. data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_teacher_properly.yml +0 -52
  211. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_district.yml +0 -101
  212. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_district_admin.yml +0 -90
  213. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_event.yml +0 -124
  214. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_school.yml +0 -113
  215. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_school_admin.yml +0 -101
  216. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_section.yml +0 -368
  217. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_student.yml +0 -176
  218. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_teacher.yml +0 -191
  219. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_districts_by_page.yml +0 -101
  220. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_districts_with_multiple_ids.yml +0 -101
  221. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_events_by_page.yml +0 -122
  222. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_events_with_multiple_ids.yml +0 -131
  223. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_school_admins_by_page.yml +0 -101
  224. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_school_admins_with_multiple_ids.yml +0 -101
  225. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_schools_by_page.yml +0 -110
  226. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_schools_with_multiple_ids.yml +0 -116
  227. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_sections_by_page.yml +0 -1168
  228. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_sections_with_multiple_ids.yml +0 -163
  229. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_students_by_page.yml +0 -1207
  230. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_students_with_multiple_ids.yml +0 -127
  231. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_teachers_by_page.yml +0 -190
  232. data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_teachers_with_multiple_ids.yml +0 -131
  233. data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_district.yml +0 -101
  234. data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_event.yml +0 -122
  235. data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_school.yml +0 -110
  236. data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_school_admin.yml +0 -101
  237. data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_section.yml +0 -1168
  238. data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_student.yml +0 -1207
  239. data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_teacher.yml +0 -190
  240. data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_events.yml +0 -526
  241. data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_schools.yml +0 -240
  242. data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_sections.yml +0 -3674
  243. data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_students.yml +0 -2387
  244. data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_teachers.yml +0 -717
  245. data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_events.yml +0 -152
  246. data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_schools.yml +0 -211
  247. data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_sections.yml +0 -3649
  248. data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_students.yml +0 -2362
  249. data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_teachers.yml +0 -688
  250. data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_events.yml +0 -89
  251. data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_school_admins.yml +0 -101
  252. data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_schools.yml +0 -164
  253. data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_sections.yml +0 -1168
  254. data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_students.yml +0 -1207
  255. data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_teachers.yml +0 -324
  256. data/test/data/vcr_cassettes/Clever_NestedResource/must_include_auth_token_in_linked_resources.yml +0 -197
  257. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_events.yml +0 -237
  258. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_schools.yml +0 -217
  259. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_sections.yml +0 -2333
  260. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_students.yml +0 -2411
  261. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_teachers.yml +0 -377
  262. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_admin_s_schools.yml +0 -205
  263. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_district.yml +0 -162
  264. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_events.yml +0 -215
  265. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_sections.yml +0 -1153
  266. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_students.yml +0 -1081
  267. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_teachers.yml +0 -283
  268. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_district.yml +0 -417
  269. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_events.yml +0 -470
  270. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_school.yml +0 -420
  271. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_students.yml +0 -482
  272. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_teacher.yml +0 -418
  273. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_district.yml +0 -226
  274. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_events.yml +0 -279
  275. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_school.yml +0 -229
  276. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_sections.yml +0 -301
  277. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_teachers.yml +0 -277
  278. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_district.yml +0 -240
  279. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_events.yml +0 -293
  280. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_school.yml +0 -243
  281. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_sections.yml +0 -321
  282. data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_students.yml +0 -323
  283. data/test/data/vcr_cassettes/Error_handling/raises_an_InvalidRequestError_when_given_a_bad_created_since.yml +0 -151
  284. data/test/data/vcr_cassettes/Optional_attributes/has_the_expected_value_for_an_optional_attribute_that_is_present.yml +0 -55
  285. data/test/data/vcr_cassettes/last_method/page/has_working_first_and_last_methods.yml +0 -800
  286. data/test/integration/api_operations/list_test.rb +0 -117
  287. data/test/integration/district_test.rb +0 -53
  288. data/test/integration/district_with_non_global_token_test.rb +0 -88
  289. data/test/integration/error_handling_test.rb +0 -17
  290. data/test/integration/last_test.rb +0 -56
  291. data/test/integration/nested_resource_test.rb +0 -31
  292. data/test/test_helper.rb +0 -18
  293. data/test/unit/api_resource_test.rb +0 -48
  294. data/test/unit/clever_test.rb +0 -65
  295. data/test/unit/configuration_test.rb +0 -37
  296. data/test/unit/event_test.rb +0 -57
  297. data/test/unit/optional_attributes_test.rb +0 -27
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- doc_coverage.txt
7
- .rvmrc
8
- .ruby-version
9
- .ruby-gemset
10
- Gemfile.lock
11
- InstalledFiles
12
- _yardoc
13
- coverage
14
- doc/
15
- lib/bundler/man
16
- pkg
17
- rdoc
18
- spec/reports
19
- test/tmp
20
- test/version_tmp
21
- tmp
22
- *~
@@ -1,4 +0,0 @@
1
- Metrics/LineLength:
2
- Max: 100
3
- Metrics/MethodLength:
4
- Max: 20
data/.yardopts DELETED
@@ -1,2 +0,0 @@
1
- --markup markdown
2
- --title clever-ruby
@@ -1,20 +0,0 @@
1
- Copyright (c) 2012 Rafael Garcia
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,130 +0,0 @@
1
- module Clever
2
- # API Operations
3
- module APIOperations
4
- # A list of API resource instances
5
- module List
6
- # Class methods for those that include List
7
- # @api public
8
- module ClassMethods
9
- # Get all elements of a resource
10
- # @api public
11
- # @deprecated This can be costly since it places all matching elements
12
- # in memory. Instead just iterate over the collection using each.
13
- # @param filters [Hash] parameters to apply, as per the Clever API spec
14
- # @return [Array] array of all elements matching the request
15
- # @example
16
- # Clever::District.all
17
- def all(filters = {}, headers = {})
18
- accum = []
19
- Clever::APIOperations::PageList.new(url, filters, headers).each do |page|
20
- accum += page.all
21
- end
22
- accum
23
- end
24
-
25
- # Get elements of a resource. Supports 1 or more ids, or open-ended query
26
- # @api public
27
- # @param id [String, Array, nil] ID or array of ids to match, or nil
28
- # for query
29
- # @param filters [Hash, nil] Query parameters to pass, as per Clever API spec
30
- # @return [Clever::APIResource, Clever::APIOperations::ResultsList]
31
- # single resource or iterable list of results
32
- # @raise [ArgumentError] Bad ID/IDs provided
33
- # @example
34
- # # Get first 20 clever districts
35
- # districts = Clever::District.find.take 20
36
- #
37
- # # Get specific district
38
- # id = '...'
39
- # district = Clever::District.find id
40
- #
41
- # # Get districts with given ids
42
- # ids = ['...', '...']
43
- # districts = Clever::District.find ids
44
- def find(id = nil, filters = {}, headers = {})
45
- if id.is_a? Array
46
- unless id.select { |e| !Clever::Util.valid_id? e }.empty?
47
- fail ArgumentError, 'Array of IDs must only contain valid ObjectIDs'
48
- end
49
-
50
- filters[:where] = JSON.dump(_id: { :'$in' => id })
51
- end
52
-
53
- if id.nil? || id.is_a?(Array)
54
- Clever::APIOperations::PageList.new(url, filters, headers).to_results_list
55
- elsif Clever::Util.valid_id? id
56
- retrieve id
57
- else
58
- fail ArgumentError, 'id must be a valid ObjectID, an array of them, or nil.'
59
- end
60
- end
61
-
62
- # Query for the first element or n elements in the resource
63
- # @api public
64
- # @param num [nil, Integer] If nil, first elem; else, num elems to fetch
65
- # @param filters [Hash] Filters to request with, as per Clever API spec
66
- # @return [CleverObject, Clever::APIOperations::Page] elem, or
67
- # elems found.
68
- # @example
69
- # first_elem = Clever::District.first
70
- # first_elems = Clever::District.first 20
71
- # first_elems.each do |e|
72
- # puts e.name
73
- # end
74
- def first(num = nil, filters = {}, headers = {})
75
- if num.nil?
76
- filters[:limit] = 1
77
- response = Clever.request :get, url, filters, headers
78
- Util.convert_to_clever_object response[:data].last
79
- else
80
- filters[:limit] = num
81
- Clever::APIOperations::PageList.new(url, filters, headers).first
82
- end
83
- end
84
-
85
- # Query for the last element or n elements in the resource
86
- # @api public
87
- # @param num [nil, Integer] If nil, last elem; else, num elems to fetch
88
- # @param filters [Hash] Filters to request with, as per Clever API spec
89
- # @return [CleverObject, Clever::APIOperations::ResultsList] elem, or
90
- # elems found. If list, sorted in ascending order of ids.
91
- # @example
92
- # last_elem = Clever::District.last
93
- # last_elems = Clever::District.last 20
94
- # last_elems.each do |e|
95
- # puts e.name
96
- # end
97
- def last(num = nil, filters = {}, headers = {})
98
- filters[:ending_before] = 'last'
99
- if num.nil?
100
- filters[:limit] = 1
101
- response = Clever.request :get, url, filters, headers
102
- Util.convert_to_clever_object response[:data].last
103
- else
104
- filters[:limit] = num
105
- Clever::APIOperations::PageList.new(url, filters, headers).to_results_list
106
- end
107
- end
108
-
109
- # Requests number of elements matching the query
110
- # @api public
111
- # @param filters [Hash, nil] Query parameters to pass, as per Clever API spec
112
- # @return [Integer] Number of elements matching
113
- # @example
114
- # num_districts = Clever::District.count
115
- def count(filters = {}, headers = {})
116
- filters[:count] = true
117
- response = Clever.request :get, url, filters, headers
118
- response[:count]
119
- end
120
- end
121
-
122
- # Add ClassMethods to classes that include List
123
- # @api private
124
- # @return [nil]
125
- def self.included(base)
126
- base.extend ClassMethods
127
- end
128
- end
129
- end
130
- end
@@ -1,95 +0,0 @@
1
- module Clever
2
- module APIOperations
3
- # Methods for interacting with the API on nested resources
4
- # TODO: find a way to not duplicate list.rb code
5
- module NestedList
6
- # Query a nested list with Clever API params, overriding initialized keys
7
- # @api public
8
- # @note You don't need to call this if you aren't using additional filters;
9
- # instead just iterate on the NestedResource itself.
10
- # @param filters [Hash] Parameters to use
11
- # @return [Clever::APIOperations::ResultList] list of results
12
- # @example
13
- # # Without any overriding
14
- # district = Clever::Districts.retrieve id
15
- # district.schools.find(starting_after: lower_bound).each do |school|
16
- # puts school.name
17
- # end
18
- #
19
- # # With overriding
20
- # district = Clever::Districts.retrieve id
21
- # schools = district.schools(starting_after: lower_bound)
22
- # # The above filter has been overridden for the query below!
23
- # schools.find(starting_after: even_lower_bound).each do |school|
24
- # puts school.name
25
- # end
26
- def find(filters = {})
27
- filters = @filters.merge filters
28
- Clever::APIOperations::PageList.new(@uri, filters, headers).to_results_list
29
- end
30
-
31
- # Request the number of elements in a nested list from the API
32
- # @note This does not count a data structure in memory; it runs an HTTP query!
33
- # @api public
34
- # @param filters [Hash] Parameters to use
35
- # @return [Integer] Results
36
- # @example
37
- # district = Clever::Districts.retrieve id
38
- # num_schools_in_district = district.schools.count
39
- def count(filters = {})
40
- filters = @filters.merge filters
41
- filters[:count] = true
42
- response = Clever.request :get, @uri, filters, headers
43
- response[:count]
44
- end
45
-
46
- # Query for the first element or n elements in the resource
47
- # @api public
48
- # @param num [nil, Integer] If nil, last elem; else, num elems to fetch
49
- # @param filters [Hash] Filters to request with, as per Clever API spec
50
- # @return [CleverObject, Clever::APIOperations::Page] elem, or
51
- # elems found. If list, sorted in ascending order of ids.
52
- # @example
53
- # first_elem = Clever::District.first
54
- # first_elems = Clever::District.first 20
55
- # first_elems.each do |e|
56
- # puts e.name
57
- # end
58
- def first(num = nil, filters = {})
59
- filters = @filters.merge filters
60
- if num.nil?
61
- filters[:limit] = 1
62
- response = Clever.request :get, url, filters, headers
63
- Util.convert_to_clever_object response[:data].last
64
- else
65
- filters[:limit] = num
66
- Clever::APIOperations::PageList.new(url, filters, headers).first
67
- end
68
- end
69
-
70
- # Query for the last element or n elements in the resource
71
- # @api public
72
- # @param num [nil, Integer] If nil, last elem; else, num elems to fetch
73
- # @return [CleverObject, Clever::APIOperations::ResultsList] elem, or
74
- # elems found. If list, sorted in ascending order of ids.
75
- # @example
76
- # last_elem = Clever::District.last
77
- # last_elems = Clever::District.last 20
78
- # last_elems.each do |e|
79
- # puts e.name
80
- # end
81
- def last(num = nil, filters = {})
82
- filters = @filters.merge filters
83
- filters[:ending_before] = 'last'
84
- if num.nil?
85
- filters[:limit] = 1
86
- response = Clever.request :get, @uri, filters, headers
87
- Util.convert_to_clever_object response[:data].last
88
- else
89
- filters[:limit] = num
90
- Clever::APIOperations::PageList.new(@uri, filters, headers).to_results_list
91
- end
92
- end
93
- end
94
- end
95
- end
@@ -1,71 +0,0 @@
1
- module Clever
2
- module APIOperations
3
- # Represents a page of data
4
- class Page
5
- include Enumerable
6
-
7
- # Request a page of data and store the results in this instance
8
- # @api private
9
- # @return [Clever::APIOperations::Page]
10
- # @example
11
- # page = Page.new '/v1.1/districts'
12
- def initialize(uri, filters = {}, headers = {})
13
- @uri = uri
14
- @filters = filters
15
- @headers = headers
16
-
17
- response = Clever.request :get, uri, filters, @headers
18
-
19
- @auth_token = @headers[:Authorization].split[1]
20
- response[:data].map { |x| x[:data][:auth_token] = @auth_token }
21
-
22
- @all = Util.convert_to_clever_object response[:data]
23
- @links = {}
24
- response[:links].each do |link|
25
- @links[link[:rel].to_sym] = link[:uri]
26
- end
27
- end
28
-
29
- # Gets next page if one is present, nil otherwise
30
- # @api private
31
- # @return [Clever::APIOperations::Page, nil] Next page, or nil if last
32
- # @example
33
- # next_page = page.next
34
- # unless next_page.nil?
35
- # next_page.each do |elem| puts elem; end
36
- def next
37
- @links.key?(:next) ? Page.new(@links[:next], {}, @headers) : nil
38
- end
39
-
40
- # Iterate over all elements in the page
41
- # @api private
42
- # @return [Array] List of all elements
43
- # @example
44
- # page.each { |elem| puts elem }
45
- def each(&blk)
46
- @all.each(&blk)
47
- end
48
-
49
- # Get all elements in page
50
- # @api private
51
- # @return [Array] List of all elements
52
- # @example
53
- # all_elems = page.all
54
- attr_reader :all
55
-
56
- # Retrieve the last element or n elements in the resource
57
- # @api public
58
- # @param num [nil, Integer] If nil, last elem; else, num elems to fetch
59
- # @return [CleverObject, Clever::APIOperations::Page] elem, or
60
- # elems found. If list, sorted in ascending order of ids.
61
- # @example
62
- # elems = Clever::District.first(20)
63
- # last_elem = elems.last
64
- # last_elems = elems.last 5
65
- def last(num = nil)
66
- return @all.last num if num
67
- @all.last
68
- end
69
- end
70
- end
71
- end
@@ -1,43 +0,0 @@
1
- module Clever
2
- module APIOperations
3
- # Handles paginated requests.
4
- class PageList
5
- include Enumerable
6
-
7
- # Create a new PageList, without making any requests immediately
8
- # @api private
9
- # @return [PageList]
10
- def initialize(uri, filters = {}, headers = {})
11
- @uri = uri
12
- @filters = filters
13
- @headers = headers
14
- end
15
-
16
- # Iterate through each page, making requests as you iterate
17
- # @api private
18
- # @return [nil]
19
- # @example
20
- # pagelist.each do |page|
21
- # page.each do |elem|
22
- # puts elem
23
- # end
24
- # end
25
- def each
26
- page = Page.new @uri, @filters, @headers
27
- until page.nil?
28
- yield page
29
- page = page.next
30
- end
31
- end
32
-
33
- # Convert PageList into a ResultsList for easier iteration
34
- # @api private
35
- # @return [Clever::APIOperations::ResultsList]
36
- # @example
37
- # pagelist.to_results_list.each { |elem| puts elem }
38
- def to_results_list
39
- Clever::APIOperations::ResultsList.new self
40
- end
41
- end
42
- end
43
- end
@@ -1,31 +0,0 @@
1
- module Clever
2
- module APIOperations
3
- # Represents a list of results for a paged request.
4
- class ResultsList
5
- include Enumerable
6
-
7
- # Create a results list from a PageList
8
- # @api private
9
- # @return [ResultsList]
10
- def initialize(pagelist)
11
- @pages = pagelist
12
- end
13
-
14
- # Iterate over results list
15
- # @api public
16
- # @return [nil]
17
- # @example
18
- # results = Clever::District.find # returns a ResultsList
19
- # results.each do |district|
20
- # puts district.name
21
- # end
22
- def each
23
- @pages.each do |page|
24
- page.each do |elem|
25
- yield elem
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,174 +0,0 @@
1
- module Clever
2
- # Superclass of API resources in the Clever API. API objects are to be
3
- # singular, not plural; as in class Student, for the /students endpoint.
4
- class APIResource < CleverObject
5
- @resources = []
6
-
7
- class << self
8
- # Get valid API resources
9
- # @api private
10
- # @return [Array] List of valid API resource classes
11
- attr_reader :resources
12
-
13
- # Get a list of nested resources in the Clever API for this resource
14
- # @api private
15
- # @return [Array] List of resources nested under this resource
16
- attr_reader :linked_resources
17
-
18
- # Get the plural form of a resource's name
19
- #
20
- # For instance, for class Student, returns "students"
21
- # @api private
22
- # @return [String] Plural name of a resource
23
- attr_reader :plural
24
-
25
- # Get the URI corresponding to a resource
26
- #
27
- # For instance, for class Student, urls start with /v1.1/students, so
28
- # this returns "students"
29
- # @api private
30
- # @return [String] URI corresponding to a resource
31
- attr_reader :uri
32
-
33
- # Get the event name corresponding to a resource
34
- #
35
- # For some events, event type names have an inconsistent format with plurals and URIs.
36
- # For example, SchoolAdmin events are "schooladmins"
37
- # @api private
38
- # @return [String] event type name of a resource
39
- attr_reader :event_name
40
- end
41
-
42
- # Registers valid API resources
43
- # @api private
44
- # @return [Object]
45
- def self.inherited(child_class)
46
- @resources << child_class
47
- super
48
- end
49
-
50
- # Check if the name of an APIResource is in its singular form
51
- #
52
- # For instance, the Student API resource can be referred to as
53
- # "student" or "students"; this returns true on the former.
54
- # @api private
55
- # @param word [String] APIResource name to check
56
- # @return [Boolean] False if plural, true if singular
57
- def self.singular?(resource_name)
58
- klass = named resource_name
59
- unless klass
60
- fail 'Clever::APIResource only supports checking singularity of words '\
61
- 'that refer to children of Clever::APIResource; received ' \
62
- "'#{resource_name}'"
63
- end
64
-
65
- klass.plural != resource_name.downcase
66
- end
67
-
68
- # Get a canonical name for a resource
69
- # @api private
70
- # @return [String]
71
- def self.shortname
72
- name.split('::')[-1].gsub(/([a-z\d])([A-Z])/, '\1_\2'.freeze).downcase
73
- end
74
-
75
- # Convert the uri of a resource to its APIResource subclass
76
- # @api private
77
- # @return [APIResource]
78
- def self.named(name)
79
- name = name.to_s.downcase
80
- matching = resources.select do |res|
81
- (name == res.shortname) || (name == res.plural) || (name == res.event_name)
82
- end
83
- return nil if matching.empty?
84
- matching.first
85
- end
86
-
87
- # Get URL for a resource
88
- # @api private
89
- # @return [String] url to query for a resource
90
- def self.url
91
- if self == APIResource
92
- fail NotImplementedError, 'APIResource is an abstract class. You should perform actions '\
93
- 'on its subclasses (School, Student, etc.)'
94
- end
95
- "v1.1/#{uri}"
96
- end
97
-
98
- # Get URL for an instance of a resource
99
- # @api private
100
- # @return [String] url to query for an instance of a resource
101
- def url
102
- id = self['id']
103
- unless id
104
- fail InvalidRequestError.new(
105
- "Could not determine which URL to request: #{self.class} instance has " \
106
- "invalid ID: #{id.inspect}", 'id')
107
- end
108
- "#{self.class.url}/#{CGI.escape id}"
109
- end
110
-
111
- # Request the current resource data and update this object
112
- # @api private
113
- # @return [APIResource] The updated resource instance
114
- def refresh
115
- response = Clever.request :get, url, nil, headers
116
- refresh_from response[:data]
117
-
118
- @links = response[:links].map do
119
- |link| { :"#{link[:rel]}" => link[:uri] }
120
- end.reduce({}, :merge)
121
- self
122
- end
123
-
124
- # Get hypermedia links for this resource instance
125
- # @api private
126
- # @return [Array] list of links for this resource instance
127
- attr_reader :links
128
-
129
- # Get an instance of a resource
130
- # @api public
131
- # @param id [String] ID of the instance to find
132
- # @return [APIResource] resource instance
133
- # @example
134
- # id = '...'
135
- # district = Clever::District.retrieve id
136
- def self.retrieve(id, auth_token = nil)
137
- instance = new id, auth_token
138
- instance.refresh
139
- instance
140
- end
141
-
142
- # Get the URI for a hypermedia link
143
- # @api private
144
- # @return [String]
145
- def get_link_uri(resource_type)
146
- refresh if links.nil?
147
- links[resource_type.to_sym]
148
- end
149
-
150
- # Construct an APIResource. Generates methods for nested resources
151
- # @abstract
152
- # @api private
153
- # @return [APIResource]
154
- def initialize(id, auth_token = nil)
155
- super id, auth_token
156
- return if self.class.linked_resources.nil?
157
-
158
- self.class.linked_resources.each do |resource|
159
- if APIResource.singular? resource.to_s
160
- # Get single resource
161
- self.class.send :define_method, resource do
162
- response = Clever.request :get, get_link_uri(resource), {}, headers
163
- return Util.convert_to_clever_object response
164
- end
165
- else
166
- # Get list of nested resources
167
- self.class.send :define_method, resource do |filters = {}|
168
- Clever::NestedResource.new get_link_uri(resource), filters, headers
169
- end
170
- end
171
- end
172
- end
173
- end
174
- end