language_cards 0.3.0 → 0.3.1

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
  SHA256:
3
- metadata.gz: 70409b30502a716a2fb4ab829f6011b9f9a0cc2fbc56ccb608e14ce3b8a54da7
4
- data.tar.gz: c83ba36d7157de02a4cc67b65eef49a0743fa777c0a42939ccd8dc7d73ff1fe5
3
+ metadata.gz: 409fa54cd14dc132b49083d8e4a26cd768803b13aff44e822da5c23cd5898e9a
4
+ data.tar.gz: ba9fcbcf3df0a95c6b7984772c90a21560beefa4790058b277dbce27515b6924
5
5
  SHA512:
6
- metadata.gz: affeaf6f6ecfffc3ff5cf5f3b6b63219961d636349cdc25abf31fd0e985dc1a34758b1739cbbc1541412eee67d541b9312c4cb1e349234fc10b4829485b25a56
7
- data.tar.gz: 5328c5eebdec336a264f5303dadad4b29d99bed2c9e830ba158e72778f7d2637d1b8a2da77848d4271a2a55f993bd81d123cd5d0d9e7106c24eab0040c009146
6
+ metadata.gz: 83285da9cb6ac703432739dc0f20ed8155bc84e73891f171b8aab07d9744b41da30ba997b5e6a8266cba55186216e31a417718ea84d45dcf9b7a8e7793568d93
7
+ data.tar.gz: b310a242bb5e3299bedbc306829becbab0f82bb602a4884bde516ad52356b833670ac9542c8433347dcdc43c7845b8403b2729bf345cc162c403debfd616cae4
@@ -0,0 +1,107 @@
1
+ --- # https://www.jlptstudy.net/N5/?kanji-list
2
+ Japanese:
3
+ Kanji (JLPT Level N5):
4
+ mapping: { Kanji: [Hiragana, English] }
5
+ 一: [ひと, ひとつ, one, only, even, 1]
6
+ 七: [なな, seven, 7]
7
+ 万: [よろず, ten thousand]
8
+ 三: [さん, three, 3]
9
+ 上: [うえ, above, up]
10
+ 下: [した, below, down, descend, give, low, inferior]
11
+ 中: [なか, in, inside, middle, mean, center]
12
+ 九: [ここの, nine, 9]
13
+ 二: [に, two, 2]
14
+ 五: [ご, five, 5]
15
+ 人: [ひと, people, person, man, human being, other people, mankind]
16
+ 今: [いま, now]
17
+ 休: [きゅう, rest, day off, retire, sleep]
18
+ 会: [かい, gathering, meeting, meet, party, association, interview, join]
19
+ 何: [なに, なん, what]
20
+ 先: [さき, before, ahead, previous, future, precedence]
21
+ 入: [いり, enter, insert]
22
+ 八: [はち, eight, 8]
23
+ 六: [ろく, six, 6]
24
+ 円: [えん, circle, yen, round]
25
+ 出: [で, exit, leave]
26
+ 分: [ぶん, part, minute of time, segment, share, degree, one's lot, duty, understand, know, rate, 1%, chances, shaku/100]
27
+ 前: [まえ, in front, before]
28
+ 北: [きた, north]
29
+ 十: [じゅう, ten, 10]
30
+ 千: [せん, thousand, 1000]
31
+ 午: [うま, noon, sign of the horse, 11AM-1PM, seventh sign of Chinese zodiac]
32
+ 半: [はん, half, middle, odd number, semi-, part-]
33
+ 南: [みなみ, south]
34
+ 友: [とも, friend]
35
+ 口: [くち, mouth]
36
+ 古: [ふる, old]
37
+ 右: [みぎ, right]
38
+ 名: [な, name, noted, distinguished, reputation]
39
+ 四: [よん, four, 4]
40
+ 国: [くに, country, state, region, province, home, hometown, homeland, home country, land, earth]
41
+ 土: [つち, soil, earth, ground, Turkey]
42
+ 外: [そと, outside, outside of]
43
+ 多: [さわ, many, frequent, much]
44
+ 大: [おお, large, big]
45
+ 天: [てん, heavens, sky, imperial]
46
+ 女: [おんな, woman, female]
47
+ 子: [こ, child, sign of the rat, 11PM-1AM, first sign of Chinese zodiac]
48
+ 学: [がく, study, learning, science]
49
+ 安: [あん, cheap, relax, low, quiet, rested, contented, peaceful]
50
+ 小: [しょう, little, small]
51
+ 少: [すくな, few, little]
52
+ 山: [やま, mountain]
53
+ 川: [かわ, stream, river]
54
+ 左: [ひだり, left]
55
+ 年: [とし, year, counter for years, age]
56
+ 店: [みせ, store, shop]
57
+ 後: [あと, behind, back, later]
58
+ 手: [て, hand]
59
+ 新: [しん, new]
60
+ 日: [ひ, day, sun, Japan, counter for days, sunshine, sunlight, case, event]
61
+ 時: [じ, time, hour]
62
+ 書: [しょ, write]
63
+ 月: [つき, month, moon]
64
+ 木: [き, tree, wood]
65
+ 本: [もと, book, present, main, 'true', real, counter for long cylindrical things]
66
+ 来: [き, come, due, next, cause, become]
67
+ 東: [ひがし, east]
68
+ 校: [-こう, exam, school, printing, proof, correction]
69
+ 母: [はは, mama, mother]
70
+ 毎: [まい, every]
71
+ 気: [いき, spirit, mind, air, atmosphere, mood]
72
+ 水: [みず, water]
73
+ 火: [ひ, fire]
74
+ 父: [ちち, father]
75
+ 生: [なま, life, genuine, birth]
76
+ 男: [おとこ, male]
77
+ 白: [しろ, white]
78
+ 百: [もも, hundred, 100]
79
+ 目: [め, eye, class, look, insight, experience, care, favor]
80
+ 社: [やしろ, company, firm, office, association, shrine]
81
+ 空: [そら, empty, sky, void, vacant, vacuum]
82
+ 立: [たて, stand up]
83
+ 耳: [みみ, ear]
84
+ 聞: [きき, hear, ask, listen]
85
+ 花: [はな, flower]
86
+ 行: [こう, going, journey]
87
+ 西: [にし, west, Spain]
88
+ 見: [み, see, hopes, chances, idea, opinion, look at, visible]
89
+ 言: [げん, say]
90
+ 話: [はなし, tale, talk]
91
+ 語: [ご, word, speech, language]
92
+ 読: [よみ, read]
93
+ 買: [かい, buy]
94
+ 足: [あし, leg, foot, be sufficient, counter for pairs of footwear]
95
+ 車: [くるま, car]
96
+ 週: [しゅう, week]
97
+ 道: [みち, road-way, street, district, journey, course, moral, teachings]
98
+ 金: [きん, gold]
99
+ 長: [なが, long, leader]
100
+ 間: [ま, interval, space]
101
+ 雨: [あめ, rain]
102
+ 電: [でん, electricity]
103
+ 食: [しょく, eat, food]
104
+ 飲: [いん, drink, smoke, take]
105
+ 駅: [えき, station]
106
+ 高: [こう, tall, high, expensive]
107
+ 魚: [さかな, fish]
@@ -4,27 +4,27 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'language_cards/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "language_cards"
7
+ spec.name = 'language_cards'
8
8
  spec.version = LanguageCards::VERSION
9
- spec.authors = ["Daniel P. Clark"]
10
- spec.email = ["6ftdan@gmail.com"]
9
+ spec.authors = ['Daniel P. Clark']
10
+ spec.email = ['6ftdan@gmail.com']
11
11
 
12
12
  spec.summary = %q{Flashcard game for language learning.}
13
13
  spec.description = %q{Flashcard game for language learning. Make your own cards or translations as well.}
14
- spec.homepage = "http://github.com/danielpclark/language_cards"
15
- spec.license = "MIT"
14
+ spec.homepage = 'http://github.com/danielpclark/language_cards'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
18
  f.match(%r{^(test|spec|features)/})
19
19
  end
20
20
 
21
21
  spec.executables = ['language_cards']
22
- spec.require_paths = ["lib","cards"]
22
+ spec.require_paths = ['lib','cards']
23
23
 
24
- spec.add_dependency "highline", "~> 1.7"
25
- spec.add_dependency "i18n", "~> 0.7"
26
- spec.add_dependency "elixirize", "~> 0.3"
27
- spec.add_development_dependency "bundler", "~> 1.13"
28
- spec.add_development_dependency "rake", "~> 12.3"
29
- spec.add_development_dependency "minitest", "~> 5.10"
24
+ spec.add_dependency 'highline', '~> 1.7'
25
+ spec.add_dependency 'i18n', '~> 0.7'
26
+ spec.add_dependency 'slop', '~> 4.6'
27
+ spec.add_development_dependency 'bundler', '~> 1.13'
28
+ spec.add_development_dependency 'rake', '~> 12.3'
29
+ spec.add_development_dependency 'minitest', '~> 5.10'
30
30
  end
@@ -2,17 +2,22 @@ require 'language_cards/version'
2
2
  require 'language_cards/language_cards'
3
3
  require 'yaml'
4
4
  require 'i18n'
5
+ require 'slop'
5
6
  require 'highline'
6
- require 'elixirize'
7
7
 
8
8
  ##
9
9
  # TODO:
10
10
  # * Implement score-keeper
11
11
  # * Race against the clock
12
12
  # * Weighted random for better learning
13
- # * Value to Value is simply keyboard practice and should be clocked
14
13
 
15
14
  module LanguageCards
15
+ OPTS = Slop.parse do |args|
16
+ args.string '-l', '--language', 'language (default: en)', default: 'en'
17
+ end
18
+
19
+ CARD_LANGUAGE = OPTS[:language]
20
+
16
21
  module ESC
17
22
  CLEAR = (ERASE_SCOLLBACK = "\e[3J") + (CURSOR_HOME = "\e[H") + (ERASE_DISPLAY = "\e[2J")
18
23
  end
@@ -0,0 +1,27 @@
1
+ module LanguageCards
2
+ module Controllers
3
+ class ApplicationController
4
+ include Helpers::ViewHelper
5
+
6
+ def initialize(opts = {})
7
+ @opts = opts
8
+ end
9
+
10
+ def render(_binding)
11
+ view = ERB.new IO.read File.expand_path("../view/#{snake name}.erb", __dir__)
12
+
13
+ view.result(_binding)
14
+ end
15
+
16
+ private
17
+ attr_reader :opts
18
+ def name
19
+ self.class.name.split('::').last
20
+ end
21
+
22
+ def errors
23
+ Array(opts[:errors])
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,72 +1,68 @@
1
+ require 'language_cards/controllers/application_controller'
2
+
1
3
  module LanguageCards
2
4
  module Controllers
3
- module Game
4
- class << self
5
- include Helpers::ViewHelper
6
- include Helpers::GameHelper
5
+ class Game < ApplicationController
6
+ include Helpers::GameHelper
7
7
 
8
- def render(correct:, incorrect:, title:, timer:, last:)
9
- _score = t('Game.ScoreMenu.Score') + ": %0.2d%%" % calc_score(correct, incorrect)
10
- _timer = [((t('Timer.Timer') + ": " + timer.ha) if timer.time?), nil, timer.h]
11
- _mexit = t 'Menu.Exit'
8
+ def render(correct:, incorrect:, title:, timer:, last:)
9
+ _score = t('Game.ScoreMenu.Score') + ": %0.2d%%" % calc_score(correct, incorrect)
10
+ _timer = [((t('Timer.Timer') + ": " + timer.ha) if timer.time?), nil, timer.h]
11
+ _mexit = t 'Menu.Exit'
12
12
 
13
- view = File.expand_path('../view/game.erb', __dir__).
14
- ᐅ( IO.method :read ).
15
- ᐅ ERB.method :new
16
- view.result(binding)
17
- end
13
+ super(binding)
14
+ end
18
15
 
19
- def process(cards, mode)
20
- ic = struct_data.new(cards, mode)
21
- ic.get_input
22
- {
23
- correct: ic.valid?,
24
- last: ic.valid? ? ic.correct_msg : ic.incorrect_msg
25
- }
26
- end
16
+ def process(cards, mode)
17
+ ic = struct_data.new(cards, mode)
18
+ ic.get_input
19
+ {
20
+ correct: ic.valid?,
21
+ last: ic.valid? ? ic.correct_msg : ic.incorrect_msg
22
+ }
23
+ end
27
24
 
28
- def struct_data
29
- Struct.new(:card_set, :mode) do
30
- def input
31
- @input
32
- end
25
+ def struct_data
26
+ Struct.new(:card_set, :mode) do
27
+ def input
28
+ @input
29
+ end
33
30
 
34
- def get_input
35
- @input ||= CLI.ask("#{I18n.t('Game.TypeThis')}: #{display}")
36
- end
31
+ def get_input
32
+ @input ||= CLI.ask("#{I18n.t('Game.TypeThis')}: #{display}")
33
+ end
37
34
 
38
- def card
39
- @card ||= card_set.sample.current
40
- end
35
+ def card
36
+ @card ||= card_set.sample.current
37
+ end
41
38
 
42
- def display
43
- "#{card}"
44
- end
39
+ def display
40
+ "#{card}"
41
+ end
45
42
 
46
- def expected
47
- case mode
48
- when :translate
49
- card.translation
50
- when :typing_practice
51
- "#{card}"
52
- else
53
- raise "Invalid mode in Game Controller!"
54
- end
43
+ def expected
44
+ case mode
45
+ when :translate
46
+ card.translation
47
+ when :typing_practice
48
+ "#{card}"
49
+ else
50
+ raise "Invalid mode in Game Controller!"
55
51
  end
52
+ end
56
53
 
57
- def correct_msg
58
- "#{I18n.t('Game.Correct')} #{input} = #{display}"
59
- end
54
+ def correct_msg
55
+ "#{I18n.t('Game.Correct')} #{input} = #{display}"
56
+ end
60
57
 
61
- def incorrect_msg
62
- output = "#{I18n.t('Game.Incorrect')} #{input} != #{display}"
63
- output << " #{I18n.t('Game.Its')} #{expected.join(', ')}" if mode == :translate
64
- output
65
- end
58
+ def incorrect_msg
59
+ output = "#{I18n.t('Game.Incorrect')} #{input} != #{display}"
60
+ output << " #{I18n.t('Game.Its')} #{expected.join(', ')}" if mode == :translate
61
+ output
62
+ end
66
63
 
67
- def valid?
68
- card_set.match? input
69
- end
64
+ def valid?
65
+ card_set.match? input
70
66
  end
71
67
  end
72
68
  end
@@ -1,25 +1,20 @@
1
+ require 'language_cards/controllers/application_controller'
2
+
1
3
  module LanguageCards
2
4
  module Controllers
3
- module MainMenu
4
- class << self
5
- include Helpers::ViewHelper
6
-
7
- def render(courses:, mode:)
8
- _title = t 'Menu.Title'
9
- _select = t 'Menu.Choose'
10
- _mode = t('Menu.GameMode') + case mode.peek
11
- when :translate then t 'Menu.ModeTranslate'
12
- when :typing_practice then t 'Menu.ModeTyping'
13
- end
14
- _toggle = "m: " + t('Menu.ToggleGameMode')
15
- _courses = courses.each.with_index.map {|item,index| "#{index + 1}: #{item}" }
16
- _mexit = t 'Menu.Exit'
5
+ class MainMenu < ApplicationController
6
+ def render(courses:, mode:)
7
+ _title = t 'Menu.Title'
8
+ _select = t 'Menu.Choose'
9
+ _mode = t('Menu.GameMode') + case mode.peek
10
+ when :translate then t 'Menu.ModeTranslate'
11
+ when :typing_practice then t 'Menu.ModeTyping'
12
+ end
13
+ _toggle = "m: " + t('Menu.ToggleGameMode')
14
+ _courses = courses.each.with_index.map {|item,index| "#{index + 1}: #{item}" }
15
+ _mexit = t 'Menu.Exit'
17
16
 
18
- view = File.expand_path('../view/main_menu.erb', __dir__).
19
- ᐅ( IO.method :read ).
20
- ᐅ ERB.method :new
21
- view.result(binding)
22
- end
17
+ super(binding)
23
18
  end
24
19
  end
25
20
  end
@@ -23,6 +23,14 @@ module LanguageCards
23
23
  def humanize string
24
24
  "#{string}".split('_').map(&:capitalize).join(' ')
25
25
  end
26
+
27
+ def snake string
28
+ "#{string}".gsub(/(.)([A-Z])/, '\1_\2').downcase
29
+ end
30
+
31
+ def wordwrap words
32
+ "#{words}".gsub(/(.{1,#{SUBMENUWIDTH - 7}})(\s+|\Z)/, "\\1\n\t").strip
33
+ end
26
34
  end
27
35
  end
28
36
  end
@@ -1,55 +1,25 @@
1
1
  require 'language_cards/menu_node'
2
- require_relative 'user_interface'
2
+ require 'language_cards/yaml_loader'
3
+ require 'language_cards/user_interface'
3
4
 
4
5
  module LanguageCards
5
6
  class LanguageCards
6
7
  def initialize
7
- @CARDS = {}
8
-
9
- # TODO: Extract out YAML file loading behavior to methods via SRP.
10
- File.join('..','..').
11
- ᐅ(File.method(:expand_path), __dir__ ).
12
- ᐅ(File.method(:join), 'cards', '*.yml').
13
- ᐅ(Dir.method :[] ).
14
- +(
15
- if ENV['HOME']
16
- File.expand_path(ENV['HOME']).
17
- ᐅ(File.method(:join), '.language_cards', 'cards', '*.yml').
18
- ᐅ Dir.method :[]
19
- else
20
- []
21
- end
22
- ).
23
- each do |c|
24
- next unless yaml_data = c.ᐅ(File.method :open).ᐅ(~:read).ᐅ(YAML.method :load)
25
- for language in yaml_data.keys do
26
- # Merges sub-items for languages
27
- if @CARDS.has_key? language
28
- @CARDS[language] = \
29
- yaml_data[language].
30
- ᐅ(method :Hash).
31
- ᐅ @CARDS[language].
32
- ᐅ(method :Hash).
33
- method(:merge)
34
- else
35
- # Merges top scope languages
36
- { language => yaml_data[language] }.
37
- ᐅ @CARDS.method :merge!
38
- end
39
- end
8
+ self.cards = builder(YAMLLoader.new.load)
9
+ end
40
10
 
41
- end
11
+ def start
12
+ UserInterface.new(cards).start
13
+ end
42
14
 
43
- # Builder
44
- @CARDS = @CARDS.each_with_object([]) do |(language, values), memo|
15
+ private
16
+ attr_accessor :cards
17
+ def builder(cards_yaml)
18
+ cards_yaml.each_with_object([]) do |(language, values), memo|
45
19
  values.each do |category_with_card_set|
46
20
  memo << MenuNode.new(language, category_with_card_set)
47
21
  end
48
22
  end
49
23
  end
50
-
51
- def start
52
- @CARDS.ᐅ(UserInterface.method :new).ᐅ ~:start
53
- end
54
24
  end
55
25
  end
@@ -11,7 +11,7 @@ module LanguageCards
11
11
  include Controllers
12
12
  def initialize cards
13
13
  @cards = cards
14
- @courses = cards.flat_map {|i| i.label.join(' - ') }
14
+ @courses = process_courses(cards)
15
15
  @mode = [:translate, :typing_practice].cycle
16
16
  end
17
17
 
@@ -26,7 +26,7 @@ module LanguageCards
26
26
  loop do
27
27
  clear
28
28
 
29
- CLI.say MainMenu.render courses: courses, mode: mode
29
+ CLI.say MainMenu.new(opts).render courses: courses, mode: mode
30
30
 
31
31
  value = CLI.ask("")
32
32
 
@@ -40,17 +40,18 @@ module LanguageCards
40
40
  title = "#{collection.title} (#{humanize mode.peek})"
41
41
  collection = collection.mode(mode.peek) # Mode<CardSet> < Game
42
42
 
43
+ game = Game.new(opts)
43
44
  timer = Timer.new
44
45
  begin # Game Loop
45
46
  loop do
46
47
  clear
47
48
  timer.mark
48
- CLI.say Game.render correct: correct,
49
+ CLI.say game.render correct: correct,
49
50
  incorrect: incorrect,
50
51
  title: title,
51
52
  timer: timer,
52
53
  last: last
53
- result = Game.process(collection, collection.mode)
54
+ result = game.process(collection, collection.mode)
54
55
  result[:correct] ? correct! : incorrect!
55
56
  last = result[:last]
56
57
  end
@@ -65,6 +66,10 @@ module LanguageCards
65
66
 
66
67
  private
67
68
  attr_reader :mode, :cards, :correct, :incorrect, :courses
69
+ def opts
70
+ @opts ||= {}
71
+ end
72
+
68
73
  def correct!
69
74
  @correct = @correct.to_i + 1
70
75
  end
@@ -72,6 +77,16 @@ module LanguageCards
72
77
  def incorrect!
73
78
  @incorrect = @incorrect.to_i + 1
74
79
  end
80
+
81
+ def process_courses(cards)
82
+ courses = cards.flat_map {|i| i.label.join(' - ') }
83
+
84
+ if courses.empty?
85
+ opts[:errors] = ["No Flash Cards found for language: #{CARD_LANGUAGE}"]
86
+ end
87
+
88
+ courses
89
+ end
75
90
  end
76
91
  end
77
92
 
@@ -1,3 +1,3 @@
1
1
  module LanguageCards
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -5,5 +5,5 @@
5
5
  <%= divider %>
6
6
  <%= draw (if correct || incorrect then _score end), nil, _mexit %>
7
7
 
8
- <%= last %>
8
+ <%= wordwrap last %>
9
9
  <%= divider %>
@@ -2,7 +2,7 @@
2
2
  <%= draw(_title, nil, 'v' + VERSION) %>
3
3
  <%= divider %>
4
4
  <%= draw(_select, nil, _mode) %>
5
- <% _courses.each do |course| %>
5
+ <% (_courses.empty? ? errors : _courses).each do |course| %>
6
6
  <%= course.chomp %><% end %>
7
7
 
8
8
  <%= draw(_mexit, nil, _toggle) %>
@@ -0,0 +1,49 @@
1
+ module LanguageCards
2
+ class YAMLLoader
3
+ def initialize
4
+ @language = CARD_LANGUAGE
5
+ end
6
+
7
+ def load
8
+ cards = {}
9
+
10
+ cards_yaml.each do |c|
11
+ next unless yaml_data = YAML.load(File.open(c).read)
12
+ for language in yaml_data.keys do
13
+ # Merges sub-items for languages
14
+ if cards.has_key? language
15
+ cards[language] = Hash( cards[language] ).merge( Hash(yaml_data[language]) )
16
+ else
17
+ # Merges in new top scope languages
18
+ cards.merge!({ language => yaml_data[language] })
19
+ end
20
+ end
21
+ end
22
+
23
+ cards
24
+ end
25
+
26
+ private
27
+ attr_reader :language
28
+
29
+ def application_path
30
+ File.expand_path(File.join('..','..'), __dir__)
31
+ end
32
+
33
+ def cards_yaml
34
+ application_path_cards_yaml + home_path_cards_yaml
35
+ end
36
+
37
+ def application_path_cards_yaml
38
+ Dir[File.join(application_path, 'cards', language, '*.yml')]
39
+ end
40
+
41
+ def home_path_cards_yaml
42
+ if ENV['HOME']
43
+ Dir[File.join(ENV['HOME'], '.language_cards', 'cards', language, '*.yml')]
44
+ else
45
+ []
46
+ end
47
+ end
48
+ end
49
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: language_cards
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel P. Clark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-01 00:00:00.000000000 Z
11
+ date: 2018-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.7'
41
41
  - !ruby/object:Gem::Dependency
42
- name: elixirize
42
+ name: slop
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.3'
47
+ version: '4.6'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.3'
54
+ version: '4.6'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -113,10 +113,12 @@ files:
113
113
  - bin/console
114
114
  - bin/language_cards
115
115
  - bin/setup
116
- - cards/japanese-hiragana.yml
117
- - cards/japanese-katakana.yml
116
+ - cards/en/japanese-hiragana.yml
117
+ - cards/en/japanese-kanji-jlpt-n5.yml
118
+ - cards/en/japanese-katakana.yml
118
119
  - language_cards.gemspec
119
120
  - lib/language_cards.rb
121
+ - lib/language_cards/controllers/application_controller.rb
120
122
  - lib/language_cards/controllers/game.rb
121
123
  - lib/language_cards/controllers/main_menu.rb
122
124
  - lib/language_cards/grapheme_builder.rb
@@ -134,6 +136,7 @@ files:
134
136
  - lib/language_cards/version.rb
135
137
  - lib/language_cards/view/game.erb
136
138
  - lib/language_cards/view/main_menu.erb
139
+ - lib/language_cards/yaml_loader.rb
137
140
  - locales/en.yml
138
141
  homepage: http://github.com/danielpclark/language_cards
139
142
  licenses: