clever-ruby 0.14.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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