game_words 0.1.0

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.
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'game_words/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'game_words'
8
+ spec.version = GameWords::VERSION
9
+ spec.authors = ['Nick Aschenbach']
10
+ spec.email = ['nick.aschenbach@gmail.com']
11
+ spec.summary = %q{Find words for pictionary, catchphrase, charades and holidays}
12
+ spec.homepage = 'https://github.com/nick-aschenbach/game-words'
13
+ spec.license = 'MIT'
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_development_dependency 'bundler', '~> 1.7'
21
+ spec.add_development_dependency 'rake', '~> 10.0'
22
+ spec.add_development_dependency 'rspec', '>= 3.0'
23
+ end
@@ -0,0 +1,3 @@
1
+ module GameWords
2
+ VERSION = '0.1.0'
3
+ end
data/lib/game_words.rb ADDED
@@ -0,0 +1,51 @@
1
+ require 'game_words/version'
2
+ require 'yaml'
3
+
4
+ module GameWords
5
+ WORDS_PATH = File.join(File.dirname(__dir__), 'assets', 'game_words', 'game_words.yaml')
6
+
7
+ class Generator
8
+ def initialize
9
+ @game_words = YAML.load_file(WORDS_PATH)
10
+ end
11
+
12
+ def games
13
+ @game_words.keys
14
+ end
15
+
16
+ def game_categories(game)
17
+ return [] unless is_a_valid_game?(game)
18
+
19
+ game_words = @game_words[game]
20
+ game_words.keys
21
+ end
22
+
23
+ def words(game, category = nil)
24
+ return [] unless is_a_valid_game?(game)
25
+ return [] unless category.nil? || is_a_valid_game_category?(game, category)
26
+
27
+ words = @game_words[game][category]
28
+ return words if words
29
+
30
+ all_words = []
31
+ @game_words[game].keys.each do |category|
32
+ all_words += @game_words[game][category]
33
+ end
34
+ all_words
35
+ end
36
+
37
+ private
38
+
39
+ def is_a_valid_game?(game)
40
+ return true if @game_words[game]
41
+
42
+ false
43
+ end
44
+
45
+ def is_a_valid_game_category?(game, category)
46
+ return true if @game_words[game][category]
47
+
48
+ false
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,167 @@
1
+ require 'spec_helper'
2
+
3
+ describe GameWords::Generator do
4
+ describe 'WORDS_PATH' do
5
+ it 'defines a root path for the game words' do
6
+ expect { GameWords::WORDS_PATH }.not_to raise_error
7
+ end
8
+ end
9
+
10
+ describe '.new' do
11
+ subject { GameWords::Generator.new }
12
+
13
+ it 'loads the words YAML file' do
14
+ expect(YAML).to receive(:load_file).with(GameWords::WORDS_PATH)
15
+
16
+ subject
17
+ end
18
+ end
19
+
20
+ describe '#games' do
21
+ subject { GameWords::Generator.new.games }
22
+
23
+ it 'lists the available games' do
24
+ expect(subject).to match_array(['catchphrase',
25
+ 'holidays',
26
+ 'pictionary',
27
+ 'charades'])
28
+ end
29
+ end
30
+
31
+ describe '#game_categories' do
32
+ subject { GameWords::Generator.new.game_categories(game) }
33
+
34
+ context 'catchphrase' do
35
+ let(:game) { 'catchphrase' }
36
+
37
+ it 'lists catchphrase categories' do
38
+ expect(subject).to match_array(['easy',
39
+ 'medium',
40
+ 'hard',
41
+ 'animals',
42
+ 'food',
43
+ 'travel',
44
+ 'people',
45
+ 'household'])
46
+ end
47
+ end
48
+ context 'holidays' do
49
+ let(:game) { 'holidays' }
50
+
51
+ it 'lists the holiday categories' do
52
+ expect(subject).to match_array(['halloween',
53
+ 'christmas',
54
+ 'independence',
55
+ 'thanksgiving',
56
+ 'christmassong',
57
+ 'valentinesaying',
58
+ 'valentinesong',
59
+ 'valentineword',
60
+ 'newyears',
61
+ 'spring'])
62
+ end
63
+ end
64
+ context 'pictionary' do
65
+ let(:game) { 'pictionary' }
66
+
67
+ it 'lists the pictionary categories' do
68
+ expect(subject).to match_array(['easy',
69
+ 'medium',
70
+ 'difficult',
71
+ 'hard',
72
+ 'idioms',
73
+ 'characters',
74
+ 'movies'])
75
+ end
76
+ end
77
+ context 'charades' do
78
+ let(:game) { 'charades' }
79
+
80
+ it 'lists the charades categories' do
81
+ expect(subject).to match_array(['easy',
82
+ 'medium',
83
+ 'difficult',
84
+ 'hard',
85
+ 'actions'])
86
+ end
87
+ end
88
+ context 'undefined game category' do
89
+ let(:game) { 'foosball' }
90
+
91
+ it 'returns an empty array' do
92
+ expect(subject).to match_array([])
93
+ end
94
+ end
95
+ end
96
+
97
+ describe '#words' do
98
+ subject { GameWords::Generator.new.words(game, category) }
99
+
100
+ let(:words) {
101
+ {
102
+ 'game1' => {
103
+ 'cat1' => %w[word1 word2],
104
+ 'cat2' => %w[word3]
105
+ },
106
+ 'game2' => {
107
+ 'cat3' => %w[word4]
108
+ }
109
+ }
110
+ }
111
+
112
+ before do
113
+ allow(YAML).to receive(:load_file).and_return(words)
114
+ end
115
+
116
+ context 'when the category is specified' do
117
+ let(:game) { 'game2' }
118
+
119
+ context 'when the category exists' do
120
+ let(:category) { 'cat3' }
121
+
122
+ it 'only shows the words for that category' do
123
+ expect(subject).to match_array(%w[word4])
124
+ end
125
+ end
126
+
127
+ context 'when the category does not exist' do
128
+ let(:category) { 'blah' }
129
+
130
+ it 'returns an empty array' do
131
+ expect(subject).to eq([])
132
+ end
133
+ end
134
+ end
135
+
136
+ context 'when the category is not specified' do
137
+ let(:game) { 'game1' }
138
+ let(:category) { nil }
139
+
140
+ it 'shows all of the words for all categories for that game' do
141
+ expect(subject).to match_array(%w[word1 word2 word3])
142
+ end
143
+ end
144
+
145
+ context 'unhappy paths' do
146
+ context 'when the game does not exist' do
147
+ let(:game) { 'foo' }
148
+ let(:category) { 'cat1' }
149
+
150
+ it 'returns an empty array' do
151
+ expect(subject).to eq([])
152
+ end
153
+ end
154
+
155
+ context 'when the game exists' do
156
+ let(:game) { 'game1' }
157
+
158
+ context 'but the category does not exist' do
159
+ let(:category) { 'bar' }
160
+ it 'returns an empty array' do
161
+ expect(subject).to eq([])
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
167
+ end
@@ -0,0 +1 @@
1
+ require 'game_words'
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: game_words
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nick Aschenbach
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-23 00:00:00.000000000 Z
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.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ description:
56
+ email:
57
+ - nick.aschenbach@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".ruby-gemset"
64
+ - ".ruby-version"
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - assets/game_words/game_words.yaml
70
+ - game_words.gemspec
71
+ - lib/game_words.rb
72
+ - lib/game_words/version.rb
73
+ - spec/lib/generator_spec.rb
74
+ - spec/spec_helper.rb
75
+ homepage: https://github.com/nick-aschenbach/game-words
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.4.2
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: Find words for pictionary, catchphrase, charades and holidays
99
+ test_files:
100
+ - spec/lib/generator_spec.rb
101
+ - spec/spec_helper.rb