oneroster 2.3.18 → 2.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 269540ac1adae115fcf0133d2fcc45f78240d9d6b42e0893e0dae6b313c96e77
4
- data.tar.gz: ac7ed53651a0d15bcd8a787b62aaff690f2d2cf8e1e834b9ca81abe65d07370b
3
+ metadata.gz: ac0acbc4043d8a4f9c27923592085c6dfdbcdccf982739a331514ed9dec4469a
4
+ data.tar.gz: 91d63689995e7b37a0c9814c2ebbacbd42c3d44d4e02b8502e28d8ae21c5d874
5
5
  SHA512:
6
- metadata.gz: 57c71058e2400618f80a3075723ab1ae03b7c428c117236f66780269ec9e011c79fc7412fafd9040934b67fc61c4fdd47ddb82bc53a5bf4b13ed7562081fecf8
7
- data.tar.gz: 66af86c94eea4f543873e071f855e852be2a0906c92410e24692612b131a3c73c331e2428f84292b01e35cbc1ded6472f175c2de6fe8506a63638291360751d8
6
+ metadata.gz: 6516b3419a838c610b88324b9c0692241565714326b6b30efe65616c6684fce7db7c6b470bfaba1d56ca3edd2aa061a7053cd7edd3ada5ebd20ef04cd9e5402a
7
+ data.tar.gz: 83c434b84756bc076b089289f6ae7d1f4c6644c0f9730663f47985b3e493120e5c5ec9ccac703dac6ac562b01f5d68d8e30f7e1ea6b9ca3aeca7e2290f0cffa6
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 2.7.5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oneroster (2.3.18)
4
+ oneroster (2.3.20)
5
5
  dry-inflector (~> 1.0.0)
6
6
  faraday
7
7
  faraday_middleware
@@ -11,11 +11,11 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- ast (2.4.0)
14
+ ast (2.4.2)
15
15
  builder (3.2.3)
16
16
  coderay (1.1.2)
17
17
  diff-lcs (1.3)
18
- docile (1.3.1)
18
+ docile (1.4.1)
19
19
  dry-inflector (1.0.0)
20
20
  faraday (1.10.3)
21
21
  faraday-em_http (~> 1.0)
@@ -43,8 +43,8 @@ GEM
43
43
  faraday_middleware (1.2.0)
44
44
  faraday (~> 1.0)
45
45
  hashie (5.0.0)
46
- jaro_winkler (1.5.2)
47
- json (2.2.0)
46
+ json (2.9.1)
47
+ language_server-protocol (3.17.0.4)
48
48
  metaclass (0.0.4)
49
49
  method_source (0.8.2)
50
50
  mocha (1.8.0)
@@ -56,18 +56,20 @@ GEM
56
56
  version_gem (~> 1.1)
57
57
  oauth-tty (1.0.5)
58
58
  version_gem (~> 1.1, >= 1.1.1)
59
- parallel (1.15.0)
60
- parser (2.6.2.0)
61
- ast (~> 2.4.0)
59
+ parallel (1.26.3)
60
+ parser (3.3.7.0)
61
+ ast (~> 2.4.1)
62
+ racc
62
63
  pry (0.10.4)
63
64
  coderay (~> 1.1.0)
64
65
  method_source (~> 0.8.1)
65
66
  slop (~> 3.4)
66
67
  pry-nav (0.2.4)
67
68
  pry (>= 0.9.10, < 0.11.0)
68
- psych (3.1.0)
69
- rainbow (3.0.0)
69
+ racc (1.8.1)
70
+ rainbow (3.1.1)
70
71
  rake (10.5.0)
72
+ regexp_parser (2.10.0)
71
73
  rspec (3.8.0)
72
74
  rspec-core (~> 3.8.0)
73
75
  rspec-expectations (~> 3.8.0)
@@ -84,27 +86,34 @@ GEM
84
86
  rspec_junit_formatter (0.2.2)
85
87
  builder (< 4)
86
88
  rspec-core (>= 2, < 4, != 2.12.0)
87
- rubocop (0.66.0)
88
- jaro_winkler (~> 1.5.1)
89
+ rubocop (1.71.0)
90
+ json (~> 2.3)
91
+ language_server-protocol (>= 3.17.0)
89
92
  parallel (~> 1.10)
90
- parser (>= 2.5, != 2.5.1.1)
91
- psych (>= 3.1.0)
93
+ parser (>= 3.3.0.2)
92
94
  rainbow (>= 2.2.2, < 4.0)
95
+ regexp_parser (>= 2.9.3, < 3.0)
96
+ rubocop-ast (>= 1.36.2, < 2.0)
93
97
  ruby-progressbar (~> 1.7)
