learn-open 1.2.22 → 1.2.23

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: 3c7fb687795b2162c7744bff6b33218bd285534731d1b5f17fc5554b04c9c267
4
- data.tar.gz: 0dfd4d3ab154f9866815b51dc774cb910680b152339c936f3f107b54b9cfa471
3
+ metadata.gz: 4a2315b5750af05a40423c2ed0ad7524e4e6c466e7c48d2ff71b6687c264f0b8
4
+ data.tar.gz: 36664ed4926d4651bf7ca76c23d47139edc86d4a4e4200e01d1d95f0d26218b6
5
5
  SHA512:
6
- metadata.gz: e16ad1551f023494bf8df4a4f683e7d8e39657f71426661d2182ee9436bed67ac598925daeb4d3c58302badc2178fadab7c78fd996fd5c80a6b8e0b9e842244c
7
- data.tar.gz: 952bf6c0e7b04d4633f3bffcfda04b42e9a0ab5b17430189bd51e49cb47a3999d2e984d051f5e58fea61f751d96faf39b0af154c94be73ae6d8980e05b8c3dcc
6
+ metadata.gz: d3ab4bffda355cb42203733a64a19c55ab788684b8dde17f80a9a10e571cfd2047a0139d87c0e4a9c9180d38e72bed105fd8b33ffca58d7a7699349771ebcee7
7
+ data.tar.gz: 93e940e9c4164b2ebbb55185e3deb432f9c96ad61fa348284b05e55e495c9aa12ea6fb7758c0ba703fe4cf41c0b6a997735a27dc006102ca085b79e945efdb8b
data/bin/learn-open CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  require 'learn_open'
4
4
 
5
- lesson, editor_specified, next_lesson = LearnOpen::ArgumentParser.new(ARGV).execute
5
+ lesson, editor_specified, next_lesson, clone_only = LearnOpen::ArgumentParser.new(ARGV).execute
6
6
 
7
- LearnOpen::Opener.run(lesson: lesson, editor_specified: editor_specified, get_next_lesson: next_lesson)
7
+ LearnOpen::Opener.run(
8
+ lesson: lesson,
9
+ editor_specified: editor_specified,
10
+ get_next_lesson: next_lesson,
11
+ clone_only: clone_only
12
+ )
data/lib/learn_open.rb CHANGED
@@ -75,6 +75,10 @@ module LearnOpen
75
75
  RbConfig::CONFIG['host_os']
76
76
  end
77
77
 
78
+ def self.git_ssh_connector
79
+ LearnOpen::GitSSHConnector
80
+ end
81
+
78
82
  def self.lessons_directory
79
83
  @lesson_directory ||= begin
80
84
  home_dir = File.expand_path("~")
@@ -1,10 +1,11 @@
1
1
  module LearnOpen
2
2
  module Adapters
3
3
  class LearnWebAdapter
4
- attr_reader :client
4
+ attr_reader :client, :io
5
5
 
6
6
  def initialize(options = {})
7
7
  @client = options.fetch(:learn_web_client) {LearnOpen.learn_web_client}
8
+ @io = options.fetch(:io) {LearnOpen.default_io}
8
9
  end
9
10
 
10
11
  def fetch_lesson_data(target_lesson: false, fetch_next_lesson: false)
@@ -1,3 +1,5 @@
1
+ require 'optparse'
2
+
1
3
  module LearnOpen
2
4
  class ArgumentParser
3
5
  attr_reader :args
@@ -6,31 +8,42 @@ module LearnOpen
6
8
  @args = args
7
9
  end
8
10
 
9
- def execute
10
- config_path = File.expand_path('~/.learn-config')
11
- editor_data = YAML.load(File.read(config_path))[:editor]
12
- if editor_data.match(/ /)
13
- editor_data = editor_data.split(' ').first
14
- end
11
+ def parse
12
+ options = {}
13
+ rest = OptionParser.new do |opts|
14
+ opts.on("--next", "open next lab") do |n|
15
+ options[:next] = n
16
+ end
17
+ opts.on("--editor=EDITOR", "specify editor") do |e|
18
+ options[:editor] = e
19
+ end
15
20
 
16
- lesson = nil
17
- next_lesson = false
21
+ opts.on("--clone-only", "only download files. No shell") do |co|
22
+ options[:clone_only] = co
23
+ end
24
+ end.parse(args)
25
+ options[:lesson_name] = rest.first
26
+ options
27
+ end
18
28
 
19
- configured_editor = !(editor_data.empty? || editor_data.nil?) ? editor_data : nil
20
- editor_specified = ARGV.detect {|arg| arg.start_with?('--editor=')}.match(/\-\-editor=(.+)/) || configured_editor
21
- open_after = !!editor_specified
29
+ def learn_config_editor
30
+ config_path = File.expand_path('~/.learn-config')
31
+ editor = YAML.load(File.read(config_path))[:editor]
32
+ editor.split.first
33
+ end
22
34
 
23
- if !ARGV[0].start_with?('--editor=') && !ARGV[0].start_with?('--next')
24
- lesson = ARGV[0].sub(/\/$/, '')
25
- elsif ARGV[0].start_with?('--next')
26
- next_lesson = true
27
- end
35
+ def execute
36
+ cli_args = parse
28
37
 
29
- if open_after
30
- editor_specified = editor_specified.is_a?(String) ? editor_specified : editor_specified[1]
31
- end
38
+ editor = cli_args[:editor].empty? ? learn_config_editor : cli_args[:editor]
39
+ cli_args.merge!(editor: editor)
32
40
 
33
- [lesson, editor_specified, next_lesson]
41
+ [
42
+ cli_args[:lesson_name],
43
+ cli_args[:editor],
44
+ cli_args[:next],
45
+ cli_args[:clone_only]
46
+ ]
34
47
  end
35
48
  end
36
49
  end
@@ -16,21 +16,21 @@ module LearnOpen
16
16
  false
17
17
  end
18
18
 
19
- def open_jupyter_lab(lesson, location, editor)
19
+ def open_jupyter_lab(_lesson, _location, _editor, _clone_only)
20
20
  :noop
21
21
  end
22
22
 
23
- def open_lab(lesson, location, editor)
23
+ def open_lab(lesson, location, editor, clone_only)
24
24
  case lesson
25
25
  when LearnOpen::Lessons::IosLesson
26
26
  io.puts "You need to be on a Mac to work on iOS lessons."
27
27
  else
28
28
  case download_lesson(lesson, location)
29
29
  when :ok, :noop
30
- open_editor(lesson, location, editor)
30
+ open_editor(lesson, location, editor) unless clone_only
31
31
  install_dependencies(lesson, location)
32
32
  notify_of_completion
33
- open_shell
33
+ open_shell unless clone_only
34
34
  when :ssh_unauthenticated
35
35
  io.puts 'Failed to obtain an SSH connection!'
36
36
  else
@@ -13,7 +13,7 @@ module LearnOpen
13
13
  end
14
14
  end
15
15
 
16
- def open_jupyter_lab(lesson, location, editor)
16
+ def open_jupyter_lab(lesson, location, editor, _clone_only)
17
17
  when_valid(lesson) do
