barker 0.2.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 +7 -0
- data/.gitignore +3 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.simplecov +7 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +50 -0
- data/LICENSE +22 -0
- data/README.md +204 -0
- data/Rakefile +12 -0
- data/barker.gemspec +29 -0
- data/ci/run +20 -0
- data/lib/barker/answer.rb +11 -0
- data/lib/barker/api/base.rb +145 -0
- data/lib/barker/api/response/base.rb +25 -0
- data/lib/barker/api/response/candidate.rb +38 -0
- data/lib/barker/api/response/candidate_answer.rb +23 -0
- data/lib/barker/api/response/candidate_joker.rb +21 -0
- data/lib/barker/api/response/candidate_question.rb +51 -0
- data/lib/barker/api/response/error.rb +17 -0
- data/lib/barker/api/response/game_show.rb +43 -0
- data/lib/barker/api/response/round.rb +21 -0
- data/lib/barker/api/response.rb +15 -0
- data/lib/barker/api.rb +7 -0
- data/lib/barker/candidate.rb +52 -0
- data/lib/barker/candidate_answer.rb +42 -0
- data/lib/barker/candidate_joker.rb +30 -0
- data/lib/barker/candidate_question.rb +116 -0
- data/lib/barker/candidate_round.rb +32 -0
- data/lib/barker/entity.rb +15 -0
- data/lib/barker/game_show.rb +176 -0
- data/lib/barker/guideline/base.rb +33 -0
- data/lib/barker/guideline/llmcquiz/questions.yaml +300 -0
- data/lib/barker/guideline/llmcquiz.rb +28 -0
- data/lib/barker/guideline/mock.rb +17 -0
- data/lib/barker/guideline.rb +8 -0
- data/lib/barker/import/yaml.rb +22 -0
- data/lib/barker/import.rb +6 -0
- data/lib/barker/joker.rb +28 -0
- data/lib/barker/question.rb +12 -0
- data/lib/barker/quiz.rb +19 -0
- data/lib/barker/repo/memory/game_show.rb +38 -0
- data/lib/barker/repo/memory.rb +8 -0
- data/lib/barker/repo.rb +6 -0
- data/lib/barker/round.rb +68 -0
- data/lib/barker/stage.rb +38 -0
- data/lib/barker/store/memory.rb +158 -0
- data/lib/barker/store.rb +6 -0
- data/lib/barker/validations.rb +14 -0
- data/lib/barker/version.rb +3 -0
- data/lib/barker.rb +45 -0
- data/test/factories/answer.rb +21 -0
- data/test/factories/candidate.rb +23 -0
- data/test/factories/candidate_answer.rb +12 -0
- data/test/factories/candidate_joker.rb +8 -0
- data/test/factories/candidate_question.rb +16 -0
- data/test/factories/candidate_round.rb +8 -0
- data/test/factories/game_show.rb +12 -0
- data/test/factories/joker.rb +5 -0
- data/test/factories/question.rb +13 -0
- data/test/factories/quiz.rb +11 -0
- data/test/factories/round.rb +12 -0
- data/test/factories/stage.rb +12 -0
- data/test/fixtures/questions.yaml +20 -0
- data/test/test_helper.rb +72 -0
- data/test/test_mocks.rb +21 -0
- data/test/unit/answer_test.rb +49 -0
- data/test/unit/api/base_test.rb +207 -0
- data/test/unit/api/response/base_test.rb +35 -0
- data/test/unit/api/response/candidate_answer_test.rb +64 -0
- data/test/unit/api/response/candidate_joker_test.rb +60 -0
- data/test/unit/api/response/candidate_question_test.rb +99 -0
- data/test/unit/api/response/candidate_test.rb +82 -0
- data/test/unit/api/response/game_show_test.rb +105 -0
- data/test/unit/api/response/round_test.rb +49 -0
- data/test/unit/candidate_answer_test.rb +66 -0
- data/test/unit/candidate_question_test.rb +277 -0
- data/test/unit/candidate_round_test.rb +64 -0
- data/test/unit/candidate_test.rb +76 -0
- data/test/unit/game_show_test.rb +372 -0
- data/test/unit/guideline/base_test.rb +34 -0
- data/test/unit/guideline/llmcquiz_test.rb +35 -0
- data/test/unit/guideline/mock_test.rb +33 -0
- data/test/unit/import/yaml_test.rb +41 -0
- data/test/unit/joker_test.rb +32 -0
- data/test/unit/question_test.rb +55 -0
- data/test/unit/quiz_test.rb +37 -0
- data/test/unit/repo/memory/game_show_test.rb +54 -0
- data/test/unit/round_test.rb +167 -0
- data/test/unit/stage_test.rb +53 -0
- metadata +283 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 984796895fe9bc71b1d2ce82ea679d7fe75f78ae
|
4
|
+
data.tar.gz: c987d3c1af4e2662bfd0b416610bfcb24426bc0f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3c0da2c756ae07411f8a08151a6e733f88aedddd82d4015746cff8c08276a784da35769191fcf54b63ce69bb247384c9301fcb080d3798db22db6872d2206f9e
|
7
|
+
data.tar.gz: 64de935ceff6389621d30888bc389e4520f0212f800f42975cd395f35dad9d8726a638ed943b51d72f6aaf3a27ffca256d6912eaa3b3e5d66485ce0a2e5194ab
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
barker
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0
|
data/.simplecov
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
barker (0.2.2)
|
5
|
+
activemodel
|
6
|
+
activesupport
|
7
|
+
thread_safe
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
activemodel (3.2.13)
|
13
|
+
activesupport (= 3.2.13)
|
14
|
+
builder (~> 3.0.0)
|
15
|
+
activesupport (3.2.13)
|
16
|
+
i18n (= 0.6.1)
|
17
|
+
multi_json (~> 1.0)
|
18
|
+
atomic (1.1.10)
|
19
|
+
builder (3.0.4)
|
20
|
+
factory_girl (4.2.0)
|
21
|
+
activesupport (>= 3.0.0)
|
22
|
+
i18n (0.6.1)
|
23
|
+
metaclass (0.0.1)
|
24
|
+
minitest (5.0.2)
|
25
|
+
mocha (0.14.0)
|
26
|
+
metaclass (~> 0.0.1)
|
27
|
+
multi_json (1.7.3)
|
28
|
+
rack (1.5.2)
|
29
|
+
rake (10.0.4)
|
30
|
+
simplecov (0.7.1)
|
31
|
+
multi_json (~> 1.0)
|
32
|
+
simplecov-html (~> 0.7.1)
|
33
|
+
simplecov-html (0.7.1)
|
34
|
+
simplecov-rcov (0.2.3)
|
35
|
+
simplecov (>= 0.4.1)
|
36
|
+
thread_safe (0.1.0)
|
37
|
+
atomic
|
38
|
+
|
39
|
+
PLATFORMS
|
40
|
+
ruby
|
41
|
+
|
42
|
+
DEPENDENCIES
|
43
|
+
barker!
|
44
|
+
factory_girl
|
45
|
+
minitest
|
46
|
+
mocha
|
47
|
+
rack
|
48
|
+
rake
|
49
|
+
simplecov (~> 0.6)
|
50
|
+
simplecov-rcov (~> 0.2)
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Jan Owiesniak
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,204 @@
|
|
1
|
+
# barker
|
2
|
+
|
3
|
+
Barker game show engine.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'barker'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install barker
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
### Guidelines
|
22
|
+
|
23
|
+
Barker let you define project specific guidelines that will be called during the game show life cycle.
|
24
|
+
The default behaviour is implemented in Barker::Guideline::Base.
|
25
|
+
|
26
|
+
Example of a project specific guideline.
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
module Barker
|
30
|
+
module Guideline
|
31
|
+
|
32
|
+
class Llmcquiz < Base
|
33
|
+
include Errors
|
34
|
+
|
35
|
+
def quizzes
|
36
|
+
[Quiz.new(questions.sample(5))]
|
37
|
+
end
|
38
|
+
|
39
|
+
def jokers
|
40
|
+
[:fifty_fifty]
|
41
|
+
end
|
42
|
+
|
43
|
+
def questions
|
44
|
+
Barker::Import::Yaml.process(path)
|
45
|
+
end
|
46
|
+
|
47
|
+
def round_time
|
48
|
+
20
|
49
|
+
end
|
50
|
+
|
51
|
+
def path
|
52
|
+
File.expand_path "#{File.dirname(__FILE__)}/../../../lib/barker/guideline/llmcquiz/questions.yaml"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
```
|
59
|
+
|
60
|
+
### Api
|
61
|
+
|
62
|
+
Only interact with the a api instance.
|
63
|
+
Api calls always return a instance of Barker::Api::Response.
|
64
|
+
|
65
|
+
Barker exceptions will not bubble up the stacktrace instead they will be caught in response.error.
|
66
|
+
You can check for errors with the response.ok? method.
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
class Response < OpenStruct
|
70
|
+
def ok?
|
71
|
+
!error
|
72
|
+
end
|
73
|
+
end
|
74
|
+
```
|
75
|
+
|
76
|
+
#### Create a new game show
|
77
|
+
|
78
|
+
The game show will automatically be stored in a memory store.
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
api = Barker::Api::Base.new
|
82
|
+
api.create # => <Barker::Api::Response game_show_id="1", candidate_ids=[], started_at=nil, finished_at=nil, aborted_at=nil, started?=false, running?=false, finished?=false, aborted?=false, jokers=[], stage=-1, round=-1>
|
83
|
+
```
|
84
|
+
|
85
|
+
You can pass a optional guideline
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
api.create(:guideline => :llmcquiz) # => <Barker::Api::Response game_show_id="1", candidate_ids=[], started_at=nil, finished_at=nil, aborted_at=nil, started?=false, running?=false, finished?=false, aborted?=false, jokers=[:fifty_fifty], stage=-1, round=-1>
|
89
|
+
```
|
90
|
+
|
91
|
+
#### Add or remove candidates
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
api = Barker::Api::Base.new
|
95
|
+
game_show_id = api.create.game_show_id
|
96
|
+
|
97
|
+
api.candidates(game_show_id) # => []
|
98
|
+
api.join(game_show_id, 42, "de") # => <Barker::Api::Response candidate_id=42, locale="de", joined_at=2013-06-11 18:44:23 +0200, leaved_at=nil, aborted?=false, joined?=true, leaved?=false, jokers=[]>
|
99
|
+
api.candidates(game_show_id) # => [<Barker::Api::Response candidate_id=42, locale="de", joined_at=2013-06-11 18:44:51 +0200, leaved_at=nil, aborted?=false, joined?=true, leaved?=false, jokers=[]>]
|
100
|
+
api.leave(game_show_id, candidate_id) => #<Barker::Api::Response candidate_id=42, locale="de", joined_at=2013-06-11 18:45:46 +0200, leaved_at=2013-06-11 18:45:46 +0200, aborted?=false, joined?=true, leaved?=true, jokers=[]>
|
101
|
+
api.candidates(game_show_id, candidate_id) => [#<Barker::Api::Response candidate_id=42, locale="de", joined_at=2013-06-11 18:45:46 +0200, leaved_at=2013-06-11 18:45:46 +0200, aborted?=false, joined?=true, leaved?=true, jokers=[]>]
|
102
|
+
```
|
103
|
+
|
104
|
+
#### Control
|
105
|
+
|
106
|
+
##### Start
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
api = Barker::Api::Base.new
|
110
|
+
game_show_id = api.create.game_show_id
|
111
|
+
|
112
|
+
api.start(game_show_id) # => <Barker::Api::Response game_show_id="1", candidate_ids=[], started_at=2013-06-11 18:51:41 +0200, finished_at=nil, aborted_at=nil, started?=true, running?=true, finished?=false, aborted?=false, jokers=[:fifty_fifty], stage=-1, round=-1>
|
113
|
+
api.abort(game_show_id) # => <Barker::Api::Response game_show_id="1", candidate_ids=[], started_at=nil, finished_at=nil, aborted_at=2013-06-11 18:51:41 +0200, started?=false, running?=false, finished?=false, aborted?=true, jokers=[:fifty_fifty], stage=-1, round=-1>
|
114
|
+
api.finish(game_show_id) # => <Barker::Api::Response game_show_id="1", candidate_ids=[], started_at=nil, finished_at=2013-06-11 18:51:41 +0200, aborted_at=nil, started?=false, running?=false, finished?=true, aborted?=false, jokers=[:fifty_fifty], stage=-1, round=-1>
|
115
|
+
```
|
116
|
+
|
117
|
+
##### Abort
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
api = Barker::Api::Base.new
|
121
|
+
game_show_id = api.create.game_show_id
|
122
|
+
|
123
|
+
api.abort(game_show_id) # => <Barker::Api::Response game_show_id="1", candidate_ids=[], started_at=nil, finished_at=nil, aborted_at=2013-06-11 18:51:41 +0200, started?=false, running?=false, finished?=false, aborted?=true, jokers=[:fifty_fifty], stage=-1, round=-1>
|
124
|
+
```
|
125
|
+
|
126
|
+
##### Finish
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
api = Barker::Api::Base.new
|
130
|
+
game_show_id = api.create.game_show_id
|
131
|
+
|
132
|
+
api.finish(game_show_id) # => <Barker::Api::Response game_show_id="1", candidate_ids=[], started_at=nil, finished_at=2013-06-11 18:51:41 +0200, aborted_at=nil, started?=false, running?=false, finished?=true, aborted?=false, jokers=[:fifty_fifty], stage=-1, round=-1>
|
133
|
+
```
|
134
|
+
|
135
|
+
##### Ask
|
136
|
+
|
137
|
+
```ruby
|
138
|
+
api = Barker::Api::Base.new
|
139
|
+
game_show_id = api.create.game_show_id
|
140
|
+
|
141
|
+
api.join(game_show_id, 42, "de")
|
142
|
+
|
143
|
+
api.start(game_show_id)
|
144
|
+
api.next_stage(game_show_id) # => <Barker::Api::Response game_show_id="1", candidate_ids=[42], started_at=2013-06-11 19:00:20 +0200, finished_at=nil, aborted_at=nil, started?=true, running?=true, finished?=false, aborted?=false, jokers=[:fifty_fifty], stage=0, round=-1>}
|
145
|
+
api.next_round(game_show_id) # => <Barker::Api::Response game_show_id="1", candidate_ids=[42], started_at=2013-06-11 19:00:20 +0200, finished_at=nil, aborted_at=nil, started?=true, running?=true, finished?=false, aborted?=false, jokers=[:fifty_fifty], stage=0, round=0>}
|
146
|
+
|
147
|
+
api.ask(game_show_id, 42) # => <Barker::Api::Response question_id=9, candidate_id=42, label="frage", state=:asked, asked_at=2013-06-11 19:02:52 +0200, answered_at=nil, asked?=true, answered?=false, open?=false, answers=[#<Barker::Api::Response answer_id=21, label="antwort", correct?=false, revealed?=false>, #<Barker::Api::Response answer_id=22, label="antwort", correct?=true, revealed?=false>
|
148
|
+
```
|
149
|
+
|
150
|
+
##### Answer
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
api = Barker::Api::Base.new
|
154
|
+
game_show_id = api.create.game_show_id
|
155
|
+
|
156
|
+
api.join(game_show_id, 42, "de")
|
157
|
+
|
158
|
+
api.start(game_show_id)
|
159
|
+
api.next_stage(game_show_id)
|
160
|
+
api.next_round(game_show_id)
|
161
|
+
api.ask(game_show_id, 42)
|
162
|
+
|
163
|
+
api.answer(game_show_id, 42, 25) # => <Barker::Api::Response answer_id=25, label="antwort", correct?=false, revealed?=false>
|
164
|
+
api.given_answer(game_show_id, 25) # => <Barker::Api::Response answer_id=25, label="antwort", correct?=false, revealed?=false>
|
165
|
+
```
|
166
|
+
|
167
|
+
##### Joker
|
168
|
+
|
169
|
+
```ruby
|
170
|
+
api = Barker::Api::Base.new
|
171
|
+
game_show_id = api.create.game_show_id
|
172
|
+
|
173
|
+
api.join(game_show_id, 42, "de")
|
174
|
+
|
175
|
+
api.start(game_show_id)
|
176
|
+
api.next_stage(game_show_id)
|
177
|
+
api.next_round(game_show_id)
|
178
|
+
api.ask(game_show_id, 42)
|
179
|
+
|
180
|
+
api.candidates(game_show_id) # => [<Barker::Api::Response candidate_id=42, locale="de", joined_at=2013-06-11 19:08:44 +0200, leaved_at=nil, aborted?=false, joined?=true, leaved?=false, jokers=[]>]
|
181
|
+
api.joker(game_show_id) # => <Barker::Api::Response joker_id="fifty_fifty">
|
182
|
+
api.candidates(game_show_id) # => [<Barker::Api::Response candidate_id=42, locale="de", joined_at=2013-06-11 19:08:44 +0200, leaved_at=nil, aborted?=false, joined?=true, leaved?=false, jokers=[:fifty_fifty]>]
|
183
|
+
```
|
184
|
+
|
185
|
+
### Store
|
186
|
+
|
187
|
+
For now barker only support a memory store / repo.
|
188
|
+
ActiveRecord will be supported sooner or later.
|
189
|
+
|
190
|
+
### How to use in Rails
|
191
|
+
|
192
|
+
Here is a very early concept how it could be used in a rails app.
|
193
|
+
|
194
|
+
http://gitlab.neopoly.de/jo/barker/issues/19#note_23
|
195
|
+
|
196
|
+
TODO: Add example with real api.
|
197
|
+
|
198
|
+
## Contributing
|
199
|
+
|
200
|
+
1. Fork it
|
201
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
202
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
203
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
204
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/barker.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
require 'barker/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.authors = ["Jan Owiesniak"]
|
8
|
+
gem.email = ["jo@neopoly.de"]
|
9
|
+
gem.description = %q{barker}
|
10
|
+
gem.summary = %q{barker}
|
11
|
+
gem.homepage = ""
|
12
|
+
|
13
|
+
gem.files = `git ls-files`.split($\)
|
14
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
15
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
16
|
+
gem.name = "barker"
|
17
|
+
gem.require_paths = ["lib"]
|
18
|
+
gem.version = Barker::VERSION
|
19
|
+
|
20
|
+
gem.add_development_dependency "rake"
|
21
|
+
gem.add_development_dependency "rack"
|
22
|
+
gem.add_development_dependency "minitest"
|
23
|
+
gem.add_development_dependency "factory_girl"
|
24
|
+
gem.add_development_dependency "mocha"
|
25
|
+
|
26
|
+
gem.add_dependency 'activesupport'
|
27
|
+
gem.add_dependency 'activemodel'
|
28
|
+
gem.add_dependency "thread_safe"
|
29
|
+
end
|
data/ci/run
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
if [ "$WORKSPACE" = "" -o "$JOB_NAME" = "" ]; then
|
4
|
+
echo "\$WORKSPACE or \$JOB_NAME missing"
|
5
|
+
exit 1
|
6
|
+
fi
|
7
|
+
|
8
|
+
CI_DIR="$WORKSPACE/ci"
|
9
|
+
ROOT_DIR="$CI_DIR/.."
|
10
|
+
|
11
|
+
export CI=1
|
12
|
+
export PROJECT="$JOB_NAME"
|
13
|
+
export COVERAGE=1
|
14
|
+
|
15
|
+
# RVM
|
16
|
+
source "$HOME/.rvm/scripts/rvm"
|
17
|
+
rvm use $(cat $ROOT_DIR/.ruby-version)@$(cat $ROOT_DIR/.ruby-gemset)
|
18
|
+
|
19
|
+
# run
|
20
|
+
bundle && bundle exec rake test
|
@@ -0,0 +1,145 @@
|
|
1
|
+
module Barker
|
2
|
+
module Api
|
3
|
+
class Base
|
4
|
+
|
5
|
+
include Errors
|
6
|
+
|
7
|
+
def create(options = {})
|
8
|
+
catch_error do
|
9
|
+
game_show = Barker::GameShow.new([], [], :guideline => options[:guideline])
|
10
|
+
repo.add game_show
|
11
|
+
build_game_show(game_show)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def get(game_show_id)
|
16
|
+
catch_error do
|
17
|
+
build_game_show repo.get(game_show_id)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def remove(game_show_id)
|
22
|
+
catch_error do
|
23
|
+
build_game_show repo.remove(repo.get(game_show_id))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def join(game_show_id, candidate_id, candidate_locale)
|
28
|
+
catch_error do
|
29
|
+
candidate = Barker::Candidate.new(OpenStruct.new(:id => candidate_id, :locale => candidate_locale))
|
30
|
+
repo.around(game_show_id) { |game_show| game_show.join(candidate) }
|
31
|
+
build_candidate(candidate)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def leave(game_show_id, candidate_id)
|
36
|
+
catch_error do
|
37
|
+
game_show = repo.get game_show_id
|
38
|
+
candidate = game_show.leave(candidate_id)
|
39
|
+
repo.update game_show
|
40
|
+
build_candidate(candidate)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def start(game_show_id)
|
45
|
+
catch_error do
|
46
|
+
build_game_show repo.around(game_show_id) { |game_show| game_show.start }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def raw(game_show_id)
|
51
|
+
catch_error do
|
52
|
+
repo.get(game_show_id)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def finish(game_show_id)
|
57
|
+
catch_error do
|
58
|
+
build_game_show repo.around(game_show_id) { |game_show| game_show.finish }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def abort(game_show_id)
|
63
|
+
catch_error do
|
64
|
+
build_game_show repo.around(game_show_id) { |game_show| game_show.abort }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def next_stage(game_show_id)
|
69
|
+
catch_error do
|
70
|
+
build_game_show repo.around(game_show_id) { |game_show| game_show.next_stage }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def next_round(game_show_id)
|
75
|
+
catch_error do
|
76
|
+
build_game_show repo.around(game_show_id) { |game_show| game_show.next_round }
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def ask(game_show_id, candidate_id, options = {})
|
81
|
+
catch_error do
|
82
|
+
game_show = repo.get game_show_id
|
83
|
+
candidate_question = game_show.ask(candidate_id, options)
|
84
|
+
repo.update game_show
|
85
|
+
build_candidate_question(candidate_question)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def answer(game_show_id, candidate_id, answer_id)
|
90
|
+
catch_error do
|
91
|
+
game_show = repo.get game_show_id
|
92
|
+
given_answer = game_show.answer(candidate_id, answer_id)
|
93
|
+
repo.update game_show
|
94
|
+
build_candidate_answer(given_answer)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def joker(game_show_id, candidate_id, joker_id)
|
99
|
+
catch_error do
|
100
|
+
game_show = repo.get game_show_id
|
101
|
+
candidate_question = game_show.ask(candidate_id)
|
102
|
+
candidate_joker = game_show.joker(candidate_id, joker_id)
|
103
|
+
repo.update game_show
|
104
|
+
build_candidate_joker(candidate_joker)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def catch_error
|
111
|
+
begin
|
112
|
+
yield
|
113
|
+
rescue Barker::Errors::BarkerError => e
|
114
|
+
Response::Error.new(:error => e.class)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def repo
|
119
|
+
@repo ||= Barker::Repo::Memory::GameShow.new
|
120
|
+
end
|
121
|
+
|
122
|
+
def build_candidate_question(candidate_question)
|
123
|
+
Response::CandidateQuestion.new(:candidate_question => candidate_question)
|
124
|
+
end
|
125
|
+
|
126
|
+
def build_candidate_answer(candidate_answer)
|
127
|
+
Response::CandidateAnswer.new(:candidate_answer => candidate_answer)
|
128
|
+
end
|
129
|
+
|
130
|
+
def build_candidate(candidate)
|
131
|
+
Response::Candidate.new(:candidate => candidate)
|
132
|
+
end
|
133
|
+
|
134
|
+
def build_candidate_joker(candidate_joker)
|
135
|
+
Response::CandidateJoker.new(:candidate_joker => candidate_joker)
|
136
|
+
end
|
137
|
+
|
138
|
+
def build_game_show(game_show)
|
139
|
+
Response::GameShow.new(:game_show => game_show)
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Barker
|
4
|
+
module Api
|
5
|
+
module Response
|
6
|
+
|
7
|
+
class Base < OpenStruct
|
8
|
+
def error?
|
9
|
+
!!error
|
10
|
+
end
|
11
|
+
|
12
|
+
def ok?
|
13
|
+
!error?
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def to_i(attribute)
|
19
|
+
attribute && attribute.to_i
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Barker
|
2
|
+
module Api
|
3
|
+
module Response
|
4
|
+
class Candidate < Base
|
5
|
+
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :candidate, :id, :candidate_id, :locale, :joined_at, :leaved_at, :aborted_at, :joined?, :leaved?, :aborted?
|
8
|
+
|
9
|
+
def jokers
|
10
|
+
candidate.jokers.map {|candidate_joker| Response::CandidateJoker.new(:candidate_joker => candidate_joker)}
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_hash
|
14
|
+
{
|
15
|
+
'id' => id,
|
16
|
+
'candidate_id' => candidate_id,
|
17
|
+
'locale' => locale,
|
18
|
+
'jokers' => jokers? && jokers.map(&:to_hash) || [],
|
19
|
+
'joker_ids' => jokers? && jokers.map(&:joker_id) || [],
|
20
|
+
'joined_at' => to_i(joined_at),
|
21
|
+
'leaved_at' => to_i(leaved_at),
|
22
|
+
'aborted_at' => to_i(aborted_at),
|
23
|
+
'joined?' => joined?,
|
24
|
+
'leaved?' => leaved?,
|
25
|
+
'aborted?' => aborted?
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def jokers?
|
32
|
+
jokers && jokers.map(&:candidate_joker).any?
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Barker
|
2
|
+
module Api
|
3
|
+
module Response
|
4
|
+
class CandidateAnswer < Base
|
5
|
+
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :candidate_answer, :id, :answer_id, :candidate_id, :label, :revealed?, :correct?
|
8
|
+
|
9
|
+
def to_hash
|
10
|
+
{
|
11
|
+
'id' => id,
|
12
|
+
'answer_id' => answer_id,
|
13
|
+
'candidate_id' => candidate_id,
|
14
|
+
'label' => label,
|
15
|
+
'revealed?' => revealed?,
|
16
|
+
'correct?' => correct?
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Barker
|
2
|
+
module Api
|
3
|
+
module Response
|
4
|
+
class CandidateJoker < Base
|
5
|
+
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :candidate_joker, :id, :joker_id, :candidate_id, :used_at
|
8
|
+
|
9
|
+
def to_hash
|
10
|
+
{
|
11
|
+
'id' => id,
|
12
|
+
'joker_id' => joker_id,
|
13
|
+
'candidate_id' => candidate_id,
|
14
|
+
'used_at' => to_i(used_at)
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|