94
- unicode-display_width (>= 1.4.0, < 1.6)
95
- ruby-progressbar (1.10.0)
98
+ unicode-display_width (>= 2.4.0, < 4.0)
99
+ rubocop-ast (1.38.0)
100
+ parser (>= 3.3.1.0)
101
+ ruby-progressbar (1.13.0)
96
102
  ruby2_keywords (0.0.5)
97
103
  simple_oauth (0.3.1)
98
- simplecov (0.16.1)
104
+ simplecov (0.22.0)
99
105
  docile (~> 1.1)
100
- json (>= 1.8, < 3)
101
- simplecov-html (~> 0.10.0)
102
- simplecov-html (0.10.2)
106
+ simplecov-html (~> 0.11)
107
+ simplecov_json_formatter (~> 0.1)
108
+ simplecov-html (0.13.1)
109
+ simplecov_json_formatter (0.1.4)
103
110
  slop (3.6.0)
104
111
  snaky_hash (2.0.1)
105
112
  hashie
106
113
  version_gem (~> 1.1, >= 1.1.1)
107
- unicode-display_width (1.5.0)
114
+ unicode-display_width (3.1.4)
115
+ unicode-emoji (~> 4.0, >= 4.0.4)
116
+ unicode-emoji (4.0.4)
108
117
  version_gem (1.1.3)
109
118
 
110
119
  PLATFORMS
@@ -119,8 +128,8 @@ DEPENDENCIES
119
128
  rake (~> 10.0)
120
129
  rspec (~> 3.0)
121
130
  rspec_junit_formatter
122
- rubocop
123
- simplecov
131
+ rubocop (~> 1.53)
132
+ simplecov (~> 0.22)
124
133
 
125
134
  BUNDLED WITH
126
135
  2.1.4
@@ -4,7 +4,8 @@ module OneRoster
4
4
  class Client
5
5
  attr_accessor :app_id, :app_token, :api_url, :token_url, :roster_app,
6
6
  :app_secret, :logger, :vendor_key,
7
- :username_source, :oauth_strategy, :staff_username_source, :token_content_type
7
+ :username_source, :oauth_strategy, :staff_username_source, :token_content_type,
8
+ :sentry_client
8
9
 
9
10
  attr_reader :authenticated
10
11
 
@@ -47,10 +48,18 @@ module OneRoster
47
48
  records.select { |record| record_uids_set.include?(record.uid) }
48
49
  end
49
50
 
51
+ def schools
52
+ authenticate
53
+
54
+ Paginator.fetch(connection, SCHOOLS_ENDPOINT,
55
+ :get, Types::School, client: self).force
56
+ end
57
+
50
58
  def classrooms(course_codes = [])
51
59
  authenticate
52
60
 
53
61
  oneroster_classes = classes
62
+ fetched_schools = schools
54
63
 
55
64
  terms_hash = terms.each_with_object({}) { |term, terms| terms[term.uid] = term }
56
65
 
@@ -61,6 +70,7 @@ module OneRoster
61
70
  next unless course
62
71
 
63
72
  term = terms_hash[oneroster_class.term_id&.first]
73
+ school = fetched_schools.find { |school| school.uid == oneroster_class.school_uid }
64
74
 
65
75
  oneroster_classes << Types::Classroom.new(
66
76
  'id' => oneroster_class.uid,
@@ -72,7 +82,9 @@ module OneRoster
72
82
  'term_name' => term&.name,
73
83
  'term_start_date' => term&.start_date,
74
84
  'term_end_date' => term&.end_date,
75
- 'term_id' => oneroster_class.term_id
85
+ 'term_id' => oneroster_class.term_id,
86
+ 'school_name' => school&.name,
87
+ 'school_uid' => school&.uid
76
88
  )
77
89
  end
78
90
  end
@@ -11,7 +11,22 @@ module OneRoster
11
11
  end
12
12
 
13
13
  def execute(path, method = :get, params = nil, body = nil, content_type = nil)
14
- Response.new(raw_request(path, method, params, body, content_type))
14
+ response = Response.new(raw_request(path, method, params, body, content_type))
15
+
16
+ if [502, 504].include?(response.status)
17
+ log_to_sentry(
18
+ 'client.app_id' => @client.app_id,
19
+ 'connection.path' => path,
20
+ 'connection.method' => method,
21
+ 'connection.params' => params,
22
+ 'connection.body' => body,
23
+ 'connection.content_type' => content_type,
24
+ 'response.http_status' => response.status,
25
+ 'response.raw_body' => response.raw_body
26
+ )
27
+ end
28
+
29
+ response
15
30
  end
16
31
 
17
32
  def set_auth_headers(token, cookie)
@@ -89,5 +104,14 @@ module OneRoster
89
104
  connection.basic_auth(@client.app_id, @client.app_secret)
90
105
  connection
91
106
  end
