bearcat 1.4.8 → 1.4.11
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 +5 -5
- data/lib/bearcat/client/file_helper.rb +36 -33
- data/lib/bearcat/client/outcome_imports.rb +48 -0
- data/lib/bearcat/client/pages.rb +8 -1
- data/lib/bearcat/client.rb +6 -82
- data/lib/bearcat/spec_helpers.rb +20 -8
- data/lib/bearcat/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 65992dcbb43af93a7a7f34bdf322bd82dd7ee45c
|
|
4
|
+
data.tar.gz: 3bf3d5f3e0849977b01b64df3c544519c2da928c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2936b59a7848832d98927f55e16abcce88f975a48319acaa2d8888ac5fe0ddb3e824f2eb1b638c44e0adeb0e5269eb6dd1304b0866feefca1714ce4c2c58565e
|
|
7
|
+
data.tar.gz: 1f176cce865ed38077e99e8a4960a09953d9c62bc0dbf7e0353caf8d1fc281152764ffbe05321ad13c01986b148c7f5154c20dee1096ab44ec444692cbb360c8
|
|
@@ -1,40 +1,43 @@
|
|
|
1
|
-
module
|
|
1
|
+
module Bearcat
|
|
2
|
+
class Client < Footrest::Client
|
|
3
|
+
module FileHelper
|
|
4
|
+
def file_params(file_path)
|
|
5
|
+
{
|
|
6
|
+
size: File.open(file_path).size,
|
|
7
|
+
name: File.basename(file_path)
|
|
8
|
+
}
|
|
9
|
+
end
|
|
2
10
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
name: File.basename(file_path)
|
|
7
|
-
}
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def declare_file(api_path, params)
|
|
11
|
-
post(api_path, params)
|
|
12
|
-
end
|
|
11
|
+
def declare_file(api_path, params)
|
|
12
|
+
post(api_path, params)
|
|
13
|
+
end
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
def post_file(url, params, file_path)
|
|
16
|
+
params['Filename'] = File.basename(file_path)
|
|
17
|
+
params['file'] = Faraday::UploadIO.new(file_path, params['content-type'])
|
|
18
|
+
response = upload_connection.post(url, params)
|
|
19
|
+
if [201, 302, 303].include? response.status #success if it is a redirect or 201
|
|
20
|
+
response.headers['Location']
|
|
21
|
+
else
|
|
22
|
+
raise 'FailedFileUpload'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
def confirm_file_upload(url)
|
|
27
|
+
uri = URI(url)
|
|
28
|
+
query = uri.query
|
|
29
|
+
query.blank? ? get(uri.path) : get(uri.path, CGI::parse(query))
|
|
30
|
+
end
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
def upload_connection
|
|
33
|
+
Faraday.new do |f|
|
|
34
|
+
f.options[:open_timeout] = ENV.fetch('FARADAY_OPEN_TIMEOUT', 60).to_i
|
|
35
|
+
f.options[:timeout] = ENV.fetch('FARADAY_TIMEOUT', 60).to_i
|
|
36
|
+
f.request :multipart
|
|
37
|
+
f.request :url_encoded
|
|
38
|
+
f.adapter :net_http
|
|
39
|
+
end
|
|
40
|
+
end
|
|
38
41
|
end
|
|
39
42
|
end
|
|
40
43
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Bearcat
|
|
2
|
+
class Client < Footrest::Client
|
|
3
|
+
module OutcomeImports
|
|
4
|
+
|
|
5
|
+
def import_outcomes(file_path, params={})
|
|
6
|
+
params = params.with_indifferent_access
|
|
7
|
+
params['attachment'] = Faraday::UploadIO.new(file_path, 'text/csv')
|
|
8
|
+
url = "api/v1/#{outcome_import_context_slug(params)}"
|
|
9
|
+
url += "group/#{params[:group]}/" if params[:group].present?
|
|
10
|
+
params.delete(:group)
|
|
11
|
+
post(url, params)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def outcome_import_status(id, params={})
|
|
15
|
+
params = params.with_indifferent_access
|
|
16
|
+
get("api/v1/#{outcome_import_context_slug(params)}#{id}", params)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def outcome_import_created_group_ids(id, params={})
|
|
20
|
+
params = params.with_indifferent_access
|
|
21
|
+
get("api/v1/#{outcome_import_context_slug(params)}#{id}/created_group_ids", params)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
|
|
26
|
+
def outcome_import_context_slug(params)
|
|
27
|
+
context_hash = params.select { |k, _| k == "account" || k == "course" }
|
|
28
|
+
|
|
29
|
+
if context_hash.keys.count > 1
|
|
30
|
+
raise ArgumentError, "cannot have account and course in params"
|
|
31
|
+
elsif context_hash.empty?
|
|
32
|
+
"accounts/self/outcome_imports/"
|
|
33
|
+
else
|
|
34
|
+
context_hash_key = context_hash.keys.first
|
|
35
|
+
case context_hash_key
|
|
36
|
+
when 'account'
|
|
37
|
+
params.delete(:account)
|
|
38
|
+
"accounts/#{context_hash[context_hash_key]}/outcome_imports/"
|
|
39
|
+
when 'course'
|
|
40
|
+
params.delete(:course)
|
|
41
|
+
"courses/#{context_hash[context_hash_key]}/outcome_imports/"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
data/lib/bearcat/client/pages.rb
CHANGED
|
@@ -17,7 +17,14 @@ module Bearcat
|
|
|
17
17
|
def show_group_page(group, url, params={})
|
|
18
18
|
get("/api/v1/groups/#{group}/pages/#{url}", params)
|
|
19
19
|
end
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
def add_course_page(course, params={})
|
|
22
|
+
post("api/v1/courses/#{course}/pages", params)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def add_group_page(group, params={})
|
|
26
|
+
post("/api/v1/groups/#{group}/pages", params)
|
|
27
|
+
end
|
|
21
28
|
end
|
|
22
29
|
end
|
|
23
30
|
end
|
data/lib/bearcat/client.rb
CHANGED
|
@@ -5,89 +5,13 @@ require 'paul_walker'
|
|
|
5
5
|
module Bearcat
|
|
6
6
|
class Client < Footrest::Client
|
|
7
7
|
require 'bearcat/api_array'
|
|
8
|
-
require 'bearcat/client/file_helper'
|
|
9
|
-
require 'bearcat/client/assignments'
|
|
10
|
-
require 'bearcat/client/blueprint_courses'
|
|
11
|
-
require 'bearcat/client/courses'
|
|
12
|
-
require 'bearcat/client/enrollments'
|
|
13
|
-
require 'bearcat/client/outcome_groups'
|
|
14
|
-
require 'bearcat/client/outcomes'
|
|
15
|
-
require 'bearcat/client/sections'
|
|
16
|
-
require 'bearcat/client/o_auth2'
|
|
17
|
-
require 'bearcat/client/groups'
|
|
18
|
-
require 'bearcat/client/group_categories'
|
|
19
|
-
require 'bearcat/client/group_memberships'
|
|
20
|
-
require 'bearcat/client/conferences'
|
|
21
|
-
require 'bearcat/client/users'
|
|
22
|
-
require 'bearcat/client/reports'
|
|
23
|
-
require 'bearcat/client/accounts'
|
|
24
|
-
require 'bearcat/client/submissions'
|
|
25
|
-
require 'bearcat/client/conversations'
|
|
26
|
-
require 'bearcat/client/modules'
|
|
27
|
-
require 'bearcat/client/canvas_files'
|
|
28
|
-
require 'bearcat/client/calendar_events'
|
|
29
|
-
require 'bearcat/client/discussions'
|
|
30
|
-
require 'bearcat/client/search'
|
|
31
|
-
require 'bearcat/client/quizzes'
|
|
32
|
-
require 'bearcat/client/assignment_groups'
|
|
33
|
-
require 'bearcat/client/pages'
|
|
34
|
-
require 'bearcat/client/files'
|
|
35
|
-
require 'bearcat/client/folders'
|
|
36
|
-
require 'bearcat/client/graph_ql'
|
|
37
|
-
require 'bearcat/client/analytics'
|
|
38
|
-
require 'bearcat/client/module_items'
|
|
39
|
-
require 'bearcat/client/content_migrations'
|
|
40
|
-
require 'bearcat/client/content_exports'
|
|
41
|
-
require 'bearcat/client/custom_gradebook_columns'
|
|
42
|
-
require 'bearcat/client/external_tools'
|
|
43
|
-
require 'bearcat/client/roles'
|
|
44
|
-
require 'bearcat/client/rubric'
|
|
45
|
-
require 'bearcat/client/rubric_assessment'
|
|
46
|
-
require 'bearcat/client/rubric_association'
|
|
47
|
-
require 'bearcat/client/progresses'
|
|
48
|
-
require 'bearcat/client/tabs'
|
|
49
8
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
include OutcomeGroups
|
|
57
|
-
include Outcomes
|
|
58
|
-
include Sections
|
|
59
|
-
include OAuth2
|
|
60
|
-
include Groups
|
|
61
|
-
include GroupCategories
|
|
62
|
-
include GroupMemberships
|
|
63
|
-
include Conferences
|
|
64
|
-
include Users
|
|
65
|
-
include Reports
|
|
66
|
-
include Submissions
|
|
67
|
-
include Conversations
|
|
68
|
-
include Modules
|
|
69
|
-
include CanvasFiles
|
|
70
|
-
include CalendarEvents
|
|
71
|
-
include Discussions
|
|
72
|
-
include FileHelper
|
|
73
|
-
include Search
|
|
74
|
-
include Quizzes
|
|
75
|
-
include AssignmentGroups
|
|
76
|
-
include Pages
|
|
77
|
-
include Files
|
|
78
|
-
include Folders
|
|
79
|
-
include GraphQL
|
|
80
|
-
include ModuleItems
|
|
81
|
-
include ContentMigrations
|
|
82
|
-
include ContentExports
|
|
83
|
-
include CustomGradebookColumns
|
|
84
|
-
include ExternalTools
|
|
85
|
-
include Roles
|
|
86
|
-
include Rubric
|
|
87
|
-
include RubricAssessment
|
|
88
|
-
include RubricAssociation
|
|
89
|
-
include Progresses
|
|
90
|
-
include Tabs
|
|
9
|
+
Dir[File.join(__dir__, 'client', '*.rb')].each do |mod|
|
|
10
|
+
mname = File.basename(mod, '.*').camelize
|
|
11
|
+
mname = 'GraphQL' if mname == 'GraphQl'
|
|
12
|
+
require mod
|
|
13
|
+
include "Bearcat::Client::#{mname}".constantize
|
|
14
|
+
end
|
|
91
15
|
|
|
92
16
|
# Override Footrest request for ApiArray support
|
|
93
17
|
def request(method, &block)
|
data/lib/bearcat/spec_helpers.rb
CHANGED
|
@@ -7,13 +7,15 @@ require 'bearcat'
|
|
|
7
7
|
# - `config.include Bearcat::SpecHelpers`
|
|
8
8
|
# This helper requires `gem 'method_source'` in your test group
|
|
9
9
|
module Bearcat::SpecHelpers
|
|
10
|
+
extend ActiveSupport::Concern
|
|
11
|
+
|
|
10
12
|
SOURCE_REGEX = /(?<method>get|post|delete|put)\((?<quote>\\?('|"))(?<url>.*)\k<quote>/
|
|
11
13
|
|
|
12
14
|
# Helper method to Stub Bearcat requests.
|
|
13
15
|
# Automagically parses the Bearcat method source to determine the correct URL to stub.
|
|
14
16
|
# Accepts optional keyword parameters to interpolate specific values into the URL.
|
|
15
17
|
# Returns a mostly-normal Webmock stub (:to_return has been overridden to allow :body to be set to a Hash)
|
|
16
|
-
def stub_bearcat(endpoint, prefix: nil, **kwargs)
|
|
18
|
+
def stub_bearcat(endpoint, prefix: nil, method: :auto, **kwargs)
|
|
17
19
|
url = case endpoint
|
|
18
20
|
when Symbol
|
|
19
21
|
ruby_method = Bearcat::Client.instance_method(endpoint)
|
|
@@ -43,16 +45,26 @@ module Bearcat::SpecHelpers
|
|
|
43
45
|
end
|
|
44
46
|
|
|
45
47
|
url = Regexp.escape(resolve_prefix(prefix)) + url
|
|
46
|
-
stub = stub_request(match[:method].to_sym, Regexp.new(url))
|
|
48
|
+
stub = stub_request(method == :auto ? (match ? match[:method].to_sym : :get) : method, Regexp.new(url))
|
|
47
49
|
|
|
48
50
|
# Override the to_return method to accept a Hash as body:
|
|
49
|
-
stub.define_singleton_method(:to_return, ->(*resps) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
stub.define_singleton_method(:to_return, ->(*resps, &blk) {
|
|
52
|
+
if blk
|
|
53
|
+
super do |*args|
|
|
54
|
+
resp = blk.call(*args)
|
|
55
|
+
resp[:headers] ||= {}
|
|
56
|
+
resp[:headers]["Content-Type"] ||= "application/json"
|
|
57
|
+
resp[:body] = resp[:body].to_json
|
|
58
|
+
resp
|
|
59
|
+
end
|
|
60
|
+
else
|
|
61
|
+
resps.map do |resp|
|
|
62
|
+
resp[:headers] ||= {}
|
|
63
|
+
resp[:headers]["Content-Type"] ||= "application/json"
|
|
64
|
+
resp[:body] = resp[:body].to_json
|
|
65
|
+
end
|
|
66
|
+
super(*resps)
|
|
54
67
|
end
|
|
55
|
-
super(*resps)
|
|
56
68
|
})
|
|
57
69
|
|
|
58
70
|
stub
|
data/lib/bearcat/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bearcat
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.4.
|
|
4
|
+
version: 1.4.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nathan Mills, Jake Sorce
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-06-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -162,6 +162,7 @@ files:
|
|
|
162
162
|
- lib/bearcat/client/modules.rb
|
|
163
163
|
- lib/bearcat/client/o_auth2.rb
|
|
164
164
|
- lib/bearcat/client/outcome_groups.rb
|
|
165
|
+
- lib/bearcat/client/outcome_imports.rb
|
|
165
166
|
- lib/bearcat/client/outcomes.rb
|
|
166
167
|
- lib/bearcat/client/pages.rb
|
|
167
168
|
- lib/bearcat/client/progresses.rb
|
|
@@ -382,7 +383,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
382
383
|
- !ruby/object:Gem::Version
|
|
383
384
|
version: '0'
|
|
384
385
|
requirements: []
|
|
385
|
-
|
|
386
|
+
rubyforge_project:
|
|
387
|
+
rubygems_version: 2.4.5.1
|
|
386
388
|
signing_key:
|
|
387
389
|
specification_version: 4
|
|
388
390
|
summary: Canvas API
|