japanda 0.1.0 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ require 'hashie/extensions/deep_merge'
2
+ module CanvasFactory
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
10
+ end
@@ -0,0 +1,51 @@
1
+ module CanvasFactory
2
+ # canvas module class
3
+ class Module
4
+ attr_reader :course_id, :name, :module_id, :published, :request, :response,
5
+ :module_items, :publish_response, :publish_request
6
+
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
20
+ end
21
+
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
26
+ end
27
+
28
+ def publish(opts = {}, merge = true)
29
+ @publish_request = {
30
+ module: {
31
+ published: true
32
+ }
33
+ }
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']
38
+ end
39
+
40
+ private
41
+
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']
49
+ end
50
+ end
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
+
@@ -0,0 +1,36 @@
1
+ module CanvasFactory
2
+ # canvas section class
3
+ class Section
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, :request, :response
6
+
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
22
+ end
23
+
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)
29
+ @course_id = response['course_id']
30
+ @id = response['id']
31
+ @name = response['name']
32
+ @end_at = response['end_at']
33
+ @start_at = response['start_at']
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,67 @@
1
+ module CanvasFactory
2
+ # canvas user class
3
+ class User
4
+ attr_reader :learner_request, :user_response, :id, :admin_request,
5
+ :email_id, :short_name, :password
6
+
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
24
+ end
25
+
26
+ def delete_user
27
+ user_end_point = "#{CANVAS_API_V1}/accounts/#{CANVAS_ACCOUNT_ID}/users/#{@id}"
28
+ @user_response = CanvasFactory.perform_delete(user_end_point)
29
+ end
30
+
31
+ private
32
+
33
+ def create_learner_user
34
+ user_end_point = "#{CANVAS_API_V1}/accounts/#{CANVAS_ACCOUNT_ID}/users"
35
+ @user_response = CanvasFactory.perform_post(user_end_point, @learner_request)
36
+ @id = @user_response['id']
37
+ @email_id = @user_response['login_id']
38
+ @short_name = @user_response['short_name']
39
+ @password = @learner_request[:pseudonym][:password]
40
+ @user_response
41
+ end
42
+ end
43
+
44
+ # canvas admin user class
45
+ class AdminUser < User
46
+ def initialize(opts = {}, merge = true)
47
+ super(opts, merge)
48
+ make_admin_user
49
+ end
50
+
51
+ private
52
+
53
+ def make_admin_user
54
+ @admin_request = {
55
+ user_id: @id,
56
+ role_id: 'AccountAdmin',
57
+ send_confirmation: true
58
+ }
59
+ admin_end_point = "#{CANVAS_API_V1}/accounts/#{CANVAS_ACCOUNT_ID}/admins"
60
+ @admin_response = CanvasFactory.perform_post(admin_end_point, @admin_request)
61
+ @id = @admin_response['user']['id']
62
+ @email_id = @admin_response['user']['login_id']
63
+ @short_name = @admin_response['user']['short_name']
64
+ @admin_response
65
+ end
66
+ end
67
+ end
@@ -1,3 +1,3 @@
1
1
  module Japanda
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.5"
3
3
  end
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.0
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Santosh Natarajan
8
- autorequire:
8
+ - Robert Lamb
9
+ autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2015-09-15 00:00:00.000000000 Z
12
+ date: 2020-12-09 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
@@ -16,30 +17,30 @@ dependencies:
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: 1.10.5
20
+ version: '1.5'
20
21
  type: :development
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: 1.10.5
27
+ version: '1.5'
27
28
  - !ruby/object:Gem::Dependency
28
- name: rake
29
+ name: byebug
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - "~>"
32
+ - - ">="
32
33
  - !ruby/object:Gem::Version
33
- version: '10.0'
34
+ version: '0'
34
35
  type: :development
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - "~>"
39
+ - - ">="
39
40
  - !ruby/object:Gem::Version
40
- version: '10.0'
41
+ version: '0'
41
42
  - !ruby/object:Gem::Dependency
42
- name: rspec
43
+ name: dotenv
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - ">="
@@ -53,80 +54,114 @@ dependencies:
53
54
  - !ruby/object:Gem::Version
54
55
  version: '0'
55
56
  - !ruby/object:Gem::Dependency
56
- name: deep_merge
57
+ name: hashie
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 4.0.0
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 4.0.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
57
72
  requirement: !ruby/object:Gem::Requirement
