github-to-canvas 0.0.26 → 0.0.31

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49af565aafcbebe3151fdf8546a6153600e6425afcf1af8034fdc914d4003b51
4
- data.tar.gz: 01a5ac504f7d905394f1eb42f2cec5b89237f1e2af7f7e42fad3bacd6001b0de
3
+ metadata.gz: cbe5aa05e4c77ad585a787d3d47d7f6f9bd3c1459888f6fc1bbba4d28270744d
4
+ data.tar.gz: 27491ba2f7073b47ba291bf81796649346d3ec5d0f1203d2715af1373fde7f6a
5
5
  SHA512:
6
- metadata.gz: 535eeae8522d06b60b35a5f26a7a427fecd28cfa4c89f8d359b472e290a34ef58b5a7532f79c28219a20a8333bdd643052b497052b853749ecfc9ff0ba91c174
7
- data.tar.gz: c7dc94133876c712d5e3f0fc1003553d2ea3f21b967d8ffa742fa98be1147f09f7024f0f0baa5ffc6f286a64dc9bbb6f7ab90b480da59449956fba0faf69aec5
6
+ metadata.gz: 164d14066a9a97e873aa6d348fc16ee6bd9dd56d5670753490d0729bda8202a7d2b94881ef0c40f44bf8328383b176ec7809f7295ee0f88639310c1827040f7e
7
+ data.tar.gz: 04640d7007324b1b75b4afc123eabec3e9e1fff600da90b1ad094ce04ba72fd1df6611f9e9e304fb0023d1779316f3d6d40a551f64ecab86226add8f0799565b
data/README.md CHANGED
@@ -1,10 +1,5 @@
1
1
  # GitHub to Canvas Gem
2
2
 
3
- ## Objectives
4
-
5
- 1. test
6
- 2. test 2
7
-
8
3
  ## Introduction
9
4
 
10
5
  The `github-to-canvas` gem is designed to enable GitHub to Canvas LMS
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'optparse'
4
4
  require 'github-to-canvas'
5
-
6
5
  options = {}
7
6
  OptionParser.new do |opts|
8
7
  opts.banner = <<-EOBANNER
@@ -13,13 +12,13 @@ OptionParser.new do |opts|
13
12
  https://github.com/learn-co-curriculum/github-to-canvas
14
13
 
15
14
  Commands:
16
- github-to-canvas --create COURSE
17
- github-to-canvas --create COURSE [--branch BRANCH]
18
- github-to-canvas --create COURSE [--branch BRANCH] [--name NAME]
19
- github-to-canvas --create COURSE [--branch BRANCH] [--name NAME] [--type TYPE]
20
- github-to-canvas --create COURSE [--dry-run]
21
- github-to-canvas --create COURSE [--fis-links]
22
- github-to-canvas --create COURSE [--fis-links] [--remove-header-and-footer]
15
+ github-to-canvas --create-lesson COURSE
16
+ github-to-canvas --create-lesson COURSE [--save]
17
+ github-to-canvas --create-lesson COURSE [--branch BRANCH]
18
+ github-to-canvas --create-lesson COURSE [--branch BRANCH] [--name NAME]
19
+ github-to-canvas --create-lesson COURSE [--branch BRANCH] [--name NAME] [--type TYPE]
20
+ github-to-canvas --create-lesson COURSE [--fis-links]
21
+ github-to-canvas --create-lesson COURSE [--fis-links] [--remove-header-and-footer]
23
22
  github-to-canvas --align
24
23
  github-to-canvas --align [--branch BRANCH]
25
24
  github-to-canvas --align [--branch BRANCH] [--fis-links]
@@ -31,19 +30,19 @@ OptionParser.new do |opts|
31
30
 
32
31
  Example usage:
33
32
 
