ankit 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/ankit/challenge.rb +2 -0
- data/lib/ankit/errors.rb +4 -0
- data/lib/ankit/event.rb +9 -2
- data/lib/ankit/runtime.rb +4 -0
- data/test/command_test.rb +16 -9
- data/test/event_test.rb +3 -2
- data/test/helpers.rb +2 -0
- data/test/progress_test.rb +3 -2
- metadata +63 -42
data/lib/ankit/challenge.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'ankit/errors'
|
1
2
|
require 'ankit/coming_command'
|
2
3
|
require 'ankit/fail_command'
|
3
4
|
require 'ankit/find_command'
|
@@ -466,6 +467,7 @@ module Ankit
|
|
466
467
|
# XXX: Care the case where |card| < limit
|
467
468
|
limit = [self.session.limit, Slot::BATCH_SIZE].min
|
468
469
|
slots = Coming.coming_paths(self.runtime).take(limit).map { |path| Slot.new(path, nil) }
|
470
|
+
raise ExpectedFatalError, "You have no card yet" if slots.empty?
|
469
471
|
QuestionState.new(Progress.new(self.session, slots))
|
470
472
|
end
|
471
473
|
end
|
data/lib/ankit/errors.rb
ADDED
data/lib/ankit/event.rb
CHANGED
@@ -27,7 +27,8 @@ module Ankit
|
|
27
27
|
def best() @values["best"] || maturity; end
|
28
28
|
def card?() type == "card"; end
|
29
29
|
def round() @envelope.round or 0; end
|
30
|
-
def next_round() round + 2**maturity; end
|
30
|
+
#def next_round() round + 2**maturity; end
|
31
|
+
def next_round() round + scaled_maturity; end
|
31
32
|
|
32
33
|
def initialize(env, values)
|
33
34
|
@envelope, @values = env, values
|
@@ -44,7 +45,7 @@ module Ankit
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def to_failed(env)
|
47
|
-
Event.new(env, @values.merge({ "verb" => "failed", "maturity" =>
|
48
|
+
Event.new(env, @values.merge({ "verb" => "failed", "maturity" => -1, "best" => best }))
|
48
49
|
end
|
49
50
|
|
50
51
|
def self.for_card(name, verb, env)
|
@@ -61,6 +62,12 @@ module Ankit
|
|
61
62
|
|
62
63
|
private
|
63
64
|
|
65
|
+
def scaled_maturity
|
66
|
+
return (2**( self.maturity-1)) if 0 < maturity
|
67
|
+
return -(2**(-self.maturity+1)) if 0 > maturity
|
68
|
+
0
|
69
|
+
end
|
70
|
+
|
64
71
|
def next_maturity
|
65
72
|
maturity + [(best - maturity)/2, 1].max
|
66
73
|
end
|
data/lib/ankit/runtime.rb
CHANGED
@@ -3,6 +3,7 @@ require 'optparse'
|
|
3
3
|
require 'fileutils'
|
4
4
|
require 'highline'
|
5
5
|
require 'ankit/command'
|
6
|
+
require 'ankit/errors'
|
6
7
|
require 'ankit/add_command'
|
7
8
|
require 'ankit/challenge_command'
|
8
9
|
require 'ankit/coming_command'
|
@@ -107,6 +108,9 @@ module Ankit
|
|
107
108
|
else
|
108
109
|
r.dispatch(splitted[:subcommand])
|
109
110
|
end
|
111
|
+
rescue ExpectedFatalError
|
112
|
+
print("Error:", $!.message, "\n")
|
113
|
+
exit(1)
|
110
114
|
end
|
111
115
|
|
112
116
|
def initialize(config)
|
data/test/command_test.rb
CHANGED
@@ -5,7 +5,6 @@ require 'test/unit'
|
|
5
5
|
require 'fileutils'
|
6
6
|
require 'tmpdir'
|
7
7
|
require 'tempfile'
|
8
|
-
require 'mocha'
|
9
8
|
|
10
9
|
class CommandTest < Test::Unit::TestCase
|
11
10
|
include Ankit
|
@@ -110,7 +109,7 @@ class RoundTest < Test::Unit::TestCase
|
|
110
109
|
include Ankit::TestHelper
|
111
110
|
|
112
111
|
def test_hello
|
113
|
-
assert_equal(make_runtime.dispatch_then(["round"]).printed_line, "6
|
112
|
+
assert_equal(make_runtime.dispatch_then(["round"]).printed_line, "6 7")
|
114
113
|
end
|
115
114
|
|
116
115
|
def test_vanilla
|
@@ -230,14 +229,14 @@ class FailPassTest < Test::Unit::TestCase
|
|
230
229
|
|
231
230
|
def test_pass_vanilla
|
232
231
|
run_test_against("pass", VANILLA) do |events|
|
233
|
-
assert_equal(events[0].name,
|
234
|
-
assert_equal(events[
|
232
|
+
assert_equal([events[0].maturity, events[0].name], [2, JUNIOR])
|
233
|
+
assert_equal([events[1].maturity, events[1].name], [1, VANILLA])
|
235
234
|
end
|
236
235
|
end
|
237
236
|
|
238
237
|
def test_pass_vintage
|
239
238
|
run_test_against("pass", VINTAGE) do |events|
|
240
|
-
assert_equal(events.map(&:name), [
|
239
|
+
assert_equal(events.map(&:name), [JUNIOR, VANILLA, MIDDLE, VINTAGE])
|
241
240
|
end
|
242
241
|
end
|
243
242
|
|
@@ -251,14 +250,14 @@ class FailPassTest < Test::Unit::TestCase
|
|
251
250
|
def test_fail_vanilla
|
252
251
|
run_test_against("fail", VANILLA) do |events|
|
253
252
|
assert_equal(events[0].name, VANILLA)
|
254
|
-
assert_equal(events[0].maturity,
|
253
|
+
assert_equal(events[0].maturity, -1)
|
255
254
|
end
|
256
255
|
end
|
257
256
|
|
258
257
|
def test_fail_vintage
|
259
258
|
run_test_against("fail", VINTAGE) do |events|
|
260
|
-
assert_equal(events.map(&:name), [
|
261
|
-
assert_equal(events[0].maturity,
|
259
|
+
assert_equal(events.map(&:name), [VINTAGE, VANILLA, JUNIOR, MIDDLE])
|
260
|
+
assert_equal(events[0].maturity, -1)
|
262
261
|
end
|
263
262
|
end
|
264
263
|
end
|
@@ -289,6 +288,14 @@ class ChallengeTest < Test::Unit::TestCase
|
|
289
288
|
assert_equal(actual.progress.size, 2)
|
290
289
|
end
|
291
290
|
|
291
|
+
def test_empty_repo
|
292
|
+
runtime = make_runtime(EMPTY_REPO)
|
293
|
+
command = runtime.make_command(["challenge", "--limit", "2"])
|
294
|
+
assert_raise(ExpectedFatalError) do
|
295
|
+
command.execute
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
292
299
|
def test_initial_state_limit_rc
|
293
300
|
file = Tempfile.new('foo')
|
294
301
|
begin
|
@@ -431,7 +438,7 @@ EOF
|
|
431
438
|
with_runtime_on_temp_repo do |runtime|
|
432
439
|
actual = ChallengeCommand.new(runtime, ["--limit", "2"]).initial_state
|
433
440
|
actual = pass_two(actual)
|
434
|
-
p actual.class
|
441
|
+
#p actual.class
|
435
442
|
actual = agree_pump(actual, "n")
|
436
443
|
assert_instance_of(Challenge::QuestionState, actual)
|
437
444
|
end
|
data/test/event_test.rb
CHANGED
@@ -35,7 +35,7 @@ class EventTest < Test::Unit::TestCase
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_to_failed
|
38
|
-
json = JSON.parse('{"type":"card","verb":"failed","name":"hello","maturity"
|
38
|
+
json = JSON.parse('{"type":"card","verb":"failed","name":"hello","maturity":-1,"best":1}')
|
39
39
|
expected = Event.new(@next_envelope, json)
|
40
40
|
actual = @target.to_failed(@next_envelope)
|
41
41
|
assert_equal(actual, expected)
|
@@ -45,6 +45,7 @@ class EventTest < Test::Unit::TestCase
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def test_next_round
|
48
|
-
assert_equal(@target.next_round,
|
48
|
+
assert_equal(@target.next_round, 2)
|
49
49
|
end
|
50
|
+
|
50
51
|
end
|
data/test/helpers.rb
CHANGED
@@ -2,12 +2,14 @@
|
|
2
2
|
require 'ankit/runtime'
|
3
3
|
require 'stringio'
|
4
4
|
require 'fileutils'
|
5
|
+
require 'mocha'
|
5
6
|
|
6
7
|
module Ankit
|
7
8
|
TEST_DATA_BASE = File.join(File.dirname(__FILE__), "data")
|
8
9
|
HELLO_REPO = File.join(TEST_DATA_BASE, "hello_repo")
|
9
10
|
VANILLA_REPO = File.join(TEST_DATA_BASE, "vanilla_repo")
|
10
11
|
NUMBER_REPO = File.join(TEST_DATA_BASE, "number_repo")
|
12
|
+
EMPTY_REPO = File.join(TEST_DATA_BASE, "empty_repo")
|
11
13
|
|
12
14
|
class RuntimeWithMockedIO < Runtime
|
13
15
|
def initialize(config)
|
data/test/progress_test.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
require 'ankit/runtime'
|
3
3
|
require 'test/unit'
|
4
|
+
require 'helpers'
|
4
5
|
|
5
6
|
class ProgressTest < Test::Unit::TestCase
|
6
7
|
include Ankit
|
@@ -24,7 +25,7 @@ class ProgressTest < Test::Unit::TestCase
|
|
24
25
|
assert_equal(target.index, 0)
|
25
26
|
assert_equal(target.slots[0].rating, :failed)
|
26
27
|
assert_equal(target.slots[0].event, fetched_event)
|
27
|
-
assert_equal(
|
28
|
+
assert_equal(-1, fetched_event.maturity)
|
28
29
|
assert(runtime.printed_line.empty?)
|
29
30
|
assert_equal(1, target.nfailed)
|
30
31
|
assert_equal(0, target.npassed)
|
@@ -82,7 +83,7 @@ class ProgressTest < Test::Unit::TestCase
|
|
82
83
|
assert_equal(target.index, 1)
|
83
84
|
assert_equal(target.slots[0].rating, :failed)
|
84
85
|
assert_equal(target.slots[0].event, fetched_event)
|
85
|
-
assert_equal(
|
86
|
+
assert_equal(-1, fetched_event.maturity)
|
86
87
|
|
87
88
|
assert_equal(1, target.nfailed)
|
88
89
|
assert_equal(0, target.npassed)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ankit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: highline
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 1.6.11
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.6.11
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: diff-lcs
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: 1.1.3
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.1.3
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: json
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,18 +53,28 @@ dependencies:
|
|
43
53
|
version: 1.6.5
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.6.5
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: mocha
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
53
68
|
- !ruby/object:Gem::Version
|
54
69
|
version: 0.10.4
|
55
|
-
type: :
|
70
|
+
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.10.4
|
58
78
|
description: ! 'Ankit is a CLI and terminal based flashcard program to learn your
|
59
79
|
new language.
|
60
80
|
|
@@ -66,53 +86,54 @@ extensions: []
|
|
66
86
|
extra_rdoc_files: []
|
67
87
|
files:
|
68
88
|
- bin/ankit
|
89
|
+
- lib/ankit.rb
|
90
|
+
- lib/ankit/score_command.rb
|
91
|
+
- lib/ankit/runtime.rb
|
92
|
+
- lib/ankit/round_command.rb
|
93
|
+
- lib/ankit/challenge_command.rb
|
94
|
+
- lib/ankit/fail_command.rb
|
95
|
+
- lib/ankit/event_traversing_command.rb
|
96
|
+
- lib/ankit/list_command.rb
|
69
97
|
- lib/ankit/pass_command.rb
|
70
|
-
- lib/ankit/card.rb
|
71
98
|
- lib/ankit/coming_command.rb
|
99
|
+
- lib/ankit/find_command.rb
|
72
100
|
- lib/ankit/text_reading_command.rb
|
73
|
-
- lib/ankit/
|
74
|
-
- lib/ankit/
|
75
|
-
- lib/ankit/add_command.rb
|
76
|
-
- lib/ankit/event.rb
|
101
|
+
- lib/ankit/card.rb
|
102
|
+
- lib/ankit/challenge.rb
|
77
103
|
- lib/ankit/hello_command.rb
|
78
|
-
- lib/ankit/
|
79
|
-
- lib/ankit/event_traversing_command.rb
|
80
|
-
- lib/ankit/round_command.rb
|
81
|
-
- lib/ankit/runtime.rb
|
82
|
-
- lib/ankit/name_command.rb
|
83
|
-
- lib/ankit/score_command.rb
|
104
|
+
- lib/ankit/event.rb
|
84
105
|
- lib/ankit/card_happening_command.rb
|
85
|
-
- lib/ankit/
|
86
|
-
- lib/ankit/
|
87
|
-
- lib/ankit/
|
88
|
-
- lib/ankit.rb
|
106
|
+
- lib/ankit/add_command.rb
|
107
|
+
- lib/ankit/command.rb
|
108
|
+
- lib/ankit/errors.rb
|
109
|
+
- lib/ankit/name_command.rb
|
110
|
+
- test/card_test.rb
|
111
|
+
- test/helpers.rb
|
112
|
+
- test/progress_test.rb
|
89
113
|
- test/data/vanilla_repo/anemone.journal
|
90
|
-
- test/data/hope-and-luck.txt
|
91
|
-
- test/data/hello_card.card
|
92
|
-
- test/data/hello_repo/cards/foo/this_is_not_a_card.txt
|
93
|
-
- test/data/hello_repo/cards/foo/vanilla-please.card
|
94
|
-
- test/data/hello_repo/cards/foo/hello.card
|
95
114
|
- test/data/hello_repo/baobab.journal
|
96
115
|
- test/data/hello_repo/anemone.journal
|
97
|
-
- test/data/
|
116
|
+
- test/data/hello_repo/cards/foo/hello.card
|
117
|
+
- test/data/hello_repo/cards/foo/this_is_not_a_card.txt
|
118
|
+
- test/data/hello_repo/cards/foo/vanilla-please.card
|
119
|
+
- test/data/bye_card.card
|
120
|
+
- test/data/hello_card.card
|
98
121
|
- test/data/luck.card
|
99
122
|
- test/data/hello_config.rb
|
100
|
-
- test/data/
|
101
|
-
- test/data/number_repo/
|
102
|
-
- test/data/number_repo/cards/five.card
|
123
|
+
- test/data/hope-and-luck.txt
|
124
|
+
- test/data/number_repo/anemone.journal
|
103
125
|
- test/data/number_repo/cards/three.card
|
104
|
-
- test/data/number_repo/cards/eight.card
|
105
|
-
- test/data/number_repo/cards/four.card
|
106
126
|
- test/data/number_repo/cards/seven.card
|
127
|
+
- test/data/number_repo/cards/one.card
|
128
|
+
- test/data/number_repo/cards/four.card
|
107
129
|
- test/data/number_repo/cards/two.card
|
108
130
|
- test/data/number_repo/cards/six.card
|
109
|
-
- test/data/number_repo/
|
131
|
+
- test/data/number_repo/cards/eight.card
|
132
|
+
- test/data/number_repo/cards/five.card
|
133
|
+
- test/data/hope.card
|
110
134
|
- test/event_test.rb
|
111
135
|
- test/runtime_test.rb
|
112
136
|
- test/command_test.rb
|
113
|
-
- test/helpers.rb
|
114
|
-
- test/card_test.rb
|
115
|
-
- test/progress_test.rb
|
116
137
|
homepage: https://github.com/omo/ankit
|
117
138
|
licenses: []
|
118
139
|
post_install_message:
|
@@ -133,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
154
|
version: '0'
|
134
155
|
requirements: []
|
135
156
|
rubyforge_project:
|
136
|
-
rubygems_version: 1.8.
|
157
|
+
rubygems_version: 1.8.24
|
137
158
|
signing_key:
|
138
159
|
specification_version: 3
|
139
160
|
summary: A CLI Flashcard.
|