ruby_learner 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/docs/thesis/competing_services.org +21 -0
  4. data/docs/thesis/manual.org +55 -0
  5. data/docs/thesis/mid_term.pptx +0 -0
  6. data/lib/ruby_learner/common.rb +45 -0
  7. data/lib/ruby_learner/ruby_learner.rb +9 -17
  8. data/lib/ruby_learner/sequential_main.rb +146 -0
  9. data/lib/ruby_learner/typing_practice.rb +82 -10
  10. data/lib/ruby_learner/version.rb +1 -1
  11. data/workshop/emacs.d/init.el +1 -76
  12. data/workshop/emacs.d/ruby_learner_init.el +0 -76
  13. metadata +7 -83
  14. data/lib/ruby_learner/methods.rb +0 -290
  15. data/workshop/emacs.d/#init# +0 -1
  16. data/workshop/emacs.d/ac-comphist.dat +0 -50
  17. data/workshop/emacs.d/cp5022x.el +0 -156
  18. data/workshop/emacs.d/elpa/archives/gnu/archive-contents +0 -1240
  19. data/workshop/emacs.d/elpa/archives/melpa/archive-contents +0 -2
  20. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/auto-complete-autoloads.el +0 -65
  21. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/auto-complete-config.el +0 -551
  22. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/auto-complete-config.elc +0 -0
  23. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/auto-complete-pkg.el +0 -6
  24. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/auto-complete.el +0 -2164
  25. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/auto-complete.elc +0 -0
  26. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/ada-mode +0 -72
  27. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/c++-mode +0 -99
  28. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/c-mode +0 -55
  29. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/caml-mode +0 -231
  30. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/clojure-mode +0 -580
  31. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/clojurescript-mode +0 -475
  32. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/coq-mode +0 -278
  33. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/css-mode +0 -874
  34. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/erlang-mode +0 -216
  35. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/ess-julia-mode +0 -37
  36. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/go-mode +0 -25
  37. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/haskell-mode +0 -679
  38. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/java-mode +0 -53
  39. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/js-mode +0 -148
  40. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/julia-mode +0 -37
  41. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/lua-mode +0 -21
  42. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/nim-mode +0 -70
  43. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/objc-mode +0 -161
  44. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/octave-mode +0 -46
  45. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/php-mode +0 -6144
  46. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/python-mode +0 -379
  47. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/qml-mode +0 -183
  48. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/ruby-mode +0 -181
  49. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/scala-mode +0 -1347
  50. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/scheme-mode +0 -216
  51. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/sclang-mode +0 -1481
  52. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/sh-mode +0 -182
  53. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/swift-mode +0 -87
  54. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/tcl-mode +0 -172
  55. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/ts-mode +0 -797
  56. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/tuareg-mode +0 -231
  57. data/workshop/emacs.d/elpa/auto-complete-20170124.1845/dict/verilog-mode +0 -313
  58. data/workshop/emacs.d/elpa/better-defaults-20170613.2104/better-defaults-autoloads.el +0 -16
  59. data/workshop/emacs.d/elpa/better-defaults-20170613.2104/better-defaults-pkg.el +0 -2
  60. data/workshop/emacs.d/elpa/better-defaults-20170613.2104/better-defaults.el +0 -90
  61. data/workshop/emacs.d/elpa/better-defaults-20170613.2104/better-defaults.elc +0 -0
  62. data/workshop/emacs.d/elpa/haml-mode-20170923.2153/haml-mode-autoloads.el +0 -26
  63. data/workshop/emacs.d/elpa/haml-mode-20170923.2153/haml-mode-pkg.el +0 -2
  64. data/workshop/emacs.d/elpa/haml-mode-20170923.2153/haml-mode.el +0 -877
  65. data/workshop/emacs.d/elpa/haml-mode-20170923.2153/haml-mode.elc +0 -0
  66. data/workshop/emacs.d/elpa/haml-mode-readme.txt +0 -8
  67. data/workshop/emacs.d/elpa/material-theme-20171123.1040/material-light-theme.el +0 -918
  68. data/workshop/emacs.d/elpa/material-theme-20171123.1040/material-light-theme.elc +0 -0
  69. data/workshop/emacs.d/elpa/material-theme-20171123.1040/material-theme-autoloads.el +0 -32
  70. data/workshop/emacs.d/elpa/material-theme-20171123.1040/material-theme-pkg.el +0 -8
  71. data/workshop/emacs.d/elpa/material-theme-20171123.1040/material-theme.el +0 -912
  72. data/workshop/emacs.d/elpa/material-theme-20171123.1040/material-theme.elc +0 -0
  73. data/workshop/emacs.d/elpa/ox-bibtex-chinese-readme.txt +0 -21
  74. data/workshop/emacs.d/elpa/popup-20160709.729/popup-autoloads.el +0 -15
  75. data/workshop/emacs.d/elpa/popup-20160709.729/popup-pkg.el +0 -2
  76. data/workshop/emacs.d/elpa/popup-20160709.729/popup.el +0 -1432
  77. data/workshop/emacs.d/elpa/popup-20160709.729/popup.elc +0 -0
  78. data/workshop/emacs.d/elpa/yaml-mode-20180212.1556/yaml-mode-autoloads.el +0 -33
  79. data/workshop/emacs.d/elpa/yaml-mode-20180212.1556/yaml-mode-pkg.el +0 -2
  80. data/workshop/emacs.d/elpa/yaml-mode-20180212.1556/yaml-mode.el +0 -470
  81. data/workshop/emacs.d/elpa/yaml-mode-20180212.1556/yaml-mode.elc +0 -0
  82. data/workshop/emacs.d/elpa/yaml-mode-readme.txt +0 -25
  83. data/workshop/emacs.d/haml-mode-master/.gitignore +0 -1
  84. data/workshop/emacs.d/haml-mode-master/.mailmap +0 -2
  85. data/workshop/emacs.d/haml-mode-master/MIT-LICENSE +0 -20
  86. data/workshop/emacs.d/haml-mode-master/README.md +0 -47
  87. data/workshop/emacs.d/haml-mode-master/haml-mode.el +0 -887
  88. data/workshop/emacs.d/iceberg_theme.el +0 -202
  89. data/workshop/emacs.d/init-open-recentf.el +0 -133
  90. data/workshop/emacs.d/install-elisp.el +0 -366
  91. data/workshop/emacs.d/notes +0 -12
  92. data/workshop/emacs.d/processing-mode/processing-mode.el +0 -275
  93. data/workshop/emacs.d/recentf +0 -31
  94. data/workshop/emacs.d/wiki-mode/wiki.el +0 -976
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e682d333421ae9da8e3dd5a3d833550951e62506
4
- data.tar.gz: 5d93a9ae88365f89820966ce0fc37b6ac9e3646b
3
+ metadata.gz: 056f2ac0ca82ec04cb0f6ada2bc499805b5f1c87
4
+ data.tar.gz: d67df5fe08c6ac72d5f9b62c7d71506e7e433a70
5
5
  SHA512:
