daigaku 0.1.1 → 0.2.0

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
  SHA1:
3
- metadata.gz: bc609a20eb768060e29650848a0c5e18c3734564
4
- data.tar.gz: fe5a9c1b16ef1dbb90bd9bb5f93cb1f34d6cbb78
3
+ metadata.gz: 9c6f1f336e0af615495359124f476852ef7dfa36
4
+ data.tar.gz: 2baf4a0586e8b933fb30cd9af7bbe2be9a3fe983
5
5
  SHA512:
6
- metadata.gz: 3f602698e655947c62bb4ad461a2f6f0bb66ee5ffe8a809a10444a8d98096b02fef63f6f7e0149e66f8e7d78c1a8a5c1adb28a17aa37459bca0483b9002ac777
7
- data.tar.gz: 06f241f79407d17e233e6c4d82993d6a54ef97de3a8d05b9a2c19b4bbac81373bc1b46cb9755a5562dac59ebd7b9f016c1415284d336baefe0d14be463234aea
6
+ metadata.gz: 537a9fa9742cda1129165bf8f0a163213d415fd3d6f221e93c54244f6a0eb379451146ba9e4e7f094c705416e9aef9f6ed350e9b849030fa6cba0278ac33eb19
7
+ data.tar.gz: c4a943a667fd22f0d420838ee6f83cac333613b4740ba889d3a24b8b32e989ca63813ab80206bd2aa8afb1429cc739a3f9717c07d9dc2ba3a9818b93794b1198
data/README.md CHANGED
@@ -16,6 +16,7 @@ language-explaining programming tasks.
16
16
  ## Installation
17
17
 
18
18
  First of all make sure Ruby is installed on your computer.