18
18
  warn_if_necessary(lesson)
19
19
  io.puts "Opening Jupyter Lesson..."
@@ -21,7 +21,7 @@ module LearnOpen
21
21
  end
22
22
  end
23
23
 
24
- def open_lab(lesson, location, editor)
24
+ def open_lab(lesson, location, editor, clone_only)
25
25
  when_valid(lesson) do
26
26
  warn_if_necessary(lesson)
27
27
  case lesson
@@ -33,7 +33,7 @@ module LearnOpen
33
33
  start_file_backup(lesson, location)
34
34
  install_dependencies(lesson, location)
35
35
  notify_of_completion
36
- open_shell
36
+ open_shell unless clone_only
37
37
  end
38
38
  end
39
39
  end
@@ -5,13 +5,12 @@ module LearnOpen
5
5
  true
6
6
  end
7
7
 
8
- def open_jupyter_lab(lesson, location, editor)
8
+ def open_jupyter_lab(lesson, location, editor, clone_only)
9
9
  download_lesson(lesson, location)
10
- open_editor(lesson, location, editor)
11
- start_file_backup(lesson, location)
10
+ start_file_backup(lesson, location) if lesson.use_student_fork
12
11
  install_jupyter_dependencies(lesson, location)
13
12
  notify_of_completion
14
- open_shell
13
+ open_shell unless clone_only
15
14
  end
16
15
 
17
16
  def open_editor(lesson, location, editor)
@@ -23,10 +22,6 @@ module LearnOpen
23
22
  def install_jupyter_dependencies(lesson, location)
24
23
  LearnOpen::DependencyInstallers::JupyterPipInstall.call(lesson, location, self, options)
25
24
  end
26
-
27
- def open_shell
28
- system_adapter.open_login_shell(environment_vars['SHELL'])
29
- end
30
25
  end
31
26
  end
32
27
  end
@@ -7,7 +7,7 @@ module LearnOpen
7
7
  system_adapter.run_command("xdg-open #{lesson.to_url}")
8
8
  end
9
9
 
10
- def open_jupyter_lab(lesson, location, editor)
10
+ def open_jupyter_lab(lesson, location, _editor, _clone_only)
11
11
  warn_if_necessary(lesson)
12
12
  io.puts "Opening Jupyter Lesson..."
13
13
  system_adapter.run_command("xdg-open #{lesson.to_url}")
@@ -19,20 +19,20 @@ module LearnOpen
19
19
  system_adapter.run_command("open -a Safari #{lesson.to_url}")
20
20
  end
21
21
 
22
- def open_lab(lesson, location, editor)
22
+ def open_lab(lesson, location, editor, clone_only)
23
23
  warn_if_necessary(lesson)
24
24
  case lesson
25
25
  when LearnOpen::Lessons::IosLesson
26
26
  download_lesson(lesson, location)
27
27
  open_xcode(lesson)
28
28
  notify_of_completion
29
- open_shell
29
+ open_shell unless clone_only
30
30
  else
31
31
  super
32
32
  end
33
33
  end
34
34
 
35
- def open_jupyter_lab(lesson, location, editor)
35
+ def open_jupyter_lab(lesson, location, editor, _clone_only)
36
36
  warn_if_necessary(lesson)
37
37
  io.puts "Opening Jupyter Lesson..."
38
38
  system_adapter.run_command("open -a Safari #{lesson.to_url}")
@@ -64,7 +64,7 @@ module LearnOpen
64
64
  system_adapter.run_command("open -a 'Google Chrome' #{lesson.to_url}")
65
65
  end
66
66
 
67
- def open_jupyter_lab(lesson, location, editor)
67
+ def open_jupyter_lab(lesson, location, _editor, _clone_only)
68
68
  warn_if_necessary(lesson)
69
69
  io.puts "Opening Jupyter Lesson..."
70
70
  system_adapter.run_command("open -a 'Google Chrome' #{lesson.to_url}")
@@ -8,6 +8,7 @@ module LearnOpen
8
8
  :dot_learn,
9
9
  :git_server,
10
10
  :later_lesson,
11
+ :use_student_fork,
11
12
  :options,
12
13
  :io,
13
14
  :system_adapter,
@@ -25,6 +26,7 @@ module LearnOpen
25
26
  @git_server = lesson.git_server
26
27
  @dot_learn = lesson.dot_learn
27
28
  @is_lab = lesson.lab
29
+ @use_student_fork = lesson.use_student_fork
28
30
  @later_lesson = lesson_data[:later_lesson]
29
31
  @id = lesson_data[:id]
30
32
 
@@ -6,8 +6,8 @@ module LearnOpen
6
6
  (languages & ["swift", "objc"]).any?
7
7
  end
8
8
 
9
- def open(environment, editor)
10
- environment.open_lab(self, location, editor)
9
+ def open(environment, editor, clone_only)
10
+ environment.open_lab(self, location, editor, clone_only)
11
11
  end
12
12
  end
13
13
  end
@@ -6,8 +6,8 @@ module LearnOpen
6
6
  !!dot_learn[:jupyter_notebook]
7
7
  end
8
8
 
9
- def open(environment, editor)
10
- environment.open_jupyter_lab(self, location, editor)
9
+ def open(environment, editor, clone_only)
10
+ environment.open_jupyter_lab(self, location, editor, clone_only)
11
11
  end
12
12
  end
13
13
  end
@@ -1,8 +1,8 @@
1
1
  module LearnOpen
2
2
  module Lessons
3
3
  class LabLesson < BaseLesson
4
- def open(environment, editor)
5
- environment.open_lab(self, location, editor)
4
+ def open(environment, editor, clone_only)
5
+ environment.open_lab(self, location, editor, clone_only)
6
6
  end
7
7
  end
8
8
  end
@@ -5,7 +5,7 @@ module LearnOpen
5
5
  !lesson.lab
6
6
  end
7
7
 
8
- def open(environment, _editor)
8
+ def open(environment, _editor, _clone_only)
9
9
  environment.open_readme(self)
10
10
  end
11
11
  end
@@ -3,18 +3,20 @@ module LearnOpen
3
3
  attr_reader :editor,
4
4
  :target_lesson,
5
5
  :get_next_lesson,
6
+ :clone_only,
6
7
  :io,
7
8
  :logger,
8
9
  :options
9
10
 
10
- def self.run(lesson:, editor_specified:, get_next_lesson:)
11
- new(lesson, editor_specified, get_next_lesson).run
11
+ def self.run(lesson:, editor_specified:, get_next_lesson:, clone_only:)
12
+ new(lesson, editor_specified, get_next_lesson, clone_only).run
12
13
  end
13
14
 
14
- def initialize(target_lesson, editor, get_next_lesson, options = {})
15
+ def initialize(target_lesson, editor, get_next_lesson, clone_only, options = {})
15
16
  @target_lesson = target_lesson
16
17
  @editor = editor
17
18
  @get_next_lesson = get_next_lesson
19
+ @clone_only = clone_only
18
20
 
19
21
  @io = options.fetch(:io, LearnOpen.default_io)
20
22
  @logger = options.fetch(:logger, LearnOpen.logger)