6
- metadata.gz: 406ce0b5d8b414a8d21009fd8f409601af4cc6396e6663b48430a24154b182d576bcc885c1b498fe92d346c89935edd3fa13a944c7cbf5e1c9bad5e1c9493155
7
- data.tar.gz: 89d9766d26fab257735d1debf57390c6b252e9d93d7e4f7d0ad27c9002592c8ffa2f7544e6175652c585982323ba864002b22932ae8e836c622a542f9c6f71e5
6
+ metadata.gz: 6c951efb79e5187af6b1ab147f61704b0cf57381da496b0dd8e64712a68c3e7b93ba5209f378f5f797fe78c5446c625095302b329257f496bd1830ff69b7878c
7
+ data.tar.gz: 7ee76703139ef6715edfb1c059519df5fdb85d54d94544f97741ce96e52612ccfff2369396589f8e723cc944daec878ed53fad8d763d773a1302030273d88ef3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby_learner (1.1.1)
4
+ ruby_learner (1.1.2)
5
5
  colorize
6
6
  diff-lcs
7
7
  minitest (~> 5.10.3)
@@ -0,0 +1,21 @@
1
+ #+STARTUP: indent nolineimages
2
+ * ドットインストール
3
+ ** 料金形態
4
+ ** 自身のコード記入について
5
+ ** 言語の教育方法
6
+ ** 使用者が得れるもの
7
+ * paizaラーニング
8
+ ** 料金形態
9
+ ** 自身のコード記入について
10
+ ** 言語の教育方法
11
+ ** 使用者が得れるもの
12
+ * progate
13
+ ** 料金形態
14
+ ** 自身のコード記入について
15
+ ** 言語の教育方法
16
+ ** 使用者が得れるもの
17
+ * codecademy
18
+ ** 料金形態
19
+ ** 自身のコード記入について
20
+ ** 言語の教育方法
21
+ ** 使用者が得れるもの
@@ -0,0 +1,55 @@
1
+ #+STARTUP: indent nolineimages
2
+ * app
3
+ - ruby_learner
4
+ * install
5
+ - gem install ruby_learner
6
+ ** 注意点
7
+ - 作成者の知識不足から、アプリのバージョンアップ時に古いバージョンが残った状態になっている。それが原因で起動エラーが起こる可能性があるので、その場合のエラー解消方法を以下に記載する。
8
+ - gem list ruby_learner
9
+ - gem uninstall ruby_learner
10
+ * purpose
11
+ - プログラミング言語Rubyを実際の開発環境に近い状況で習得させること。
12
+ - 習得のレベルは"期待される振る舞いの実装"および"設定より規約の考えの元、適切なコーディングができる"に設定。
13
+ - 開発環境に近い状況での開発は、使用者の本アプリ外での学習や開発をスムーズにさせる。
14
+ * target
15
+ - プログラミング言語Rubyの未経験者。
16
+ * overview
17
+ ** 期待される振る舞いについて
18
+ - 期待される振る舞いとは、コーダーがコードに持たせる意図する動作のことである。
19
+ - コードの振る舞いを確認するrspecファイルを用いることで、使用者は解答方法を柔軟に考えることができる。これは期待される振る舞いを実現するコードに唯一の正解はないことから、回答は使用者自身が考えて記述することでより効率的な学習が見込めるのではないかという理由から選択した。
20
+ ** 設定より規約について
21
+ - 設定より規約とは、開発者の決定すべきことを減少させ、単純にするが柔軟性は失わせないというソフトウェア設計の概念である。<wikipedia: https://ja.wikipedia.org/wiki/%E8%A8%AD%E5%AE%9A%E3%82%88%E3%82%8A%E8%A6%8F%E7%B4%84>
22
+ - 設定より規約はrubocopを用いることで検査する。設定より規約の概念を重視することで、OSS開発等の複数人で開発を行う場合にスムーズな開発が行える。また、不適切はコードは使用者の成長を間違った方向に進めつ可能性があるのでこの検査は必須だと考える。
23
+ * function
24
+ ** common
25
+ - 本アプリは使用者のパソコンのホームディレクトリにruby_learnerというディレクトリを形成する。
26
+ - ruby_learnerに含まれる要素はemacsの設定ファイル・学習を行う場所のworkshop・学習の履歴を保存するrestoreである。
27
+ - 今までの自分の回答コードはworkshopのrestoreに保存されて行く
28
+ ** emacs_key
29
+ *** 使用コマンド
30
+ - emacsのキーバインドの確認: ruby_learner emacs_key
31
+ ** sequential_check
32
+ *** 使用コマンド
33
+ - 任意のドリルの受講: ruby_learner sequential_check section part (sectionとpartには整数が入る)
34
+ - 次のドリルの受講: ruby_learner sequential_check -next
35
+ - ドリルの内訳の確認: ruby_learner sequential_check -drill
36
+ *** 学習手順
37
+ **** 手順1
38
+ - 任意のコマンドで実行
39
+ - 問題文とコード記入スペースがemacsで起動
40
+ **** 手順2
41
+ - 回答を記入する
42
+ - ctrl x + ctrl cでemacsを保存終了する
43
+ **** 手順3
44
+ - rspecのチェックが行われる
45
+ - 不適切な場合は改善を要求される
46
+ - cotinue, answer, exitの3つを標準入力で打ち込むことで次の画面が変わる
47
+ - continue...問題文とコード記入スペースがemacsで起動して手順2に戻る
48
+ - answer...問題文とコード記入スペースと解答例がemacsで起動して手順2に戻る
49
+ - exit...アプリを終了
50
+ **** 手順4
51
+ - rspecのチェックが終了すると
52
+ - rubocopのチェックもrspecのチェックと同様に始まる
53
+ **** 手順5
54
+ - rubocopのチェックが終わると
55
+ - 最後にrspecのチェックが行われ、不適切な場合は手順3へと戻る
Binary file
@@ -0,0 +1,45 @@
1
+ class Common
2
+ def restore(file: String, workshop_dir: String)
3
+ restore_file = ""
4
+ line = File.open("#{workshop_dir}/lib/answer.rb") do |f|
5
+ 1.times {
6
+ f.gets
7
+ }
8
+ restore_file = f.gets
9
+ end
10
+ restore_file.gsub!(" ", "")
11
+ restore_file.delete!("#")
12
+ Dir::chdir("#{workshop_dir}/restore"){
13
+ file_count = Dir.glob("*.rb").count
14
+ # restore_file.insert(-5, "[#{file_count}]")
15
+ restore_file.insert(0, "[#{file_count}]")
16
+ }
17
+ system "touch #{workshop_dir}/restore/#{restore_file}"
18
+ system "cp #{workshop_dir}/lib/workplace.rb #{workshop_dir}/restore/#{restore_file}"
19
+ end
20
+
21
+ def time_check(start_time: Time)
22
+ end_time = Time.now
23
+ elapsed_time = end_time - start_time - 1
24
+ return elapsed_time
25
+ end
26
+
27
+ def instruct_print
28
+ puts "continue >>> [RET]"
29
+ puts "stop >>> 'exit' + [RET]"
30
+ puts "check answer >>> 'answer' + [RET]"
31
+ end
32
+ def init_mk_files(gem_dir: String, workshop_dir: String)
33
+ if Dir.exist?(workshop_dir) != true then
34
+ FileUtils.mkdir_p(workshop_dir)
35
+ system("cp -R #{gem_dir}/workshop/* #{workshop_dir}")
36
+ system("cd #{workshop_dir} && mv emacs.d .emacs.d")
37
+ end
38
+ end
39
+
40
+ def get_app_ver(app_name: String)
41
+ app_vers = Open3.capture3("gem list #{app_name}")
42
+ latest_ver = app_vers[0].chomp.gsub(' (', '-').gsub(')','')
43
+ return latest_ver
44
+ end
45
+ end
@@ -1,11 +1,9 @@
1
1
  require 'fileutils'
