tassadar-server 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,16 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ InstalledFiles
7
+ _yardoc
8
+ coverage
9
+ doc/
10
+ lib/bundler/man
11
+ pkg
12
+ rdoc
13
+ spec/reports
14
+ test/tmp
15
+ test/version_tmp
16
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --tty --colour --profile --format nested
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use --create ruby-1.9.3-p194@tassadar-server_gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in tassadar-server.gemspec
4
+ gemspec
@@ -0,0 +1,83 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ tassadar-server (0.1.0)
5
+ grape
6
+ grape-rabl
7
+ rack-throttle
8
+ redis
9
+ tassadar
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ activesupport (3.2.10)
15
+ i18n (~> 0.6)
16
+ multi_json (~> 1.0)
17
+ backports (2.6.5)
18
+ bindata (1.4.5)
19
+ builder (3.1.4)
20
+ bump (0.3.8)
21
+ bzip2-ruby (0.2.7)
22
+ descendants_tracker (0.0.1)
23
+ diff-lcs (1.1.3)
24
+ grape (0.2.3)
25
+ activesupport
26
+ builder
27
+ hashie (~> 1.2)
28
+ multi_json (>= 1.3.2)
29
+ multi_xml
30
+ rack
31
+ rack-accept
32
+ rack-mount
33
+ virtus
34
+ grape-rabl (0.1.0)
35
+ grape (~> 0.2.3)
36
+ i18n
37
+ rabl
38
+ tilt
39
+ hashie (1.2.0)
40
+ i18n (0.6.1)
41
+ json_spec (1.1.0)
42
+ multi_json (~> 1.0)
43
+ rspec (~> 2.0)
44
+ multi_json (1.5.0)
45
+ multi_xml (0.5.1)
46
+ rabl (0.7.9)
47
+ activesupport (>= 2.3.14)
48
+ multi_json (~> 1.0)
49
+ rack (1.4.1)
50
+ rack-accept (0.4.5)
51
+ rack (>= 0.4)
52
+ rack-mount (0.8.3)
53
+ rack (>= 1.0.0)
54
+ rack-test (0.6.1)
55
+ rack (>= 1.0)
56
+ rack-throttle (0.3.0)
57
+ rack (>= 1.0.0)
58
+ redis (3.0.2)
59
+ rspec (2.11.0)
60
+ rspec-core (~> 2.11.0)
61
+ rspec-expectations (~> 2.11.0)
62
+ rspec-mocks (~> 2.11.0)
63
+ rspec-core (2.11.1)
64
+ rspec-expectations (2.11.3)
65
+ diff-lcs (~> 1.1.3)
66
+ rspec-mocks (2.11.2)
67
+ tassadar (0.1.0)
68
+ bindata
69
+ bzip2-ruby
70
+ tilt (1.3.3)
71
+ virtus (0.5.4)
72
+ backports (~> 2.6.1)
73
+ descendants_tracker (~> 0.0.1)
74
+
75
+ PLATFORMS
76
+ ruby
77
+
78
+ DEPENDENCIES
79
+ bump
80
+ json_spec
81
+ rack-test
82
+ rspec
83
+ tassadar-server!
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Agora Games
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.
@@ -0,0 +1 @@
1
+ web: bundle exec rackup config.ru -p $PORT
@@ -0,0 +1,64 @@
1
+ # tassadar-server
2
+
3
+ This simple rack-based web service uses the pure-ruby [Tassadar](https://github.com/agoragames/tassadar) library
4
+ to parse uploaded Starcraft II replay files and send a JSON response.
5
+
6
+ This service is designed to enable Tassadar in polyglot or browser-based projects where Ruby may not be the significant language.
7
+
8
+ ## Installation
9
+
10
+ $ gem install tassadar-server
11
+
12
+ ## Usage
13
+
14
+ #### Options
15
+
16
+ The server can be configured using the following environment variables:
17
+
18
+ | **Option** | **Description** | **Details** |
19
+ |------------|-----------------|-------------|
20
+ | THROTTLE | Allowed requests per hour | for each user |
21
+ | REDIS_URL | Redis server | required if THROTTLE is enabled |
22
+ | WHITELIST | Comma-separated list of allowed IP addresses | Optional |
23
+ | USER_HEADER | Header containing unique user id | defaults to IP address if not set |
24
+
25
+ #### Start the server
26
+
27
+ $ rackup ./config.ru
28
+
29
+ You can also mount tassadar-server into a Rails 3 application, or use unicorn to set up a cluster of workers for increased load.
30
+
31
+ #### Parse a replay
32
+
33
+ $ http -f POST http://localhost:9292/sc2/replay file@spec/replays/delta_quadrant.SC2Replay
34
+
35
+ POST /sc2/replay HTTP/1.1
36
+ Host: localhost:9292
37
+ Content-Type: multipart/form-data; boundary=cd85979359044d7cac045667d
38
+ cf591c3
39
+ Accept-Encoding: gzip, deflate, compress
40
+ Accept: */*
41
+ Content-Type: application/json
42
+ Content-Length: 633
43
+ Server: WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20)
44
+ Date: Thu, 03 Jan 2013 01:32:21 GMT
45
+ Connection: Keep-Alive
46
+
47
+ {"replay":{"game":{"category":"Ladder","map":"Delta Quadrant","speed"
48
+ :"Faster","time":"2011-07-05 18:01:08 -0400","type":"1v1","winner":{"
49
+ actual_race":"Zerg","chosen_race":"Zerg","handicap":100,"id":2569192,
50
+ "name":"redgar","won":true,"color":{"alpha":255,"red":0,"green":66,"b
51
+ lue":255}}},"players":[{"player":{"actual_race":"Terran","chosen_race
52
+ ":"Terran","handicap":100,"id":1918894,"name":"guitsaru","won":false,
53
+ "color":{"alpha":255,"red":180,"green":20,"blue":30}}},{"player":{"ac
54
+ tual_race":"Zerg","chosen_race":"Zerg","handicap":100,"id":2569192,"n
55
+ ame":"redgar","won":true,"color":{"alpha":255,"red":0,"green":66,"blu
56
+ e":255}}}]}}
57
+
58
+ ## Contributing
59
+
60
+ 1. Fork it
61
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
62
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
63
+ 4. Push to the branch (`git push origin my-new-feature`)
64
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,30 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), 'lib')
2
+
3
+ require 'tassadar-server'
4
+
5
+ use Rack::Config do |env|
6
+ env['api.tilt.root'] = File.join(
7
+ File.dirname(__FILE__), 'lib', 'tassadar', 'server', 'views'
8
+ )
9
+ end
10
+
11
+ if ENV['REDIS_URL']
12
+ require 'redis'
13
+ $redis = Redis.new url: ENV['REDIS_URL']
14
+ end
15
+
16
+ if ENV['WHITELIST']
17
+ require 'tassadar/server/whitelist'
18
+ use Tassadar::Server::Whitelist,
19
+ ENV['WHITELIST'].split(',').delete_if(&:empty?)
20
+ end
21
+
22
+ if ENV['THROTTLE']
23
+ require 'tassadar/server/throttle'
24
+ use Tassadar::Server::Throttle,
25
+ max: ENV['THROTTLE'].to_i,
26
+ cache: $redis,
27
+ key_prefix: :throttle
28
+ end
29
+
30
+ run Tassadar::Server::API
@@ -0,0 +1,11 @@
1
+ require 'tassadar'
2
+ require 'grape'
3
+ require 'grape/rabl'
4
+
5
+ require 'tassadar/server/version'
6
+ require 'tassadar/server/api'
7
+
8
+ module Tassadar
9
+ module Server
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ module Tassadar
2
+ module Server
3
+ class API < ::Grape::API
4
+ version 'v1', :using => :header, :vendor => 'agoragames'
5
+ format :json
6
+ formatter :json, Grape::Formatter::Rabl
7
+ content_type :json, 'application/json'
8
+
9
+ helpers do
10
+ def get_file
11
+ unless params[:file] &&
12
+ (tmpfile = params[:file][:tempfile]) &&
13
+ (name = params[:file][:filename])
14
+ error! 'No file uploaded', 500
15
+ end
16
+ tmpfile
17
+ end
18
+
19
+ def parse(path)
20
+ Tassadar::SC2::Replay.new(path)
21
+ end
22
+ end
23
+
24
+ resource :sc2 do
25
+ desc 'Return parsed output for an uploaded replay'
26
+ post :replay, rabl: 'replay' do
27
+ @replay = parse(get_file)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,28 @@
1
+ require 'rack/throttle'
2
+
3
+ module Tassadar
4
+ module Server
5
+ class Throttle < Rack::Throttle::Hourly
6
+
7
+ def client_identifier(request)
8
+ # Determine whether the user should be identified by a unique
9
+ # header (for example, a username or token), or simply by IP
10
+ # for the purpose of rate limiting.
11
+ if ENV['USER_HEADER'] && request.env.has_key?(ENV['USER_HEADER'])
12
+ request.env[ENV['USER_HEADER']].to_s
13
+ else
14
+ request.ip.to_s
15
+ end
16
+ end
17
+
18
+ # Patch for unmerged https://github.com/datagraph/rack-throttle/pull/6
19
+ def http_error(code, message = nil, headers = {})
20
+ [ code,
21
+ { 'Content-Type' => 'text/plain; charset=utf-8' }.merge(headers),
22
+ Array( http_status(code) + (message.nil? ? "\n" : " (#{message})\n") )
23
+ ]
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,5 @@
1
+ module Tassadar
2
+ module Server
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
@@ -0,0 +1,30 @@
1
+ object @replay => :replay
2
+ child :game => :game do
3
+
4
+ attribute :category,
5
+ :map,
6
+ :speed,
7
+ :time,
8
+ :type
9
+
10
+ child :winner => :winner do
11
+ attributes :actual_race,
12
+ :chosen_race,
13
+ :handicap,
14
+ :id,
15
+ :name,
16
+ :won,
17
+ :color
18
+ end
19
+
20
+ end
21
+
22
+ child :players => :players do
23
+ attributes :actual_race,
24
+ :chosen_race,
25
+ :handicap,
26
+ :id,
27
+ :name,
28
+ :won,
29
+ :color
30
+ end
@@ -0,0 +1,29 @@
1
+ module Tassadar
2
+ module Server
3
+ class Whitelist
4
+ def initialize(app, addresses)
5
+ @app = app
6
+ @whitelist = addresses
7
+ end
8
+
9
+ def call(env)
10
+ if white_listed?(env)
11
+ @app.call(env)
12
+ else
13
+ [ 403,
14
+ { 'Content-Type' => 'text/plain; charset=utf-8' },
15
+ Array( "IP #{remote_ip(env)} is not whitelisted" )
16
+ ]
17
+ end
18
+ end
19
+
20
+ def remote_ip(env)
21
+ Rack::Request.new(env).ip
22
+ end
23
+
24
+ def white_listed?(env)
25
+ @whitelist.include? remote_ip(env)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1 @@
1
+ {"replay":{"game":{"category":"Ladder","map":"Delta Quadrant","speed":"Faster","time":"2011-07-05 18:01:08 -0400","type":"1v1","winner":{"actual_race":"Zerg","chosen_race":"Zerg","handicap":100,"id":2569192,"name":"redgar","won":true,"color":{"alpha":255,"red":0,"green":66,"blue":255}}},"players":[{"player":{"actual_race":"Terran","chosen_race":"Terran","handicap":100,"id":1918894,"name":"guitsaru","won":false,"color":{"alpha":255,"red":180,"green":20,"blue":30}}},{"player":{"actual_race":"Zerg","chosen_race":"Zerg","handicap":100,"id":2569192,"name":"redgar","won":true,"color":{"alpha":255,"red":0,"green":66,"blue":255}}}]}}
@@ -0,0 +1,17 @@
1
+ require 'rack/test'
2
+ require 'json_spec'
3
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'tassadar-server')
4
+
5
+ RSpec.configure do |config|
6
+ config.treat_symbols_as_metadata_keys_with_true_values = true
7
+ config.run_all_when_everything_filtered = true
8
+ config.filter_run :focus
9
+
10
+ # Run specs in random order to surface order dependencies. If you find an
11
+ # order dependency and want to debug it, you can fix the order by providing
12
+ # the seed, which is printed after each run.
13
+ # --seed 1234
14
+ config.order = 'random'
15
+
16
+ config.include JsonSpec::Helpers
17
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tassadar::Server::API do
4
+ include Rack::Test::Methods
5
+
6
+ def app
7
+ Rack::Builder.parse_file('config.ru').first
8
+ end
9
+
10
+ describe 'POST /sc2/replay' do
11
+ let(:valid_replay) {
12
+ File.join(
13
+ File.dirname(__FILE__), 'replays', 'delta_quadrant.SC2Replay'
14
+ )
15
+ }
16
+
17
+ let(:valid_replay_json) {
18
+ File.join(
19
+ File.dirname(__FILE__), 'replays', 'delta_quadrant.json'
20
+ )
21
+ }
22
+
23
+ context 'with no file' do
24
+ before { post '/sc2/replay' }
25
+ subject { last_response }
26
+ its(:status) { should eql 500 }
27
+ end
28
+
29
+ context 'with a valid file' do
30
+ before do
31
+ post '/sc2/replay', :file => Rack::Test::UploadedFile.new(
32
+ valid_replay, 'mime/type'
33
+ )
34
+ end
35
+ subject { last_response }
36
+ its(:status) { should eql 201 }
37
+
38
+ describe 'body' do
39
+ subject { last_response.body }
40
+ it 'should match the expected json' do
41
+ should be_json_eql File.read(valid_replay_json)
42
+ end
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'tassadar/server/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = 'tassadar-server'
8
+ gem.version = Tassadar::Server::VERSION
9
+ gem.authors = ['Logan Koester']
10
+ gem.email = ['logan@logankoester.com']
11
+ gem.description = %q{A web service interface to the tassadar Starcraft 2 replay parser}
12
+ gem.summary = %q{A web service interface to the tassadar Starcraft 2 replay parser}
13
+ gem.homepage = 'https://github.com/agoragames/tassadar-server'
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ['lib']
19
+
20
+ gem.add_dependency 'tassadar'
21
+ gem.add_dependency 'grape'
22
+ gem.add_dependency 'grape-rabl'
23
+
24
+ gem.add_dependency 'redis'
25
+ gem.add_dependency 'rack-throttle'
26
+
27
+ gem.add_development_dependency 'rspec'
28
+ gem.add_development_dependency 'rack-test'
29
+ gem.add_development_dependency 'json_spec'
30
+ gem.add_development_dependency 'bump'
31
+ end
metadata ADDED
@@ -0,0 +1,214 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tassadar-server
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Logan Koester
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: tassadar
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: grape
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: grape-rabl
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: redis
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rack-throttle
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rack-test
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: json_spec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: bump
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ description: A web service interface to the tassadar Starcraft 2 replay parser
159
+ email:
160
+ - logan@logankoester.com
161
+ executables: []
162
+ extensions: []
163
+ extra_rdoc_files: []
164
+ files:
165
+ - .gitignore
166
+ - .rspec
167
+ - .rvmrc
168
+ - Gemfile
169
+ - Gemfile.lock
170
+ - LICENSE.txt
171
+ - Procfile
172
+ - README.md
173
+ - Rakefile
174
+ - config.ru
175
+ - lib/tassadar-server.rb
176
+ - lib/tassadar/server/api.rb
177
+ - lib/tassadar/server/throttle.rb
178
+ - lib/tassadar/server/version.rb
179
+ - lib/tassadar/server/views/replay.rabl
180
+ - lib/tassadar/server/whitelist.rb
181
+ - spec/replays/delta_quadrant.SC2Replay
182
+ - spec/replays/delta_quadrant.json
183
+ - spec/spec_helper.rb
184
+ - spec/tassadar-server_spec.rb
185
+ - tassadar-server.gemspec
186
+ homepage: https://github.com/agoragames/tassadar-server
187
+ licenses: []
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ required_rubygems_version: !ruby/object:Gem::Requirement
199
+ none: false
200
+ requirements:
201
+ - - ! '>='
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ requirements: []
205
+ rubyforge_project:
206
+ rubygems_version: 1.8.24
207
+ signing_key:
208
+ specification_version: 3
209
+ summary: A web service interface to the tassadar Starcraft 2 replay parser
210
+ test_files:
211
+ - spec/replays/delta_quadrant.SC2Replay
212
+ - spec/replays/delta_quadrant.json
213
+ - spec/spec_helper.rb
214
+ - spec/tassadar-server_spec.rb