107
+
108
+ def log_to_sentry(payload)
109
+ return unless @client.sentry_client
110
+
111
+ @client.sentry_client.capture_message(
112
+ 'Exception in OneRoster::Connection',
113
+ **{ extra: payload }
114
+ )
115
+ end
92
116
  end
93
117
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OneRoster
4
- VERSION = '2.3.18'
4
+ VERSION = '2.3.20'
5
5
  end
data/lib/one_roster.rb CHANGED
@@ -23,6 +23,7 @@ require 'types/student'
23
23
  require 'types/teacher'
24
24
  require 'types/term'
25
25
  require 'types/admin'
26
+ require 'types/school'
26
27
 
27
28
  module OneRoster
28
29
  class DistrictNotFound < StandardError; end
@@ -35,6 +36,7 @@ module OneRoster
35
36
  CLASSES_ENDPOINT = 'ims/oneroster/v1p1/classes'
36
37
  ENROLLMENTS_ENDPOINT = 'ims/oneroster/v1p1/enrollments'
37
38
  ACADEMIC_SESSIONS_ENDPOINT = 'ims/oneroster/v1p1/academicSessions'
39
+ SCHOOLS_ENDPOINT = 'ims/oneroster/v1p1/schools'
38
40
 
39
41
  RESPONSE_TYPE_MAP = {
40
42
  'users' => 'users',
@@ -43,6 +45,7 @@ module OneRoster
43
45
  'academicSessions' => 'academicSessions',
44
46
  'courses' => 'courses',
45
47
  'classes' => 'classes',
46
- 'enrollments' => 'enrollments'
48
+ 'enrollments' => 'enrollments',
49
+ 'schools' => 'orgs'
47
50
  }.freeze
48
51
  end
data/lib/types/class.rb CHANGED
@@ -10,7 +10,8 @@ module OneRoster
10
10
  :period,
11
11
  :grades,
12
12
  :subjects,
13
- :term_id
13
+ :term_id,
14
+ :school_uid
14
15
 
15
16
  def initialize(attributes = {}, *)
16
17
  @uid = attributes['sourcedId']
@@ -21,6 +22,7 @@ module OneRoster
21
22
  @grades = presence(attributes['grades']) || []
22
23
  @subjects = presence(attributes['subjects']) || []
23
24
  @term_id = attributes.dig('terms')&.map { |term| term['sourcedId'] } || []
25
+ @school_uid = attributes.dig('school', 'sourcedId')
24
26
  @provider = 'oneroster'
25
27
  end
26
28
 
@@ -13,7 +13,9 @@ module OneRoster
13
13
  :term_name,
14
14
  :term_start_date,
15
15
  :term_end_date,
16
- :term_id
16
+ :term_id,
17
+ :school_name,
18
+ :school_uid
17
19
 
18
20
  def initialize(attributes = {})
19
21
  @uid = attributes['id']
@@ -26,6 +28,8 @@ module OneRoster
26
28
  @term_start_date = attributes['term_start_date']
27
29
  @term_end_date = attributes['term_end_date']
28
30
  @term_id = attributes['term_id']
31
+ @school_name = attributes['school_name']
32
+ @school_uid = attributes['school_uid']
29
33
  @provider = 'oneroster'
30
34
  end
31
35
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OneRoster
4
+ module Types
5
+ class School
6
+ attr_reader :uid, :name, :number
7
+
8
+ def initialize(attributes = {}, *)
9
+ @uid = attributes['sourcedId']
10
+ @name = attributes['name']
11
+ @number = attributes['identifier']
12
+ @provider = 'oneroster'
13
+ end
14
+ end
15
+ end
16
+ end
data/one_roster.gemspec CHANGED
@@ -45,6 +45,6 @@ Gem::Specification.new do |spec|
45
45
  spec.add_development_dependency 'rake', '~> 10.0'
46
46
  spec.add_development_dependency 'rspec', '~> 3.0'
47
47
  spec.add_development_dependency 'rspec_junit_formatter'
48
- spec.add_development_dependency 'rubocop'
49
- spec.add_development_dependency 'simplecov'
48
+ spec.add_development_dependency 'rubocop', '~>1.53'
49
+ spec.add_development_dependency 'simplecov', '~>0.22'
50
50
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oneroster
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.18
4
+ version: 2.3.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Julius
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-01-24 00:00:00.000000000 Z
11
+ date: 2025-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -182,30 +182,30 @@ dependencies:
182
182
  name: rubocop
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ">="
185
+ - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: '0'
187
+ version: '1.53'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - ">="
192
+ - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: '0'
194
+ version: '1.53'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: simplecov
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - ">="
199
+ - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '0'
201
+ version: '0.22'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - ">="
206
+ - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: '0'
208
+ version: '0.22'
209
209
  description: Wrapper for the OneRoster API.