2
- require 'colorize'
3
2
  require 'thor'
4
3
  require 'ruby_learner/version.rb'
5
- require 'diff-lcs'
6
4
  require 'open3'
7
- require 'ruby_learner/methods.rb'
8
- require 'ruby_learner/typing_practice.rb'
5
+ require 'ruby_learner/common.rb'
6
+ require 'ruby_learner/sequential_main'
9
7
 
10
8
  module RubyLearner
11
9
  # editor_learner CLI main class
@@ -17,7 +15,7 @@ module RubyLearner
17
15
  app_vers = Open3.capture3('gem list ruby_learner')
18
16
  rl_ver = app_vers[0].chomp.tr(' ', '-').delete('()')
19
17
  @gem_dir = File.join(gem_location[0].chomp, "/gems/#{rl_ver}")
20
- init_mk_files(gem_dir: @gem_dir, workshop_dir: @workshop_dir)
18
+ Common.allocate.init_mk_files(gem_dir: @gem_dir, workshop_dir: @workshop_dir)
21
19
  end
22
20
 
23
21
  desc 'emacs_key', 'check emacs key-bindings'
@@ -29,23 +27,17 @@ module RubyLearner
29
27
  option :next, aliases: "-n", type: :boolean
30
28
  option :drill, aliases: "-d", type: :boolean