19
+ Daigaku works with [MRI Ruby](https://www.ruby-lang.org/en/documentation/installation/) v2.x and [Rubinius](http://rubini.us/doc/en/getting-started/) v2.x.
19
20
 
20
21
  Then open a terminal and install Daigaku by running:
21
22
 
@@ -51,6 +52,8 @@ Please visit the [Diagaku Wiki](https://github.com/daigaku-ruby/daigaku/wiki/How
51
52
 
52
53
  We encourage you to contribute to Daigaku development and course creation.
53
54
 
55
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant code of conduct](http://contributor-covenant.org/version/1/2/0).
56
+
54
57
  ### Creating Daigaku courses
55
58
 
56
59
  Daigaku is a great tool, but it's nothing without courses to learn from.
data/daigaku.gemspec CHANGED
@@ -19,17 +19,18 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  if RUBY_VERSION >= '2.1'
22
- spec.add_runtime_dependency "curses", ">= 1.0", "< 2.0"
22
+ spec.add_runtime_dependency "curses", "~> 1.0"
23
23
  end
24
24
 
25
- spec.add_runtime_dependency "activesupport", ">= 4.0", "< 5.0"
26
- spec.add_runtime_dependency "rspec", ">= 3.0", "< 4.0"
25
+ spec.add_runtime_dependency "activesupport", "~> 4.0"
26
+ spec.add_runtime_dependency "rspec", "~> 3.0"
27
27
  spec.add_runtime_dependency "thor", "~> 0.19.1"
28
28
  spec.add_runtime_dependency "os", "~> 0.9.6"
29
29
  spec.add_runtime_dependency "colorize", "~> 0.7.5"
30
- spec.add_runtime_dependency "rubyzip", ">= 1.0", "< 2.0"
31
- spec.add_runtime_dependency "wisper", ">= 2.0.0.rc1", "< 3.0"
32
- spec.add_runtime_dependency "quick_store", "~> 0.1.0"
30
+ spec.add_runtime_dependency "rubyzip", "~> 1.0"
31
+ spec.add_runtime_dependency "wisper", "~> 2.0.0.rc1"
32
+ spec.add_runtime_dependency "quick_store", "~> 0.1"
33
+ spec.add_runtime_dependency "code_breaker", "~> 0.1"
33
34
 
34
35
  spec.add_development_dependency "bundler", "~> 1.7"
35
36
  spec.add_development_dependency "rake", "~> 10.0"
@@ -0,0 +1,37 @@
1
+ require 'curses'
2
+ require 'active_support/concern'
3
+
4
+ module Daigaku
5
+ module Coloring
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ COLOR_TEXT = Curses::COLOR_YELLOW unless defined? COLOR_TEXT
10
+ COLOR_TEXT_EMPHASIZE = Curses::COLOR_CYAN unless defined? COLOR_TEXT_EMPHASIZE
11
+ COLOR_HEADING = Curses::COLOR_WHITE unless defined? COLOR_HEADING
12
+ COLOR_RED = Curses::COLOR_BLUE unless defined? COLOR_RED
13
+ COLOR_GREEN = Curses::COLOR_MAGENTA unless defined? COLOR_GREEN
14
+ COLOR_YELLOW = Curses::COLOR_RED unless defined? COLOR_YELLOW
15
+
16
+ BACKGROUND = Curses::COLOR_WHITE unless defined? BACKGROUND
17
+ FONT = Curses::COLOR_BLACK unless defined? FONT
18
+ FONT_HEADING = Curses::COLOR_MAGENTA unless defined? FONT_HEADING
19
+ FONT_EMPHASIZE = Curses::COLOR_BLUE unless defined? FONT_EMPHASIZE
20
+ RED = Curses::COLOR_RED unless defined? RED
21
+ GREEN = Curses::COLOR_GREEN unless defined? GREEN
22
+ YELLOW = Curses::COLOR_YELLOW unless defined? YELLOW
23
+
24
+ protected
25
+
26
+ def init_colors
27
+ Curses.start_color
28
+ Curses.init_pair(COLOR_TEXT, FONT, BACKGROUND)
29
+ Curses.init_pair(COLOR_TEXT_EMPHASIZE, FONT_EMPHASIZE, BACKGROUND)
30
+ Curses.init_pair(COLOR_HEADING, FONT_HEADING, BACKGROUND)
31
+ Curses.init_pair(COLOR_RED, RED, BACKGROUND)
32
+ Curses.init_pair(COLOR_GREEN, GREEN, BACKGROUND)
33
+ Curses.init_pair(COLOR_YELLOW, YELLOW, BACKGROUND)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1 @@
1
+ require 'daigaku/markdown/ruby_doc'
@@ -0,0 +1,104 @@
1
+ require 'cgi'
2
+
3
+ module Daigaku
4
+ class Markdown
5
+ class RubyDoc
6
+
7
+ RUBY_DOC_URL = "http://ruby-doc.org".freeze
8
+ CORE_BASE_URL = "#{RUBY_DOC_URL}/core-#{RUBY_VERSION}".freeze
9
+ STDLIB_BASE_URL = "#{RUBY_DOC_URL}/stdlib-#{RUBY_VERSION}".freeze
10
+
11
+ CORE_REGEX = /\(ruby-doc core:\s?(.*)\)/.freeze
12
+ STDLIB_REGEX = /\(ruby-doc stdlib:\s?(.*)\)/.freeze
13
+
14
+ class << self
15
+ def parse(text)
16
+ new.parse(text)
17
+ end
18
+ end
19
+
20
+ def parse(text)
21
+ parsed_text = sub_stdlib_links(text)
22
+ sub_core_links(parsed_text)
23
+ end
24
+
25
+ private
26
+
27
+ def sub_core_links(text)
28
+ match = text.match(CORE_REGEX)
29
+ return text if match.nil?
30
+
31
+ match.captures.reduce(text) do |result, capture|
32
+ result.sub!(doc_regex(:core, capture), core_link(capture))
33
+ end
34
+ end
35
+
36
+ def sub_stdlib_links(text)
37
+ match = text.match(STDLIB_REGEX)
38
+ return text if match.nil?
39
+
40
+ match.captures.reduce(text) do |result, capture|
41
+ result.sub!(doc_regex(:stdlib, capture), stdlib_link(capture))
42
+ end
43
+ end
44
+
45
+ def doc_regex(type, capture)
46
+ /\(ruby-doc #{type}: #{capture}\)/
47
+ end
48
+
49
+ def core_link(text)
50
+ constants = ruby_constants(text).join('/')
51
+ method = ruby_method(text)
52
+
53
+ "#{CORE_BASE_URL}/#{constants}.html#{method}"
54
+ end
55
+
56
+ def stdlib_link(text)
57
+ constants = ruby_constants(text).join('/')
58
+ method = ruby_method(text)
59
+ libdoc_part = "libdoc/#{ruby_stdlib(text)}/rdoc"
60
+
61
+ "#{STDLIB_BASE_URL}/#{libdoc_part}/#{constants}.html#{method}"
62
+ end
63
+
64
+ # Returns the stdlib part of the url.
65
+ # If an explicit stdlib name is defined in markdown, e.g.
66
+ # (ruby-doc stdlib: net/http Net::HTTP) => 'net/http'
67
+ # then this lib name is used.
68
+ # Else the lib is created from the constants, e.g.
69
+ # (ruby-doc stdlib: Time) => 'time'
70
+ def ruby_stdlib(text)
71
+ parts = text.split(' ')
72
+
73
+ if parts.length > 1
74
+ parts.first.strip.downcase
75
+ else
76
+ ruby_constants(text).join('/').downcase
77
+ end
78
+ end
79
+
80
+ def ruby_constants(text)
81
+ parts = text.split(' ').last.split(/::|#/)
82
+ select_capitalized(parts)
83
+ end
84
+
85
+ def ruby_method(text)
86
+ method = text.split(/::|#/).last
87
+ return '' unless downcased?(method)
88
+
89
+ method_type = text.match(/#/) ? 'i' : 'c'
90
+ method_name = CGI.escape(method.strip).gsub('%', '-').gsub(/\A-/, '')
91
+ "#method-#{method_type}-#{method_name}"
92
+ end
93
+
94
+ def select_capitalized(parts)
95
+ parts.select { |part| part[0] == part[0].upcase }
96
+ end
97
+
98
+ def downcased?(text)
99
+ text == text.downcase
100
+ end
101
+
102
+ end
103
+ end
104
+ end
@@ -57,7 +57,7 @@ module Daigaku
57
57
  end
58
58
 
59
59
  method_option :all, type: :boolean, aliases: '-a', desc: 'Update all courses'
60
- desc 'update [COURSE_NAME] [OPTIONS]', 'Update Daigak courses.'
60
+ desc 'update [COURSE_NAME] [OPTIONS]', 'Update Daigaku courses.'
61
61
  def update(course_name = nil)
62
62
  if options[:all]
63
63
  courses = Loading::Courses.load(Daigaku.config.courses_path)
@@ -98,7 +98,7 @@ module Daigaku
98
98
  return
99
99
  end
100
100
 
101
- get_confirm("Are you shure you want to delete the course \"#{course_name}\"?") do
101
+ get_confirm("Are you sure you want to delete the course \"#{course_name}\"?") do
102
102
  FileUtils.remove_dir(path)
103
103
  QuickStore.store.delete(Storeable.key(course_name, prefix: 'courses'))
104
104
  say_info "The course \"#{course_name}\" was successfully deleted."
@@ -1,3 +1,3 @@
1
1
  module Daigaku
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -9,8 +9,8 @@ module Daigaku
9
9
 
10
10
  TOP_BAR_TEXT = [
11
11
  'Scroll with *UP KEY* and *DOWN KEY*',
12
- 'Verify solution with *v*',
13
12
  'Open solution file with *o*',
13
+ 'Verify solution with *v*',
14
14
  'Clear validation with *c*',
15
15
  'Exit with *ESC*'
16
16
  ].join(' | ')
@@ -1,23 +1,10 @@
1
1
  require 'curses'
2
- require 'cgi'
2
+ require 'daigaku/coloring'
3
+ require 'daigaku/markdown'
3
4
 
4
5
  module Daigaku
5
6
  class Window < Curses::Window
6
-
7
- COLOR_TEXT = Curses::COLOR_YELLOW unless defined? COLOR_TEXT
8
- COLOR_TEXT_EMPHASIZE = Curses::COLOR_CYAN unless defined? COLOR_TEXT_EMPHASIZE
9
- COLOR_HEADING = Curses::COLOR_WHITE unless defined? COLOR_HEADING
10
- COLOR_RED = Curses::COLOR_BLUE unless defined? COLOR_RED
11
- COLOR_GREEN = Curses::COLOR_MAGENTA unless defined? COLOR_GREEN
12
- COLOR_YELLOW = Curses::COLOR_RED unless defined? COLOR_YELLOW
13
-
14
- BACKGROUND = Curses::COLOR_WHITE unless defined? BACKGROUND
15
- FONT = Curses::COLOR_BLACK unless defined? FONT
16
- FONT_HEADING = Curses::COLOR_MAGENTA unless defined? FONT_HEADING
17
- FONT_EMPHASIZE = Curses::COLOR_BLUE unless defined? FONT_EMPHASIZE
18
- RED = Curses::COLOR_RED unless defined? RED
19
- GREEN = Curses::COLOR_GREEN unless defined? GREEN
20
- YELLOW = Curses::COLOR_YELLOW unless defined? YELLOW
7
+ include Coloring
21
8
 
22
9
  def initialize(height = Curses.lines, width = Curses.cols, top = 0, left = 0)
23
10
  super(height, width, top, left)
@@ -29,23 +16,23 @@ module Daigaku
29
16
  end
30
17
 
31
18
  def emphasize(text, text_decoration = Curses::A_NORMAL)
32
- write(text, Window::COLOR_TEXT_EMPHASIZE, text_decoration)
19
+ write(text, COLOR_TEXT_EMPHASIZE, text_decoration)
33
20
  end
34
21
 
35
22
  def heading(text, text_decoration = Curses::A_UNDERLINE)
36
- write(text, Window::COLOR_HEADING, text_decoration)
23
+ write(text, COLOR_HEADING, text_decoration)
37
24
  end
38
25
 
39
26
  def red(text, text_decoration = Curses::A_NORMAL, options = {})
40
- colored(text, Window::COLOR_RED, text_decoration, options)
27
+ colored(text, COLOR_RED, text_decoration, options)
41
28
  end
42
29
 
43
30
  def yellow(text, text_decoration = Curses::A_NORMAL, options = {})
44
- colored(text, Window::COLOR_YELLOW, text_decoration, options)
31
+ colored(text, COLOR_YELLOW, text_decoration, options)
45
32
  end
46
33
 
47
34
  def green(text, text_decoration = Curses::A_NORMAL, options = {})
48
- colored(text, Window::COLOR_GREEN, text_decoration, options)
35
+ colored(text, COLOR_GREEN, text_decoration, options)
49
36
  end
50
37
 
51
38
  def colored(text, color, text_decoration = Curses::A_NORMAL, options = {})
@@ -112,104 +99,55 @@ module Daigaku
112
99
  ruby_doc_core = /(\(ruby-doc core:.*\))/ # '(ruby-doc core: Kernel#print)'
113
100
  ruby_doc_stdlib = /(\(ruby-doc stdlib:.*\))/ # '(ruby-doc stdlib: CSV#Row::<<)'
114
101
 
102
+ text = Markdown::RubyDoc.parse(text)
103
+
115
104
  case text
116
- when h1
117
- heading(text.gsub(/^#\s?/, ''))
118
- when h2
119
- text_decoration = Curses::A_UNDERLINE | Curses::A_NORMAL
120
- emphasize(text.gsub(/^##\s?/, ''), text_decoration)
121
- when (code || bold)
122
- emphasized = false
123
- highlighted = false
124
-
125
- text.chars.each_with_index do |char, index|
126
- if char == '*' && text[index - 1] != '\\'
127
- emphasized = !emphasized
128
- next
129
- end
130
-
131
- if char == '`'
132
- highlighted = !highlighted
133
- next
134
- end
135
-
136
- character = "#{text[index..(index + 1)]}" == '\\*' ? '' : char
137
-
138
- if highlighted
139
- red(character)
140
- elsif emphasized
141
- emphasize(character)
142
- else
143
- write(character)
144
- end
145
- end
146
- when bold
147
- text.chars.each_with_index do |char, index|
148
- if char == '*' && text[index - 1] != '\\'
149
- emphasized = !emphasized
150
- next
151
- end
152
-
153
- character = "#{text[index..(index + 1)]}" == '\\*' ? '' : char
154
- emphasized ? emphasize(character) : write(character)
105
+ when h1
106
+ heading(text.gsub(/^#\s?/, ''))
107
+ when h2
108
+ text_decoration = Curses::A_UNDERLINE | Curses::A_NORMAL
109
+ emphasize(text.gsub(/^##\s?/, ''), text_decoration)
110
+ when (code || bold)
111
+ emphasized = false
112
+ highlighted = false
113
+
114
+ text.chars.each_with_index do |char, index|
115
+ if char == '*' && text[index - 1] != '\\'
116
+ emphasized = !emphasized
117
+ next
155
118
  end
156
- when line
157
- write('-' * (Curses.cols - 2))
158
- when ruby_doc_core
159
- capture = text.match(/\(ruby-doc core:\s?(.*)\)/).captures.first
160
- write text.gsub(ruby_doc_core, ruby_doc_core_link(capture))
161
- when ruby_doc_stdlib
162
- capture = text.match(/\(ruby-doc stdlib:\s?(.*)\)/).captures.first
163
- write text.gsub(ruby_doc_stdlib, ruby_doc_stdlib_link(capture))
164
- else
165
- write(text.gsub(/(\\#)/, '#'))
166
- end
167
- end
168
-
169
- protected
170
-
171
- def init_colors
172
- Curses.start_color
173
- Curses.init_pair(COLOR_TEXT, FONT, BACKGROUND)
174
- Curses.init_pair(COLOR_TEXT_EMPHASIZE, FONT_EMPHASIZE, BACKGROUND)
175
- Curses.init_pair(COLOR_HEADING, FONT_HEADING, BACKGROUND)
176
- Curses.init_pair(COLOR_RED, RED, BACKGROUND)
177
- Curses.init_pair(COLOR_GREEN, GREEN, BACKGROUND)
178
- Curses.init_pair(COLOR_YELLOW, YELLOW, BACKGROUND)
179
- end
180
-
181
- private
182
-
183
- def ruby_doc_core_link(text)
184
- base_url = "http://ruby-doc.org/core-#{RUBY_VERSION}"
185
- class_part = ruby_doc_class_parts(text).join('/')
186
- method = ruby_doc_method(text)
187
119
 
188
- "#{base_url}/#{class_part}.html#{method}"
189
- end
190
-
191
- def ruby_doc_stdlib_link(text)
192
- base_url = "http://ruby-doc.org/stdlib-#{RUBY_VERSION}"
193
- class_parts = ruby_doc_class_parts(text)
194
- libdoc_part = "libdoc/#{class_parts.first.downcase}/rdoc"
195
- method = ruby_doc_method(text)
196
-
197
- "#{base_url}/#{libdoc_part}/#{class_parts.join('/')}.html#{method}"
198
- end
120
+ if char == '`'
121
+ highlighted = !highlighted
122
+ next
123
+ end
199
124
 
200
- def ruby_doc_class_parts(text)
201
- parts = text.split(/::|#/)
202
- parts[0..(parts.count > 1 ? -2 : -1)]
203
- end
125
+ character = "#{text[index..(index + 1)]}" == '\\*' ? '' : char
204
126
 
205
- def ruby_doc_method(text)
206
- parts = text.split(/::|#/)
127
+ if highlighted
128
+ red(character)
129
+ elsif emphasized
130
+ emphasize(character)
131
+ else
132
+ write(character)
133
+ end
134
+ end
135
+ when bold
136
+ text.chars.each_with_index do |char, index|
137
+ if char == '*' && text[index - 1] != '\\'
138
+ emphasized = !emphasized
139
+ next
140
+ end
207
141
 
208
- if parts.count > 1
209
- method_type = text.match(/#/) ? 'i' : 'c'
210
- method_name = CGI.escape(parts.last.strip).gsub('%', '-').gsub(/\A-/, '')
211
- "#method-#{method_type}-#{method_name}"
142
+ character = "#{text[index..(index + 1)]}" == '\\*' ? '' : char
143
+ emphasized ? emphasize(character) : write(character)
144
+ end
145
+ when line
146
+ write('-' * (Curses.cols - 2))
147
+ else
148
+ write(text.gsub(/(\\#)/, '#'))
212
149
  end
213
150
  end
151
+
214
152
  end
215
153
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Daigaku::Coloring do
4
+
5
+ subject do
6
+ class Example
7
+ include Daigaku::Coloring
8
+ end
9
+
10
+ Example.new
11
+ end
12
+
13
+ it 'has the protected method #init_colors' do
14
+ expect(subject.protected_methods).to include :init_colors
15
+ end
16
+
17
+ [
18
+ :COLOR_TEXT,
19
+ :COLOR_TEXT_EMPHASIZE,
20
+ :COLOR_HEADING,
21
+ :COLOR_RED,
22
+ :COLOR_GREEN,
23
+ :COLOR_YELLOW,
24
+ :BACKGROUND,
25
+ :FONT,
26
+ :FONT_HEADING,
27
+ :FONT_EMPHASIZE,
28
+ :RED,
29
+ :GREEN,
30
+ :YELLOW
31
+ ].each do |const|
32
+ it "has the constant #{const}" do
33
+ expect(Example.const_defined?(const)).to be true
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ describe Daigaku::Markdown::RubyDoc do
4
+
5
+ [:parse].each do |class_method|
6
+ it "responds to #{class_method}" do
7
+ expect(Daigaku::Markdown::RubyDoc).to respond_to class_method
8
+ end
9
+ end
10
+
11
+ def parse(text)
12
+ Daigaku::Markdown::RubyDoc.parse(text)
13
+ end
14
+
15
+ describe '::parse' do
16
+ context 'for a text containing a core doc markup' do
17
+ let(:base_url) { "http://ruby-doc.org/core-#{RUBY_VERSION}" }
18
+
19
+ it 'returns the right link for a single class' do
20
+ markdown = '(ruby-doc core: String)'
21
+ expect(parse(markdown)).to eq "#{base_url}/String.html"
22
+ end
23
+
24
+ it 'returns the right text with link for a single class' do
25
+ markdown = '*emphasized* (ruby-doc core: String)'
26
+ expect(parse(markdown)).to eq "*emphasized* #{base_url}/String.html"
27
+ end
28
+
29
+ it 'returns the right link for a single namespaced class' do
30
+ markdown = '(ruby-doc core: Enumerator::Lazy)'
31
+ expect(parse(markdown)).to eq "#{base_url}/Enumerator/Lazy.html"
32
+ end
33
+
34
+ it 'returns the right link for a multi namespaced class' do
35
+ markdown = '(ruby-doc core: Thread::Backtrace::Location)'
36
+ expect(parse(markdown)).to eq "#{base_url}/Thread/Backtrace/Location.html"
37
+ end
38
+
39
+ it "returns the right link for a single class's class method" do
40
+ markdown = '(ruby-doc core: String::new)'
41
+ expect(parse(markdown)).to eq "#{base_url}/String.html#method-c-new"
42
+ end
43
+
44
+ it "returns the right link for a single class's instance method" do
45
+ markdown = '(ruby-doc core: String#count)'
46
+ expect(parse(markdown)).to eq "#{base_url}/String.html#method-i-count"
47
+ end
48
+
49
+ it "returns the right link for a namespaced class's class method" do
50
+ markdown = '(ruby-doc core: Enumerator::Lazy::new)'
51
+ expect(parse(markdown)).to eq "#{base_url}/Enumerator/Lazy.html#method-c-new"
52
+ end
53
+
54
+ it "returns the right link for a namespaced class's instance method" do
55
+ markdown = '(ruby-doc core: Enumerator::Lazy#flat_map)'
56
+ expect(parse(markdown)).to eq "#{base_url}/Enumerator/Lazy.html#method-i-flat_map"
57
+ end
58
+
59
+ end
60
+
61
+ context 'for a text containing a stdlib doc markup' do
62
+ let(:base_url) { "http://ruby-doc.org/stdlib-#{RUBY_VERSION}/libdoc" }
63
+
64
+ it 'returns the right link for a single class' do
65
+ markdown = '(ruby-doc stdlib: Time)'
66
+ expect(parse(markdown)).to eq "#{base_url}/time/rdoc/Time.html"
67
+ end
68
+
69
+ it 'returns the right text with link for a single class' do
70
+ markdown = '*emphasized* (ruby-doc stdlib: Time)'
71
+ expect(parse(markdown)).to eq "*emphasized* #{base_url}/time/rdoc/Time.html"
72
+ end
73
+
74
+ it 'returns the right link for a single class with an explicit lib' do
75
+ markdown = '(ruby-doc stdlib: date Time)'
76
+ expect(parse(markdown)).to eq "#{base_url}/date/rdoc/Time.html"
77
+ end
78
+
79
+ it 'returns the right link for a single namespaced class' do
80
+ markdown = '(ruby-doc stdlib: Net::HTTP)'
81
+ expect(parse(markdown)).to eq "#{base_url}/net/http/rdoc/Net/HTTP.html"
82
+ end
83
+
84
+ it 'returns the right link for a multi namespaced class' do
85
+ markdown = '(ruby-doc stdlib: json JSON::Ext::Generator::State)'
86
+ expect(parse(markdown)).to eq "#{base_url}/json/rdoc/JSON/Ext/Generator/State.html"
87
+ end
88
+
89
+ it "returns the right link for a single class's class method" do
90
+ markdown = '(ruby-doc stdlib: Time::parse)'
91
+ expect(parse(markdown)).to eq "#{base_url}/time/rdoc/Time.html#method-c-parse"
92
+ end
93
+
94
+ it "returns the right link for a single class's instance method" do
95
+ markdown = '(ruby-doc stdlib: Time#httpdate)'
96
+ expect(parse(markdown)).to eq "#{base_url}/time/rdoc/Time.html#method-i-httpdate"
97
+ end
98
+
99
+ it "returns the right link for a namespaced class's class method" do
100
+ markdown = '(ruby-doc stdlib: Net::HTTP::get)'
101
+ expect(parse(markdown)).to eq "#{base_url}/net/http/rdoc/Net/HTTP.html#method-c-get"
102
+ end
103
+
104
+ it "returns the right link for a namespaced class's instance method" do
105
+ markdown = '(ruby-doc stdlib: Net::HTTP#get)'
106
+ expect(parse(markdown)).to eq "#{base_url}/net/http/rdoc/Net/HTTP.html#method-i-get"
107
+ end
108
+ end
109
+ end
110
+ end
metadata CHANGED
@@ -1,75 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daigaku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.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: 2015-05-22 00:00:00.000000000 Z
11
+ date: 2015-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '2.0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.0'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '2.0'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activesupport
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
- - - ">="
31
+ - - "~>"
38
32
  - !ruby/object:Gem::Version
39
33
  version: '4.0'
40
- - - "<"
41
- - !ruby/object:Gem::Version
42
- version: '5.0'
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
- - - ">="
38
+ - - "~>"
48
39
  - !ruby/object:Gem::Version
49
40
  version: '4.0'
50
- - - "<"
51
- - !ruby/object:Gem::Version
52
- version: '5.0'
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: rspec
55
43
  requirement: !ruby/object:Gem::Requirement
56
44
  requirements:
57
- - - ">="
45
+ - - "~>"
58
46
  - !ruby/object:Gem::Version
59
47
  version: '3.0'
60
- - - "<"
61
- - !ruby/object:Gem::Version
62
- version: '4.0'
63
48
  type: :runtime
64
49
  prerelease: false
65
50
  version_requirements: !ruby/object:Gem::Requirement
66
51
  requirements:
67
- - - ">="
52
+ - - "~>"
68
53
  - !ruby/object:Gem::Version
69
54
  version: '3.0'
70
- - - "<"
71
- - !ruby/object:Gem::Version
72
- version: '4.0'
73
55
  - !ruby/object:Gem::Dependency
74
56
  name: thor
75
57
  requirement: !ruby/object:Gem::Requirement
@@ -116,56 +98,58 @@ dependencies:
116
98
  name: rubyzip
117
99
  requirement: !ruby/object:Gem::Requirement
118
100
  requirements:
119
- - - ">="
101
+ - - "~>"
120
102
  - !ruby/object:Gem::Version
121
103
  version: '1.0'
122
- - - "<"
123
- - !ruby/object:Gem::Version
124
- version: '2.0'
125
104
  type: :runtime
126
105
  prerelease: false
127
106
  version_requirements: !ruby/object:Gem::Requirement
128
107
  requirements:
129
- - - ">="
108
+ - - "~>"
130
109
  - !ruby/object:Gem::Version
131
110
  version: '1.0'
132
- - - "<"
133
- - !ruby/object:Gem::Version
134
- version: '2.0'
135
111
  - !ruby/object:Gem::Dependency
136
112
  name: wisper
137
113
  requirement: !ruby/object:Gem::Requirement
138
114
  requirements:
139
- - - ">="
115
+ - - "~>"
140
116
  - !ruby/object:Gem::Version
141
117
  version: 2.0.0.rc1
142
- - - "<"
143
- - !ruby/object:Gem::Version
144
- version: '3.0'
145
118
  type: :runtime
146
119
  prerelease: false
147
120
  version_requirements: !ruby/object:Gem::Requirement
148
121
  requirements:
149
- - - ">="
122
+ - - "~>"
150
123
  - !ruby/object:Gem::Version
151
124
  version: 2.0.0.rc1
152
- - - "<"
153
- - !ruby/object:Gem::Version
154
- version: '3.0'
155
125
  - !ruby/object:Gem::Dependency
156
126
  name: quick_store
157
127
  requirement: !ruby/object:Gem::Requirement
158
128
  requirements:
159
129
  - - "~>"
160
130
  - !ruby/object:Gem::Version
161
- version: 0.1.0
131
+ version: '0.1'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.1'
139
+ - !ruby/object:Gem::Dependency
140
+ name: code_breaker
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.1'
162
146
  type: :runtime
163
147
  prerelease: false
164
148
  version_requirements: !ruby/object:Gem::Requirement
165
149
  requirements:
166
150
  - - "~>"
167
151
  - !ruby/object:Gem::Version
168
- version: 0.1.0
152
+ version: '0.1'
169
153
  - !ruby/object:Gem::Dependency
170
154
  name: bundler
171
155
  requirement: !ruby/object:Gem::Requirement
@@ -241,6 +225,7 @@ files:
241
225
  - daigaku.gemspec
242
226
  - lib/daigaku.rb
243
227
  - lib/daigaku/chapter.rb
228
+ - lib/daigaku/coloring.rb
244
229
  - lib/daigaku/configuration.rb
245
230
  - lib/daigaku/congratulator.rb
246
231
  - lib/daigaku/course.rb
@@ -251,6 +236,8 @@ files:
251
236
  - lib/daigaku/loading/chapters.rb
252
237
  - lib/daigaku/loading/courses.rb
253
238
  - lib/daigaku/loading/units.rb
239
+ - lib/daigaku/markdown.rb
240
+ - lib/daigaku/markdown/ruby_doc.rb
254
241
  - lib/daigaku/reference_solution.rb
255
242
  - lib/daigaku/solution.rb
256
243
  - lib/daigaku/storeable.rb
@@ -282,6 +269,7 @@ files:
282
269
  - lib/daigaku/views/units_menu.rb
283
270
  - lib/daigaku/window.rb
284
271
  - spec/daigaku/chapter_spec.rb
272
+ - spec/daigaku/coloring_spec.rb
285
273
  - spec/daigaku/configuration_spec.rb
286
274
  - spec/daigaku/congratulator_spec.rb
287
275
  - spec/daigaku/course_spec.rb
@@ -290,6 +278,7 @@ files:
290
278
  - spec/daigaku/loading/chapters_spec.rb
291
279
  - spec/daigaku/loading/courses_spec.rb
292
280
  - spec/daigaku/loading/units_spec.rb
281
+ - spec/daigaku/markdown/ruby_doc_spec.rb
293
282
  - spec/daigaku/reference_solution_spec.rb
294
283
  - spec/daigaku/solution_spec.rb
295
284
  - spec/daigaku/storeable_spec.rb
@@ -340,12 +329,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
340
329
  version: '0'
341
330
  requirements: []
342
331
  rubyforge_project:
343
- rubygems_version: 2.4.3
332
+ rubygems_version: 2.4.6
344
333
  signing_key:
345
334
  specification_version: 4
346
335
  summary: Learning Ruby on the command line.
347
336
  test_files:
348
337
  - spec/daigaku/chapter_spec.rb
338
+ - spec/daigaku/coloring_spec.rb
349
339
  - spec/daigaku/configuration_spec.rb
350
340
  - spec/daigaku/congratulator_spec.rb
351
341
  - spec/daigaku/course_spec.rb
@@ -354,6 +344,7 @@ test_files:
354
344
  - spec/daigaku/loading/chapters_spec.rb
355
345
  - spec/daigaku/loading/courses_spec.rb
356
346
  - spec/daigaku/loading/units_spec.rb
347
+ - spec/daigaku/markdown/ruby_doc_spec.rb
357
348
  - spec/daigaku/reference_solution_spec.rb
358
349
  - spec/daigaku/solution_spec.rb
359
350
  - spec/daigaku/storeable_spec.rb