japanda 0.1.3 → 0.1.4
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 +4 -4
- data/Gemfile.lock +4 -2
- data/README.md +38 -26
- data/japanda.gemspec +3 -2
- data/lib/japanda/canvas_factory/assignment.rb +22 -9
- data/lib/japanda/canvas_factory/course.rb +70 -8
- data/lib/japanda/canvas_factory/mergie.rb +9 -0
- data/lib/japanda/canvas_factory/module.rb +34 -41
- data/lib/japanda/canvas_factory/module_item.rb +37 -0
- data/lib/japanda/canvas_factory/quiz.rb +52 -0
- data/lib/japanda/canvas_factory/section.rb +22 -12
- data/lib/japanda/canvas_factory/user.rb +45 -14
- data/lib/japanda/version.rb +1 -1
- metadata +21 -8
- data/lib/japanda/canvas_factory/assignment_config.rb +0 -27
- data/lib/japanda/canvas_factory/course_config.rb +0 -28
- data/lib/japanda/canvas_factory/module_config.rb +0 -22
- data/lib/japanda/canvas_factory/module_item_config.rb +0 -25
- data/lib/japanda/canvas_factory/section_config.rb +0 -21
- data/lib/japanda/canvas_factory/user_config.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c88d5e552e2c67042dd5da76188c48ffefc2f8b7
|
4
|
+
data.tar.gz: b871098f94298c6ad6c0acb22c7d12a01a6bbd25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cdbcc9424cd02a9923fed5121c7d74638888ab9cb37e25e7286f1ecaa0b70a9c46109ee688fdcfa149c28f81bbccca3eba977d613f8d979a1bad148c692c8012
|
7
|
+
data.tar.gz: e4c24a8f9858ebd769ce85723066772e46be305456020c90d6ebdba950cab3f5f53f5753d9569b8c87cdab79d27742e6d6bdb15100824171bea160757533414c
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
japanda (0.1.
|
4
|
+
japanda (0.1.4)
|
5
5
|
rest-client
|
6
6
|
|
7
7
|
GEM
|
@@ -11,6 +11,7 @@ GEM
|
|
11
11
|
domain_name (0.5.24)
|
12
12
|
unf (>= 0.0.5, < 1.0.0)
|
13
13
|
dotenv (2.0.2)
|
14
|
+
hashie (2.0.5)
|
14
15
|
http-cookie (1.0.2)
|
15
16
|
domain_name (~> 0.5)
|
16
17
|
mime-types (2.6.2)
|
@@ -43,9 +44,10 @@ PLATFORMS
|
|
43
44
|
DEPENDENCIES
|
44
45
|
bundler (>= 1.0.0)
|
45
46
|
dotenv
|
47
|
+
hashie
|
46
48
|
japanda!
|
47
49
|
rake (~> 10.0)
|
48
50
|
rspec
|
49
51
|
|
50
52
|
BUNDLED WITH
|
51
|
-
1.10.
|
53
|
+
1.10.6
|
data/README.md
CHANGED
@@ -1,20 +1,21 @@
|
|
1
1
|
# Japanda
|
2
|
-
Japanda provides an object oriented wrapper and functional wrapper around canvas api
|
3
|
-
Disclaimer: For testing purposes only
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
Japanda provides an object-oriented wrapper and functional wrapper around Instructure Canvas Api's
|
4
|
+
|
5
|
+
Disclaimer: For testing purposes only.
|
6
|
+
|
7
|
+
v0.1.3 Features
|
8
|
+
|
9
|
+
1. Create canvas learner user and admin user
|
10
|
+
2. Create canvas course
|
11
|
+
3. Add sections to canvas
|
12
|
+
4. Add module(s) with assignment(s)
|
10
13
|
|
11
14
|
## Installation
|
12
15
|
|
13
16
|
Add this line to your application's Gemfile:
|
14
17
|
|
15
|
-
|
16
|
-
gem 'japanda'
|
17
|
-
```
|
18
|
+
gem 'japanda'
|
18
19
|
|
19
20
|
And then execute:
|
20
21
|
|
@@ -25,34 +26,45 @@ Or install it yourself as:
|
|
25
26
|
$ gem install japanda
|
26
27
|
|
27
28
|
## Usage
|
29
|
+
|
28
30
|
Set a few enviroment variables( or use .env.example file)
|
29
31
|
|
30
|
-
|
31
|
-
export
|
32
|
-
export
|
33
|
-
|
34
|
-
|
32
|
+
export CANVAS_API_HOST=
|
33
|
+
export CANVAS_API_TOKEN=
|
34
|
+
export CANVAS_ACCOUNT_ID=
|
35
|
+
|
36
|
+
To create a new course
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
-
|
38
|
+
CanvasFactory::Course.new
|
39
|
+
|
40
|
+
To create a canvas course by specifying the course config
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
course_config = CanvasFactory::CourseConfig.new({ name: 'Candy Tasting' })
|
43
|
+
course = CanvasFactory::Course.new course_config
|
44
|
+
|
45
|
+
To create a canvas learner user
|
46
|
+
|
47
|
+
user_config = CanvasFactory::UserConfig.new(short_name: 'John Doe', password: 'Password01')
|
48
|
+
user = CanvasFactory::User.new(user_config)
|
49
|
+
learner_user = user.create_learner_user
|
44
50
|
|
45
51
|
## Development
|
46
52
|
|
47
|
-
After checking out the repo, run `
|
53
|
+
After checking out the repo, run `bundle install` to install dependencies. Then, run `rspec` to run the tests.
|
54
|
+
To install this gem onto your local machine, run `bundle exec rake install`.
|
55
|
+
|
56
|
+
## Release a new version
|
57
|
+
|
58
|
+
To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
48
59
|
|
49
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
50
60
|
|
51
61
|
## Contributing
|
52
62
|
|
53
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
63
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/babababili/japanda. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
|
54
64
|
|
55
65
|
|
56
66
|
## License
|
57
|
-
|
67
|
+
|
68
|
+
For testing purposes only.
|
69
|
+
|
58
70
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/japanda.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'japanda/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'japanda'
|
8
8
|
spec.version = Japanda::VERSION
|
9
|
-
spec.authors = ['Santosh Natarajan']
|
10
|
-
spec.email = ['snatarajan@instructure.com']
|
9
|
+
spec.authors = ['Santosh Natarajan', 'Robert Lamb']
|
10
|
+
spec.email = ['snatarajan@instructure.com', 'rlamb@instructure.com']
|
11
11
|
|
12
12
|
spec.summary = %q{Library to create custom course.}
|
13
13
|
spec.description = %q{Library to create custom course. wip.}
|
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_development_dependency 'bundler', '>= 1.0.0'
|
31
31
|
spec.add_development_dependency 'rake', '~> 10.0'
|
32
32
|
spec.add_development_dependency 'rspec'
|
33
|
+
spec.add_development_dependency 'hashie'
|
33
34
|
spec.add_development_dependency 'dotenv'
|
34
35
|
spec.add_dependency 'rest-client'
|
35
36
|
end
|
@@ -1,17 +1,31 @@
|
|
1
|
-
# assignment class
|
2
1
|
module CanvasFactory
|
2
|
+
# assignment class
|
3
3
|
class Assignment
|
4
|
-
attr_reader :id, :name, :course_id, :html_url, :grading_type, :published, :due_at,
|
4
|
+
attr_reader :id, :name, :course_id, :html_url, :grading_type, :published, :due_at,
|
5
|
+
:created_at, :request, :response
|
5
6
|
|
6
|
-
def initialize(course_id,
|
7
|
-
fail 'invalid course_id' if course_id.nil?
|
7
|
+
def initialize(course_id, opts = {}, merge = true)
|
8
8
|
@course_id = course_id
|
9
|
-
|
9
|
+
@request = {
|
10
|
+
assignment: {
|
11
|
+
name: "Assignment-#{Time.now.to_i}",
|
12
|
+
grading_type: %w(pass_fail percent letter_grade gpa_scale points).sample,
|
13
|
+
submission_types: ['online_text_entry'],
|
14
|
+
points_possible: 10,
|
15
|
+
due_at: (DateTime.now + 1).iso8601,
|
16
|
+
published: true
|
17
|
+
}
|
18
|
+
}
|
19
|
+
@request = Mergie.deep_merge(@request, opts, merge)
|
20
|
+
create_assignment
|
21
|
+
self
|
10
22
|
end
|
11
23
|
|
12
|
-
|
13
|
-
|
14
|
-
|
24
|
+
private
|
25
|
+
|
26
|
+
def create_assignment
|
27
|
+
assign_end_point = "#{CANVAS_API_V1}/courses/#{@course_id}/assignments"
|
28
|
+
@response = CanvasFactory.perform_post(assign_end_point, @request)
|
15
29
|
@id = response['id']
|
16
30
|
@name = response['name']
|
17
31
|
@html_url = response['html_url']
|
@@ -19,7 +33,6 @@ module CanvasFactory
|
|
19
33
|
@published = response['published']
|
20
34
|
@created_at = response['created_at']
|
21
35
|
@due_at = response['due_at']
|
22
|
-
self
|
23
36
|
end
|
24
37
|
end
|
25
38
|
end
|
@@ -1,16 +1,78 @@
|
|
1
|
-
# canvas course class
|
2
1
|
module CanvasFactory
|
2
|
+
# canvas course class
|
3
3
|
class Course
|
4
|
-
attr_reader :course_response, :course_id, :course_code, :course_name, :
|
4
|
+
attr_reader :course_response, :course_id, :course_code, :course_name, :course_request,
|
5
|
+
:sections, :modules, :assignments, :quizzes
|
5
6
|
|
6
|
-
def initialize(
|
7
|
-
@
|
8
|
-
|
7
|
+
def initialize(opts = {}, merge = true)
|
8
|
+
@sections = []
|
9
|
+
@modules = []
|
10
|
+
@assignments = []
|
11
|
+
@quizzes = []
|
12
|
+
course_name_code = "auto#{SecureRandom.hex}"
|
13
|
+
@course_request = {
|
14
|
+
account_id: CANVAS_ACCOUNT_ID,
|
15
|
+
course: {
|
16
|
+
name: course_name_code,
|
17
|
+
course_code: course_name_code,
|
18
|
+
start_at: Time.now,
|
19
|
+
end_at: Time.now + (30 * 24 * 60 * 60),
|
20
|
+
license: 'public_domain',
|
21
|
+
is_public: true,
|
22
|
+
is_public_to_auth_users: false,
|
23
|
+
public_syllabus: false,
|
24
|
+
public_description: 'api created course',
|
25
|
+
allow_student_wiki_edits: true,
|
26
|
+
allow_wiki_comments: true,
|
27
|
+
allow_student_forum_attachments: true,
|
28
|
+
open_enrollment: true,
|
29
|
+
self_enrollment: false,
|
30
|
+
restrict_enrollments_to_course_dates: false,
|
31
|
+
term_id: nil,
|
32
|
+
# sis_course_id: '', # field is included only when user has permission to view SIS information
|
33
|
+
# integration_id: '', # field is included only when user has permission to view SIS information
|
34
|
+
hide_final_grades: true,
|
35
|
+
apply_assignment_group_weights: false,
|
36
|
+
syllabus_body: 'api syllabus',
|
37
|
+
grading_standard_id: nil,
|
38
|
+
course_format: 'online'
|
39
|
+
},
|
40
|
+
offer: true,
|
41
|
+
enroll_me: false,
|
42
|
+
enable_sis_reactivation: false
|
43
|
+
}
|
44
|
+
@course_request = Mergie.deep_merge(@course_request, opts, merge)
|
45
|
+
create_course
|
9
46
|
end
|
10
47
|
|
11
|
-
def
|
12
|
-
|
13
|
-
@
|
48
|
+
def add_section(opts = {}, merge = true)
|
49
|
+
section = CanvasFactory::Section.new(@course_id, opts, merge)
|
50
|
+
@sections << section
|
51
|
+
end
|
52
|
+
|
53
|
+
def add_module(opts = {}, merge = true)
|
54
|
+
mod = CanvasFactory::Module.new(@course_id, opts, merge)
|
55
|
+
@modules << mod
|
56
|
+
mod
|
57
|
+
end
|
58
|
+
|
59
|
+
def add_assignment(opts = {}, merge = true)
|
60
|
+
assignment = CanvasFactory::Assignment.new(@course_id, opts, merge)
|
61
|
+
@assignments << assignment
|
62
|
+
assignment
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_quiz(opts = {}, merge = true)
|
66
|
+
quiz = CanvasFactory::Quiz.new(@course_id, opts, merge)
|
67
|
+
@quizzes << quiz
|
68
|
+
quiz
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def create_course
|
74
|
+
course_end_point = "#{CANVAS_API_V1}/accounts/#{@course_request[:account_id]}/courses"
|
75
|
+
@course_response = CanvasFactory.perform_post(course_end_point, @course_request)
|
14
76
|
@course_id = @course_response['id']
|
15
77
|
@course_name = @course_response['name']
|
16
78
|
@course_code = @course_response['course_code']
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'hashie/extensions/deep_merge'
|
2
|
+
|
3
|
+
class Mergie < Hash
|
4
|
+
include Hashie::Extensions::DeepMerge
|
5
|
+
|
6
|
+
def self.deep_merge(default_hash, given_hash, should_merge)
|
7
|
+
should_merge ? Mergie[default_hash].deep_merge(Mergie[given_hash]).to_h: given_hash
|
8
|
+
end
|
9
|
+
end
|
@@ -1,58 +1,51 @@
|
|
1
|
-
# canvas module class
|
2
1
|
module CanvasFactory
|
2
|
+
# canvas module class
|
3
3
|
class Module
|
4
|
-
attr_reader :
|
5
|
-
:
|
6
|
-
:assignments
|
4
|
+
attr_reader :course_id, :name, :module_id, :published, :request, :response,
|
5
|
+
:module_items, :publish_response, :publish_request
|
7
6
|
|
8
|
-
def initialize(course_id,
|
9
|
-
@
|
10
|
-
|
11
|
-
|
7
|
+
def initialize(course_id, opts = {}, merge = true)
|
8
|
+
@module_items = []
|
9
|
+
@course_id = course_id
|
10
|
+
@request = {
|
11
|
+
module: {
|
12
|
+
name: "module-#{Time.now.to_i}",
|
13
|
+
unlock_at: DateTime.now.iso8601,
|
14
|
+
require_sequential_progress: true
|
15
|
+
}
|
16
|
+
}
|
17
|
+
@request = Mergie.deep_merge(@request, opts, merge)
|
18
|
+
create_module
|
19
|
+
self
|
12
20
|
end
|
13
21
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
@id = response['id']
|
19
|
-
@name = response['name']
|
20
|
-
@position = response['position']
|
21
|
-
@unlock_at = response['unlock_at']
|
22
|
-
@require_sequential_progress = response['require_sequential_progress']
|
23
|
-
@publish_final_grade = response['publish_final_grade']
|
24
|
-
@prerequisite_module_ids = response['prerequisite_module_ids']
|
25
|
-
@published = response['published']
|
26
|
-
@items_count = response['items_count']
|
27
|
-
@items_url = response['items_url']
|
22
|
+
def add_module_item(content, opts = {}, merge = true) # content can be assignment or quiz ...
|
23
|
+
module_item = CanvasFactory::ModuleItem.new(@course_id, @module_id, content, opts, merge)
|
24
|
+
@module_items << module_item
|
25
|
+
module_item
|
28
26
|
end
|
29
27
|
|
30
|
-
def
|
31
|
-
|
28
|
+
def publish(opts = {}, merge = true)
|
29
|
+
@publish_request = {
|
32
30
|
module: {
|
33
31
|
published: true
|
34
32
|
}
|
35
33
|
}
|
36
|
-
|
37
|
-
|
38
|
-
@
|
34
|
+
@publish_request = Mergie.deep_merge(@publish_request, opts, merge)
|
35
|
+
publish_ep = "#{CANVAS_API_V1}/courses/#{@course_id}/modules/#{@module_id}"
|
36
|
+
@publish_response = CanvasFactory.perform_put(publish_ep, @publish_request)
|
37
|
+
@published = @publish_response['published']
|
39
38
|
end
|
40
39
|
|
41
|
-
|
42
|
-
item_end_point = "#{CANVAS_API_V1}/courses/#{@course_id}/modules/#{@id}/items"
|
43
|
-
CanvasFactory.perform_post(item_end_point, module_item_request)
|
44
|
-
publish_module
|
45
|
-
end
|
40
|
+
private
|
46
41
|
|
47
|
-
def
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
@assignments << assignment
|
55
|
-
assignment
|
42
|
+
def create_module
|
43
|
+
m_item_end_point = "#{CANVAS_API_V1}/courses/#{@course_id}/modules"
|
44
|
+
@response = CanvasFactory.perform_post(m_item_end_point, @request)
|
45
|
+
@course_id = course_id
|
46
|
+
@module_id = response['id']
|
47
|
+
@name = response['name']
|
48
|
+
@published = response['published']
|
56
49
|
end
|
57
50
|
end
|
58
51
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module CanvasFactory
|
2
|
+
# module item class
|
3
|
+
class ModuleItem
|
4
|
+
attr_reader :item_id, :name, :course_id, :html_url, :title, :published, :type,
|
5
|
+
:created_at, :request, :response, :module_id
|
6
|
+
|
7
|
+
def initialize(course_id, module_id, content, opts = {}, merge = true)
|
8
|
+
@course_id = course_id
|
9
|
+
@module_id = module_id
|
10
|
+
@request = {
|
11
|
+
module_item: {
|
12
|
+
title: "module-item#{SecureRandom.hex}",
|
13
|
+
type: content.class.name.split('::').last || '',
|
14
|
+
content_id: content.id,
|
15
|
+
completion_requirement: {
|
16
|
+
type: 'must_view'
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
@request = Mergie.deep_merge(@request, opts, merge)
|
21
|
+
create_item
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def create_item
|
28
|
+
item_end_point = "#{CANVAS_API_V1}/courses/#{@course_id}/modules/#{@module_id}/items"
|
29
|
+
@response = CanvasFactory.perform_post(item_end_point, @request)
|
30
|
+
@published = response['published']
|
31
|
+
@item_id = response['id']
|
32
|
+
@type = response['type']
|
33
|
+
@title = response['title']
|
34
|
+
@html_url = response['html_url']
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module CanvasFactory
|
2
|
+
# Quiz class
|
3
|
+
class Quiz
|
4
|
+
attr_reader :id, :course_id, :html_url, :published, :due_at, :title,
|
5
|
+
:request, :response
|
6
|
+
|
7
|
+
def initialize(course_id, opts = {}, merge = true)
|
8
|
+
@course_id = course_id
|
9
|
+
@request = {
|
10
|
+
quiz: {
|
11
|
+
title: "quiz-#{Time.now.to_i}",
|
12
|
+
description: 'api created quiz',
|
13
|
+
quiz_type: %w(practice_quiz assignment graded_survey survey).sample,
|
14
|
+
assignment_group_id: nil,
|
15
|
+
time_limit: nil,
|
16
|
+
shuffle_answers: true,
|
17
|
+
hide_results: %w(always until_after_last_attempt).sample,
|
18
|
+
show_correct_answers: true,
|
19
|
+
show_correct_answers_last_attempt: true,
|
20
|
+
hide_correct_answers_at: true,
|
21
|
+
allowed_attempts: 1,
|
22
|
+
scoring_policy: %w(keep_highest keep_latest).sample,
|
23
|
+
one_question_at_a_time: false,
|
24
|
+
cant_go_back: false,
|
25
|
+
access_code: nil,
|
26
|
+
ip_filter: nil,
|
27
|
+
due_at: (DateTime.now + 10).iso8601,
|
28
|
+
lock_at: (DateTime.now + 10).iso8601,
|
29
|
+
unlock_at: (DateTime.now).iso8601,
|
30
|
+
published: true,
|
31
|
+
one_time_results: false
|
32
|
+
}
|
33
|
+
}
|
34
|
+
@request = Mergie.deep_merge(@request, opts, merge)
|
35
|
+
create_quiz
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def create_quiz
|
42
|
+
quiz_end_point = "#{CANVAS_API_V1}/courses/#{@course_id}/quizzes"
|
43
|
+
@response = CanvasFactory.perform_post(quiz_end_point, @request)
|
44
|
+
@id = response['id']
|
45
|
+
@title = response['title']
|
46
|
+
@html_url = response['html_url']
|
47
|
+
@published = response['published']
|
48
|
+
@due_at = response['due_at']
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -1,26 +1,36 @@
|
|
1
|
-
# canvas section class
|
2
1
|
module CanvasFactory
|
2
|
+
# canvas section class
|
3
3
|
class Section
|
4
4
|
attr_reader :course_id, :id, :end_at, :start_at, :name, :sis_section_id, :sis_course_id,
|
5
|
-
:integration_id, :sis_import_id, :nonxlist_course_id
|
5
|
+
:integration_id, :sis_import_id, :nonxlist_course_id, :request, :response
|
6
6
|
|
7
|
-
def initialize(course_id,
|
8
|
-
|
7
|
+
def initialize(course_id, opts = {}, merge = true)
|
8
|
+
@course_id = course_id
|
9
|
+
@request = {
|
10
|
+
course_section: {
|
11
|
+
name: "section-#{Time.now.to_i}",
|
12
|
+
start_at: Time.now,
|
13
|
+
end_at: Time.now + (30 * 24 * 60 * 60),
|
14
|
+
restrict_enrollments_to_section_dates: false,
|
15
|
+
# enable_sis_reactivation: false,
|
16
|
+
# sis_section_id: nil
|
17
|
+
}
|
18
|
+
}
|
19
|
+
@request = Mergie.deep_merge(@request, opts, merge)
|
20
|
+
create_section
|
21
|
+
self
|
9
22
|
end
|
10
23
|
|
11
|
-
|
12
|
-
|
13
|
-
|
24
|
+
private
|
25
|
+
|
26
|
+
def create_section
|
27
|
+
section_end_point = "#{CANVAS_API_V1}/courses/#{@course_id}/sections"
|
28
|
+
@response = CanvasFactory.perform_post(section_end_point, @request)
|
14
29
|
@course_id = response['course_id']
|
15
30
|
@id = response['id']
|
16
31
|
@name = response['name']
|
17
32
|
@end_at = response['end_at']
|
18
33
|
@start_at = response['start_at']
|
19
|
-
@sis_section_id = response['sis_section_id']
|
20
|
-
@sis_course_id = response['sis_course_id']
|
21
|
-
@integration_id = response['integration_id']
|
22
|
-
@sis_import_id = response['sis_import_id']
|
23
|
-
@nonxlist_course_id = response['nonxlist_course_id']
|
24
34
|
end
|
25
35
|
end
|
26
36
|
end
|
@@ -1,27 +1,58 @@
|
|
1
|
-
# canvas user class
|
2
1
|
module CanvasFactory
|
2
|
+
# canvas user class
|
3
3
|
class User
|
4
|
-
attr_reader :
|
5
|
-
:
|
4
|
+
attr_reader :learner_request, :user_response, :id, :admin_request,
|
5
|
+
:email_id, :short_name, :password
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
|
7
|
+
def initialize(opts = {}, merge = true)
|
8
|
+
unique_email = "#{@email_prefix}#{SecureRandom.hex}@example.com"
|
9
|
+
@learner_request = {
|
10
|
+
user: {
|
11
|
+
name: unique_email,
|
12
|
+
short_name: 'auto user',
|
13
|
+
terms_of_use: '1',
|
14
|
+
send_confirmation: true
|
15
|
+
},
|
16
|
+
pseudonym: {
|
17
|
+
unique_id: unique_email,
|
18
|
+
password: 'Testing01'
|
19
|
+
},
|
20
|
+
force_validations: true
|
21
|
+
}
|
22
|
+
@learner_request = Mergie.deep_merge(@learner_request, opts, merge)
|
23
|
+
create_learner_user
|
9
24
|
end
|
10
25
|
|
26
|
+
private
|
27
|
+
|
11
28
|
def create_learner_user
|
12
29
|
user_end_point = "#{CANVAS_API_V1}/accounts/#{CANVAS_ACCOUNT_ID}/users"
|
13
|
-
@user_response = CanvasFactory.perform_post(user_end_point, @
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
30
|
+
@user_response = CanvasFactory.perform_post(user_end_point, @learner_request)
|
31
|
+
@id = @user_response['id']
|
32
|
+
@email_id = @user_response['login_id']
|
33
|
+
@short_name = @user_response['short_name']
|
34
|
+
@password = @learner_request[:pseudonym][:password]
|
35
|
+
@user_response
|
18
36
|
end
|
37
|
+
end
|
19
38
|
|
20
|
-
|
21
|
-
|
22
|
-
|
39
|
+
# canvas admin user class
|
40
|
+
class AdminUser < User
|
41
|
+
def initialize(opts = {}, merge = true)
|
42
|
+
super(opts, merge)
|
43
|
+
make_admin_user
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def make_admin_user
|
49
|
+
@admin_request = {
|
50
|
+
user_id: @id,
|
51
|
+
role_id: 'AccountAdmin',
|
52
|
+
send_confirmation: true
|
53
|
+
}
|
23
54
|
admin_end_point = "#{CANVAS_API_V1}/accounts/#{CANVAS_ACCOUNT_ID}/admins"
|
24
|
-
CanvasFactory.perform_post(admin_end_point,
|
55
|
+
CanvasFactory.perform_post(admin_end_point, @admin_request)
|
25
56
|
end
|
26
57
|
end
|
27
58
|
end
|
data/lib/japanda/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: japanda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Santosh Natarajan
|
8
|
+
- Robert Lamb
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-09
|
12
|
+
date: 2015-12-09 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
@@ -52,6 +53,20 @@ dependencies:
|
|
52
53
|
- - ">="
|
53
54
|
- !ruby/object:Gem::Version
|
54
55
|
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: hashie
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
55
70
|
- !ruby/object:Gem::Dependency
|
56
71
|
name: dotenv
|
57
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,6 +98,7 @@ dependencies:
|
|
83
98
|
description: Library to create custom course. wip.
|
84
99
|
email:
|
85
100
|
- snatarajan@instructure.com
|
101
|
+
- rlamb@instructure.com
|
86
102
|
executables: []
|
87
103
|
extensions: []
|
88
104
|
extra_rdoc_files: []
|
@@ -102,16 +118,13 @@ files:
|
|
102
118
|
- lib/japanda.rb
|
103
119
|
- lib/japanda/canvas_factory.rb
|
104
120
|
- lib/japanda/canvas_factory/assignment.rb
|
105
|
-
- lib/japanda/canvas_factory/assignment_config.rb
|
106
121
|
- lib/japanda/canvas_factory/course.rb
|
107
|
-
- lib/japanda/canvas_factory/
|
122
|
+
- lib/japanda/canvas_factory/mergie.rb
|
108
123
|
- lib/japanda/canvas_factory/module.rb
|
109
|
-
- lib/japanda/canvas_factory/
|
110
|
-
- lib/japanda/canvas_factory/
|
124
|
+
- lib/japanda/canvas_factory/module_item.rb
|
125
|
+
- lib/japanda/canvas_factory/quiz.rb
|
111
126
|
- lib/japanda/canvas_factory/section.rb
|
112
|
-
- lib/japanda/canvas_factory/section_config.rb
|
113
127
|
- lib/japanda/canvas_factory/user.rb
|
114
|
-
- lib/japanda/canvas_factory/user_config.rb
|
115
128
|
- lib/japanda/version.rb
|
116
129
|
homepage:
|
117
130
|
licenses: []
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module CanvasFactory
|
2
|
-
class AssignmentConfig
|
3
|
-
attr_accessor :name, :grading_type, :submission_types, :points_possible, :due_at, :published
|
4
|
-
|
5
|
-
def initialize(opts = {})
|
6
|
-
@name = opts[:name] || "Assignment-#{Time.now.to_i}"
|
7
|
-
@grading_type = opts[:grading_type] || %w(pass_fail percent letter_grade gpa_scale points).sample
|
8
|
-
@submission_types = opts[:submission_types] || ['online_text_entry']
|
9
|
-
@points_possible = opts[:points_possible] || 10
|
10
|
-
@due_at = opts[:due_at] || (DateTime.now + 1).iso8601
|
11
|
-
@published = opts[:published] || true
|
12
|
-
end
|
13
|
-
|
14
|
-
def request_body
|
15
|
-
{
|
16
|
-
assignment: {
|
17
|
-
name: @name,
|
18
|
-
grading_type: @grading_type,
|
19
|
-
submission_types: @submission_types,
|
20
|
-
points_possible: @points_possible,
|
21
|
-
due_at: @due_at,
|
22
|
-
published: @published
|
23
|
-
}
|
24
|
-
}
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module CanvasFactory
|
2
|
-
class CourseConfig
|
3
|
-
attr_accessor :account_id, :name, :course_code, :start_at, :end_at, :offer
|
4
|
-
|
5
|
-
def initialize(opts = {})
|
6
|
-
course_name_code = "auto#{SecureRandom.hex}"
|
7
|
-
@account_id = opts[:account_id] || CANVAS_ACCOUNT_ID
|
8
|
-
@name = opts[:name] || course_name_code
|
9
|
-
@course_code = opts[:course_code] || course_name_code
|
10
|
-
@start_at = opts[:start_at] || Time.now
|
11
|
-
@end_at = opts[:end_at] || Time.now + (30 * 24 * 60 * 60)
|
12
|
-
@offer = opts[:offer] || true
|
13
|
-
end
|
14
|
-
|
15
|
-
def request_body
|
16
|
-
{
|
17
|
-
account_id: @account_id,
|
18
|
-
course: {
|
19
|
-
name: @name,
|
20
|
-
course_code: @course_code,
|
21
|
-
start_at: @start_at,
|
22
|
-
end_at: @end_at
|
23
|
-
},
|
24
|
-
offer: @offer
|
25
|
-
}
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module CanvasFactory
|
2
|
-
class ModuleConfig
|
3
|
-
attr_accessor :name, :unlock_at, :require_sequential_progress
|
4
|
-
|
5
|
-
def initialize(opts = {})
|
6
|
-
@name = opts[:name] || "module-#{Time.now.to_i}"
|
7
|
-
@unlock_at = opts[:unlock_at] || DateTime.now.iso8601
|
8
|
-
@require_sequential_progress = opts[:require_sequential_progress] || true
|
9
|
-
@published = opts[:published] || true
|
10
|
-
end
|
11
|
-
|
12
|
-
def request_body
|
13
|
-
{
|
14
|
-
module: {
|
15
|
-
name: @name,
|
16
|
-
unlock_at: @unlock_at,
|
17
|
-
require_sequential_progress: @require_sequential_progress
|
18
|
-
}
|
19
|
-
}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module CanvasFactory
|
2
|
-
class ModuleItemConfig
|
3
|
-
attr_accessor :module_item_type, :content_id, :completion_type, :title
|
4
|
-
|
5
|
-
def initialize(opts = {})
|
6
|
-
@module_item_type = opts[:module_item_type] || 'Assignment'
|
7
|
-
@content_id = opts[:content_id]
|
8
|
-
@completion_type = opts[:completion_type] || 'must_view'
|
9
|
-
@title = opts[:title] || 'module_assignment'
|
10
|
-
end
|
11
|
-
|
12
|
-
def request_body
|
13
|
-
{
|
14
|
-
module_item: {
|
15
|
-
title: @title,
|
16
|
-
type: @module_item_type,
|
17
|
-
content_id: @content_id,
|
18
|
-
completion_requirement: {
|
19
|
-
type: @completion_type
|
20
|
-
}
|
21
|
-
}
|
22
|
-
}
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module CanvasFactory
|
2
|
-
class SectionConfig
|
3
|
-
attr_accessor :name, :start_at, :end_at
|
4
|
-
|
5
|
-
def initialize(opts = {})
|
6
|
-
@name = opts[:name] || "section-#{Time.now.to_i}"
|
7
|
-
@start_at = opts[:start_at] || Time.now
|
8
|
-
@end_at = opts[:end_at] || Time.now + (30 * 24 * 60 * 60)
|
9
|
-
end
|
10
|
-
|
11
|
-
def request_body
|
12
|
-
{
|
13
|
-
course_section: {
|
14
|
-
name: @name,
|
15
|
-
start_at: @start_at,
|
16
|
-
end_at: @end_at
|
17
|
-
}
|
18
|
-
}
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module CanvasFactory
|
2
|
-
class UserConfig
|
3
|
-
attr_accessor :email_prefix, :password, :short_name, :terms_of_use, :send_confirmation,
|
4
|
-
:force_validations, :role_id, :email_id
|
5
|
-
|
6
|
-
def initialize(opts = {})
|
7
|
-
@email_prefix = opts[:email_prefix] || 'catauto'
|
8
|
-
@password = opts[:password] || 'Testing01'
|
9
|
-
@short_name = opts[:short_name] || 'cat auto'
|
10
|
-
@terms_of_use = opts[:terms_of_use] || '1'
|
11
|
-
@send_confirmation = opts[:send_confirmation] || true
|
12
|
-
@force_validations = opts[:force_validations] || true
|
13
|
-
@role_id = opts[:role_id] || 'AccountAdmin'
|
14
|
-
@email_id = opts[:email_id] || "#{@email_prefix}#{SecureRandom.hex}@example.com"
|
15
|
-
end
|
16
|
-
|
17
|
-
def user_request_body
|
18
|
-
{
|
19
|
-
user: {
|
20
|
-
name: @email_id,
|
21
|
-
short_name: @short_name,
|
22
|
-
terms_of_use: @terms_of_use,
|
23
|
-
send_confirmation: @send_confirmation
|
24
|
-
},
|
25
|
-
pseudonym: {
|
26
|
-
unique_id: @email_id,
|
27
|
-
password: @password
|
28
|
-
},
|
29
|
-
force_validations: @force_validations
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
|
-
def admin_request_body(id)
|
34
|
-
{
|
35
|
-
user_id: id,
|
36
|
-
role_id: @role_id,
|
37
|
-
send_confirmation: @send_confirmation
|
38
|
-
}
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|