csstats 1.0.5 → 1.0.6

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
  SHA1:
3
- metadata.gz: c7af1111cba3fbcebf12a2a0578fb3985b96c498
4
- data.tar.gz: ed56d30db6ae2f8fa927ffc9ab73fd174e61f004
3
+ metadata.gz: 62ca403d7af2f0c4e360b2aad4b7aa8b4c0d1adb
4
+ data.tar.gz: a105d30eabbae88b37c8e78b4517bf52da96dd0a
5
5
  SHA512:
6
- metadata.gz: 5d1cc0ad34d13a77635636e1b2f42696a309db66d91e239020fcd9833a2f811010b8a25561db404a3f34322b98e13c3243d7f20ecb7d06cddc5f4a42c08124ce
7
- data.tar.gz: 058600f16b155ddfc7d9b91dce6d7fefd46dd5697e852186cc5fd798854c78c66d57476132b00ea9bb88f6088f7caaefda7e6c40a347c1ddbed6c369e1af9d0f
6
+ metadata.gz: 64915feabd7078daea341085c861ea05ef04d0324ec0ffbece9586975fa85d1ef529a28ce9b69e26edea59614e198701c1357c85cb348b13eb9f2688fcc42e5b
7
+ data.tar.gz: adfe45bb877909a1d9aa7bc27a65fac035485b1be9fc9d5393d143e1cd2894a07565a9ddbeb822553f2c0bdbc77957218a793600ec86852cdb629b77dd02e829
@@ -0,0 +1,2 @@
1
+ Style/Documentation:
2
+ Enabled: false
@@ -7,6 +7,7 @@ rvm:
7
7
  - 1.9.3
8
8
  - 2.0.0
9
9
  - 2.1.0
10
+ - 2.2.0
10
11
  - ruby-head
11
12
  - jruby-19mode
12
13
  - jruby-head
data/Gemfile CHANGED
@@ -3,9 +3,9 @@ source 'https://rubygems.org'
3
3
  gem 'rake'
4
4
 
5
5
  group :test do
6
- gem 'coveralls', '~> 0.7.1', require: false
7
- gem 'rspec', '~> 3.1.0'
8
- gem 'simplecov', '~> 0.9.0', require: false
6
+ gem 'coveralls', '~> 0.8.1', require: false
7
+ gem 'rspec', '~> 3.2.0'
8
+ gem 'simplecov', '~> 0.10.0', require: false
9
9
  end
10
10
 
11
11
  gemspec
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # CSstats
2
2
 
