Class: CommitLive::Open

Inherits:
Object
  • Object
show all
Defined in:
lib/commit-live/lesson/open.rb

Constant Summary collapse

HOME_DIR =
File.expand_path("~")

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeOpen

Returns a new instance of Open.



15
16
17
18
19
20
21
# File 'lib/commit-live/lesson/open.rb', line 15

def initialize()
	if File.exists?("#{HOME_DIR}/.ga-config")
		@rootDir = YAML.load(File.read("#{HOME_DIR}/.ga-config"))[:workspace]
	end
	@lesson = CommitLive::Current.new
	@lesson_status = CommitLive::Status.new
end

Instance Attribute Details

#forkedRepoObject (readonly)

Returns the value of attribute forkedRepo.



11
12
13
# File 'lib/commit-live/lesson/open.rb', line 11

def forkedRepo
  @forkedRepo
end

#lessonObject (readonly)

Returns the value of attribute lesson.



11
12
13
# File 'lib/commit-live/lesson/open.rb', line 11

def lesson
  @lesson
end

#lesson_statusObject (readonly)

Returns the value of attribute lesson_status.



11
12
13
# File 'lib/commit-live/lesson/open.rb', line 11

def lesson_status
  @lesson_status
end

#lessonNameObject (readonly)

Returns the value of attribute lessonName.



11
12
13
# File 'lib/commit-live/lesson/open.rb', line 11

def lessonName
  @lessonName
end

#rootDirObject (readonly)

Returns the value of attribute rootDir.



11
12
13
# File 'lib/commit-live/lesson/open.rb', line 11

def rootDir
  @rootDir
end

Instance Method Details

#cdToLessonObject



104
105
106
107
108
109
# File 'lib/commit-live/lesson/open.rb', line 104

def cdToLesson
	puts "Opening lesson..."
	Dir.chdir("#{rootDir}/#{lessonName}")
	puts "Done."
	exec("#{ENV['SHELL']} -l")
end

#change_grp_ownerObject



95
96
97
98
99
100
101
102
# File 'lib/commit-live/lesson/open.rb', line 95

def change_grp_owner
	results = system("chgrp -R ubuntu #{rootDir}/#{lessonName}")
	if results
		puts "..."
	else
		puts "Couldn't change group ownership"
	end
end

#cloneCurrentLessonObject



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/commit-live/lesson/open.rb', line 79

def cloneCurrentLesson
	puts "Cloning lesson..."
	begin
		Timeout::timeout(15) do
			Git.clone(forkedRepo.ssh_url, lessonName, path: rootDir)
		end
	rescue Git::GitExecuteError => err
		puts "Error while cloning!"
		puts err
		exit
	rescue Timeout::Error
		puts "Cannot clone this lesson right now. Please try again."
		exit
	end
end

#forkCurrentLessonObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/commit-live/lesson/open.rb', line 56

def forkCurrentLesson
	puts "Forking lesson..."
	github = CommitLive::Github.new()
	begin
		Timeout::timeout(15) do
			lessonData = lesson.getAttr('data')
			if !lessonData['current_track'].nil?
				lessonRepo = lessonData['current_track']['repo_url']
			else
				lessonRepo = lessonData['repo_url']
			end
			@forkedRepo = github.client.fork(lessonRepo)
		end
	rescue Octokit::Error => err
		puts "Error while forking!"
		puts err
		exit
	rescue Timeout::Error
		puts "Please check your internet connection."
		exit
	end
end

#openALesson(puzzle_name) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/commit-live/lesson/open.rb', line 23

def openALesson(puzzle_name)
	# get currently active lesson
	puts "Getting current lesson..."
	lesson.getCurrentLesson(puzzle_name)
	lessonData = lesson.getAttr('data')
	isAssignment = false;
	if !lessonData['current_track'].nil?
		@lessonName = lessonData['current_track']['track_slug']
		isAssignment = lessonData['current_track']['assignment_flag']
	else
		@lessonName = lessonData['track_slug']
		isAssignment = lessonData['assignment_flag']
	end
	if !isAssignment
		puts "This is a read only lesson!"
		exit
	end
	if !File.exists?("#{rootDir}/#{lessonName}")
		# fork lesson repo via github api
		forkCurrentLesson
		# clone forked lesson into machine
		cloneCurrentLesson
		# change group owner
		change_grp_owner
		# lesson forked API change
		puts 'Updating lesson status...'
		lesson_status.update('forked', lessonName)
	end
	# install dependencies
	# cd into it and invoke bash
	cdToLesson
end