daigaku 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -3
  3. data/README.md +1 -1
  4. data/daigaku.gemspec +23 -26
  5. data/lib/daigaku.rb +0 -1
  6. data/lib/daigaku/chapter.rb +3 -4
  7. data/lib/daigaku/coloring.rb +13 -13
  8. data/lib/daigaku/configuration.rb +25 -28
  9. data/lib/daigaku/congratulator.rb +17 -5
  10. data/lib/daigaku/course.rb +9 -8
  11. data/lib/daigaku/exceptions.rb +0 -2
  12. data/lib/daigaku/generator.rb +13 -13
  13. data/lib/daigaku/github_client.rb +4 -4
  14. data/lib/daigaku/loadable.rb +11 -15
  15. data/lib/daigaku/loading/chapters.rb +0 -2
  16. data/lib/daigaku/loading/courses.rb +0 -2
  17. data/lib/daigaku/loading/units.rb +0 -2
  18. data/lib/daigaku/markdown.rb +1 -0
  19. data/lib/daigaku/markdown/printer.rb +89 -0
  20. data/lib/daigaku/markdown/ruby_doc.rb +6 -8
  21. data/lib/daigaku/solution.rb +18 -15
  22. data/lib/daigaku/storeable.rb +11 -12
  23. data/lib/daigaku/task.rb +1 -1
  24. data/lib/daigaku/terminal.rb +3 -4
  25. data/lib/daigaku/terminal/cli.rb +6 -8
  26. data/lib/daigaku/terminal/courses.rb +19 -16
  27. data/lib/daigaku/terminal/output.rb +0 -2
  28. data/lib/daigaku/terminal/setup.rb +13 -18
  29. data/lib/daigaku/terminal/solutions.rb +27 -32
  30. data/lib/daigaku/terminal/welcome.rb +9 -11
  31. data/lib/daigaku/test.rb +7 -10
  32. data/lib/daigaku/test_result.rb +13 -16
  33. data/lib/daigaku/unit.rb +1 -3
  34. data/lib/daigaku/version.rb +1 -1
  35. data/lib/daigaku/views.rb +4 -3
  36. data/lib/daigaku/views/chapters_menu.rb +16 -20
  37. data/lib/daigaku/views/courses_menu.rb +12 -15
  38. data/lib/daigaku/views/main_menu.rb +23 -23
  39. data/lib/daigaku/views/menu.rb +9 -13
  40. data/lib/daigaku/views/splash.rb +11 -13
  41. data/lib/daigaku/views/subscriber.rb +38 -0
  42. data/lib/daigaku/views/task_view.rb +80 -78
  43. data/lib/daigaku/views/top_bar.rb +4 -10
  44. data/lib/daigaku/views/units_menu.rb +16 -21
  45. data/lib/daigaku/window.rb +12 -70
  46. data/spec/daigaku/chapter_spec.rb +23 -18
  47. data/spec/daigaku/coloring_spec.rb +0 -1
  48. data/spec/daigaku/configuration_spec.rb +54 -50
  49. data/spec/daigaku/congratulator_spec.rb +11 -8
  50. data/spec/daigaku/course_spec.rb +70 -51
  51. data/spec/daigaku/generator_spec.rb +24 -25
  52. data/spec/daigaku/github_client_spec.rb +17 -18
  53. data/spec/daigaku/loading/chapters_spec.rb +2 -3
  54. data/spec/daigaku/loading/courses_spec.rb +2 -3
  55. data/spec/daigaku/loading/units_spec.rb +4 -5
  56. data/spec/daigaku/markdown/ruby_doc_spec.rb +3 -6
  57. data/spec/daigaku/reference_solution_spec.rb +8 -10
  58. data/spec/daigaku/solution_spec.rb +18 -20
  59. data/spec/daigaku/storeable_spec.rb +12 -10
  60. data/spec/daigaku/task_spec.rb +3 -4
  61. data/spec/daigaku/terminal/cli_spec.rb +29 -21
  62. data/spec/daigaku/terminal/courses_spec.rb +104 -99
  63. data/spec/daigaku/terminal/output_spec.rb +44 -39
  64. data/spec/daigaku/terminal/setup_spec.rb +1 -3
  65. data/spec/daigaku/terminal/solutions_spec.rb +0 -2
  66. data/spec/daigaku/terminal/welcome_spec.rb +0 -2
  67. data/spec/daigaku/terminal_spec.rb +5 -7
  68. data/spec/daigaku/test_example_spec.rb +16 -14
  69. data/spec/daigaku/test_result_spec.rb +21 -25
  70. data/spec/daigaku/test_spec.rb +11 -12
  71. data/spec/daigaku/unit_spec.rb +24 -27
  72. data/spec/daigaku/views/chapters_menu_spec.rb +0 -1
  73. data/spec/daigaku/views/courses_menu_spec.rb +0 -1
  74. data/spec/daigaku/views/menu_spec.rb +1 -2
  75. data/spec/daigaku/views/task_view_spec.rb +0 -2
  76. data/spec/daigaku/views/units_menu_spec.rb +0 -1
  77. data/spec/daigaku/views_spec.rb +0 -1
  78. data/spec/daigaku_spec.rb +9 -12
  79. data/spec/path_helpers_spec.rb +11 -12
  80. data/spec/resource_helpers_spec.rb +11 -12
  81. data/spec/spec_helper.rb +3 -4
  82. data/spec/support/macros/content_helpers.rb +16 -17
  83. data/spec/support/macros/mock_helpers.rb +6 -6
  84. data/spec/support/macros/path_helpers.rb +15 -15
  85. data/spec/support/macros/resource_helpers.rb +34 -35
  86. metadata +12 -10
