teachers_pet 0.1.0 → 0.2.0
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/README.md +14 -0
- data/bin/open_issue +6 -0
- data/lib/teachers_pet/actions/base.rb +1 -0
- data/lib/teachers_pet/actions/clone_repos.rb +0 -1
- data/lib/teachers_pet/actions/create_repos.rb +6 -5
- data/lib/teachers_pet/actions/create_teams.rb +0 -1
- data/lib/teachers_pet/actions/fork_collab.rb +1 -2
- data/lib/teachers_pet/actions/open_issue.rb +72 -0
- data/lib/teachers_pet/actions/push_files.rb +0 -1
- data/lib/teachers_pet/configuration.rb +0 -8
- data/lib/teachers_pet/version.rb +1 -1
- data/spec/actions/create_repos_spec.rb +65 -0
- data/spec/actions/open_issue_spec.rb +71 -0
- data/spec/fixtures/issue.md +4 -0
- data/spec/spec_helper.rb +8 -0
- data/teachers_pet.gemspec +2 -0
- metadata +32 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 910209118ec442713281982a1e518e1444cc59a9
|
|
4
|
+
data.tar.gz: 5db06d1c2a2df29f5fa6f9ceeec71d37c7b5c5a0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7f158b180312b392af4c134264be6b7f250f950ac89012f067bf5605604eaf056702bf4d8474fe8f40efff5f1428b3937f74b947e8300af42b2e6abe71dcc8c7
|
|
7
|
+
data.tar.gz: 27c399025cd1d07af44e005fb35117b632a92a04d17428fe5c9dbbf996ed8a05b53bb7976b4ea57ec95c5c5ea1aa50ae676d5562d7ad06405307ed6f1941e5d3
|
data/README.md
CHANGED
|
@@ -19,6 +19,12 @@ Each student is given a team in the organization. The team name is the same as t
|
|
|
19
19
|
gem install teachers_pet
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
If you've used this tool before, get the newest version using
|
|
23
|
+
|
|
24
|
+
```ruby
|
|
25
|
+
gem update teachers_pet
|
|
26
|
+
```
|
|
27
|
+
|
|
22
28
|
To use the latest-and-greatest code from this repository, see the instructions in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
23
29
|
|
|
24
30
|
## Basic Setup
|
|
@@ -64,6 +70,14 @@ While in the directory for the starter file repository, run the `push_repos` scr
|
|
|
64
70
|
|
|
65
71
|
This works by creating a git remote for each repository and thing doing a push to that repository.
|
|
66
72
|
|
|
73
|
+
### Opening issues
|
|
74
|
+
|
|
75
|
+
After running `create_repos`, instructors can open issues in repos with `open_issue`. This action requires an `issue.md` file containing the body of the issue. The issue title and optional tags are added at runtime.
|
|
76
|
+
|
|
77
|
+
One issue will be opened in every repo defined by the `students` file and repository name given by the user.
|
|
78
|
+
|
|
79
|
+
Open issues in student repos as a way to list requirements of the assignment, goals, or instructions for patching.
|
|
80
|
+
|
|
67
81
|
### Pulling repositories for grading
|
|
68
82
|
|
|
69
83
|
When grading, use the `clone_repos` script to clone all the repositories in the organization that match the username-repository naming scheme that is generated when `create_repos` is run.
|
data/bin/open_issue
ADDED
|
@@ -7,7 +7,6 @@ require 'rubygems'
|
|
|
7
7
|
require 'highline/question'
|
|
8
8
|
require 'highline/import'
|
|
9
9
|
require 'highline/compatibility'
|
|
10
|
-
require 'octokit'
|
|
11
10
|
require 'teachers_pet/actions/base'
|
|
12
11
|
|
|
13
12
|
module TeachersPet
|
|
@@ -18,7 +17,8 @@ module TeachersPet
|
|
|
18
17
|
@organization = ask("What is the organization name?") { |q| q.default = TeachersPet::Configuration.organization }
|
|
19
18
|
@student_file = self.get_students_file_path
|
|
20
19
|
@instructor_file = self.get_instructors_file_path
|
|
21
|
-
@
|
|
20
|
+
@public_repos = confirm('Create repositories as public?', false)
|
|
21
|
+
@add_init_files = confirm('Add .gitignore and README.md files? (skip this if you are pushing starter files.)', false)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def load_files
|
|
@@ -27,7 +27,8 @@ module TeachersPet
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def create
|
|
30
|
-
|
|
30
|
+
pub_private_text = @public_repos ? 'public' : 'private'
|
|
31
|
+
confirm("Create #{@students.keys.size} #{pub_private_text} repositories for students and give access to instructors?")
|
|
31
32
|
|
|
32
33
|
# create a repo for each student
|
|
33
34
|
self.init_client
|
|
@@ -56,11 +57,11 @@ module TeachersPet
|
|
|
56
57
|
|
|
57
58
|
git_ignore_template = "C++" ## This is specific to my current class, you'll want to change
|
|
58
59
|
git_ignore_template = '' unless @add_init_files
|
|
59
|
-
puts " --> Creating '#{repo_name}'"
|
|
60
|
+
puts " --> Creating '#{repo_name}' public? #{@public_repos}"
|
|
60
61
|
@client.create_repository(repo_name,
|
|
61
62
|
{
|
|
62
63
|
:description => "#{@repository} created for #{student}",
|
|
63
|
-
:private =>
|
|
64
|
+
:private => !@public_repos,
|
|
64
65
|
:has_issues => true, # seems like a resonable default
|
|
65
66
|
:has_wiki => false,
|
|
66
67
|
:has_downloads => false,
|
|
@@ -4,14 +4,13 @@ require 'rubygems'
|
|
|
4
4
|
require 'highline/question'
|
|
5
5
|
require 'highline/import'
|
|
6
6
|
require 'highline/compatibility'
|
|
7
|
-
require 'octokit'
|
|
8
7
|
require 'teachers_pet/actions/base'
|
|
9
8
|
|
|
10
9
|
module TeachersPet
|
|
11
10
|
module Actions
|
|
12
11
|
class ForkCollab < Base
|
|
13
12
|
def read_info
|
|
14
|
-
@repository = ask("Which repository? (
|
|
13
|
+
@repository = ask("Which repository? (owner/repo)")
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
def get_forks
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Opens a single issue in each repository. The body of the issue is loaded
|
|
2
|
+
# from a file and the user is prompted for the title.
|
|
3
|
+
|
|
4
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', '..')
|
|
5
|
+
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
require 'highline/question'
|
|
8
|
+
require 'highline/import'
|
|
9
|
+
require 'teachers_pet/actions/base'
|
|
10
|
+
|
|
11
|
+
module TeachersPet
|
|
12
|
+
module Actions
|
|
13
|
+
class OpenIssue < Base
|
|
14
|
+
def read_info
|
|
15
|
+
@repository = ask("What repository will the issue be raised in?") { |q| q.validate = /\w+/ }
|
|
16
|
+
@organization = ask("What is the organization name?") { |q| q.default = TeachersPet::Configuration.organization }
|
|
17
|
+
|
|
18
|
+
@issue = {}
|
|
19
|
+
@issue[:title] = ask("What is the title of the issue?")
|
|
20
|
+
@issue_file = ask("What is the path to the file containing the issue body?")
|
|
21
|
+
|
|
22
|
+
# Add labels to issue
|
|
23
|
+
options = {}
|
|
24
|
+
options[:labels] = ask("Optionally add any labels, seperated by commas:")
|
|
25
|
+
@issue[:options] = options
|
|
26
|
+
|
|
27
|
+
@student_file = self.get_students_file_path
|
|
28
|
+
@instructor_file = self.get_instructors_file_path
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def load_files
|
|
32
|
+
@students = read_file(@student_file, 'Students')
|
|
33
|
+
@instructors = read_file(@instructor_file, 'Instructors')
|
|
34
|
+
@issue[:body] = File.open(@issue_file).read
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def create
|
|
38
|
+
confirm("Create issue '#{@issue[:title]}' in #{@students.keys.size} student repositories - '#{@repository}'?")
|
|
39
|
+
self.init_client
|
|
40
|
+
|
|
41
|
+
org_hash = read_organization(@organization)
|
|
42
|
+
abort('Organization could not be found') if org_hash.nil?
|
|
43
|
+
puts "Found organization at: #{org_hash[:login]}"
|
|
44
|
+
|
|
45
|
+
org_teams = get_teams_by_name(@organization)
|
|
46
|
+
|
|
47
|
+
puts "\nCreating issue in repositories..."
|
|
48
|
+
@students.keys.sort.each do |student|
|
|
49
|
+
unless org_teams.key?(student)
|
|
50
|
+
puts(" ** ERROR ** - no team for #{student}")
|
|
51
|
+
next
|
|
52
|
+
end
|
|
53
|
+
repo_name = "#{student}-#{@repository}"
|
|
54
|
+
|
|
55
|
+
unless repository?(@organization, repo_name)
|
|
56
|
+
puts " --> Repository not found, skipping '#{repo_name}'"
|
|
57
|
+
next
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Create the issue with octokit
|
|
61
|
+
@client.create_issue("#{@organization}/#{repo_name}", @issue[:title], @issue[:body], @issue[:options])
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def run
|
|
66
|
+
self.read_info
|
|
67
|
+
self.load_files
|
|
68
|
+
self.create
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -40,14 +40,6 @@ module TeachersPet
|
|
|
40
40
|
@@INSTRUCTORS_FILE
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
# The default is to create the repositories as public.
|
|
44
|
-
# If you are using GitHub enterprise or a paid account, it make sense to make this private
|
|
45
|
-
@@REPOS_PUBLIC = true
|
|
46
|
-
|
|
47
|
-
def self.reposPublic
|
|
48
|
-
@@REPOS_PUBLIC
|
|
49
|
-
end
|
|
50
|
-
|
|
51
43
|
# github.com - set to 'github.com'
|
|
52
44
|
# GitHub Enterprise - 'yourserver.com'
|
|
53
45
|
@@SSH_ENDPOINT = 'github.com'
|
data/lib/teachers_pet/version.rb
CHANGED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe TeachersPet::Actions::CreateRepos do
|
|
4
|
+
let(:action) { TeachersPet::Actions::CreateRepos.new }
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
# fallback
|
|
8
|
+
action.stub(:ask){|question| raise("can't ask \"#{question}\"") }
|
|
9
|
+
action.stub(:choose){ raise("can't choose()") }
|
|
10
|
+
|
|
11
|
+
action.stub(:confirm)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def common_test(create_as_public)
|
|
15
|
+
respond("What repository name should be created for each student?", 'testrepo')
|
|
16
|
+
respond("What is the organization name?", 'testorg')
|
|
17
|
+
respond("What is the filename of the list of students?", students_list_fixture_path)
|
|
18
|
+
respond("What is the filename of the list of instructors?", instructors_list_fixture_path)
|
|
19
|
+
confirm("Create repositories as public?", create_as_public)
|
|
20
|
+
confirm("Add .gitignore and README.md files? (skip this if you are pushing starter files.)", false)
|
|
21
|
+
mode = create_as_public ? 'public' : 'private'
|
|
22
|
+
respond("Create 3 #{mode} repositories for students and give access to instructors?", "1")
|
|
23
|
+
stub_github_config
|
|
24
|
+
|
|
25
|
+
request_stubs = []
|
|
26
|
+
|
|
27
|
+
request_stubs << stub_get_json('https://testteacher:abc123@api.github.com/orgs/testorg',
|
|
28
|
+
login: 'testorg',
|
|
29
|
+
url: 'https://api.github.com/orgs/testorg'
|
|
30
|
+
)
|
|
31
|
+
request_stubs << stub_get_json('https://testteacher:abc123@api.github.com/orgs/testorg/teams?per_page=100', student_teams)
|
|
32
|
+
student_usernames.each do |username|
|
|
33
|
+
# Check for the repos existing already
|
|
34
|
+
stub_request(:get, "https://testteacher:abc123@api.github.com/repos/testorg/#{username}-testrepo").
|
|
35
|
+
to_return(:status => 404, :body => "", :headers => {})
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
student_usernames.each do |username|
|
|
39
|
+
# actually create the repo
|
|
40
|
+
team_id = 0
|
|
41
|
+
student_teams.each do |st|
|
|
42
|
+
if st[:name].eql?(username)
|
|
43
|
+
team_id = st[:id]
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
stub_request(:post, "https://testteacher:abc123@api.github.com/orgs/testorg/repos").
|
|
47
|
+
with(:body => "{\"description\":\"testrepo created for #{username}\",\"private\":#{!create_as_public},\"has_issues\":true,\"has_wiki\":false,\"has_downloads\":false,\"team_id\":#{team_id},\"auto_init\":false,\"gitignore_template\":\"\",\"name\":\"#{username}-testrepo\"}").
|
|
48
|
+
to_return(:status => 200)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
action.run
|
|
52
|
+
|
|
53
|
+
request_stubs.each do |request_stub|
|
|
54
|
+
expect(request_stub).to have_been_requested.once
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "create repos public" do
|
|
59
|
+
common_test(true)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "create repos private" do
|
|
63
|
+
common_test(false)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe TeachersPet::Actions::OpenIssue do
|
|
4
|
+
let(:action) { TeachersPet::Actions::OpenIssue.new }
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
# fallback
|
|
8
|
+
action.stub(:ask){|question| raise("can't ask \"#{question}\"") }
|
|
9
|
+
action.stub(:choose){ raise("can't choose()") }
|
|
10
|
+
|
|
11
|
+
action.stub(:confirm)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def common_test(labels)
|
|
15
|
+
|
|
16
|
+
issue_title = "Issue Test"
|
|
17
|
+
|
|
18
|
+
# Respond to action prompts
|
|
19
|
+
respond("What repository will the issue be raised in?", 'testrepo')
|
|
20
|
+
respond("What is the organization name?", 'testorg')
|
|
21
|
+
respond("What is the title of the issue?", 'Issue Test')
|
|
22
|
+
respond("What is the path to the file containing the issue body?", issue_fixture_path)
|
|
23
|
+
respond("Optionally add any labels, seperated by commas:", labels)
|
|
24
|
+
respond("What is the filename of the list of students?", students_list_fixture_path)
|
|
25
|
+
respond("What is the filename of the list of instructors?", instructors_list_fixture_path)
|
|
26
|
+
respond("Create issue '#{issue_title}' in #{File.open(students_list_fixture_path).readlines.size} student repositories - 'testrepo'?", "1")
|
|
27
|
+
stub_github_config
|
|
28
|
+
|
|
29
|
+
request_stubs = []
|
|
30
|
+
|
|
31
|
+
request_stubs << stub_get_json('https://testteacher:abc123@api.github.com/orgs/testorg',
|
|
32
|
+
login: 'testorg',
|
|
33
|
+
url: 'https://api.github.com/orgs/testorg'
|
|
34
|
+
)
|
|
35
|
+
request_stubs << stub_get_json('https://testteacher:abc123@api.github.com/orgs/testorg/teams?per_page=100', student_teams)
|
|
36
|
+
student_usernames.each do |username|
|
|
37
|
+
# Action checks that repos exist already
|
|
38
|
+
stub_request(:get, "https://testteacher:abc123@api.github.com/repos/testorg/#{username}-testrepo").
|
|
39
|
+
to_return(:status => 200, :body => "", :headers => {})
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# create the issue in each repo
|
|
43
|
+
student_usernames.each do |username|
|
|
44
|
+
team_id = 0
|
|
45
|
+
student_teams.each do |st|
|
|
46
|
+
if st[:name].eql?(username)
|
|
47
|
+
team_id = st[:id]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
issue_body = File.read(issue_fixture_path).gsub("\n", "\\n")
|
|
51
|
+
labels_list = labels.split(",").map(&:strip).to_s.delete(' ')
|
|
52
|
+
stub_request(:post, "https://testteacher:abc123@api.github.com/repos/testorg/#{username}-testrepo/issues").
|
|
53
|
+
with(:body => "{\"labels\":#{labels_list},\"title\":\"Issue Test\",\"body\":\"#{issue_body}\"}").
|
|
54
|
+
to_return(:status => 201)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
action.run
|
|
58
|
+
|
|
59
|
+
request_stubs.each do |request_stub|
|
|
60
|
+
expect(request_stub).to have_been_requested.once
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "open issue no labels" do
|
|
65
|
+
common_test("")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "open issue with labels" do
|
|
69
|
+
common_test("bug, feature")
|
|
70
|
+
end
|
|
71
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -29,6 +29,10 @@ def instructors_list_fixture_path
|
|
|
29
29
|
File.join(File.dirname(__FILE__), 'fixtures', 'instructors')
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
def issue_fixture_path
|
|
33
|
+
File.join(File.dirname(__FILE__), 'fixtures', 'issue.md')
|
|
34
|
+
end
|
|
35
|
+
|
|
32
36
|
def student_usernames
|
|
33
37
|
CSV.read(students_list_fixture_path).flatten
|
|
34
38
|
end
|
|
@@ -47,6 +51,10 @@ def respond(question, response)
|
|
|
47
51
|
action.stub(:ask).with(question).and_return(response)
|
|
48
52
|
end
|
|
49
53
|
|
|
54
|
+
def confirm(question, response)
|
|
55
|
+
action.stub(:confirm).with(question, false).and_return(response)
|
|
56
|
+
end
|
|
57
|
+
|
|
50
58
|
def stub_github_config
|
|
51
59
|
respond("What is the API endpoint?", TeachersPet::Configuration.apiEndpoint)
|
|
52
60
|
respond("What is the Web endpoint?", TeachersPet::Configuration.webEndpoint)
|
data/teachers_pet.gemspec
CHANGED
metadata
CHANGED
|
@@ -1,111 +1,111 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: teachers_pet
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- John Britton
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-
|
|
11
|
+
date: 2014-05-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: highline
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - ~>
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: 1.6.21
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - ~>
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 1.6.21
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: octokit
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ~>
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: 3.1.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ~>
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: 3.1.0
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: bundler
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ~>
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '1.5'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ~>
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '1.5'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: guard-rspec
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- -
|
|
59
|
+
- - ~>
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '4.2'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- -
|
|
66
|
+
- - ~>
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '4.2'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: rake
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - '>='
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
75
|
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - '>='
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: rspec
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- -
|
|
87
|
+
- - ~>
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
89
|
version: '2.14'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- -
|
|
94
|
+
- - ~>
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '2.14'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: webmock
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
|
-
- -
|
|
101
|
+
- - ~>
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
103
|
version: '1.17'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
|
-
- -
|
|
108
|
+
- - ~>
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
110
|
version: '1.17'
|
|
111
111
|
description:
|
|
@@ -115,13 +115,14 @@ executables:
|
|
|
115
115
|
- create_repos
|
|
116
116
|
- create_teams
|
|
117
117
|
- fork_collab
|
|
118
|
+
- open_issue
|
|
118
119
|
- push_files
|
|
119
120
|
extensions: []
|
|
120
121
|
extra_rdoc_files: []
|
|
121
122
|
files:
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
123
|
+
- .gitignore
|
|
124
|
+
- .rspec
|
|
125
|
+
- .travis.yml
|
|
125
126
|
- CONTRIBUTING.md
|
|
126
127
|
- Gemfile
|
|
127
128
|
- Guardfile
|
|
@@ -132,6 +133,7 @@ files:
|
|
|
132
133
|
- bin/create_repos
|
|
133
134
|
- bin/create_teams
|
|
134
135
|
- bin/fork_collab
|
|
136
|
+
- bin/open_issue
|
|
135
137
|
- bin/push_files
|
|
136
138
|
- lib/teachers_pet.rb
|
|
137
139
|
- lib/teachers_pet/actions/base.rb
|
|
@@ -139,12 +141,16 @@ files:
|
|
|
139
141
|
- lib/teachers_pet/actions/create_repos.rb
|
|
140
142
|
- lib/teachers_pet/actions/create_teams.rb
|
|
141
143
|
- lib/teachers_pet/actions/fork_collab.rb
|
|
144
|
+
- lib/teachers_pet/actions/open_issue.rb
|
|
142
145
|
- lib/teachers_pet/actions/push_files.rb
|
|
143
146
|
- lib/teachers_pet/configuration.rb
|
|
144
147
|
- lib/teachers_pet/version.rb
|
|
145
148
|
- spec/actions/clone_repos_spec.rb
|
|
149
|
+
- spec/actions/create_repos_spec.rb
|
|
146
150
|
- spec/actions/create_teams_spec.rb
|
|
151
|
+
- spec/actions/open_issue_spec.rb
|
|
147
152
|
- spec/fixtures/instructors
|
|
153
|
+
- spec/fixtures/issue.md
|
|
148
154
|
- spec/fixtures/students
|
|
149
155
|
- spec/spec_helper.rb
|
|
150
156
|
- teachers_pet.gemspec
|
|
@@ -158,24 +164,26 @@ require_paths:
|
|
|
158
164
|
- lib
|
|
159
165
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
166
|
requirements:
|
|
161
|
-
- -
|
|
167
|
+
- - '>='
|
|
162
168
|
- !ruby/object:Gem::Version
|
|
163
|
-
version:
|
|
169
|
+
version: 1.9.3
|
|
164
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
171
|
requirements:
|
|
166
|
-
- -
|
|
172
|
+
- - '>='
|
|
167
173
|
- !ruby/object:Gem::Version
|
|
168
174
|
version: '0'
|
|
169
175
|
requirements: []
|
|
170
176
|
rubyforge_project:
|
|
171
|
-
rubygems_version: 2.
|
|
177
|
+
rubygems_version: 2.0.3
|
|
172
178
|
signing_key:
|
|
173
179
|
specification_version: 4
|
|
174
180
|
summary: Command line tools to help teachers use GitHub in their classrooms
|
|
175
181
|
test_files:
|
|
176
182
|
- spec/actions/clone_repos_spec.rb
|
|
183
|
+
- spec/actions/create_repos_spec.rb
|
|
177
184
|
- spec/actions/create_teams_spec.rb
|
|
185
|
+
- spec/actions/open_issue_spec.rb
|
|
178
186
|
- spec/fixtures/instructors
|
|
187
|
+
- spec/fixtures/issue.md
|
|
179
188
|
- spec/fixtures/students
|
|
180
189
|
- spec/spec_helper.rb
|
|
181
|
-
has_rdoc:
|