bobross 0.1.13
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 +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +13 -0
- data/.rbenv-gemsets +1 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/.vscode/settings.json +5 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +67 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bobross.gemspec +40 -0
- data/lib/bobross.rb +36 -0
- data/lib/bobross/version.rb +3 -0
- data/lib/dictionaries/course_codes +3763 -0
- data/lib/dictionaries/course_names +3763 -0
- data/lib/models/canvas_account.rb +58 -0
- data/lib/models/canvas_assignment.rb +56 -0
- data/lib/models/canvas_assignment_grade.rb +9 -0
- data/lib/models/canvas_assignment_group.rb +9 -0
- data/lib/models/canvas_assignment_submission.rb +9 -0
- data/lib/models/canvas_course.rb +72 -0
- data/lib/models/canvas_group_in_account.rb +9 -0
- data/lib/models/canvas_group_in_course.rb +9 -0
- data/lib/models/canvas_object.rb +25 -0
- data/lib/models/canvas_section.rb +48 -0
- data/lib/models/canvas_user.rb +60 -0
- metadata +150 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
class CanvasAccount < CanvasObject
|
2
|
+
|
3
|
+
attr_reader :name, :uid, :parent_uid, :root_uid, :time_zone, :sis_id, :workflow
|
4
|
+
|
5
|
+
def to_s
|
6
|
+
string = "#{name}, #{uid}, #{parent_uid}, #{root_uid}, #{time_zone}, #{sis_id}, #{workflow}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_csv
|
10
|
+
row = [uid, parent_uid, name, 'active', nil]
|
11
|
+
end
|
12
|
+
|
13
|
+
# future relase: Make fields reuired by canvas required here
|
14
|
+
def initialize(opts = {})
|
15
|
+
@name = opts[:name] if opts[:name]
|
16
|
+
@uid = opts[:uid] if opts[:uid]
|
17
|
+
@parent_id = opts[:parent] if opts[:parent]
|
18
|
+
@root_id = opts[:root] if opts[:root]
|
19
|
+
@time_zone = opts[:time_zone] if opts[:time_zone]
|
20
|
+
@sis_id = opts[:sis] if opts[:sis]
|
21
|
+
@workflow = opts[:workflow] if opts[:workflow]
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.random (parent_id = 1 , root_id = 1)
|
25
|
+
a = Forgery('name').company_name
|
26
|
+
CanvasAccount.new(
|
27
|
+
{
|
28
|
+
name: a,
|
29
|
+
uid: "#{a}-#{rand(10_000)}",
|
30
|
+
parent: parent_id,
|
31
|
+
root: root_id,
|
32
|
+
time_zone: Forgery('time').zone,
|
33
|
+
sis_id: (10_000+rand(10_000_000)),
|
34
|
+
workflow: 'active'
|
35
|
+
}
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.gen_file(opts = {})
|
40
|
+
opts[:rows] ? rows = opts[:rows] : rows = 0
|
41
|
+
opts[:parent] ? parent = opts[:parent] : parent = 1
|
42
|
+
opts[:root] ? root = opts[:root] : root = 1
|
43
|
+
accounts = []
|
44
|
+
if(opts[:rows])
|
45
|
+
rows.times do |x|
|
46
|
+
accounts.push(CanvasAccount.random(parent, root))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
header = %w[account_id parent_account_id name status integration_id]
|
50
|
+
CSV.open('./accounts.csv', 'wb', write_headers: true, headers: header) do |csv|
|
51
|
+
accounts.each do |acc|
|
52
|
+
csv << acc.to_csv
|
53
|
+
end
|
54
|
+
end
|
55
|
+
return accounts
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
class CanvasAssignment < CanvasObject
|
2
|
+
attr_reader :name, :description, :course_uid, :assignment_group
|
3
|
+
attr_accessor :due_at, :lock_at, :host_info
|
4
|
+
|
5
|
+
def to_s
|
6
|
+
string = "#{name}, #{description}, #{due_at}, #{lock_at}, #{course_uid}, #{assignment_group}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_csv
|
10
|
+
row = [name, description, due_at, lock_at, course_uid, assignment_group]
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(opts = {})
|
14
|
+
@name = opts[:name] if opts[:name]
|
15
|
+
@description = opts[:description] if opts[:description]
|
16
|
+
@due_at = opts[:due_at] if opts[:due_at]
|
17
|
+
@lock_at = opts[:lock_at] if opts[:lock_at]
|
18
|
+
@course_uid = opts[:course_uid] if opts[:course_uid]
|
19
|
+
@assignment_group = opts[:assignment_group] if opts[:assignment_group]
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.random (course = 1, group = 1)
|
23
|
+
d = Forgery('date').date
|
24
|
+
CanvasAssignment.new(
|
25
|
+
{
|
26
|
+
name: "What #{Forgery('name').job_title} #{Forgery('name').full_name} said about #{Forgery('name').industry}",
|
27
|
+
description: "#{Forgery('lorem_ipsum').paragraphs}",
|
28
|
+
due_at: d,
|
29
|
+
lock_at: d+10.days,
|
30
|
+
course_uid: course,
|
31
|
+
assignment_group: group
|
32
|
+
}
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.gen_file(opts = {})
|
37
|
+
course, group = 1
|
38
|
+
opts[:rows] ? rows = opts[:rows] : rows = 0
|
39
|
+
course = opts[:course] if opts[:course]
|
40
|
+
group = opts[:group] if opts[:group]
|
41
|
+
assignments = []
|
42
|
+
if(opts[:rows])
|
43
|
+
rows.times do |x|
|
44
|
+
assignments.push(CanvasAssignment.random(course, group))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
header = %w[name description due_at lock_at course_id assignment_group]
|
48
|
+
CSV.open('./assignments.csv', 'wb', write_headers: true, headers: header) do |csv|
|
49
|
+
assignments.each do |acc|
|
50
|
+
csv << acc.to_csv
|
51
|
+
end
|
52
|
+
end
|
53
|
+
return assignments
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
class CanvasCourse < CanvasObject
|
2
|
+
attr_reader :name, :uid, :sis_id, :description, :account_id, :term_id, :start_date, :end_date
|
3
|
+
@@local_dictionaries = $LOAD_PATH.grep(/bobross.*lib/).first
|
4
|
+
|
5
|
+
def initialize(opts = {})
|
6
|
+
@name = opts[:name] if opts[:name]
|
7
|
+
@uid = opts[:uid] if opts[:uid]
|
8
|
+
@sis_id = "#{opts[:sis]}" if opts[:sis]
|
9
|
+
@description = opts[:desc] if opts[:desc]
|
10
|
+
@account_id = opts[:account] if opts[:account]
|
11
|
+
@term_id = opts[:term] if opts[:term]
|
12
|
+
@start_date = opts[:start] if opts[:start]
|
13
|
+
@end_date = opts[:end] if opts[:end]
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s
|
17
|
+
s = "#{name}, #{uid}, #{sis_id}, #{description}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_csv
|
21
|
+
row = [sis_id, uid, name, account_id, term_id, 'active', nil, start_date, end_date, 'online', nil]
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.set_prefix prefix
|
25
|
+
@@prefix = prefix
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.random
|
29
|
+
CanvasCourse.new(
|
30
|
+
{
|
31
|
+
name: CanvasCourse.course_name,
|
32
|
+
uid: CanvasCourse.course_code,
|
33
|
+
sis: (12_000+rand(1_000_000)).to_s,
|
34
|
+
desc: CanvasCourse.description
|
35
|
+
}
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.course_code
|
40
|
+
Forgery.load_from!(@@local_dictionaries)
|
41
|
+
dictionaries[:course_codes][@@row]
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.course_name
|
45
|
+
Forgery.load_from!(@@local_dictionaries)
|
46
|
+
name_count = Forgery.dictionaries[:course_names].count
|
47
|
+
@@row = rand(name_count)
|
48
|
+
dictionaries[:course_names][@@row]
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.description
|
52
|
+
Forgery(:lorem_ipsum).words(2+rand(30))
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.gen_file(opts = {})
|
56
|
+
opts[:rows] ? rows = opts[:rows] : rows = 0
|
57
|
+
courses = []
|
58
|
+
if(opts[:rows])
|
59
|
+
rows.times do |x|
|
60
|
+
courses.push(CanvasCourse.random)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
header = %w[course_id short_name long_name account_id term_id status integration_id start_date end_date course_format blueprint_course_id]
|
64
|
+
CSV.open('./courses.csv', 'wb', write_headers: true, headers: header) do |csv|
|
65
|
+
courses.each do |acc|
|
66
|
+
csv << acc.to_csv
|
67
|
+
end
|
68
|
+
end
|
69
|
+
return courses
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class CanvasObject < Forgery
|
2
|
+
|
3
|
+
def self.push_csv_to_canvas(opts={})
|
4
|
+
if(opts.nil? || opts[:host].nil? || opts[:token].nil?)
|
5
|
+
raise 'Please provide options hash with both :host and :token'
|
6
|
+
end
|
7
|
+
if(!File.file?(opts[:file]))
|
8
|
+
raise 'Please gen_file before trying to push to canvas'
|
9
|
+
end
|
10
|
+
uri = URI.parse("https://#{opts[:host]}/api/v1/accounts/self/sis_imports.json?import_type=instructure_csv")
|
11
|
+
request = Net::HTTP::Post.new(uri)
|
12
|
+
request.content_type = 'text/csv'
|
13
|
+
request['Authorization'] = "Bearer #{opts[:token]}"
|
14
|
+
request.body = ''
|
15
|
+
request.body << File.read(opts[:file])
|
16
|
+
|
17
|
+
req_options = {
|
18
|
+
use_ssl: uri.scheme == 'https',
|
19
|
+
}
|
20
|
+
|
21
|
+
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
|
22
|
+
http.request(request)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class CanvasSection < CanvasObject
|
2
|
+
attr_reader :name, :sis_id, :start_date, :end_date
|
3
|
+
attr_accessor :course_uid, :course_sis_id
|
4
|
+
|
5
|
+
def to_csv
|
6
|
+
row = [sis_id, course_sis_id, name, 'active', nil, start_date, end_date]
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(opts = {})
|
10
|
+
@name = opts[:name] if opts[:name]
|
11
|
+
@sis_id = opts[:sis_id] if opts[:sis_id]
|
12
|
+
@course_id = opts[:course] if opts[:course]
|
13
|
+
@start_date = opts[:start_at] if opts[:start_at]
|
14
|
+
@end_date = opts[:end_at] if opts[:end_at]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.random(course=1)
|
18
|
+
d = Forgery('date').date
|
19
|
+
CanvasSection.new(
|
20
|
+
{
|
21
|
+
name: "#{Forgery('address').country} #{Forgery('basic').color}",
|
22
|
+
sis_id: (21000+rand(1000000)),
|
23
|
+
course: course,
|
24
|
+
start_date: d,
|
25
|
+
end_date: d+90.days
|
26
|
+
}
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.gen_file(opts = {})
|
31
|
+
opts[:rows] ? rows = opts[:rows] : rows = 0
|
32
|
+
sections = []
|
33
|
+
if(opts[:rows])
|
34
|
+
rows.times do |x|
|
35
|
+
sections.push(CanvasSection.random)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
header = %w[section_id course_id name status integration_id start_date end_date]
|
40
|
+
CSV.open('./sections.csv', 'wb', write_headers: true, headers: header) do |csv|
|
41
|
+
sections.each do |acc|
|
42
|
+
csv << acc.to_csv
|
43
|
+
end
|
44
|
+
end
|
45
|
+
return sections
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class CanvasUser < CanvasObject
|
2
|
+
attr_reader :name, :sis_id, :login_id, :email, :time_zone
|
3
|
+
|
4
|
+
def to_s
|
5
|
+
string = "#{name}, #{sis_id}, #{login_id}, #{email}, #{time_zone}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_csv
|
9
|
+
names = name.split(' ')
|
10
|
+
row = [sis_id, nil, login_id, nil, nil, nil, names.first, names.last, name, "#{names.last}, #{names.first}", "#{names.first[0].downcase}#{names.last.downcase}", email, 'active']
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize (opts = {})
|
14
|
+
@name = opts[:name] if opts[:name]
|
15
|
+
@sis_id = opts[:sis] if opts[:sis]
|
16
|
+
@login_id = opts[:login] if opts[:login]
|
17
|
+
@email = opts[:email] if opts[:email]
|
18
|
+
@time_zone = opts[:time_zone] if opts[:time_zone]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.random (opts = {})
|
22
|
+
fn = Forgery('name').first_name
|
23
|
+
ln = Forgery('name').last_name
|
24
|
+
domain = 'instructure.com'
|
25
|
+
if opts
|
26
|
+
opts[:email_prefix] ? epre = "#{opts[:email_prefix]}+" : epre = ''
|
27
|
+
opts[:sis_prefix] ? sispre = "#{opts[:sis_prefix]}_" : sispre = ''
|
28
|
+
opts[:domain] ? domain = opts[:domain] : domain = 'instructure.com'
|
29
|
+
end
|
30
|
+
e = "#{epre}#{fn}.#{ln}@#{domain}"
|
31
|
+
CanvasUser.new(
|
32
|
+
{
|
33
|
+
name: "#{fn} #{ln}",
|
34
|
+
sis: "#{sispre}#{(3_000+rand(1_000_000))}",
|
35
|
+
login: e,
|
36
|
+
email: e,
|
37
|
+
time_zone: Forgery('time').zone
|
38
|
+
}
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.gen_file(opts = {})
|
43
|
+
opts[:rows] ? rows = opts[:rows] : rows = 0
|
44
|
+
opts[:settings] ? settings = opts[:settings] : settings = nil
|
45
|
+
users = []
|
46
|
+
if(opts[:rows])
|
47
|
+
rows.times do |x|
|
48
|
+
users.push(CanvasUser.random(settings))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
header = %w[user_id integration_id login_id password ssha_password authentication_provider_id first_name last_name full_name sortable_name short_name email status]
|
52
|
+
CSV.open('./users.csv', 'wb', write_headers: true, headers: header) do |csv|
|
53
|
+
users.each do |acc|
|
54
|
+
csv << acc.to_csv
|
55
|
+
end
|
56
|
+
end
|
57
|
+
return users
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
metadata
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bobross
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.13
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jacob Slack
|
8
|
+
- Trevor Byington
|
9
|
+
autorequire:
|
10
|
+
bindir: exe
|
11
|
+
cert_chain: []
|
12
|
+
date: 2020-07-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bearcat
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 1.4.1
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 1.4.1
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: bundler
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.1.4
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 2.1.4
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: forgery
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.7.0
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.7.0
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rake
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 13.0.1
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 13.0.1
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '3.9'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '3.9'
|
84
|
+
description: Generates data to put in your canvas instance. Data can be exported as
|
85
|
+
CSV for uploading or sent directly via api call
|
86
|
+
email:
|
87
|
+
- jacobs@instructure.com
|
88
|
+
- tbyington@instructure.com
|
89
|
+
- tabyington@gmail.com
|
90
|
+
executables: []
|
91
|
+
extensions: []
|
92
|
+
extra_rdoc_files: []
|
93
|
+
files:
|
94
|
+
- ".DS_Store"
|
95
|
+
- ".gitignore"
|
96
|
+
- ".rbenv-gemsets"
|
97
|
+
- ".rspec"
|
98
|
+
- ".ruby-version"
|
99
|
+
- ".travis.yml"
|
100
|
+
- ".vscode/settings.json"
|
101
|
+
- Gemfile
|
102
|
+
- Gemfile.lock
|
103
|
+
- LICENSE.txt
|
104
|
+
- README.md
|
105
|
+
- Rakefile
|
106
|
+
- bin/console
|
107
|
+
- bin/setup
|
108
|
+
- bobross.gemspec
|
109
|
+
- lib/bobross.rb
|
110
|
+
- lib/bobross/version.rb
|
111
|
+
- lib/dictionaries/course_codes
|
112
|
+
- lib/dictionaries/course_names
|
113
|
+
- lib/models/canvas_account.rb
|
114
|
+
- lib/models/canvas_assignment.rb
|
115
|
+
- lib/models/canvas_assignment_grade.rb
|
116
|
+
- lib/models/canvas_assignment_group.rb
|
117
|
+
- lib/models/canvas_assignment_submission.rb
|
118
|
+
- lib/models/canvas_course.rb
|
119
|
+
- lib/models/canvas_group_in_account.rb
|
120
|
+
- lib/models/canvas_group_in_course.rb
|
121
|
+
- lib/models/canvas_object.rb
|
122
|
+
- lib/models/canvas_section.rb
|
123
|
+
- lib/models/canvas_user.rb
|
124
|
+
homepage: https://rubygems.org/gems/bobross
|
125
|
+
licenses:
|
126
|
+
- MIT
|
127
|
+
metadata:
|
128
|
+
allowed_push_host: https://rubygems.org
|
129
|
+
homepage_uri: https://rubygems.org/gems/bobross
|
130
|
+
source_code_uri: https://github.com/instructurecustomdevqa/bobross
|
131
|
+
post_install_message:
|
132
|
+
rdoc_options: []
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
requirements: []
|
146
|
+
rubygems_version: 3.1.2
|
147
|
+
signing_key:
|
148
|
+
specification_version: 4
|
149
|
+
summary: Generates data to put in your canvas instance.
|
150
|
+
test_files: []
|