@@ -1,16 +1,16 @@
1
1
  module PathHelpers
2
- LOCAL_DIR = '.daigaku'
3
- CONFIGURATION_FILE = 'daigaku.settings'
4
- COURSES = 'courses'
5
- SOLUTIONS = 'solutions'
6
- TEMP_PATH = File.expand_path("../../../../tmp/", __FILE__)
7
- COURSE_DIR_NAMES = ['Course_A', 'Course_B']
8
- CHAPTER_DIR_NAMES = ['1_Chapter-A', '2_Chapter-B']
9
- UNIT_DIR_NAMES = ['1_unit-a', '2_unit-b']
10
- TASK_NAME = 'task.md'
11
- REFERENCE_SOLUTION_NAME = 'solution.rb'
12
- TEST_NAME = 'solution_spec.rb'
13
- STORAGE_FILE = 'daigaku.db.yml'
2
+ LOCAL_DIR = '.daigaku'.freeze
3
+ CONFIGURATION_FILE = 'daigaku.settings'.freeze
4
+ COURSES = 'courses'.freeze
5
+ SOLUTIONS = 'solutions'.freeze
6
+ TEMP_PATH = File.expand_path('../../../../tmp/', __FILE__).freeze
7
+ COURSE_DIR_NAMES = %w(Course_A Course_B).freeze
8
+ CHAPTER_DIR_NAMES = %w(1_Chapter-A 2_Chapter-B).freeze
9
+ UNIT_DIR_NAMES = %w(1_unit-a 2_unit-b).freeze
10
+ TASK_NAME = 'task.md'.freeze
11
+ REFERENCE_SOLUTION_NAME = 'solution.rb'.freeze
12
+ TEST_NAME = 'solution_spec.rb'.freeze
13
+ STORAGE_FILE = 'daigaku.db.yml'.freeze
14
14
 
15
15
  def temp_basepath
16
16
  TEMP_PATH
@@ -86,17 +86,17 @@ module PathHelpers
86
86
 
87
87
  def all_solution_file_paths
88
88
  all_unit_dirs.map do |unit_dir|
89
- underscored_unit_dir = File.basename(unit_dir).gsub(/[\_\-\.]+/, '_')
89
+ underscored_unit_dir = File.basename(unit_dir).gsub(/[\_\-\.]+/, '_')
90
90
  file_name = underscored_unit_dir + Daigaku::Solution::FILE_SUFFIX
91
91
 
92
92
  unit_path = File.join(solutions_basepath, unit_dir.split('/')[-3..-1])
93
- parts = File.join(File.dirname(unit_path), file_name).split('/')
93
+ parts = File.join(File.dirname(unit_path), file_name).split('/')
94
94
 
95
95
  course_parts = parts[-3..-1].map do |part|
96
96
  part.gsub(/^[\d]+\_/, '').gsub(/[\_\-]+/, '_').downcase