@@ -35,7 +37,7 @@ module LearnOpen
35
37
 
36
38
  lesson = Lessons.classify(lesson_data, options)
37
39
  environment = LearnOpen::Environments.classify(options)
38
- lesson.open(environment, editor)
40
+ lesson.open(environment, editor, clone_only)
39
41
  end
40
42
  end
41
43
  end
@@ -1,6 +1,6 @@
1
1
  module LearnOpen
2
2
  class LessonDownloader
3
- attr_reader :lesson, :location, :environment, :io, :logger, :client, :git_adapter
3
+ attr_reader :lesson, :location, :environment, :io, :logger, :client, :git_adapter, :git_ssh_connector
4
4
 
5
5
  def self.call(lesson, location, environment, options = {})
6
6
  self.new(lesson, location, environment, options).call
@@ -14,12 +14,13 @@ module LearnOpen
14
14
  @logger = options.fetch(:logger) { LearnOpen.logger }
15
15
  @io = options.fetch(:io) { LearnOpen.default_io }
16
16
  @git_adapter = options.fetch(:git_adapter) { LearnOpen.git_adapter }
17
+ @git_ssh_connector = options.fetch(:git_ssh_connector) { LearnOpen.git_adapter }
17
18
  end
18
19
 
19
20
  def call
20
21
  if !repo_exists?
21
22
  if ensure_git_ssh!
22
- fork_repo
23
+ fork_repo if lesson.use_student_fork
23
24
  clone_repo
24
25
  :ok
25
26
  else
@@ -31,7 +32,7 @@ module LearnOpen
31
32
  end
32
33
 
33
34
  def ensure_git_ssh!
34
- LearnOpen::GitSSHConnector.call(git_server: lesson.git_server, environment: environment)
35
+ git_ssh_connector.call(git_server: lesson.git_server, environment: environment)
35
36
  end
36
37
 
37
38
  def fork_repo(retries = 3)
@@ -1,3 +1,3 @@
1
1
  module LearnOpen
2
- VERSION = '1.2.22'
2
+ VERSION = '1.2.23'
3
3
  end
@@ -16,6 +16,7 @@ class FakeLearnClient
16
16
  :lab=>true,
17
17
  :ios_lab=>false,
18
18
  :ruby_lab=>true,
19
+ :use_student_fork=>true,
19
20
  :assessments=>