34
- github-to-canvas --create 154 -> Creates a lesson in course 154, derives the name and type from the local repo
35
- github-to-canvas --create 154 --name "Fetch Lab" -> Creates a lesson in course 154 with the provided name, derives the type from the local repo
36
- github-to-canvas --create 154 --name "Fetch Lab" --type assignment -> Creates an assignment in course 154 with the provided name
37
- github-to-canvas --create 154 --name "Fetch Lab" --branch solution -> Creates a lesson in course 154 with the provided name, uses the repository's solution branch and derives the type from the local repo
33
+ github-to-canvas --create-lesson 154 -> Creates a lesson in course 154, derives the name and type from the local repo
34
+ github-to-canvas --create-lesson 154 --name "Fetch Lab" -> Creates a lesson in course 154 with the provided name, derives the type from the local repo
35
+ github-to-canvas --create-lesson 154 --name "Fetch Lab" --type assignment -> Creates an assignment in course 154 with the provided name
36
+ github-to-canvas --create-lesson 154 --name "Fetch Lab" --branch solution -> Creates a lesson in course 154 with the provided name, uses the repository's solution branch and derives the type from the local repo
38
37
  github-to-canvas --align -> Patches existing lessons in Canvas based on the .canvas file
39
38
  github-to-canvas --align --fis-links -> Patches existing lessons in Canvas based on the .canvas file, adds addition Flatiron School specific HTML
40
39
  github-to-canvas --align --remove-header-and-footer -> Patches existing lessons in Canvas based on the .canvas file, removes top lesson header before converting to HTML
41
40
 
42
41
  EOBANNER
43
42
 
