repetition 1.0.1 → 1.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 89fa95239d478362f8cab88f40a62ee975d4d99c
4
- data.tar.gz: 6fe83ccf267e5d018c51ad8400afbcb25e258aa4
3
+ metadata.gz: bab3c51f0e4592dd7fc82d9731b58a0fd323ca80
4
+ data.tar.gz: 524371c1e719cf976ca4986fb3aefed473565725
5
5
  SHA512:
6
- metadata.gz: dbe30561431c38311506b689e146df2396562c726f3bf5775596ac6c891cec2407cb33c90c9124c9df334269f6355ff21311d84436743f8052210b519a67ebb7
7
- data.tar.gz: c757c5d9ac663120acd496682f36d4098dc8abd10cca25208fa36b24332c397bb24b5cee2e73d5f5b5c225ae115066ac273ad811a33d9d2d8b1bb87890178a03
6
+ metadata.gz: 0a3cbbabf457be18665be1c8f52f1867d109711f8c740e5ada8df8339dd74eca10c5189346cae00241793611d26582201c8f6f4da31c5d6c48f2947f33cbbe88
7
+ data.tar.gz: 813ad91b742549a0c9c9478cfaf7b0f9082032440919c1b3c7745040bd89f2bc62e1dc70619c44103cfa2293a64f4b11a97a121aa69565e3c2a83472f11e610e
@@ -0,0 +1,17 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ *.gem
12
+
13
+ # byebug
14
+ .byebug_history
15
+
16
+ # macOS
17
+ *.DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in repetition.gemspec
4
+ gemspec
@@ -0,0 +1,70 @@
1
+ # Repetition gem
2
+ Spaced repetition module which can be used as a mixin in Ruby apps. SuperMemo 2 is used as a repetition algorithm.
3
+
4
+ ### Installation
5
+ Add to your Gemfile
6
+
7
+ gem 'repetition'
8
+
9
+ or install from RubyGems
10
+
11
+ gem install repetition
12
+
13
+
14
+ ### Rails
15
+
16
+ Create a migration to add the new fields to your model.
17
+ ```ruby
18
+ change_table :cards do |t|
19
+ t.decimal :easiness_factor, precision: 2, scale: 1, default: 2.5, null: false
20
+ t.integer :number_repetitions, default: 0, null: false
21
+ t.integer :quality_of_last_recall
22
+ t.date :next_repetition
23
+ t.integer :repetition_interval
24
+ t.date :last_studied
25
+ end
26
+ ```
27
+
28
+ ### Usage
29
+ Include module in your class or ActiveRecord model
30
+ ```ruby
31
+ class Card < ActiveRecord::Base
32
+ # some code
33
+ include Repetition
34
+ end
35
+ ```
36
+
37
+ This will add a bunch of properties to your model:
38
+ * easyness_factor
39
+ * number_repetitions
40
+ * quality_of_last_recall
41
+ * next_repetition
42
+ * repetition_interval
43
+ * last_studied
44
+
45
+ Make sure that appropriate fields are created in your database using migrations
46
+
47
+ You can now use all methods that are provided by gem, use `process_recall_result(quality)` method to update next repetition date. Method takes one argument which should be integer in range from 0 to 5 (0 - again, 5 - perfect).
48
+ ```ruby
49
+ card = Card.first
50
+ card.reset_spaced_repetition_data # Reset data for first use
51
+
52
+ card.next_repetition # => nil
53
+ card.process_recall_result(4)
54
+
55
+ card.repetition_interval # => 1
56
+ card.next_repetition # Tomorrow
57
+ card.save # Don't forget to save your card!
58
+ ```
59
+
60
+ ### Changelog
61
+ #### 1.0
62
+ * Initial version
63
+
64
+ ### Running Specs
65
+
66
+ `bundle exec rake`
67
+
68
+ ### Contributing
69
+ Contributions are welcome! Feel free to post issues and create pull requests.
70
+
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "repetition"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -1,3 +1,7 @@
1
+ require 'repetition/version'
2
+
3
+ require 'date'
4
+
1
5
  module Repetition
2
6
  def reset_spaced_repetition_data
3
7
  self.easiness_factor = 2.5