97
97
  end
98
98
 
99
- [*parts[0...-3], *course_parts].join('/')
99
+ (parts[0...-3] + course_parts).join('/')
100
100
  end
101
101
  end
102
102
 
@@ -1,12 +1,12 @@
1
- module ResourceHelpers
2
- require 'fileutils'
3
- require 'zip'
1
+ require 'fileutils'
2
+ require 'zip'
4
3
 
4
+ module ResourceHelpers
5
5
  def prepare_courses
6
- FileUtils.mkdir_p(courses_basepath) unless Dir.exist?(courses_basepath)
6
+ create_directory(courses_basepath)
7
7
 
8
8
  course_dir_names.each do |course|
9
- chapter_dir_names.each do |chapter|
9
+ chapter_dir_names.each do |_|
10
10
  unit_dirs(course).each do |units|
11
11
  units.each do |unit|
12
12
  create_directory(unit)
@@ -29,23 +29,19 @@ module ResourceHelpers
29
29
  def prepare_solutions
30
30
  all_solution_file_paths.each do |path|
31
31
  base_dir = File.dirname(path)
32
- name = File.basename(path)
32
+ name = File.basename(path)
33
33
  create_file(base_dir, name, solution_content)
34
34
  end
35
35
  end
36
36
 
37
- def prepare_download(zip_file_name, options = {})
37
+ def prepare_download(zip_file_name, multiple_courses: false)
38
38
  zip_file_path = File.join(courses_basepath, zip_file_name)
39
-
40
- unless Dir.exist?(File.dirname(zip_file_path))
41
- FileUtils.makedirs(File.dirname(zip_file_path))
42
- end
39
+ create_directory(File.dirname(zip_file_path))
43
40
 
44
41
  Zip::File.open(zip_file_path, Zip::File::CREATE) do |zip_file|
45
42
  Dir[File.join(courses_basepath, '**', '**')].each do |file|
46
- if course_match?(file, options[:multiple_courses])
47
- zip_file.add(file.sub(courses_basepath, '')[1..-1], file) { true }
48
- end
43
+ next unless course_match?(file, multiple_courses)
44
+ zip_file.add(file.sub(courses_basepath, '')[1..-1], file) { true }
49
45
  end
50
46
  end
51
47
 
@@ -54,16 +50,12 @@ module ResourceHelpers
54
50
 
55
51
  def prepare_github_download(zip_file_name)
56
52
  zip_file_path = File.join(courses_basepath, zip_file_name)
57
-
58
- unless Dir.exist?(File.dirname(zip_file_path))
59
- FileUtils.makedirs(File.dirname(zip_file_path))
60
- end
53
+ create_directory(File.dirname(zip_file_path))
61
54
 
62
55
  Zip::File.open(zip_file_path, Zip::File::CREATE) do |zip_file|
63
56
  Dir[File.join(courses_basepath, '**', '**')].each do |file|
64
- if file.match(/.*\-master/)
65
- zip_file.add(file.sub(courses_basepath, '')[1..-1], file) { true }
66
- end
57
+ next unless file =~ /.*\-master/
58
+ zip_file.add(file.sub(courses_basepath, '')[1..-1], file) { true }
67
59
  end
68
60
  end
69
61
 
@@ -71,34 +63,41 @@ module ResourceHelpers
71
63
  end
72
64
 
73
65
  def course_match?(name, multiple_courses)
66
+ first_course_matches = name.match(course_dirs.first)
67
+
74
68
  if multiple_courses
75
- name.match(course_dirs.first) || name.match(course_dirs.second)
69
+ first_course_matches || name.match(course_dirs.second)
76
70
  else
77
- name.match(course_dirs.first)
71
+ first_course_matches
78
72
  end
79
73
  end
80
74
 
81
75
  def cleanup_download(zip_file_name)
82
76
  directory = course_dirs.first
83
- zip_file = File.join(File.dirname(directory), zip_file_name)
84
- FileUtils.rm(zip_file) if File.exist?(zip_file)
77
+ zip_file = File.join(File.dirname(directory), zip_file_name)
78
+ remove_file(zip_file)
85
79
  end
86
80
 
87
81
  def cleanup_temp_data