44
- opts.on("-cCOURSE", "--create COURSE",
43
+ opts.on("-cCOURSE", "--create-lesson COURSE",
45
44
  "Creates a new canvas lesson, converting the local repository's README.md to HTML. Adds .canvas file to remote repository") do |course|
46
- options[:create] = true
45
+ options[:create_lesson] = true
47
46
  options[:course] = course
48
47
  end
49
48
  opts.on("-bBRANCH", "--branch BRANCH",
@@ -63,6 +62,14 @@ OptionParser.new do |opts|
63
62
  options[:type] = "page"
64
63
  end
65
64
  end
65
+ opts.on("-fFILE", "--file FILE",
66
+ "Looks for and uses a markdown file in the currentt folder as source for conversion. Default file is README.md. Skips writing .canvas to repository") do |file|
67
+ options[:file_to_convert] = file
68
+ end
69
+ opts.on("-s", "--save-to-github",
70
+ "Creates a local .canvas file and attempts to commit and push it to the GitHub repository") do |s|
71
+ options[:save_to_github] = true
72
+ end
66
73
  opts.on("-a", "--align",
67
74
  "Updates a canvas lesson based on the local repository's README.md") do |a|
68
75
  options[:align] = true
@@ -71,11 +78,7 @@ OptionParser.new do |opts|
71
78
  "Displays current gem version") do |v|
72
79
  options[:version] = true
73
80
  end
74
- opts.on("-d", "--dry-run",
75
- "Runs through creation without pushing to Canvas or GitHub") do |d|
76
- options[:dry] = true
77
- end
78
- opts.on("-f", "--fis-links",
81
+ opts.on("-l", "--fis-links",
79
82
  "Adds additional Flatiron School HTML after markdown conversion") do |f|
80
83
  options[:fis] = true
81
84
  end
@@ -90,6 +93,10 @@ if options[:version]
90
93
  GithubToCanvas.new(mode: 'version', course: nil)
91
94
  end
92
95
 
96
+ if !options[:file_to_convert]
97
+ options[:file_to_convert] = "README.md"
98
+ end
99
+
93
100
  if !options[:type]
94
101
  if Dir.glob("**/*/").empty?
95
102
  options[:type] = "page"
@@ -103,17 +110,22 @@ if !options[:branch]
103
110
  end
104
111
 
105
112
  if !options[:name]
106
- options[:name] = File.basename(Dir.getwd)
113
+ if options[:file_to_convert]
114
+ options[:name] = options[:file_to_convert]
115
+ else
116
+ options[:name] = File.basename(Dir.getwd)
117
+ end
107
118
  end
108
119
 
109
- if options[:create]
120
+ if options[:create_lesson]
110
121
  GithubToCanvas.new(mode: "create",
111
122
  course: options[:course],
112
123
  filepath: Dir.pwd,
124
+ file_to_convert: options[:file_to_convert],
113
125
  branch: options[:branch],
114
126
  name: options[:name],
115
127
  type: options[:type],
116
- dry: !!options[:dry],
128
+ save_to_github: !!options[:save_to_github],
117
129
  fis_links: !!options[:fis],
118
130
  remove_header_and_footer: !!options[:remove_header_and_footer])
119
131
  end
@@ -121,11 +133,12 @@ end
121
133
  if options[:align]
122
134
  GithubToCanvas.new(mode: "align",
123
135
  course: nil,
124
- filepath: Dir.pwd,
125
- branch: options[:branch],
126
- name: options[:name],
127
- type: options[:type],
128
- dry: !!options[:dry],
136
+ filepath: Dir.pwd,
137
+ file_to_convert: options[:file_to_convert],
138
+ branch: options[:branch],
139
+ name: options[:name],
140
+ type: options[:type],
141
+ save_to_github: !!options[:save_to_github],
129
142
  fis_links: !!options[:fis],
130
143
  remove_header_and_footer: !!options[:remove_header_and_footer])
131
144
  end
@@ -12,10 +12,11 @@ class GithubToCanvas
12
12
  def initialize(mode:,
13
13
  course:,
14
14
  filepath:Dir.pwd,
15
- branch:'master',
15
+ file_to_convert:'README.md',
16
+ branch:'master',
16
17
  name:File.basename(Dir.getwd),
17
18
  type:"page",
18
- dry:false,
19
+ save_to_github:false,
19
20
  fis_links:false,
20
21
  remove_header_and_footer:false)
21
22
 
@@ -26,12 +27,12 @@ class GithubToCanvas
26
27
 
27
28
  if mode == 'create'
28
29
  puts "github-to-canvas will now create a Canvas lesson based on the current repo"
29
- CreateCanvasLesson.new(course, filepath, branch, name, type, dry, fis_links, remove_header_and_footer)
30
+ CreateCanvasLesson.new(course, filepath, file_to_convert, branch, name, type, save_to_github, fis_links, remove_header_and_footer)
30
31
  end
31
32
 
32
33
  if mode == 'align'
33
34
  puts "github-to-canvas will now align any existing Canvas lessons based on the current repo. NOTE: .canvas file must be present"
34
- UpdateCanvasLesson.new(filepath, branch, name, type, dry, fis_links, remove_header_and_footer)
35
+ UpdateCanvasLesson.new(filepath, file_to_convert, branch, name, type, save_to_github, fis_links, remove_header_and_footer)
35
36
  end
36
37
  end
37
38
 
@@ -1,16 +1,15 @@
1
1
  require 'yaml'
2
-
3
2
  class CanvasDotfile
4
3
 
5
4
  def self.update_or_create(filepath, response, course, type)
6
5
  if File.file?(".canvas")
7
- if type == "assignment"
6
+ if type == "assignment" || type == "discussion"
8
7
  canvas_data = self.update_assignment_data(response, course, type)
9
8
  else
10
9
  canvas_data = self.update_page_data(response, course, type)
11
10
  end
12
11
  else
13
- if type == "assignment"
12
+ if type == "assignment" || type == "discussion"
14
13
  canvas_data = self.create_assignment_data(response, course, type)
15
14
  else
16
15
  canvas_data = self.create_page_data(response, course, type)
@@ -1,19 +1,14 @@
1
1
  require 'json'
2
2
  require 'rest-client'
3
-
4
3
  class CanvasInterface
5
4
 
6
- def self.submit_to_canvas(course_id, type, name, readme, dry_run = false)
7
- if dry_run
8
- puts 'DRY RUN: Skipping push to Canvas'
9
- else
10
- response = self.push_to_canvas(course_id, type, name, readme)
11
- if ![200, 201].include? response.code
12
- puts "Canvas push failed. #{response.code} status code returned "
13
- abort
14
- end
15
- JSON.parse(response.body)
5
+ def self.submit_to_canvas(course_id, type, name, readme)
6
+ response = self.push_to_canvas(course_id, type, name, readme)
7
+ if ![200, 201].include? response.code
8
+ puts "Canvas push failed. #{response.code} status code returned "
9
+ abort
16
10
  end
11
+ JSON.parse(response.body)
17
12
  end
18
13
 
19
14
  def self.push_to_canvas(course_id, type, name, new_readme)
@@ -29,11 +24,16 @@ class CanvasInterface
29
24
  })
