ankit 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,4 @@
1
+
2
+ module Ankit
3
+ class ExpectedFatalError < StandardError; end
4
+ end
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" => 0, "best" => best }))
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 9")
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, VANILLA)
234
- assert_equal(events[0].maturity, 1)
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), [VANILLA, JUNIOR, MIDDLE, VINTAGE])
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, 0)
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), [VANILLA, VINTAGE, JUNIOR, MIDDLE])
261
- assert_equal(events[0].maturity, 0)
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":0,"best":1}')
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, 3)
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)
@@ -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(0, fetched_event.maturity)
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(0, fetched_event.maturity)
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.6
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-07 00:00:00.000000000 Z
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: &13315100 !ruby/object:Gem::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: *13315100
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: &13314460 !ruby/object:Gem::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: *13314460
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: &13313900 !ruby/object:Gem::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: *13313900
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: &13313420 !ruby/object:Gem::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: :development
70
+ type: :runtime
56
71
  prerelease: false
57
- version_requirements: *13313420
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/challenge_command.rb
74
- - lib/ankit/command.rb
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/find_command.rb
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/challenge.rb
86
- - lib/ankit/fail_command.rb
87
- - lib/ankit/list_command.rb
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/hope.card
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/bye_card.card
101
- - test/data/number_repo/cards/one.card
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/anemone.journal
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.10
157
+ rubygems_version: 1.8.24
137
158
  signing_key:
138
159
  specification_version: 3
139
160
  summary: A CLI Flashcard.