3
- [![Gem Version](http://img.shields.io/gem/v/csstats.svg?style=flat)][rubygems]
4
- [![Build Status](http://img.shields.io/travis/jpalumickas/csstats/master.svg?style=flat)][travis]
5
- [![Dependency Status](http://img.shields.io/gemnasium/jpalumickas/csstats.svg?style=flat)][gemnasium]
6
- [![Coverage Status](https://img.shields.io/coveralls/jpalumickas/csstats.svg?branch=master&style=flat)][coveralls]
7
- [![Code Climate](https://img.shields.io/codeclimate/github/jpalumickas/csstats.svg?style=flat)][codeclimate]
3
+ [![Gem Version](http://img.shields.io/gem/v/csstats.svg?style=flat-square)][rubygems]
4
+ [![Build Status](http://img.shields.io/travis/jpalumickas/csstats/master.svg?style=flat-square)][travis]
5
+ [![Dependency Status](http://img.shields.io/gemnasium/jpalumickas/csstats.svg?style=flat-square)][gemnasium]
6
+ [![Coverage Status](https://img.shields.io/coveralls/jpalumickas/csstats.svg?branch=master&style=flat-square)][coveralls]
7
+ [![Code Climate](https://img.shields.io/codeclimate/github/jpalumickas/csstats.svg?style=flat-square)][codeclimate]
8
8
 
9
9
  Gem which handle `csstats.dat` file generated by CSX module
10
10
  in AMX Mod X ([http://www.amxmodx.org/][amxx])
@@ -58,6 +58,7 @@ implementations:
58
58
  * Ruby 1.9.3
59
59
  * Ruby 2.0.0
60
60
  * Ruby 2.1.0
61
+ * Ruby 2.2.0
61
62
 
62
63
  ## Copyright
63
64
  Copyright (c) 2013 Justas Palumickas.
@@ -10,16 +10,17 @@ Gem::Specification.new do |gem|
10
10
  gem.email = 'jpalumickas@gmail.com'
11
11
  gem.homepage = 'https://github.com/jpalumickas/csstats/'
12
12
  gem.summary = gem.description
13
- gem.description = %q{ Gem which handle csstats.dat file generated by CSX module in AMX Mod X (http://www.amxmodx.org/) }
14
- gem.license = 'MIT'
13
+ gem.description = 'Gem which handle csstats.dat file generated by CSX' \
14
+ ' module in AMX Mod X (http://www.amxmodx.org/)'
15
15
 
16
+ gem.license = 'MIT'
16
17
  gem.required_ruby_version = '>= 1.9.2'
17
18
 
18
- gem.files = `git ls-files`.split($/)
19
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
20
+ gem.executables = gem.files.grep(/^bin\//).map { |f| File.basename(f) }
21
+ gem.test_files = gem.files.grep(/^(test|spec|features)\//)
21
22
  gem.require_paths = ['lib']
22
23
 
23
- gem.add_dependency 'hashie', '~> 3.3'
24
- gem.add_development_dependency 'bundler', '~> 1.5'
24
+ gem.add_dependency 'hashie', '~> 3.4'
25
+ gem.add_development_dependency 'bundler', '~> 1.6'
25
26
  end
@@ -1,3 +1,4 @@
1
1
  module CSstats
2
2
  class Error < StandardError; end
3
+ class FileNotExist < StandardError; end
3
4
  end
@@ -2,7 +2,7 @@ require 'hashie/mash'
2
2
 
3
3
  module CSstats
4
4
  class Handler
5
- attr_reader :path, :players
5
+ attr_reader :path, :players, :maxplayers
6
6
 
7
7
  # Public: Initialize file.
8
8
  #
@@ -13,25 +13,15 @@ module CSstats
13
13
  # Returns nothing.
14
14
  def initialize(options = {})
15
15
  @path = options[:path]
16
- @players = []
17
- return if path.nil?
18
-
19
- maxplayers = options[:maxplayers] || 0
16
+ @maxplayers = options[:maxplayers] || 0
20
17
 
21
- file = File.new(path, 'r')
22
- file_version = read_short_data(file)
18
+ @players = []
19
+ fail CSstats::FileNotExist unless File.exist?(path.to_s)
23
20
 
24
- i = 0
25
- while !file.eof? && (maxplayers == 0 || i < maxplayers)
26
- player = read_player(file)
21
+ @file = File.new(path, 'r')
22
+ _file_version = read_short_data(@file)
27
23
 
28
- if player
29
- player['rank'] = i + 1
30
- players[i] = player
31
- end
32
-
33
- i += 1
34
- end
24
+ read_players!
35
25
  end
36
26
 
37
27
  # Public: Get the player information of specified id.
@@ -61,6 +51,20 @@ module CSstats
61
51
 
62
52
  private
63
53
 
54
+ def read_players!
55
+ i = 0
56
+ while !@file.eof? && (maxplayers == 0 || i < maxplayers)
57
+ player = read_player(@file)
58
+
59
+ if player
60
+ player['rank'] = i + 1
61
+ players[i] = player
62
+ end
63
+
64
+ i += 1
65
+ end
66
+ end
67
+
64
68
  # Internal: Count player efficiency.
65
69
  #
66
70
  # kills - The Integer of player kills in game.
@@ -88,27 +92,38 @@ module CSstats
88
92
  # Returns The Mash of player information.
89
93
  def read_player(handle)
90
94
  length = read_short_data(handle)
91
- return nil if length == 0
95
+ return if length == 0
92
96
 
93
- mash = Hashie::Mash.new
97
+ player_data = Hashie::Mash.new
94
98
 
95
- mash.nick = read_string_data(handle, length)
99
+ player_data.nick = read_string_data(handle, length)
100
+
101
+ add_player_uniq(player_data, handle)
102
+ add_player_general_data(player_data, handle)
103
+ add_player_calculations(player_data)
104
+
105
+ player_data
106
+ end
107
+
108
+ def add_player_uniq(player_data, handle)
96
109
  length = read_short_data(handle)
97
- mash.uniq = read_string_data(handle, length)
110
+ player_data.uniq = read_string_data(handle, length)
111
+ end
98
112
 
99
- read_data = %w(teamkill damage deaths kills shots hits headshots
100
- defusions defused plants explosions - head chest stomach
101
- leftarm rightarm leftleg rightleg -)
113
+ def add_player_general_data(player_data, handle)
114
+ data_types = %w(teamkill damage deaths kills shots hits headshots
115
+ defusions defused plants explosions - head chest stomach
116
+ leftarm rightarm leftleg rightleg -)
102
117
 
103
- read_data.each { |data| mash[data] = read_int_data(handle) }
118
+ data_types.each { |type| player_data[type] = read_int_data(handle) }
104
119
 
105
120
  # Remove all 0x00000000
106
- mash.tap { |x| x.delete('-') }
107
-
108
- mash.acc = count_accuracy(mash.hits, mash.shots)
109
- mash.eff = count_efficiency(mash.kills, mash.deaths)
121
+ player_data.tap { |x| x.delete('-') }
122
+ end
110
123
 
111
- mash
124
+ def add_player_calculations(player_data)
125
+ player_data.acc = count_accuracy(player_data.hits, player_data.shots)
126
+ player_data.eff = count_efficiency(player_data.kills, player_data.deaths)
112
127
  end
113
128
 
114
129
  # Internal: Get the 32bit integer from file.
@@ -118,7 +133,7 @@ module CSstats
118
133
  # Returns the Integer.
119
134
  def read_int_data(handle)
120
135
  data = handle.read(4)
121
- raise CSstats::Error, 'Cannot read int data.' unless data
136
+ fail CSstats::Error, 'Cannot read int data.' unless data
122
137
 
123
138
  data.unpack('V').first
124
139
  end
@@ -130,7 +145,7 @@ module CSstats
130
145
  # Returns the Integer.
131
146
  def read_short_data(handle)
132
147
  data = handle.read(2)
133
- raise CSstats::Error, 'Cannot read short data.' unless data
148
+ fail CSstats::Error, 'Cannot read short data.' unless data
134
149
 
135
150
  data.unpack('v').first
136
151
  end
@@ -143,7 +158,7 @@ module CSstats
143
158
  # Returns the String.
144
159
  def read_string_data(handle, length)
145
160
  data = handle.read(length)
146
- raise CSstats::Error, 'Cannot read string data.' unless data
161
+ fail CSstats::Error, 'Cannot read string data.' unless data
147
162
 
148
163
  data.strip
149
164
  end
@@ -1,3 +1,3 @@
1
1
  module CSstats
2
- VERSION = '1.0.5' unless defined?(CSstats::VERSION)
2
+ VERSION = '1.0.6' unless defined?(CSstats::VERSION)
3
3
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CSstats::Handler do
4
-
5
4
  before do
6
5
  @handler = CSstats::Handler.new(path: csstats_file, maxplayers: 15)
7
6
  end
@@ -15,7 +14,6 @@ describe CSstats::Handler do
15
14
  end
16
15
 
17
16
  describe 'player with specified name' do
18
-
19
17
  before do
20
18
  @player = @handler.search_by_name('CHMARSON')
21
19
  end
@@ -33,7 +31,7 @@ describe CSstats::Handler do
33
31
  end
34
32
 
35
33
  it 'should return correct player damage' do
36
- expect(@player.damage).to eq 101543
34
+ expect(@player.damage).to eq 101_543
37
35
  end
38
36
 
39
37
  it 'should return correct player deaths' do
@@ -108,5 +106,8 @@ describe CSstats::Handler do
108
106
  expect(@player.eff).to eq 59.76
109
107
  end
110
108
 
109
+ it 'should not return empty data' do
110
+ expect(@player['-']).to eq nil
111
+ end
111
112
  end
112
113
  end
@@ -1,11 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CSstats do
4
-
5
4
  describe '.new' do
6
5
  it 'is a CSstats::Handler' do
7
- expect(CSstats.new).to be_a CSstats::Handler
6
+ expect(CSstats.new(path: csstats_file)).to be_a CSstats::Handler
8
7
  end
9
- end
10
8
 
9
+ it 'is a CSstats::FileNotFound if file path empty' do
10
+ expect { CSstats.new }.to raise_error(CSstats::FileNotExist)
11
+ end
12
+ end
11
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csstats
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justas Palumickas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-16 00:00:00.000000000 Z
11
+ date: 2015-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -16,30 +16,30 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.3'
19
+ version: '3.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.3'
26
+ version: '3.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.5'
33
+ version: '1.6'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.5'
41
- description: " Gem which handle csstats.dat file generated by CSX module in AMX Mod
42
- X (http://www.amxmodx.org/) "
40
+ version: '1.6'
41
+ description: Gem which handle csstats.dat file generated by CSX module in AMX Mod
42
+ X (http://www.amxmodx.org/)
43
43
  email: jpalumickas@gmail.com
44
44
  executables: []
45
45
  extensions: []
@@ -47,6 +47,7 @@ extra_rdoc_files: []
47
47
  files:
48
48
  - ".gitignore"
49
49
  - ".rspec"
50
+ - ".rubocop.yml"
50
51
  - ".travis.yml"
51
52
  - CONTRIBUTING.md
52
53
  - Gemfile
@@ -82,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
83
  version: '0'
83
84
  requirements: []
84
85
  rubyforge_project:
85
- rubygems_version: 2.2.2
86
+ rubygems_version: 2.4.5
86
87
  signing_key:
87
88
  specification_version: 4
88
89
  summary: ''