31
29
  def sequential_check(*_argv, dir_num, file_num)
30
+ sequential_main = SequentialMain.new(@gem_dir, @workshop_dir)
32
31
  if options[:drill]
33
- drill_contents
32
+ sequential_main.drill_contents
34
33
  elsif options[:next]
35
- final_sec, final_par = final_history(@gem_dir)
36
- next_sec, next_par = next_question(final_sec, final_par)
37
- sequential_check_main(@gem_dir, @workshop_dir, next_sec, next_par)
34
+ final_sec, final_par = sequential_main.get_final_history(@gem_dir)
35
+ next_sec, next_par = sequential_main.get_next_question(final_sec, final_par)
36
+ sequential_main.action(next_sec, next_par)
38
37
  else
39
- sequential_check_main(@gem_dir, @workshop_dir, dir_num, file_num)
38
+ sequential_main.action(dir_num, file_num)
40
39
  end
41
40
  end
42
41
 
43
- desc 'random_check', 'typing and editing practice.'
44
- def random_check
45
- rand_num = rand(1..2)
46
- rand_dir = "#{@gem_dir}/questions/random_check/section_#{rand_num}"
47
- typing_practice = TypingPractice.new(workshop_dir: @workshop_dir)
48
- typing_practice.prac_sequence(mode_dir: rand_dir)
49
- end
50
42
  end
