japanda 0.1.0 → 0.1.5

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.
@@ -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: []