30
25
  rescue
31
26
  puts "Something went wrong while pushing lesson #{id} to course #{course_id}"
27
+ abort
32
28
  end
33
29
  end
34
30
 
35
31
  def self.update_existing_lesson(course_id, id, type, name, new_readme, dry_run)
36
- url = "#{ENV['CANVAS_API_PATH']}/courses/#{course_id}/#{type}s/#{id}"
32
+ if type == "discussion"
33
+ url = "#{ENV['CANVAS_API_PATH']}/courses/#{course_id}/#{type}_topics/#{id}"
34
+ else
35
+ url = "#{ENV['CANVAS_API_PATH']}/courses/#{course_id}/#{type}s/#{id}"
36
+ end
37
37
  payload = self.build_payload(type, name, new_readme)
38
38
  begin
39
39
  RestClient.put(url, payload, headers={
@@ -41,6 +41,7 @@ class CanvasInterface
41
41
  })
42
42
  rescue
43
43
  puts "Something went wrong while pushing lesson #{id} to course #{course_id}"
44
+ # abort
44
45
  end
45
46
  end
46
47
 
@@ -1,29 +1,31 @@
1
1
  class CreateCanvasLesson
2
2
 
3
- def initialize(course, filepath, branch, name, type, dry_run, fis_links, remove_header_and_footer)
3
+ def initialize(course, filepath, file_to_convert, branch, name, type, save_to_github, fis_links, remove_header_and_footer)
4
4
  name = name.split(/[- _]/).map(&:capitalize).join(' ')
5
- original_readme = File.read("#{filepath}/README.md")
6
- if !original_readme
7
- puts 'README.md not found in current directory. Exiting...'
5
+ markdown = File.read("#{filepath}/#{file_to_convert}")
6
+ if !markdown
7
+ puts "#{file_to_convert} not found in current directory. Exiting..."
8
8
  abort
9
9
  end
10
- create_canvas_lesson(original_readme, course, filepath, branch, name, type, dry_run, fis_links, remove_header_and_footer)
10
+ create_canvas_lesson(markdown, course, filepath, branch, name, type, save_to_github, fis_links, remove_header_and_footer)
11
11
  end
12
12
 
13
- def create_canvas_lesson(readme, course, filepath, branch, name, type, dry_run, fis_links, remove_header_and_footer)
13
+ def create_canvas_lesson(markdown, course, filepath, branch, name, type, save_to_github, fis_links, remove_header_and_footer)
14
14
  GithubInterface.get_updated_repo(filepath, branch)
15
- new_readme = RepositoryConverter.convert(filepath, readme, branch, remove_header_and_footer)
15
+ new_html = RepositoryConverter.convert(filepath, markdown, branch, remove_header_and_footer)
16
16
  if fis_links
17
- new_readme = RepositoryConverter.add_fis_links(filepath, new_readme)
17
+ new_html = RepositoryConverter.add_fis_links(filepath, new_html)
18
18
  end
