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.
@@ -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.