58
73
  requirements:
59
74
  - - ">="
60
75
  - !ruby/object:Gem::Version
61
76
  version: '0'
62
- type: :runtime
77
+ type: :development
63
78
  prerelease: false
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
66
81
  - - ">="
67
82
  - !ruby/object:Gem::Version
68
83
  version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 3.5.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 3.5.0
69
98
  - !ruby/object:Gem::Dependency
70
99
  name: rest-client
71
100
  requirement: !ruby/object:Gem::Requirement
72
101
  requirements:
73
102
  - - ">="
74
103
  - !ruby/object:Gem::Version
75
- version: '0'
104
+ version: 2.1.0
76
105
  type: :runtime
77
106
  prerelease: false
78
107
  version_requirements: !ruby/object:Gem::Requirement
79
108
  requirements:
80
109
  - - ">="
81
110
  - !ruby/object:Gem::Version
82
- version: '0'
111
+ version: 2.1.0
83
112
  - !ruby/object:Gem::Dependency
84
- name: dotenv
113
+ name: rspec_junit_formatter
85
114
  requirement: !ruby/object:Gem::Requirement
86
115
  requirements:
87
- - - ">="
116
+ - - "~>"
88
117
  - !ruby/object:Gem::Version
89
- version: '0'
118
+ version: 0.4.1
90
119
  type: :runtime
91
120
  prerelease: false
92
121
  version_requirements: !ruby/object:Gem::Requirement
93
122
  requirements:
94
- - - ">="
123
+ - - "~>"
95
124
  - !ruby/object:Gem::Version
96
- version: '0'
97
- description: Library to create custom course, catalog.
125
+ version: 0.4.1
126
+ description: Library to create custom course. wip.
98
127
  email:
99
128
  - snatarajan@instructure.com
129
+ - rlamb@instructure.com
100
130
  executables: []
101
131
  extensions: []
102
132
  extra_rdoc_files: []
103
133
  files:
134
+ - ".env.example"
104
135
  - ".gitignore"
105
136
  - ".rspec"
137
+ - ".ruby-version"
106
138
  - ".travis.yml"
107
139
  - CODE_OF_CONDUCT.md
140
+ - Dockerfile
108
141
  - Gemfile
109
- - LICENSE.txt
142
+ - Gemfile.lock
143
+ - Jenkinsfile
110
144
  - README.md
111
145
  - Rakefile
112
146
  - bin/console
113
147
  - bin/setup
148
+ - docker-compose.yml
114
149
  - japanda.gemspec
115
- - lib/canvas_factory/assignment.rb
116
- - lib/canvas_factory/course.rb
117
- - lib/canvas_factory/module.rb
118
- - lib/canvas_factory/module_item.rb
119
- - lib/canvas_factory/section.rb
120
- - lib/canvas_factory/user.rb
121
- - lib/canvas_factory/user_config.rb
122
- - lib/catalog_factory/course_program.rb
123
150
  - lib/japanda.rb
151
+ - lib/japanda/canvas_factory.rb
152
+ - lib/japanda/canvas_factory/assignment.rb
153
+ - lib/japanda/canvas_factory/course.rb
154
+ - lib/japanda/canvas_factory/mergie.rb
155
+ - lib/japanda/canvas_factory/module.rb
156
+ - lib/japanda/canvas_factory/module_item.rb
157
+ - lib/japanda/canvas_factory/quiz.rb
158
+ - lib/japanda/canvas_factory/section.rb
159
+ - lib/japanda/canvas_factory/user.rb
124
160
  - lib/japanda/version.rb
125
- homepage: https://github.com/babababili/japanda
126
- licenses:
127
- - MIT
161
+ homepage:
162
+ licenses: []
128
163
  metadata: {}
129
- post_install_message:
164
+ post_install_message:
130
165
  rdoc_options: []
131
166
  require_paths:
132
167
  - lib
@@ -141,9 +176,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
176
  - !ruby/object:Gem::Version
142
177
  version: '0'
143
178
  requirements: []
144
- rubyforge_project:
145
- rubygems_version: 2.4.5
146
- signing_key:
179
+ rubygems_version: 3.0.8
180
+ signing_key:
147
181
  specification_version: 4
148
- summary: Library to create custom course, catalog.
182
+ summary: Library to create custom course.
149
183
  test_files: []