19
- response = CanvasInterface.submit_to_canvas(course, type, name, new_readme, dry_run)
20
- if dry_run
21
- puts 'DRY RUN: Skipping dotfile creation and push to GitHub'
22
- else
19
+ response = CanvasInterface.submit_to_canvas(course, type, name, new_html)
20
+ if save_to_github
21
+ puts 'Creating .canvas file'
23
22
  CanvasDotfile.update_or_create(filepath, response, course, type)
23
+ puts 'Commiting .canvas file'
24
24
  CanvasDotfile.commit_canvas_dotfile(filepath)
25
+ puts 'Pushing .canvas file'
25
26
  GithubInterface.git_push(filepath, branch)
26
27
  end
28
+ puts "Canvas lesson created. Lesson available at #{response['html_url']}."
27
29
  end
28
30
 
29
31
  end
@@ -5,7 +5,6 @@ class RepositoryConverter
5
5
  if remove_header_and_footer
6
6
  readme = self.remove_header(readme)
7
7
  readme = self.remove_footer(readme)
8
- p readme
9
8
  end
10
9
  self.fix_local_images(filepath, readme, branch)
11
10
  self.convert_to_html(filepath, readme)
@@ -1,24 +1,25 @@
1
1
  class UpdateCanvasLesson
2
2
 
3
- def initialize(filepath, branch, name, type, dry_run, fis_links, remove_header_and_footer)
3
+ def initialize(filepath, branch, name, type, save_to_github, fis_links, remove_header_and_footer)
4
4
  name = name.split(/[- _]/).map(&:capitalize).join(' ')
5
- readme = File.read("#{filepath}/README.md")
6
- if !readme
7
- puts 'README.md not found in current directory. Exiting...'
5
+ markdown = File.read("#{filepath}/#{file_to_convert}")
6
+ if !markdown
7
+ puts "#{file_to_convert} not found in current directory. Exiting..."
8
8
  abort
9
9
  end
10
- update_canvas_lesson(readme, filepath, branch, name, type, dry_run, fis_links, remove_header_and_footer)
10
+ update_canvas_lesson(markdown, filepath, branch, name, type, save_to_github, fis_links, remove_header_and_footer)
11
11
  end
12
12
 
13
- def update_canvas_lesson(readme, filepath, branch, name, type, dry_run, fis_links, remove_header_and_footer)
13
+ def update_canvas_lesson(markdown, filepath, branch, name, type, save_to_github, fis_links, remove_header_and_footer)
14
14
  GithubInterface.get_updated_repo(filepath, branch)
15
- new_readme = RepositoryConverter.convert(filepath, readme, branch, remove_header_and_footer)
15
+ new_html = RepositoryConverter.convert(filepath, markdown, branch, remove_header_and_footer)
16
16
  if fis_links
17
- new_readme = RepositoryConverter.add_fis_links(filepath, new_readme)
17
+ new_html = RepositoryConverter.add_fis_links(filepath, new_html) # adds Flatiron School specific header and footer
18
18
  end
19
19
  canvas_data = CanvasDotfile.read_canvas_data
20
20
  canvas_data[:lessons].each { |lesson|
21
- CanvasInterface.update_existing_lesson(lesson[:course_id], lesson[:id], type, name, new_readme, dry_run)
21
+ response = CanvasInterface.update_existing_lesson(lesson[:course_id], lesson[:id], lesson[:type], name, new_html, save_to_github)
22
+ puts "Canvas lesson created. Lesson available at #{response['html_url']}."
22
23
  }
23
24
  end
24
25
 
@@ -1,3 +1,3 @@
1
1
  class GithubToCanvas
2
- VERSION = "0.0.26"
2
+ VERSION = "0.0.31"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-to-canvas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.26
4
+ version: 0.0.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - maxwellbenton