210
210
  email:
211
211
  - robertmjulius@gmail.com
@@ -213,13 +213,12 @@ executables: []
213
213
  extensions: []
214
214
  extra_rdoc_files: []
215
215
  files:
216
- - ".circleci/config.yml"
217
216
  - ".codeclimate.yml"
218
217
  - ".gitignore"
219
218
  - ".rspec"
220
219
  - ".rubocop.yml"
221
220
  - ".ruby-style.yml"
222
- - ".ruby-version"
221
+ - ".tool-versions"
223
222
  - ".travis.yml"
224
223
  - Gemfile
225
224
  - Gemfile.lock
@@ -242,6 +241,7 @@ files:
242
241
  - lib/types/classroom.rb
243
242
  - lib/types/course.rb
244
243
  - lib/types/enrollment.rb
244
+ - lib/types/school.rb
245
245
  - lib/types/student.rb
246
246
  - lib/types/teacher.rb
247
247
  - lib/types/term.rb
data/.circleci/config.yml DELETED
@@ -1,116 +0,0 @@
1
- version: 2
2
- defaults: &defaults
3
- docker:
4
- - image: circleci/ruby:2.4.1-node-browsers
5
- working_directory: ~/repo
6
- restore_ruby_cache: &restore_ruby_cache
7
- restore_cache:
8
- keys:
9
- - v2-dependencies-{{ checksum "Gemfile.lock" }}
10
- - v2-dependencies-
11
- setup_rubygems: &setup_rubygems
12
- run:
13
- name: Add RubyGems API key
14
- command: |
15
- mkdir -p ~/.gem
16
- echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
17
- chmod 0600 ~/.gem/credentials
18
-
19
- install_dependencies: &install_dependencies
20
- run:
21
- name: Install Dependencies
22
- command: |
23
- echo 'export BUNDLER_VERSION=$(cat Gemfile.lock | tail -1 | tr -d " ")' >> $BASH_ENV
24
- source $BASH_ENV
25
- gem install bundler
26
- bundle install --jobs=4 --retry=3 --path vendor/bundle
27
-
28
- save_ruby_cache: &save_ruby_cache
29
- save_cache:
30
- paths:
31
- - ./vendor/bundle
32
- key: v1-dependencies-{{ checksum "Gemfile.lock" }}
33
- download_cc_reporter: &download_cc_reporter
34
- run:
35
- name: Download Code Climate Test Reporter
36
- command: |
37
- mkdir -p tmp/
38
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./tmp/cc-test-reporter
39
- chmod +x ./tmp/cc-test-reporter
40
-
41
-
42
-
43
-
44
- persist: &persist
45
- persist_to_workspace:
46
- root: tmp
47
- paths:
48
- - cc-test-reporter
49
- run_rspec_tests: &run_rspec_tests
50
- run:
51
- name: Run RSpec Tests
52
- command: |
53
- mkdir /tmp/test-results
54
- ./tmp/cc-test-reporter before-build
55
- TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
56
- circleci tests split --split-by=timings)"
57
-
58
- bundle exec rspec --format progress \
59
- --format RspecJunitFormatter \
60
- --out /tmp/test-results/rspec.xml \
61
- --format progress \
62
- $TEST_FILES
63
- ./tmp/cc-test-reporter format-coverage -t simplecov -o "tmp/codeclimate.json"
64
-
65
- upload_coverage: &upload_coverage
66
- run:
67
- name: Upload Coverage
68
- command: |
69
- ./tmp/cc-test-reporter upload-coverage -i tmp/codeclimate.json
70
-
71
- release_rubygem: &release_rubygem
72
- run:
73
- name: Release new version to RubyGems
74
- command: |
75
- bundle exec rake release
76
-
77
- jobs:
78
- rspec-tests:
79
- <<: *defaults
80
- steps:
81
- - checkout
82
- - *restore_ruby_cache
83
- - *install_dependencies
84
- - *save_ruby_cache
85
- - *download_cc_reporter
86
- - *persist
87
- - *run_rspec_tests
88
- - *upload_coverage
89
- - store_test_results:
90
- path: /tmp/test-results
91
- - store_artifacts:
92
- path: /tmp/test-results
93
- destination: test-results
94
-
95
- release:
96
- <<: *defaults
97
- steps:
98
- - checkout
99
- - *restore_ruby_cache
100
- - *setup_rubygems
101
- - *install_dependencies
102
- - *save_ruby_cache
103
- - *release_rubygem
104
-
105
- workflows:
106
- version: 2
107
- commit:
108
- jobs:
109
- - rspec-tests
110
- - release:
111
- requires:
112
- - rspec-tests
113
- filters:
114
- branches:
115
- only:
116
- - master
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.4.1