88
- FileUtils.remove_dir(temp_basepath) if Dir.exist?(temp_basepath)
82
+ remove_directory(temp_basepath)
83
+ end
84
+
85
+ def remove_directory(dir_path)
86
+ FileUtils.remove_dir(dir_path) if Dir.exist?(dir_path)
89
87
  end
90
88
 
91
89
  def create_directory(dir_path)
92
- FileUtils.mkdir_p(dir_path) unless Dir.exist?(dir_path)
90
+ FileUtils.makedirs(dir_path) unless Dir.exist?(dir_path)
93
91
  end
94
92
 
95
93
  def create_file(base_dir, name, content)
96
- create_directory(base_dir) unless Dir.exist?(base_dir)
94
+ create_directory(base_dir)
97
95
  file_path = File.join(base_dir, name)
96
+ File.open(file_path, 'w') { |f| f.puts content }
97
+ end
98
98
 
99
- if Dir.exist?(base_dir)
100
- File.open(file_path, 'w') { |f| f.puts content }
101
- end
99
+ def remove_file(file)
100
+ FileUtils.rm(file) if File.exist?(file)
102
101
  end
103
102
 
104
103
  def available_courses
@@ -114,8 +113,8 @@ module ResourceHelpers
114
113
  end
115
114
 
116
115
  def available_units(course_name, chapter_name)
117
- units = unit_dirs(course_name).map do |units|
118
- units.map do |path|
116
+ units = unit_dirs(course_name).map do |unit_dir|
117
+ unit_dir.map do |path|
119
118
  next unless path.split('/')[-2] == chapter_name
120
119
  Daigaku::Unit.new(path)
121
120
  end
@@ -128,7 +127,7 @@ module ResourceHelpers
128
127
  task = unit_dirs(course_name).map do |units|
129
128
  units.map do |path|
130
129
  split = path.split('/')
131
- next if (split[-2] != chapter_name || split[-1] != unit_name)
130
+ next if split[-2] != chapter_name || split[-1] != unit_name
132
131
 
133
132
  Daigaku::Task.new(path)
134
133
  end
@@ -141,7 +140,7 @@ module ResourceHelpers
141
140
  solution = unit_dirs(course_name).map do |units|
142
141
  units.map do |path|
143
142
  split = path.split('/')
144
- next if (split[-2] != chapter_name || split[-1] != unit_name)
143
+ next if split[-2] != chapter_name || split[-1] != unit_name
145
144
 
146
145
  Daigaku::ReferenceSolution.new(path)
147
146
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daigaku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Götze
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-31 00:00:00.000000000 Z
11
+ date: 2016-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -114,42 +114,42 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 2.0.0.rc1
117
+ version: 1.6.1
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 2.0.0.rc1
124
+ version: 1.6.1
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: quick_store
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0.1'
131
+ version: '0.2'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0.1'
138
+ version: '0.2'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: code_breaker
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '0.1'
145
+ version: '0.3'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '0.1'
152
+ version: '0.3'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: bundler
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -237,6 +237,7 @@ files:
237
237
  - lib/daigaku/loading/courses.rb
238
238
  - lib/daigaku/loading/units.rb
239
239
  - lib/daigaku/markdown.rb
240
+ - lib/daigaku/markdown/printer.rb
240
241
  - lib/daigaku/markdown/ruby_doc.rb
241
242
  - lib/daigaku/reference_solution.rb
242
243
  - lib/daigaku/solution.rb
@@ -264,6 +265,7 @@ files:
264
265
  - lib/daigaku/views/main_menu.rb
265
266
  - lib/daigaku/views/menu.rb
266
267
  - lib/daigaku/views/splash.rb
268
+ - lib/daigaku/views/subscriber.rb
267
269
  - lib/daigaku/views/task_view.rb
268
270
  - lib/daigaku/views/top_bar.rb
269
271
  - lib/daigaku/views/units_menu.rb
@@ -319,9 +321,9 @@ require_paths:
319
321
  - lib
320
322
  required_ruby_version: !ruby/object:Gem::Requirement
321
323
  requirements:
322
- - - "~>"
324
+ - - ">="
323
325
  - !ruby/object:Gem::Version
324
- version: '2.0'
326
+ version: 2.2.5
325
327
  required_rubygems_version: !ruby/object:Gem::Requirement
326
328
  requirements:
327
329
  - - ">="