51
43
  end
@@ -0,0 +1,146 @@
1
+ require 'ruby_learner/typing_practice'
2
+
3
+ class SequentialMain
4
+
5
+ def initialize(gem_dir, workshop_dir)
6
+ @gem_dir = gem_dir
7
+ @workshop_dir = workshop_dir
8
+ end
9
+
10
+ def action(sec, par)
11
+ puts "section_#{sec}/part_#{par}"
12
+ seq_dir = "#{@gem_dir}/questions/sequential_check/section_#{sec}/part_#{par}"
13
+ typing_prac_class = TypingPractice.new(@workshop_dir, @gem_dir)
14
+ typing_prac_class.prac_sequence(mode_dir: seq_dir)
15
+ write_final_history(sec, par)
16
+ end
17
+
18
+ def write_final_history(sec, par)
19
+ docs_dir = "#{@gem_dir}/lib/datas"
20
+ Dir::chdir(docs_dir){
21
+ File.open("final_history_sequential.txt","w") do |f|
22
+ f.puts("#{sec}-#{par}")
23
+ end
24
+ }
25
+ end
26
+
27
+ def drill_contents
28
+ puts "section_1 1~3"
29
+ puts "section_2 1~2"
30
+ puts "section_3 1"
31
+ puts "section_4 1"
32
+ puts "section_5 1~2"
33
+ puts "section_6 1~4"
34
+ puts "section_7 1~2"
35
+ puts "section_8 1"
36
+ puts "section_9 1~3"
37
+ puts "section_10 1~2"
38
+ puts "section_11 1~2"
39
+ end
40
+
41
+ def get_final_history(gem_dir)
42
+ docs_dir = "#{gem_dir}/lib/datas"
43
+ final_history = ''
44
+ final_sec = 0
45
+ final_par = 0
46
+ Dir::chdir(docs_dir){
47
+ File.open("final_history_sequential.txt") do |f|
48
+ final_history = f.gets
49
+ end
50
+ final_sec = final_history.match(/(.*)\-/)[1].to_i
51
+ final_par = final_history.match(/\-(.*)/)[1].to_i
52
+ }
53
+ return final_sec, final_par
54
+ end
55
+
56
+ def get_next_question(final_sec, final_par)
57
+ if final_sec == 1
58
+ if final_par == 1
59
+ next_sec = 1
60
+ next_par = 2
61
+ elsif final_par == 2
62
+ next_sec = 1
63
+ next_par = 3
64
+ else
65
+ next_sec = 2
66
+ next_par = 1
67
+ end
68
+ elsif final_sec == 2
69
+ if final_par == 1
70
+ next_sec = 2
71
+ next_par = 2
72
+ else
73
+ next_sec = 3
74
+ next_par = 1
75
+ end
76
+ elsif final_sec == 3
77
+ next_sec = 4
78
+ next_par = 1
79
+ elsif final_sec == 4
80
+ next_sec = 5
81
+ next_par = 1
82
+ elsif final_sec == 5
83
+ if final_par == 1
84
+ next_sec = 5
85
+ next_par = 2
86
+ else
87
+ next_sec = 6
88
+ next_par = 1
89
+ end
90
+ elsif final_sec == 6
91
+ if final_par == 1
92
+ next_sec = 6
93
+ next_par = 2
94
+ elsif final_par == 2
95
+ next_sec = 6
96
+ next_par = 3
97
+ elsif final_par == 3
98
+ next_sec = 6
99
+ next_par = 4
100
+ else
101
+ next_sec = 7
102
+ next_par = 1
103
+ end
104
+ elsif final_sec == 7
105
+ if final_par == 1
106
+ next_sec = 7
107
+ next_par = 2
108
+ else
109
+ next_sec = 8
110
+ next_par = 1
111
+ end
112
+ elsif final_sec == 8
113
+ next_sec = 9
114
+ next_par = 1
115
+ elsif final_sec == 9
116
+ if final_par == 1
117
+ next_sec = 9
118
+ next_par = 2
119
+ elsif final_par == 2
120
+ next_sec = 9
121
+ next_par = 3
122
+ else
123
+ next_sec = 10
124
+ next_par = 1
125
+ end
126
+ elsif final_sec == 10
127
+ if final_par == 1
128
+ next_sec = 10
129
+ next_par = 2
130
+ else
131
+ next_sec = 11
132
+ next_par = 1
133
+ end
134
+ else
135
+ if final_par == 1
136
+ next_sec = 11
137
+ next_par = 2
138
+ else
139
+ next_sec = 1
140
+ next_par = 1
141
+ end
142
+ end
143
+ return next_sec, next_par
144
+ end
145
+
146
+ end
@@ -1,15 +1,14 @@
1
1
  require 'fileutils'