@@ -10,15 +14,15 @@ module Repetition
10
14
 
11
15
  def process_recall_result(quality_of_recall)
12
16
  unless (1..5).include?(quality_of_recall)
13
- raise 'Invalid quality of recall. Should be in range from 0 to 5.'
17
+ raise 'Invalid quality of recall. Should be in range from 1 to 5.'
14
18
  end
15
-
19
+
16
20
  if quality_of_recall < 3
17
- self.number_repetitions = 0
21
+ self.number_repetitions = 0
18
22
  self.repetition_interval = 0
19
23
  else
20
24
  self.easiness_factor = calculate_easiness_factor(easiness_factor, quality_of_recall)
21
-
25
+
22
26
  if quality_of_recall == 3
23
27
  self.repetition_interval = 0
24
28
  else
@@ -34,7 +38,7 @@ module Repetition
34
38
  end
35
39
  end
36
40
  end
37
-
41
+
38
42
  self.next_repetition = Date.today + repetition_interval
39
43
  self.last_studied = Date.today
40
44
  end
@@ -42,9 +46,9 @@ module Repetition
42
46
  def scheduled_to_recall?
43
47
  !next_repetition.nil? && next_repetition <= Date.today
44
48
  end
45
-
46
- private
47
-
49
+
50
+ private
51
+
48
52
  def calculate_easiness_factor(easiness_factor, quality_of_recall)
49
53
  q = quality_of_recall
50
54
  ef_old = easiness_factor
@@ -52,4 +56,4 @@ module Repetition
52
56
  result = ef_old - 0.8 + (0.28 * q) - (0.02 * q * q)
53
57
  result < 1.3 ? 1.3 : result
54
58
  end
55
- end
59
+ end
@@ -0,0 +1,3 @@
1
+ module Repetition
2
+ VERSION = '1.0.2'
3
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'repetition/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "repetition"
8
+ spec.version = Repetition::VERSION
9
+ spec.authors = ["Dan Kim"]
10
+ spec.email = ["itsdanya@gmail.com"]
11
+
12
+ spec.summary = %q{Spaced repetition algorithm}
13
+ spec.description = %q{Spaced repetition algorithm module that can be used as a mixin in Ruby apps}
14
+ spec.homepage = "http://github.com/danyakim/repetition"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.13"
23
+ spec.add_development_dependency "rake", "~> 11.0"
24
+ spec.add_development_dependency "rspec", "~> 3.0"
25
+ end
metadata CHANGED
@@ -1,37 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repetition
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
- - Danya Kim
7
+ - Dan Kim
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2014-06-14 00:00:00.000000000 Z
11
+ date: 2017-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '11.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '11.0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: rspec
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
- - - ">="
45
+ - - "~>"
18
46
  - !ruby/object:Gem::Version
19
- version: '0'
47
+ version: '3.0'
20
48
  type: :development
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
- - - ">="
52
+ - - "~>"
25
53
  - !ruby/object:Gem::Version
26
- version: '0'
27
- description: Spaced repetition algorithm (SuperMemo 2) module that can be used as
28
- a mixin
29
- email: itsdanya@gmail.com
54
+ version: '3.0'
55
+ description: Spaced repetition algorithm module that can be used as a mixin in Ruby
56
+ apps
57
+ email:
58
+ - itsdanya@gmail.com
30
59
  executables: []
31
60
  extensions: []
32
61
  extra_rdoc_files: []
33
62
  files:
63
+ - ".gitignore"
64
+ - Gemfile
65
+ - README.md
66
+ - Rakefile
67
+ - bin/console
68
+ - bin/setup
34
69
  - lib/repetition.rb
70
+ - lib/repetition/version.rb
71
+ - repetition.gemspec
35
72
  homepage: http://github.com/danyakim/repetition
36
73
  licenses:
37
74
  - MIT
@@ -52,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
89
  version: '0'
53
90
  requirements: []
54
91
  rubyforge_project:
55
- rubygems_version: 2.2.2
92
+ rubygems_version: 2.6.11
56
93
  signing_key:
57
94
  specification_version: 4
58
95
  summary: Spaced repetition algorithm