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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile +4 -1
- data/Makefile +10 -0
- data/README.md +175 -68
- data/Rakefile +6 -36
- data/circle.yml +1 -1
- data/clever-ruby.gemspec +43 -33
- data/docs/BadRequest.md +8 -0
- data/docs/DataApi.md +2144 -0
- data/docs/District.md +10 -0
- data/docs/DistrictAdmin.md +12 -0
- data/docs/DistrictAdminResponse.md +8 -0
- data/docs/DistrictAdminsResponse.md +8 -0
- data/docs/DistrictObject.md +8 -0
- data/docs/DistrictResponse.md +8 -0
- data/docs/DistrictStatus.md +15 -0
- data/docs/DistrictStatusResponse.md +8 -0
- data/docs/DistrictsCreated.md +10 -0
- data/docs/DistrictsDeleted.md +10 -0
- data/docs/DistrictsResponse.md +8 -0
- data/docs/DistrictsUpdated.md +10 -0
- data/docs/Event.md +9 -0
- data/docs/EventResponse.md +8 -0
- data/docs/EventsApi.md +424 -0
- data/docs/EventsResponse.md +8 -0
- data/docs/GradeLevelsResponse.md +8 -0
- data/docs/InternalError.md +8 -0
- data/docs/Location.md +13 -0
- data/docs/Name.md +10 -0
- data/docs/NotFound.md +8 -0
- data/docs/Principal.md +9 -0
- data/docs/School.md +22 -0
- data/docs/SchoolAdmin.md +14 -0
- data/docs/SchoolAdminObject.md +8 -0
- data/docs/SchoolAdminResponse.md +8 -0
- data/docs/SchoolAdminsResponse.md +8 -0
- data/docs/SchoolObject.md +8 -0
- data/docs/SchoolResponse.md +8 -0
- data/docs/SchooladminsCreated.md +10 -0
- data/docs/SchooladminsDeleted.md +10 -0
- data/docs/SchooladminsUpdated.md +10 -0
- data/docs/SchoolsCreated.md +10 -0
- data/docs/SchoolsDeleted.md +10 -0
- data/docs/SchoolsResponse.md +8 -0
- data/docs/SchoolsUpdated.md +10 -0
- data/docs/Section.md +25 -0
- data/docs/SectionObject.md +8 -0
- data/docs/SectionResponse.md +8 -0
- data/docs/SectionsCreated.md +10 -0
- data/docs/SectionsDeleted.md +10 -0
- data/docs/SectionsResponse.md +8 -0
- data/docs/SectionsUpdated.md +10 -0
- data/docs/Student.md +27 -0
- data/docs/StudentContact.md +16 -0
- data/docs/StudentContactObject.md +8 -0
- data/docs/StudentContactResponse.md +8 -0
- data/docs/StudentContactsResponse.md +8 -0
- data/docs/StudentObject.md +8 -0
- data/docs/StudentResponse.md +8 -0
- data/docs/StudentcontactsCreated.md +10 -0
- data/docs/StudentcontactsDeleted.md +10 -0
- data/docs/StudentcontactsUpdated.md +10 -0
- data/docs/StudentsCreated.md +10 -0
- data/docs/StudentsDeleted.md +10 -0
- data/docs/StudentsResponse.md +8 -0
- data/docs/StudentsUpdated.md +10 -0
- data/docs/Teacher.md +19 -0
- data/docs/TeacherObject.md +8 -0
- data/docs/TeacherResponse.md +8 -0
- data/docs/TeachersCreated.md +10 -0
- data/docs/TeachersDeleted.md +10 -0
- data/docs/TeachersResponse.md +8 -0
- data/docs/TeachersUpdated.md +10 -0
- data/docs/Term.md +10 -0
- data/git_push.sh +55 -0
- data/instructions.md +12 -0
- data/lib/clever-ruby.rb +89 -318
- data/lib/clever-ruby/api/data_api.rb +2090 -0
- data/lib/clever-ruby/api/events_api.rb +429 -0
- data/lib/clever-ruby/api_client.rb +401 -0
- data/lib/clever-ruby/api_error.rb +37 -0
- data/lib/clever-ruby/configuration.rb +187 -25
- data/lib/clever-ruby/models/bad_request.rb +187 -0
- data/lib/clever-ruby/models/district.rb +205 -0
- data/lib/clever-ruby/models/district_admin.rb +223 -0
- data/lib/clever-ruby/models/district_admin_response.rb +187 -0
- data/lib/clever-ruby/models/district_admins_response.rb +189 -0
- data/lib/clever-ruby/models/district_object.rb +187 -0
- data/lib/clever-ruby/models/district_response.rb +187 -0
- data/lib/clever-ruby/models/district_status.rb +250 -0
- data/lib/clever-ruby/models/district_status_response.rb +187 -0
- data/lib/clever-ruby/models/districts_created.rb +206 -0
- data/lib/clever-ruby/models/districts_deleted.rb +207 -0
- data/lib/clever-ruby/models/districts_response.rb +189 -0
- data/lib/clever-ruby/models/districts_updated.rb +207 -0
- data/lib/clever-ruby/models/event.rb +201 -0
- data/lib/clever-ruby/models/event_response.rb +187 -0
- data/lib/clever-ruby/models/events_response.rb +189 -0
- data/lib/clever-ruby/models/grade_levels_response.rb +189 -0
- data/lib/clever-ruby/models/internal_error.rb +187 -0
- data/lib/clever-ruby/models/location.rb +232 -0
- data/lib/clever-ruby/models/name.rb +205 -0
- data/lib/clever-ruby/models/not_found.rb +187 -0
- data/lib/clever-ruby/models/principal.rb +196 -0
- data/lib/clever-ruby/models/school.rb +313 -0
- data/lib/clever-ruby/models/school_admin.rb +243 -0
- data/lib/clever-ruby/models/school_admin_object.rb +187 -0
- data/lib/clever-ruby/models/school_admin_response.rb +187 -0
- data/lib/clever-ruby/models/school_admins_response.rb +189 -0
- data/lib/clever-ruby/models/school_object.rb +187 -0
- data/lib/clever-ruby/models/school_response.rb +187 -0
- data/lib/clever-ruby/models/schooladmins_created.rb +207 -0
- data/lib/clever-ruby/models/schooladmins_deleted.rb +207 -0
- data/lib/clever-ruby/models/schooladmins_updated.rb +207 -0
- data/lib/clever-ruby/models/schools_created.rb +207 -0
- data/lib/clever-ruby/models/schools_deleted.rb +207 -0
- data/lib/clever-ruby/models/schools_response.rb +189 -0
- data/lib/clever-ruby/models/schools_updated.rb +207 -0
- data/lib/clever-ruby/models/section.rb +344 -0
- data/lib/clever-ruby/models/section_object.rb +187 -0
- data/lib/clever-ruby/models/section_response.rb +187 -0
- data/lib/clever-ruby/models/sections_created.rb +207 -0
- data/lib/clever-ruby/models/sections_deleted.rb +207 -0
- data/lib/clever-ruby/models/sections_response.rb +189 -0
- data/lib/clever-ruby/models/sections_updated.rb +207 -0
- data/lib/clever-ruby/models/student.rb +360 -0
- data/lib/clever-ruby/models/student_contact.rb +259 -0
- data/lib/clever-ruby/models/student_contact_object.rb +187 -0
- data/lib/clever-ruby/models/student_contact_response.rb +187 -0
- data/lib/clever-ruby/models/student_contacts_response.rb +189 -0
- data/lib/clever-ruby/models/student_object.rb +187 -0
- data/lib/clever-ruby/models/student_response.rb +187 -0
- data/lib/clever-ruby/models/studentcontacts_created.rb +207 -0
- data/lib/clever-ruby/models/studentcontacts_deleted.rb +207 -0
- data/lib/clever-ruby/models/studentcontacts_updated.rb +207 -0
- data/lib/clever-ruby/models/students_created.rb +196 -0
- data/lib/clever-ruby/models/students_deleted.rb +206 -0
- data/lib/clever-ruby/models/students_response.rb +189 -0
- data/lib/clever-ruby/models/students_updated.rb +207 -0
- data/lib/clever-ruby/models/teacher.rb +288 -0
- data/lib/clever-ruby/models/teacher_object.rb +187 -0
- data/lib/clever-ruby/models/teacher_response.rb +187 -0
- data/lib/clever-ruby/models/teachers_created.rb +207 -0
- data/lib/clever-ruby/models/teachers_deleted.rb +207 -0
- data/lib/clever-ruby/models/teachers_response.rb +189 -0
- data/lib/clever-ruby/models/teachers_updated.rb +207 -0
- data/lib/clever-ruby/models/term.rb +205 -0
- data/lib/clever-ruby/version.rb +12 -4
- data/override/api_client.rb +401 -0
- data/override/config.json +5 -0
- data/override/models/districts_created.rb +206 -0
- data/override/models/districts_deleted.rb +207 -0
- data/override/models/districts_updated.rb +207 -0
- data/override/models/schooladmins_created.rb +207 -0
- data/override/models/schooladmins_deleted.rb +207 -0
- data/override/models/schooladmins_updated.rb +207 -0
- data/override/models/schools_created.rb +207 -0
- data/override/models/schools_deleted.rb +207 -0
- data/override/models/schools_updated.rb +207 -0
- data/override/models/sections_created.rb +207 -0
- data/override/models/sections_deleted.rb +207 -0
- data/override/models/sections_updated.rb +207 -0
- data/override/models/studentcontacts_created.rb +207 -0
- data/override/models/studentcontacts_deleted.rb +207 -0
- data/override/models/studentcontacts_updated.rb +207 -0
- data/override/models/students_created.rb +196 -0
- data/override/models/students_deleted.rb +206 -0
- data/override/models/students_updated.rb +207 -0
- data/override/models/teachers_created.rb +207 -0
- data/override/models/teachers_deleted.rb +207 -0
- data/override/models/teachers_updated.rb +207 -0
- data/override/override.sh +9 -0
- data/sample/sample.rb +16 -0
- metadata +252 -293
- data/.document +0 -5
- data/.gitignore +0 -22
- data/.rubocop.yml +0 -4
- data/.yardopts +0 -2
- data/LICENSE.txt +0 -20
- data/lib/clever-ruby/api_operations/list.rb +0 -130
- data/lib/clever-ruby/api_operations/nested_list.rb +0 -95
- data/lib/clever-ruby/api_operations/page.rb +0 -71
- data/lib/clever-ruby/api_operations/pagelist.rb +0 -43
- data/lib/clever-ruby/api_operations/results_list.rb +0 -31
- data/lib/clever-ruby/api_resource.rb +0 -174
- data/lib/clever-ruby/clever_object.rb +0 -246
- data/lib/clever-ruby/district.rb +0 -75
- data/lib/clever-ruby/district_admin.rb +0 -45
- data/lib/clever-ruby/errors/api_connection_error.rb +0 -5
- data/lib/clever-ruby/errors/api_error.rb +0 -5
- data/lib/clever-ruby/errors/authentication_error.rb +0 -5
- data/lib/clever-ruby/errors/clever_error.rb +0 -52
- data/lib/clever-ruby/errors/invalid_request_error.rb +0 -17
- data/lib/clever-ruby/event.rb +0 -61
- data/lib/clever-ruby/json.rb +0 -34
- data/lib/clever-ruby/nested_resource.rb +0 -41
- data/lib/clever-ruby/school.rb +0 -17
- data/lib/clever-ruby/school_admin.rb +0 -19
- data/lib/clever-ruby/section.rb +0 -17
- data/lib/clever-ruby/student.rb +0 -30
- data/lib/clever-ruby/teacher.rb +0 -17
- data/lib/clever-ruby/util.rb +0 -108
- data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_district_properly.yml +0 -52
- data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_event_properly.yml +0 -52
- data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_school_admin_properly.yml +0 -52
- data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_school_properly.yml +0 -52
- data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_section_properly.yml +0 -52
- data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_student_properly.yml +0 -52
- data/test/data/vcr_cassettes/Clever_APIOperations_List/counts_teacher_properly.yml +0 -52
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_district.yml +0 -101
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_district_admin.yml +0 -90
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_event.yml +0 -124
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_school.yml +0 -113
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_school_admin.yml +0 -101
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_section.yml +0 -368
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_student.yml +0 -176
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_a_single_teacher.yml +0 -191
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_districts_by_page.yml +0 -101
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_districts_with_multiple_ids.yml +0 -101
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_events_by_page.yml +0 -122
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_events_with_multiple_ids.yml +0 -131
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_school_admins_by_page.yml +0 -101
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_school_admins_with_multiple_ids.yml +0 -101
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_schools_by_page.yml +0 -110
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_schools_with_multiple_ids.yml +0 -116
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_sections_by_page.yml +0 -1168
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_sections_with_multiple_ids.yml +0 -163
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_students_by_page.yml +0 -1207
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_students_with_multiple_ids.yml +0 -127
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_teachers_by_page.yml +0 -190
- data/test/data/vcr_cassettes/Clever_APIOperations_List/finds_teachers_with_multiple_ids.yml +0 -131
- data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_district.yml +0 -101
- data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_event.yml +0 -122
- data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_school.yml +0 -110
- data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_school_admin.yml +0 -101
- data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_section.yml +0 -1168
- data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_student.yml +0 -1207
- data/test/data/vcr_cassettes/Clever_APIOperations_List/retrieves_all_teacher.yml +0 -190
- data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_events.yml +0 -526
- data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_schools.yml +0 -240
- data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_sections.yml +0 -3674
- data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_students.yml +0 -2387
- data/test/data/vcr_cassettes/Clever_District/pages_methods/pages_a_district_s_teachers.yml +0 -717
- data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_events.yml +0 -152
- data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_schools.yml +0 -211
- data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_sections.yml +0 -3649
- data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_students.yml +0 -2362
- data/test/data/vcr_cassettes/Clever_District_without_global_token/pages_methods/pages_a_district_s_teachers.yml +0 -688
- data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_events.yml +0 -89
- data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_school_admins.yml +0 -101
- data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_schools.yml +0 -164
- data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_sections.yml +0 -1168
- data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_students.yml +0 -1207
- data/test/data/vcr_cassettes/Clever_District_without_global_token/retrieves_a_district_s_teachers.yml +0 -324
- data/test/data/vcr_cassettes/Clever_NestedResource/must_include_auth_token_in_linked_resources.yml +0 -197
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_events.yml +0 -237
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_schools.yml +0 -217
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_sections.yml +0 -2333
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_students.yml +0 -2411
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_district_s_teachers.yml +0 -377
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_admin_s_schools.yml +0 -205
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_district.yml +0 -162
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_events.yml +0 -215
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_sections.yml +0 -1153
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_students.yml +0 -1081
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_school_s_teachers.yml +0 -283
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_district.yml +0 -417
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_events.yml +0 -470
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_school.yml +0 -420
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_students.yml +0 -482
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_section_s_teacher.yml +0 -418
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_district.yml +0 -226
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_events.yml +0 -279
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_school.yml +0 -229
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_sections.yml +0 -301
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_student_s_teachers.yml +0 -277
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_district.yml +0 -240
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_events.yml +0 -293
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_school.yml +0 -243
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_sections.yml +0 -321
- data/test/data/vcr_cassettes/Clever_NestedResource/retrieves_a_teacher_s_students.yml +0 -323
- data/test/data/vcr_cassettes/Error_handling/raises_an_InvalidRequestError_when_given_a_bad_created_since.yml +0 -151
- data/test/data/vcr_cassettes/Optional_attributes/has_the_expected_value_for_an_optional_attribute_that_is_present.yml +0 -55
- data/test/data/vcr_cassettes/last_method/page/has_working_first_and_last_methods.yml +0 -800
- data/test/integration/api_operations/list_test.rb +0 -117
- data/test/integration/district_test.rb +0 -53
- data/test/integration/district_with_non_global_token_test.rb +0 -88
- data/test/integration/error_handling_test.rb +0 -17
- data/test/integration/last_test.rb +0 -56
- data/test/integration/nested_resource_test.rb +0 -31
- data/test/test_helper.rb +0 -18
- data/test/unit/api_resource_test.rb +0 -48
- data/test/unit/clever_test.rb +0 -65
- data/test/unit/configuration_test.rb +0 -37
- data/test/unit/event_test.rb +0 -57
- data/test/unit/optional_attributes_test.rb +0 -27
data/.document
DELETED
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
|
-
*~
|
data/.rubocop.yml
DELETED
data/.yardopts
DELETED
data/LICENSE.txt
DELETED
@@ -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
|