2
- require 'ruby_learner/methods.rb'
2
+ require 'ruby_learner/common.rb'
3
+ require 'rubocop'
3
4
 
4
5
  class TypingPractice
5
6
 
6
- def initialize(workshop_dir: String)
7
+ def initialize(workshop_dir, gem_dir)
7
8
  @workshop_dir = workshop_dir
8
- gem_location = Open3.capture3('gem environment gemdir')
9
- app_vers = Open3.capture3('gem list ruby_learner')
10
- rl_ver = app_vers[0].chomp.tr(' ', '-').delete('()')
11
- @gem_dir = File.join(gem_location[0].chomp, "/gems/#{rl_ver}")
12
- end
9
+ @gem_dir = gem_dir
10
+ end
11
+
13
12
  def prac_sequence(mode_dir: String)
14
13
  FileUtils.cp("#{mode_dir}/lib/workplace.rb", "#{@workshop_dir}/lib/workplace.rb")
15
14
  FileUtils.cp("#{mode_dir}/lib/sentence.org", "#{@workshop_dir}/lib/sentence.org")
@@ -17,9 +16,82 @@ class TypingPractice
17
16
  FileUtils.cp("#{mode_dir}/spec/workplace_spec.rb", "#{@workshop_dir}/spec/workplace_spec.rb")