20
21
  [{:type=>"fork", :passing=>true, :failing=>false, :started=>true, :message=>"You forked this lab."},
21
22
  {:type=>"local_build", :passing=>false, :failing=>true, :started=>true, :message=>"Build failures."},
@@ -35,6 +36,7 @@ class FakeLearnClient
35
36
  :lesson_id=>31322,
36
37
  :later_lesson=>false,
37
38
  :git_server=>"github.com",
39
+ :use_student_fork=>true,
38
40
  :dot_learn=>{
39
41
  :tags=>[
40
42
  "UIView"
@@ -50,6 +52,7 @@ class FakeLearnClient
50
52
  :lab=>true,
51
53
  :lesson_id=>31322,
52
54
  :later_lesson=>false,
55
+ :use_student_fork=>true,
53
56
  :git_server=>"github.com",
54
57
  :dot_learn=>{
55
58
  :tags=>[
@@ -65,6 +68,7 @@ class FakeLearnClient
65
68
  :repo_slug=>"StevenNunez/jupyter_lab",
66
69
  :lab=>true,
67
70
  :lesson_id=>31322,
71
+ :use_student_fork=>true,
68
72
  :later_lesson=>false,
69
73
  :git_server=>"github.com",
70
74
  :dot_learn=>{
@@ -83,6 +87,7 @@ class FakeLearnClient
83
87
  :lab=>true,
84
88
  :lesson_id=>31322,
85
89
  :later_lesson=>false,
90
+ :use_student_fork=>true,
86
91
  :git_server=>"github.com",
87
92
  :dot_learn=>{
88
93
  :tags=>[
@@ -99,6 +104,7 @@ class FakeLearnClient
99
104
  :lab=>true,
100
105
  :lesson_id=>31322,
101
106
  :later_lesson=>false,
107
+ :use_student_fork=>true,
102
108
  :git_server=>"github.com",
103
109
  :dot_learn=>{
104
110
  :tags=>[
@@ -115,6 +121,7 @@ class FakeLearnClient
115
121
  :lab=>true,
116
122
  :lesson_id=>31322,
117
123
  :later_lesson=>false,
124
+ :use_student_fork=>true,
118
125
  :git_server=>"github.com",
119
126
  :dot_learn=>{
120
127
  :tags=>[
@@ -131,6 +138,7 @@ class FakeLearnClient
131
138
  :lab=>false,
132
139
  :lesson_id=>31322,
133
140
  :later_lesson=>false,
141
+ :use_student_fork=>true,
134
142
  :git_server=>"github.com",
135
143
  :dot_learn=>{
136
144
  :tags=>[
@@ -148,6 +156,7 @@ class FakeLearnClient
148
156
  :lesson_id=>31322,
149
157
  :later_lesson=>true,
150
158
  :git_server=>"github.com",
159
+ :use_student_fork=>true,
151
160
  :dot_learn=>{
152
161
  :tags=>[
153
162
  "Readable things"
@@ -169,6 +178,7 @@ class FakeLearnClient
169
178
  :forked_repo=>"StevenNunez/rails-dynamic-request-lab-cb-000",
170
179
  :clone_repo=>"StevenNunez/rails-dynamic-request-lab-cb-000",
171
180
  :git_server=>"github.com",
181
+ :use_student_fork=>true,
172
182
  :dot_learn=>
173
183
  {
174
184
  :tags=>[
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+ require 'fakefs/spec_helpers'
3
+
4
+ describe LearnOpen::ArgumentParser do
5
+ include FakeFS::SpecHelpers
6
+ let(:home_dir) { File.expand_path('~') }
7
+
8
+ before do
9
+ FileUtils.mkdir_p home_dir
10
+ end
11
+
12
+ context "" do
13
+ it 'reads the .learn-config for the editor' do
14
+ File.open("#{home_dir}/.learn-config", "w+") do |f|
15
+ f.puts <<-EOF
16
+ ---
17
+ :learn_directory: "#{home_dir}/Development/code"
18
+ :editor: vim
19
+ EOF
20
+ end
21
+ args = ['--editor=']
22
+ _lesson, editor, _load_next = LearnOpen::ArgumentParser.new(args).execute
23
+ expect(editor).to eq('vim')
24
+ end
25
+
26
+ it 'ignores switches in the editor field' do
27
+ File.open("#{home_dir}/.learn-config", "w+") do |f|
28
+ f.puts <<-EOF
29
+ ---
30
+ :learn_directory: "#{home_dir}/Development/code"
31
+ :editor: vim -m
32
+ EOF
33
+ end
34
+ args = ['--editor=']
35
+ _lesson, editor, _load_next = LearnOpen::ArgumentParser.new(args).execute
36
+ expect(editor).to eq('vim')
37
+ end
38
+
39
+ it 'overrides editor is passed in as argument' do
40
+ File.open("#{home_dir}/.learn-config", "w+") do |f|
41
+ f.puts <<-EOF
42
+ ---
43
+ :learn_directory: "#{home_dir}/Development/code"
44
+ :editor: vim -m
45
+ EOF
46
+ end
47
+ args = ['--editor=atom']
48
+ _lesson, editor, _load_next = LearnOpen::ArgumentParser.new(args).execute
49
+ expect(editor).to eq('atom')
50
+ end
51
+
52
+ it 'parses next lab if --next spedified' do
53
+ File.open("#{home_dir}/.learn-config", "w+") do |f|
54
+ f.puts <<-EOF
55
+ ---
56
+ :learn_directory: "#{home_dir}/Development/code"
57
+ :editor: atom
58
+ EOF
59
+ end
60
+ args = ['--next', '--editor=vim']
61
+ _lesson, editor, load_next = LearnOpen::ArgumentParser.new(args).execute
62
+ expect(load_next).to eq(true)
63
+ expect(editor).to eq('vim')
64
+ end
65
+
66
+ it 'parses lab name if provided' do
67
+ File.open("#{home_dir}/.learn-config", "w+") do |f|
68
+ f.puts <<-EOF
69
+ ---
70
+ :learn_directory: "#{home_dir}/Development/code"
71
+ :editor: emacs
72
+ EOF
73
+ end
74
+ args = ['hashketball', '--editor=vim']
75
+ lesson, editor, _load_next = LearnOpen::ArgumentParser.new(args).execute
76
+ expect(lesson).to eq('hashketball')
77
+ expect(editor).to eq('vim')
78
+ end
79
+
80
+ it 'accepts a --clone-only argument' do
81
+ File.open("#{home_dir}/.learn-config", "w+") do |f|
82
+ f.puts <<-EOF
83
+ ---
84
+ :learn_directory: "#{home_dir}/Development/code"
85
+ :editor: emacs
86
+ EOF
87
+ end
88
+ args = ['hashketball', '--editor=vim', '--clone-only']
89
+ _lesson, _editor, _load_next, clone_only = LearnOpen::ArgumentParser.new(args).execute
90
+ expect(clone_only).to eq(true)
91
+ end
92
+ end
93
+ end
@@ -34,13 +34,13 @@ describe LearnOpen::Environments::IDEEnvironment do
34
34
  end
35
35
 
36
36
  it "opens correct lab" do
37
- environment.open_lab(lesson, double, double)
37
+ environment.open_lab(lesson, double, double, false)
38
38
  custom_commands_log = File.read("#{@home_dir}/.custom_commands.log")
39
39
  expect(custom_commands_log).to eq(%Q{{"command":"open_lab","lab_name":"a-different-lesson"}\n})
40
40
  end
41
41
 
42
42
  it "opens correct jupyter lab" do
43
- environment.open_jupyter_lab(lesson, double, double)
43
+ environment.open_jupyter_lab(lesson, double, double, false)
44
44
  custom_commands_log = File.read("#{@home_dir}/.custom_commands.log")
45
45
  expect(custom_commands_log).to eq(%Q{{"command":"open_lab","lab_name":"a-different-lesson"}\n})
46
46
  end
@@ -58,20 +58,35 @@ describe LearnOpen::Environments::IDEEnvironment do
58
58
  to_url: "valid-lesson-url",
59
59
  to_path: @home_dir,
60
60
  git_server: "github.com",
61
- repo_path: "/org/lesson"
61
+ repo_path: "/org/lesson",
62
+ use_student_fork: true
63
+ )
64
+ end
65
+
66
+ let(:deployed_source_lesson) do
67
+ double(
68
+ name: "valid_lab",
69
+ later_lesson: false,
70
+ to_url: "valid-lesson-url",
71
+ to_path: @home_dir,
72
+ git_server: "github.com",
73
+ repo_path: "/org/lesson",
74
+ use_student_fork: false
62
75
  )
63
76
  end
64
77
 
65
78
  let(:env_vars) {{ "LAB_NAME" => "valid_lab", "CREATED_USER" => "bobby", "SHELL" => "/usr/local/fish"}}
66
79
  let(:git_adapter) { double }
67
80
  let(:system_adapter) { double }
81
+ let(:git_ssh_connector) { double(call: true) }
68
82
  let(:environment) do
69
83
  subject.new({
70
84
  io: io,
71
85
  environment_vars: env_vars,
72
86
  logger: spy,
73
87
  git_adapter: git_adapter,
74
- system_adapter: system_adapter
88
+ system_adapter: system_adapter,
89
+ git_ssh_connector: git_ssh_connector
75
90
  })
76
91
  end
77
92
 
@@ -84,6 +99,7 @@ describe LearnOpen::Environments::IDEEnvironment do
84
99
  it "opens the lab" do
85
100
  location = double
86
101
  editor = "vim"
102
+ clone_only = false
87
103
 
88
104
  expect(io).to receive(:puts).with("Forking lesson...")
89
105
  expect(io).to receive(:puts).with("Cloning lesson...")
@@ -108,7 +124,7 @@ describe LearnOpen::Environments::IDEEnvironment do
108
124
  .to receive(:open_login_shell)
109
125
  .with("/usr/local/fish")
110
126
 
111
- environment.open_lab(lesson, location, editor)
127
+ environment.open_lab(lesson, location, editor, clone_only)
112
128
  end
113
129
  end
114
130
  end
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+ require 'fakefs/spec_helpers'
3
+
4
+ describe LearnOpen::Environments::JupyterContainerEnvironment do
5
+ include FakeFS::SpecHelpers
6
+ subject { LearnOpen::Environments::JupyterContainerEnvironment }
7
+
8
+ let(:io) { instance_double(LearnOpen::Adapters::IOAdapter) }
9
+
10
+ context "valid environments" do
11
+ before do
12
+ @home_dir = create_linux_home_dir("bobby")
13
+ end
14
+
15
+ let(:lesson) do
16
+ double(
17
+ name: "valid_lab",
18
+ later_lesson: false,
19
+ to_url: "valid-lesson-url",
20
+ to_path: @home_dir,
21
+ git_server: "github.com",
22
+ repo_path: "/org/lesson",
23
+ use_student_fork: true
24
+ )
25
+ end
26
+
27
+ let(:deployed_source_lesson) do
28
+ double(
29
+ name: "valid_lab",
30
+ later_lesson: false,
31
+ to_url: "valid-lesson-url",
32
+ to_path: @home_dir,
33
+ git_server: "github.com",
34
+ repo_path: "/org/lesson",
35
+ use_student_fork: false
36
+ )
37
+ end
38
+
39
+ let(:env_vars) {{ "LAB_NAME" => "valid_lab", "CREATED_USER" => "bobby", "SHELL" => "/usr/local/fish"}}
40
+ let(:git_adapter) { double }
41
+ let(:system_adapter) { double }
42
+ let(:git_ssh_connector) { double(call: true) }
43
+ let(:environment) do
44
+ subject.new({
45
+ io: io,
46
+ environment_vars: env_vars,
47
+ logger: spy,
48
+ git_adapter: git_adapter,
49
+ system_adapter: system_adapter,
50
+ git_ssh_connector: git_ssh_connector
51
+ })
52
+ end
53
+
54
+ it "only clones repo when not using student fork" do
55
+ location = double
56
+ editor = "vim"
57
+ clone_only = false
58
+
59
+ expect(io).to receive(:puts).with("Cloning lesson...")
60
+ expect(io).to receive(:puts).with("Done.")
61
+ expect(git_adapter)
62
+ .to receive(:clone)
63
+ .with("git@github.com:/org/lesson.git", "valid_lab", {:path=> location})
64
+ expect(system_adapter)
65
+ .to receive(:open_login_shell)
66
+ .with("/usr/local/fish")
67
+
68
+ environment.open_jupyter_lab(deployed_source_lesson, location, editor, clone_only)
69
+ end
70
+
71
+ it "opens the lab" do
72
+ location = double
73
+ editor = "vim"
74
+ clone_only = false
75
+
76
+ expect(io).to receive(:puts).with("Forking lesson...")
77
+ expect(io).to receive(:puts).with("Cloning lesson...")
78
+ expect(io).to receive(:puts).with("Done.")
79
+ expect(git_adapter)
80
+ .to receive(:clone)
81
+ .with("git@github.com:/org/lesson.git", "valid_lab", {:path=> location})
82
+ expect(system_adapter)
83
+ .to receive(:spawn)
84
+ .with("restore-lab", {:block=>true})
85
+ expect(system_adapter)
86
+ .to receive(:watch_dir)
87
+ .with("/home/bobby", "backup-lab")
88
+ expect(system_adapter)
89
+ .to receive(:open_login_shell)
90
+ .with("/usr/local/fish")
91
+
92
+ environment.open_jupyter_lab(lesson, location, editor, clone_only)
93
+ end
94
+ end
95
+ end
@@ -7,13 +7,14 @@ describe LearnOpen::Opener do
7
7
  let(:learn_web_client) { FakeLearnClient.new(token: "some-amazing-password") }
8
8
  let(:git_adapter) { FakeGit.new }
9
9
  let(:system_adapter) { class_double(LearnOpen::Adapters::SystemAdapter) }
10
+ let(:git_ssh_connector) { class_double(LearnOpen::GitSSHConnector) }
10
11
 
11
12
  before do
12
13
  create_home_dir
13
14
  create_netrc_file
14
15
  create_learn_config_file
15
16
 
16
- allow(LearnOpen::GitSSHConnector)
17
+ allow(git_ssh_connector)
17
18
  .to receive(:call)
18
19
  .with(git_server: instance_of(String), environment: anything)
19
20
  .and_return(true)
@@ -21,21 +22,27 @@ describe LearnOpen::Opener do
21
22
 
22
23
  context "Initializer" do
23
24
  it "sets the lesson" do
24
- opener = LearnOpen::Opener.new("ttt-2-board-rb-v-000","", false)
25
+ opener = LearnOpen::Opener.new("ttt-2-board-rb-v-000","", false, false)
25
26
  expect(opener.target_lesson).to eq("ttt-2-board-rb-v-000")
26
27
  end
27
28
  it "sets the editor" do
28
- opener = LearnOpen::Opener.new("", "atom", false)
29
+ opener = LearnOpen::Opener.new("", "atom", false, false)
29
30
  expect(opener.editor).to eq("atom")
30
31
  end
31
32
  it "sets the whether to open the next lesson or not" do
32
- opener = LearnOpen::Opener.new("", "", true)
33
+ opener = LearnOpen::Opener.new("", "", true, false)
33
34
  expect(opener.get_next_lesson).to eq(true)
34
35
  end
36
+
37
+ it "sets the clone only options" do
38
+ opener = LearnOpen::Opener.new("", "", true, true)
39
+ expect(opener.clone_only).to eq(true)
40
+ end
35
41
  end
36
42
 
37
43
  context "running the opener" do
38
44
  it "calls its collaborators" do
45
+ clone_only = false
39
46
  expect(system_adapter)
40
47
  .to receive(:open_editor)
41
48
  .with("atom", path: ".")
@@ -52,19 +59,42 @@ describe LearnOpen::Opener do
52
59
  .to receive(:fork_repo)
53
60
  .with(repo_name: "rails-dynamic-request-lab-cb-000")
54
61
 
55
- expect(LearnOpen::GitSSHConnector)
62
+ expect(git_ssh_connector)
56
63
  .to receive(:call)
57
- .with(git_server: instance_of(String), environment: instance_of(LearnOpen::Environments::MacEnvironment))
58
64
 
59
- opener = LearnOpen::Opener.new(nil, "atom", true,
65
+ opener = LearnOpen::Opener.new(nil, "atom", true, clone_only,
60
66
  learn_web_client: learn_web_client,
61
67
  git_adapter: git_adapter,
62
68
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
63
69
  system_adapter: system_adapter,
70
+ git_ssh_connector: git_ssh_connector,
64
71
  io: spy)
65
72
  opener.run
66
73
  end
67
74
  end
75
+
76
+ context "clone_only" do
77
+ it "It only calls clone/fork code, but doesn't open shell" do
78
+ clone_only = true
79
+
80
+ expect(learn_web_client)
81
+ .to receive(:fork_repo)
82
+ .with(repo_name: "rails-dynamic-request-lab-cb-000")
83
+
84
+ expect(git_ssh_connector)
85
+ .to receive(:call)
86
+
87
+ opener = LearnOpen::Opener.new(nil, "atom", true, clone_only,
88
+ learn_web_client: learn_web_client,
89
+ git_adapter: git_adapter,
90
+ environment_vars: {"SHELL" => "/usr/local/bin/fish"},
91
+ system_adapter: system_adapter,
92
+ git_ssh_connector: git_ssh_connector,
93
+ io: spy)
94
+ opener.run
95
+ end
96
+ end
97
+
68
98
  context "Opening on specific environments" do
69
99
  before do
70
100
  allow(system_adapter).to receive_messages(
@@ -95,11 +125,12 @@ describe LearnOpen::Opener do
95
125
  .to receive(:run_command)
96
126
  .with("bundle install")
97
127
 
98
- opener = LearnOpen::Opener.new("ruby_lab", "atom", false,
128
+ opener = LearnOpen::Opener.new("ruby_lab", "atom", false, false,
99
129
  learn_web_client: learn_web_client,
100
130
  git_adapter: git_adapter,
101
131
  environment_vars: environment,
102
132
  system_adapter: system_adapter,
133
+ git_ssh_connector: git_ssh_connector,
103
134
  io: spy)
104
135
  opener.run
105
136
  end
@@ -114,11 +145,12 @@ describe LearnOpen::Opener do
114
145
  allow(system_adapter).to receive_messages([:spawn, :watch_dir])
115
146
 
116
147
  home_dir = create_linux_home_dir("bobby")
117
- opener = LearnOpen::Opener.new(nil, "atom", true,
148
+ opener = LearnOpen::Opener.new(nil, "atom", true, false,
118
149
  learn_web_client: learn_web_client,
119
150
  git_adapter: git_adapter,
120
151
  environment_vars: environment,
121
152
  system_adapter: system_adapter,
153
+ git_ssh_connector: git_ssh_connector,
122
154
  io: spy)
123
155
  opener.run
124
156
  expect(File.exist?("#{home_dir}/.custom_commands.log")).to eq(false)
@@ -142,11 +174,12 @@ describe LearnOpen::Opener do
142
174
  .with("Opening new window")
143
175
 
144
176
  create_linux_home_dir("bobby")
145
- opener = LearnOpen::Opener.new("later_lesson", "atom", true,
177
+ opener = LearnOpen::Opener.new("later_lesson", "atom", true, false,
146
178
  learn_web_client: learn_web_client,
147
179
  git_adapter: git_adapter,
148
180
  environment_vars: environment,
149
181
  system_adapter: system_adapter,
182
+ git_ssh_connector: git_ssh_connector,
150
183
  io: io)
151
184
  opener.run
152
185
  end
@@ -180,11 +213,12 @@ describe LearnOpen::Opener do
180
213
  .with("Opening readme...")
181
214
 
182
215
  create_linux_home_dir("bobby")
183
- opener = LearnOpen::Opener.new("later_lesson", "atom", true,
216
+ opener = LearnOpen::Opener.new("later_lesson", "atom", true, false,
184
217
  learn_web_client: learn_web_client,
185
218
  git_adapter: git_adapter,
186
219
  environment_vars: environment,
187
220
  system_adapter: system_adapter,
221
+ git_ssh_connector: git_ssh_connector,
188
222
  io: io)
189
223
  opener.run
190
224
  end
@@ -199,11 +233,12 @@ describe LearnOpen::Opener do
199
233
  allow(system_adapter).to receive_messages([:spawn, :watch_dir])
200
234
 
201
235
  home_dir = create_linux_home_dir("bobby")
202
- opener = LearnOpen::Opener.new(nil, "atom", true,
236
+ opener = LearnOpen::Opener.new(nil, "atom", true, false,
203
237
  learn_web_client: learn_web_client,
204
238
  git_adapter: git_adapter,
205
239
  environment_vars: environment,
206
240
  system_adapter: system_adapter,
241
+ git_ssh_connector: git_ssh_connector,
207
242
  io: spy)
208
243
  opener.run
209
244
  custom_commands_log = File.read("#{home_dir}/.custom_commands.log")
@@ -219,11 +254,12 @@ describe LearnOpen::Opener do
219
254
  allow(system_adapter).to receive_messages([:spawn, :watch_dir])
220
255
 
221
256
  home_dir = create_linux_home_dir("bobby")
222
- opener = LearnOpen::Opener.new(nil, "atom", true,
257
+ opener = LearnOpen::Opener.new(nil, "atom", true, false,
223
258
  learn_web_client: learn_web_client,
224
259
  git_adapter: git_adapter,
225
260
  environment_vars: environment,
226
261
  system_adapter: system_adapter,
262
+ git_ssh_connector: git_ssh_connector,
227
263
  io: spy)
228
264
  opener.run
229
265
  expect(File.exist?("#{home_dir}/.custom_commands.log")).to eq(false)
@@ -253,11 +289,12 @@ describe LearnOpen::Opener do
253
289
  .to receive(:run_command)
254
290
  .with("yarn install --no-lockfile")
255
291
 
256
- opener = LearnOpen::Opener.new("node_lab", "atom", false,
292
+ opener = LearnOpen::Opener.new("node_lab", "atom", false, false,
257
293
  learn_web_client: learn_web_client,
258
294
  git_adapter: git_adapter,
259
295
  environment_vars: environment,
260
296
  system_adapter: system_adapter,
297
+ git_ssh_connector: git_ssh_connector,
261
298
  io: spy)
262
299
  opener.run
263
300
  end
@@ -280,7 +317,7 @@ describe LearnOpen::Opener do
280
317
 
281
318
  io = StringIO.new
282
319
 
283
- opener = LearnOpen::Opener.new("ruby_lab", "atom", false,
320
+ opener = LearnOpen::Opener.new("ruby_lab", "atom", false, false,
284
321
  learn_web_client: learn_web_client,
285
322
  git_adapter: git_adapter,
286
323
  environment_vars: environment,
@@ -310,11 +347,12 @@ Failed to obtain an SSH connection!
310
347
 
311
348
  io = StringIO.new
312
349
 
313
- opener = LearnOpen::Opener.new("jupyter_lab", "atom", false,
350
+ opener = LearnOpen::Opener.new("jupyter_lab", "atom", false, false,
314
351
  learn_web_client: learn_web_client,
315
352
  git_adapter: git_adapter,
316
353
  environment_vars: environment,
317
354
  system_adapter: system_adapter,
355
+ git_ssh_connector: git_ssh_connector,
318
356
  io: io)
319
357
  opener.run
320
358
  io.rewind
@@ -322,7 +360,6 @@ Failed to obtain an SSH connection!
322
360
  Looking for lesson...
323
361
  Forking lesson...
324
362
  Cloning lesson...
325
- Opening lesson...
326
363
  Installing pip dependencies...
327
364
  Done.
328
365
  EOF
@@ -343,11 +380,12 @@ Done.
343
380
  )
344
381
 
345
382
 
346
- opener = LearnOpen::Opener.new("jupyter_lab", "atom", false,
383
+ opener = LearnOpen::Opener.new("jupyter_lab", "atom", false, false,
347
384
  learn_web_client: learn_web_client,
348
385
  git_adapter: git_adapter,
349
386
  environment_vars: environment,
350
387
  system_adapter: system_adapter,
388
+ git_ssh_connector: git_ssh_connector,
351
389
  io: spy)
352
390
  opener.run
353
391
  expect(File.read("#{home_dir}/.learn-open-tmp")).to eq("Done.")
@@ -366,9 +404,6 @@ Done.
366
404
  .with("git@github.com:StevenNunez/jupyter_lab.git", "jupyter_lab", {:path=>"/home/bobby/Development/code"})
367
405
  .and_call_original
368
406
 
369
- expect(system_adapter)
370
- .to receive(:open_editor)
371
- .with("atom", path: ".")
372
407
  expect(system_adapter)
373
408
  .to receive(:spawn)
374
409
  .with("restore-lab", block: true)
@@ -378,18 +413,16 @@ Done.
378
413
  expect(system_adapter)
379
414
  .to receive(:open_login_shell)
380
415
  .with("/usr/local/bin/fish")
381
- expect(system_adapter)
382
- .to receive(:change_context_directory)
383
- .with("/home/bobby/Development/code/jupyter_lab")
384
416
  expect(system_adapter)
385
417
  .to receive(:run_command)
386
418
  .with("/opt/conda/bin/python -m pip install -r requirements.txt")
387
419
 
388
- opener = LearnOpen::Opener.new("jupyter_lab", "atom", false,
420
+ opener = LearnOpen::Opener.new("jupyter_lab", "atom", false, false,
389
421
  learn_web_client: learn_web_client,
390
422
  git_adapter: git_adapter,
391
423
  environment_vars: environment,
392
424
  system_adapter: system_adapter,
425
+ git_ssh_connector: git_ssh_connector,
393
426
  io: spy)
394
427
  opener.run
395
428
  end
@@ -398,11 +431,12 @@ Done.
398
431
  environment = {"CREATED_USER" => "bobby", "IDE_CONTAINER" => "true", "LAB_NAME" => "jupyter_lab"}
399
432
  io = StringIO.new
400
433
  home_dir = create_linux_home_dir("bobby")
401
- opener = LearnOpen::Opener.new("jupyter_lab", "atom", false,
434
+ opener = LearnOpen::Opener.new("jupyter_lab", "atom", false, false,
402
435
  learn_web_client: learn_web_client,
403
436
  git_adapter: git_adapter,
404
437
  environment_vars: environment,
405
438
  system_adapter: system_adapter,
439
+ git_ssh_connector: git_ssh_connector,
406
440
  io: io)
407
441
  opener.run
408
442
  io.rewind
@@ -419,11 +453,12 @@ EOF
419
453
  .to receive(:run_command)
420
454
  .with("open -a Safari https://learn.co/lessons/31322")
421
455
  io = StringIO.new
422
- opener = LearnOpen::Opener.new("jupyter_lab", "atom", false,
456
+ opener = LearnOpen::Opener.new("jupyter_lab", "atom", false, false,
423
457
  learn_web_client: learn_web_client,
424
458
  git_adapter: git_adapter,
425
459
  system_adapter: system_adapter,
426
460
  io: io,
461
+ git_ssh_connector: git_ssh_connector,
427
462
  platform: "darwin")
428
463
  opener.run
429
464
  io.rewind
@@ -440,11 +475,12 @@ EOF
440
475
  .with("open -a 'Google Chrome' https://learn.co/lessons/31322")
441
476
 
442
477
  io = StringIO.new
443
- opener = LearnOpen::Opener.new("jupyter_lab", "atom", false,
478
+ opener = LearnOpen::Opener.new("jupyter_lab", "atom", false, false,
444
479
  learn_web_client: learn_web_client,
445
480
  git_adapter: git_adapter,
446
481
  system_adapter: system_adapter,
447
482
  io: io,
483
+ git_ssh_connector: git_ssh_connector,
448
484
  platform: "darwin")
449
485
  opener.run
450
486
  io.rewind
@@ -459,11 +495,12 @@ EOF
459
495
  .to receive(:run_command)
460
496
  .with("xdg-open https://learn.co/lessons/31322")
461
497
  io = StringIO.new
462
- opener = LearnOpen::Opener.new("jupyter_lab", "atom", false,
498
+ opener = LearnOpen::Opener.new("jupyter_lab", "atom", false, false,
463
499
  learn_web_client: learn_web_client,
464
500
  git_adapter: git_adapter,
465
501
  system_adapter: system_adapter,
466
502
  io: io,
503
+ git_ssh_connector: git_ssh_connector,
467
504
  platform: "linux")
468
505
  opener.run
469
506
  io.rewind
@@ -476,7 +513,7 @@ EOF
476
513
  context "Readme" do
477
514
  it "does not open readme if on unsupported environment" do
478
515
  io = StringIO.new
479
- opener = LearnOpen::Opener.new("readme", "atom", false,
516
+ opener = LearnOpen::Opener.new("readme", "atom", false, false,
480
517
  learn_web_client: learn_web_client,
481
518
  git_adapter: git_adapter,
482
519
  environment_vars: {},
@@ -496,11 +533,12 @@ EOF
496
533
  environment = {"CREATED_USER" => "bobby", "IDE_CONTAINER" => "true", "LAB_NAME" => "readme"}
497
534
  io = StringIO.new
498
535
  home_dir = create_linux_home_dir("bobby")
499
- opener = LearnOpen::Opener.new("readme", "atom", false,
536
+ opener = LearnOpen::Opener.new("readme", "atom", false, false,
500
537
  learn_web_client: learn_web_client,
501
538
  git_adapter: git_adapter,
502
539
  environment_vars: environment,
503
540
  system_adapter: system_adapter,
541
+ git_ssh_connector: git_ssh_connector,
504
542
  io: io)
505
543
  opener.run
506
544
 
@@ -519,12 +557,13 @@ EOF
519
557
  .to receive(:run_command)
520
558
  .with("open -a Safari https://learn.co/lessons/31322")
521
559
 
522
- opener = LearnOpen::Opener.new("readme", "atom", false,
560
+ opener = LearnOpen::Opener.new("readme", "atom", false, false,
523
561
  learn_web_client: learn_web_client,
524
562
  git_adapter: git_adapter,
525
563
  environment_vars: {},
526
564
  system_adapter: system_adapter,
527
565
  io: io,
566
+ git_ssh_connector: git_ssh_connector,
528
567
  platform: "darwin")
529
568
  opener.run
530
569
 
@@ -544,12 +583,13 @@ EOF
544
583
  .with("open -a 'Google Chrome' https://learn.co/lessons/31322")
545
584
 
546
585
 
547
- opener = LearnOpen::Opener.new("readme", "atom", false,
586
+ opener = LearnOpen::Opener.new("readme", "atom", false, false,
548
587
  learn_web_client: learn_web_client,
549
588
  git_adapter: git_adapter,
550
589
  environment_vars: {},
551
590
  system_adapter: system_adapter,
552
591
  io: io,
592
+ git_ssh_connector: git_ssh_connector,
553
593
  platform: "darwin")
554
594
  opener.run
555
595
 
@@ -569,11 +609,12 @@ EOF
569
609
  .with("xdg-open https://learn.co/lessons/31322")
570
610
 
571
611
 
572
- opener = LearnOpen::Opener.new("readme", "atom", false,
612
+ opener = LearnOpen::Opener.new("readme", "atom", false, false,
573
613
  learn_web_client: learn_web_client,
574
614
  git_adapter: git_adapter,
575
615
  environment_vars: {},
576
616
  system_adapter: system_adapter,
617
+ git_ssh_connector: git_ssh_connector,
577
618
  io: io,
578
619
  platform: "linux")
579
620
  opener.run
@@ -590,11 +631,12 @@ EOF
590
631
  it "fails to open on Linux" do
591
632
  io = StringIO.new
592
633
 
593
- opener = LearnOpen::Opener.new("ios_lab", "atom", false,
634
+ opener = LearnOpen::Opener.new("ios_lab", "atom", false, false,
594
635
  learn_web_client: learn_web_client,
595
636
  git_adapter: git_adapter,
596
637
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
597
638
  system_adapter: system_adapter,
639
+ git_ssh_connector: git_ssh_connector,
598
640
  io: io,
599
641
  platform: "linux")
600
642
  opener.run
@@ -617,11 +659,12 @@ EOF
617
659
  create_linux_home_dir("bobby")
618
660
  io = StringIO.new
619
661
 
620
- opener = LearnOpen::Opener.new("ios_lab", "atom", false,
662
+ opener = LearnOpen::Opener.new("ios_lab", "atom", false, false,
621
663
  learn_web_client: learn_web_client,
622
664
  git_adapter: git_adapter,
623
665
  environment_vars: environment,
624
666
  system_adapter: system_adapter,
667
+ git_ssh_connector: git_ssh_connector,
625
668
  io: io,
626
669
  platform: "linux")
627
670
  opener.run
@@ -646,12 +689,13 @@ EOF
646
689
  .with("cd /home/bobby/Development/code/ios_lab && open *.xcodeproj")
647
690
 
648
691
 
649
- opener = LearnOpen::Opener.new("ios_lab", "atom", false,
692
+ opener = LearnOpen::Opener.new("ios_lab", "atom", false, false,
650
693
  learn_web_client: learn_web_client,
651
694
  git_adapter: git_adapter,
652
695
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
653
696
  system_adapter: system_adapter,
654
697
  io: io,
698
+ git_ssh_connector: git_ssh_connector,
655
699
  platform: "darwin")
656
700
  opener.run
657
701
 
@@ -669,12 +713,13 @@ EOF
669
713
  .with("cd /home/bobby/Development/code/ios_with_workspace_lab && open *.xcworkspace")
670
714
 
671
715
 
672
- opener = LearnOpen::Opener.new("ios_with_workspace_lab", "atom", false,
716
+ opener = LearnOpen::Opener.new("ios_with_workspace_lab", "atom", false, false,
673
717
  learn_web_client: learn_web_client,
674
718
  git_adapter: git_adapter,
675
719
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
676
720
  system_adapter: system_adapter,
677
721
  io: io,
722
+ git_ssh_connector: git_ssh_connector,
678
723
  platform: "darwin")
679
724
  opener.run
680
725
 
@@ -693,11 +738,12 @@ EOF
693
738
  expect(system_adapter)
694
739
  .to receive(:run_command)
695
740
  .with("bundle install")
696
- opener = LearnOpen::Opener.new("ruby_lab", "atom", false,
741
+ opener = LearnOpen::Opener.new("ruby_lab", "atom", false, false,
697
742
  learn_web_client: learn_web_client,
698
743
  git_adapter: git_adapter,
699
744
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
700
745
  system_adapter: system_adapter,
746
+ git_ssh_connector: git_ssh_connector,
701
747
  io: spy)
702
748
  opener.run
703
749
  end
@@ -712,11 +758,12 @@ EOF
712
758
  )
713
759
 
714
760
  io = StringIO.new
715
- opener = LearnOpen::Opener.new("ruby_lab", "atom", false,
761
+ opener = LearnOpen::Opener.new("ruby_lab", "atom", false, false,
716
762
  learn_web_client: learn_web_client,
717
763
  git_adapter: git_adapter,
718
764
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
719
765
  system_adapter: system_adapter,
766
+ git_ssh_connector: git_ssh_connector,
720
767
  io: io)
721
768
  opener.run
722
769
  io.rewind
@@ -746,11 +793,12 @@ EOF
746
793
  expect(system_adapter)
747
794
  .to receive(:run_command)
748
795
  .with("python -m pip install -r requirements.txt")
749
- opener = LearnOpen::Opener.new("python_lab", "atom", false,
796
+ opener = LearnOpen::Opener.new("python_lab", "atom", false, false,
750
797
  learn_web_client: learn_web_client,
751
798
  git_adapter: git_adapter,
752
799
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
753
800
  system_adapter: system_adapter,
801
+ git_ssh_connector: git_ssh_connector,
754
802
  io: spy)
755
803
  opener.run
756
804
  end
@@ -764,11 +812,12 @@ EOF
764
812
  )
765
813
 
766
814
  io = StringIO.new
767
- opener = LearnOpen::Opener.new("python_lab", "atom", false,
815
+ opener = LearnOpen::Opener.new("python_lab", "atom", false, false,
768
816
  learn_web_client: learn_web_client,
769
817
  git_adapter: git_adapter,
770
818
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
771
819
  system_adapter: system_adapter,
820
+ git_ssh_connector: git_ssh_connector,
772
821
  io: io)
773
822
  opener.run
774
823
  io.rewind
@@ -798,11 +847,12 @@ EOF
798
847
  expect(system_adapter)
799
848
  .to receive(:run_command)
800
849
  .with("npm install")
801
- opener = LearnOpen::Opener.new("node_lab", "atom", false,
850
+ opener = LearnOpen::Opener.new("node_lab", "atom", false, false,
802
851
  learn_web_client: learn_web_client,
803
852
  git_adapter: git_adapter,
804
853
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
805
854
  system_adapter: system_adapter,
855
+ git_ssh_connector: git_ssh_connector,
806
856
  io: spy)
807
857
  opener.run
808
858
  end
@@ -816,11 +866,12 @@ EOF
816
866
  )
817
867
 
818
868
  io = StringIO.new
819
- opener = LearnOpen::Opener.new("node_lab", "atom", false,
869
+ opener = LearnOpen::Opener.new("node_lab", "atom", false, false,
820
870
  learn_web_client: learn_web_client,
821
871
  git_adapter: git_adapter,
822
872
  environment_vars: {"SHELL" => "/usr/local/bin/fish"},
823
873
  system_adapter: system_adapter,
874
+ git_ssh_connector: git_ssh_connector,
824
875
  io: io)
825
876
  opener.run
826
877
  io.rewind
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LearnOpen::LessonDownloader do
4
- let(:lesson) { double }
4
+ let(:lesson) { double(use_student_fork: true) }
5
5
  let(:location) { double }
6
6
  let(:environment) { double }
7
7
  let(:downloader) { LearnOpen::LessonDownloader.new(lesson, location, environment) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: learn-open
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.22
4
+ version: 1.2.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Flatiron School
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-24 00:00:00.000000000 Z
11
+ date: 2018-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -215,7 +215,9 @@ files:
215
215
  - spec/fakes/fake_learn_client.rb
216
216
  - spec/fixtures/learn-config
217
217
  - spec/learn_open/adapters/ssh_adapter_spec.rb
218
+ - spec/learn_open/argument_parser_spec.rb
218
219
  - spec/learn_open/environments/ide_environment_spec.rb
220
+ - spec/learn_open/environments/jupyter_container_environment_spec.rb
219
221
  - spec/learn_open/opener_spec.rb
220
222
  - spec/learn_open/services/git_ssh_connector_spec.rb
221
223
  - spec/learn_open/services/lesson_downloader_spec.rb
@@ -241,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
243
  version: '0'
242
244
  requirements: []
243
245
  rubyforge_project:
244
- rubygems_version: 2.7.6
246
+ rubygems_version: 2.7.7
245
247
  signing_key:
246
248
  specification_version: 4
247
249
  summary: Open Learn lessons locally
@@ -250,7 +252,9 @@ test_files:
250
252
  - spec/fakes/fake_learn_client.rb
251
253
  - spec/fixtures/learn-config
252
254
  - spec/learn_open/adapters/ssh_adapter_spec.rb
255
+ - spec/learn_open/argument_parser_spec.rb
253
256
  - spec/learn_open/environments/ide_environment_spec.rb
257
+ - spec/learn_open/environments/jupyter_container_environment_spec.rb
254
258
  - spec/learn_open/opener_spec.rb
255
259
  - spec/learn_open/services/git_ssh_connector_spec.rb
256
260
  - spec/learn_open/services/lesson_downloader_spec.rb