Skip to content

Commit d07b586

Browse files
committed
CLI support for language switching
1 parent a8cd1f4 commit d07b586

File tree

5 files changed

+45
-16
lines changed

5 files changed

+45
-16
lines changed

language_cards.gemspec

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,27 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
44
require 'language_cards/version'
55

66
Gem::Specification.new do |spec|
7-
spec.name = "language_cards"
7+
spec.name = 'language_cards'
88
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']
1111

1212
spec.summary = %q{Flashcard game for language learning.}
1313
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'
1616

1717
spec.files = `git ls-files -z`.split("\x0").reject do |f|
1818
f.match(%r{^(test|spec|features)/})
1919
end
2020

2121
spec.executables = ['language_cards']
22-
spec.require_paths = ["lib","cards"]
22+
spec.require_paths = ['lib','cards']
2323

24-
spec.add_dependency "highline", "~> 1.7"
25-
spec.add_dependency "i18n", "~> 0.7"
26-
spec.add_development_dependency "bundler", "~> 1.13"
27-
spec.add_development_dependency "rake", "~> 12.3"
28-
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'
2930
end

lib/language_cards.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
require 'language_cards/language_cards'
33
require 'yaml'
44
require 'i18n'
5+
require 'slop'
56
require 'highline'
67

78
##
@@ -11,7 +12,11 @@
1112
# * Weighted random for better learning
1213

1314
module LanguageCards
14-
CARD_LANGUAGE = 'en'
15+
OPTS = Slop.parse do |args|
16+
args.string '-l', '--language', 'language (default: en)', default: 'en'
17+
end
18+
19+
CARD_LANGUAGE = OPTS[:language]
1520

1621
module ESC
1722
CLEAR = (ERASE_SCOLLBACK = "\e[3J") + (CURSOR_HOME = "\e[H") + (ERASE_DISPLAY = "\e[2J")

lib/language_cards/controllers/application_controller.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,25 @@ module Controllers
33
class ApplicationController
44
include Helpers::ViewHelper
55

6+
def initialize(opts = {})
7+
@opts = opts
8+
end
9+
610
def render(_binding)
711
view = ERB.new IO.read File.expand_path("../view/#{snake name}.erb", __dir__)
812

913
view.result(_binding)
1014
end
1115

1216
private
17+
attr_reader :opts
1318
def name
1419
self.class.name.split('::').last
1520
end
21+
22+
def errors
23+
Array(opts[:errors])
24+
end
1625
end
1726
end
1827
end

lib/language_cards/user_interface.rb

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class UserInterface
1111
include Controllers
1212
def initialize cards
1313
@cards = cards
14-
@courses = cards.flat_map {|i| i.label.join(' - ') }
14+
@courses = process_courses(cards)
1515
@mode = [:translate, :typing_practice].cycle
1616
end
1717

@@ -26,7 +26,7 @@ def start
2626
loop do
2727
clear
2828

29-
CLI.say MainMenu.new.render courses: courses, mode: mode
29+
CLI.say MainMenu.new(opts).render courses: courses, mode: mode
3030

3131
value = CLI.ask("")
3232

@@ -40,7 +40,7 @@ def start
4040
title = "#{collection.title} (#{humanize mode.peek})"
4141
collection = collection.mode(mode.peek) # Mode<CardSet> < Game
4242

43-
game = Game.new
43+
game = Game.new(opts)
4444
timer = Timer.new
4545
begin # Game Loop
4646
loop do
@@ -66,13 +66,27 @@ def start
6666

6767
private
6868
attr_reader :mode, :cards, :correct, :incorrect, :courses
69+
def opts
70+
@opts ||= {}
71+
end
72+
6973
def correct!
7074
@correct = @correct.to_i + 1
7175
end
7276

7377
def incorrect!
7478
@incorrect = @incorrect.to_i + 1
7579
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
7690
end
7791
end
7892

lib/language_cards/view/main_menu.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<%= draw(_title, nil, 'v' + VERSION) %>
33
<%= divider %>
44
<%= draw(_select, nil, _mode) %>
5-
<% _courses.each do |course| %>
5+
<% (_courses.empty? ? errors : _courses).each do |course| %>
66
<%= course.chomp %><% end %>
77

88
<%= draw(_mexit, nil, _toggle) %>

0 commit comments

Comments
 (0)