18
17
  system "cd #{@workshop_dir}/lib && emacs -nw -q -l #{@workshop_dir}/.emacs.d/init.el sentence.org workplace.rb"
19
18
  start_time = Time.now
20
- typing_discriminant(@workshop_dir)
21
- elapsed_time = time_check(start_time: start_time)
19
+ typing_discriminant
20
+ elapsed_time = Common.allocate.time_check(start_time: start_time)
22
21
  p "#{elapsed_time} sec"
23
- # mk_training_data(elapsed_time: elapsed_time, prac_dir: @prac_dir)
24
22
  end
23
+
24
+ def typing_discriminant
25
+ loop do
26
+ flag_rspec, flag_rs_exit = rspec_check
27
+ if flag_rs_exit == true
28
+ break
29
+ end
30
+ flag_rubocop, flag_rub_exit = rubocop_check
31
+ if flag_rub_exit == true
32
+ break
33
+ end
34
+ if flag_rspec == true && flag_rubocop == true
35
+ puts "**********************************"
36
+ puts "Final Error Check"
37
+ puts "**********************************"
38
+ stdout, stderr, status = Open3.capture3("rspec #{@workshop_dir}/spec/workplace_spec.rb")
39
+ if stdout[0] == '.'
40
+ puts "your code is perfect."
41
+ puts 'If you want to run your code, you execute the following command.'
42
+ puts " $ ruby #{@workshop_dir}/lib/workplace.rb"
43
+ break
44
+ else
45
+ puts "not perfect, please fix your code."
46
+ end
47
+ end
48
+ end
49
+ Common.allocate.restore(file: "#{@workshop_dir}/lib/workplace.rb", workshop_dir: @workshop_dir)
50
+ end
51
+
52
+ def rspec_check
53
+ puts "**********************************"
54
+ puts "RSpec Error Check"
55
+ puts "**********************************"
56
+ file = "#{@workshop_dir}/spec/workplace_spec.rb"
57
+ return loop_in_checks("rspec", file)
58
+ end
59
+
60
+ def rubocop_check
61
+ puts "**********************************"
62
+ puts "Rubocop Error Check"
63
+ puts "**********************************"
64
+ file = "#{@workshop_dir}/lib/workplace.rb"
65
+ return loop_in_checks("rubocop", file)
66
+ end
67
+
68
+ def loop_in_checks(check_mode, file)
69
+ count = 0
70
+ flag_check = false
71
+ flag_exit = false
72
+ loop do
73
+ count += 1
74
+ puts "---------------------------"
75
+ puts "#{check_mode} try: #{count}"
76
+ puts "---------------------------"
77
+ flag_check = system "#{check_mode} #{file}"
78
+ if flag_check == true
79
+ puts '#{check_mode} check is clear!'
80
+ break
81
+ else
82
+ Common.allocate.instruct_print
83
+ select = STDIN.gets.chomp
84
+ if select == 'exit'
85
+ flag_exit = true
86
+ break
87
+ elsif select == 'answer'
88
+ system "cd #{@workshop_dir}/lib && emacs -nw -q -l #{@workshop_dir}/.emacs.d/ruby_learner_init.el sentence.org workplace.rb"
89
+ else
90
+ system "cd #{@workshop_dir}/lib && emacs -nw -q -l #{@workshop_dir}/.emacs.d/init.el sentence.org workplace.rb"
91
+ end
92
+ end
93
+ end
94
+ return flag_check, flag_exit
95
+ end
96
+
25
97
  end