tf2_line_parser 0.0.3 → 0.0.4

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tf2_line_parser (0.0.2)
4
+ tf2_line_parser (0.0.4)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -10,10 +10,19 @@ GEM
10
10
  activesupport (3.2.12)
11
11
  i18n (~> 0.6)
12
12
  multi_json (~> 1.0)
13
- coderay (1.0.8)
13
+ coderay (1.0.9)
14
+ colorize (0.5.8)
15
+ coveralls (0.5.7)
16
+ colorize
17
+ json
18
+ rest-client
19
+ simplecov (>= 0.7)
20
+ thor
14
21
  diff-lcs (1.1.3)
15
- i18n (0.6.1)
22
+ i18n (0.6.2)
23
+ json (1.7.7)
16
24
  method_source (0.8.1)
25
+ mime-types (1.21)
17
26
  multi_json (1.6.1)
18
27
  pry (0.9.12)
19
28
  coderay (~> 1.0.5)
@@ -21,6 +30,8 @@ GEM
21
30
  slop (~> 3.4)
22
31
  pry-nav (0.2.3)
23
32
  pry (~> 0.9.10)
33
+ rest-client (1.6.7)
34
+ mime-types (>= 1.16)
24
35
  rspec (2.12.0)
25
36
  rspec-core (~> 2.12.0)
26
37
  rspec-expectations (~> 2.12.0)
@@ -37,11 +48,13 @@ GEM
37
48
  spec_coverage (0.0.5)
38
49
  rspec (~> 2.0)
39
50
  simplecov
51
+ thor (0.17.0)
40
52
 
41
53
  PLATFORMS
42
54
  ruby
43
55
 
44
56
  DEPENDENCIES
57
+ coveralls
45
58
  pry-nav (~> 0.2.3)
46
59
  rspec (~> 2.12.0)
47
60
  spec_coverage (~> 0.0.5)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # TF2 line parser[![Build Status](https://travis-ci.org/Arie/tf2_line_parser.png?branch=master)](http://travis-ci.org/Arie/tf2_line_parser) [![Code Climate](https://codeclimate.com/github/Arie/tf2_line_parser.png)](https://codeclimate.com/github/Arie/tf2_line_parser)
1
+ # TF2 line parser [![Build Status](https://travis-ci.org/Arie/tf2_line_parser.png?branch=master)](http://travis-ci.org/Arie/tf2_line_parser) [![Code Climate](https://codeclimate.com/github/Arie/tf2_line_parser.png)](https://codeclimate.com/github/Arie/tf2_line_parser) [![Coverage Status](https://coveralls.io/repos/Arie/tf2_line_parser/badge.png?branch=master)](https://coveralls.io/r/Arie/tf2_line_parser)
2
2
 
3
3
  A TF2 log line parser. Unlike the other log parsers I've found, this one parses the line and returns a plain old ruby object to describe the event of the line.
4
4
  I plan to use this for my own stats parsing tool.
@@ -12,4 +12,4 @@ I plan to use this for my own stats parsing tool.
12
12
  * Enter game
13
13
 
14
14
  ## Credits
15
- * nTraum, I stole most of the regexes from him his [TF2Stats](https://github.com/nTraum/tf2stats/) project.
15
+ * nTraum, I stole most of the regexes from his [TF2Stats](https://github.com/nTraum/tf2stats/) project.
@@ -57,17 +57,5 @@ module TF2LineParser
57
57
 
58
58
  end
59
59
 
60
- class PVPEvent < Event
61
- def self.attributes
62
- @attributes ||= [:time, :player_nick, :player_steamid, :player_team, :target_nick, :target_steamid, :target_team]
63
- end
64
-
65
- def initialize(time, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team)
66
- @time = parse_time(time)
67
- @player = Player.new(player_name, player_steam_id, player_team)
68
- @target = Player.new(target_name, target_steam_id, target_team)
69
- end
70
- end
71
-
72
60
  end
73
61
  end
@@ -4,7 +4,27 @@ module TF2LineParser
4
4
  class Kill < PVPEvent
5
5
 
6
6
  def self.regex
7
- @regex ||= /#{regex_time} #{regex_player} killed #{regex_target} with/
7
+ @regex ||= /#{regex_time} #{regex_player} killed #{regex_target} #{regex_weapon} #{regex_customkill}/
8
+ end
9
+
10
+ def self.regex_weapon
11
+ @regex_weapon ||= 'with "(?\'weapon\'\w*)"'
12
+ end
13
+
14
+ def self.regex_customkill
15
+ @regex_customkill ||= /(\(customkill "(?'customkill'\w*)"\))?/
16
+ end
17
+
18
+ def self.attributes
19
+ @attributes ||= [:time, :player_nick, :player_steamid, :player_team, :target_nick, :target_steamid, :target_team, :weapon, :customkill]
20
+ end
21
+
22
+ def initialize(time, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team, weapon, customkill)
23
+ @time = parse_time(time)
24
+ @player = Player.new(player_name, player_steam_id, player_team)
25
+ @target = Player.new(target_name, target_steam_id, target_team)
26
+ @weapon = weapon
27
+ @customkill = customkill
8
28
  end
9
29
 
10
30
  end
@@ -1,19 +1,18 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class MatchEnd < Event
4
+ class MatchEnd < RoundEventWithVariables
5
5
 
6
- def self.regex
7
- @regex ||= /#{regex_time} World triggered "Game_Over" reason "(?'reason'.*)"/
6
+ def self.round_variable_regex
7
+ @round_variable_regex ||= /reason "(?'reason'.*)"/
8
8
  end
9
9
 
10
- def self.attributes
11
- @attributes ||= [:time, :reason]
10
+ def self.round_type
11
+ "Game_Over"
12
12
  end
13
13
 
14
- def initialize(time, reason)
15
- @time = parse_time(time)
16
- @reason = reason
14
+ def self.round_variable
15
+ @round_variable ||= :reason
17
16
  end
18
17
 
19
18
  end
@@ -1,10 +1,25 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class MedicDeath < PVPEvent
4
+ class MedicDeath < Event
5
5
 
6
6
  def self.regex
7
- @regex ||= /#{regex_time} #{regex_player} triggered "medic_death" against #{regex_target}.*/
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "medic_death" against #{regex_target} #{regex_medic_death_info}/
8
+ end
9
+
10
+ def self.regex_medic_death_info
11
+ @regex_healing ||= '\(healing "(?\'healing\'\d+)"\) \(ubercharge "(?\'ubercharge\'\d+)"\)'
12
+ end
13
+
14
+ def self.attributes
15
+ @attributes ||= [:time, :player_nick, :player_steamid, :player_team, :target_nick, :target_steamid, :target_team, :ubercharge]
16
+ end
17
+
18
+ def initialize(time, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team, ubercharge)
19
+ @time = parse_time(time)
20
+ @player = Player.new(player_name, player_steam_id, player_team)
21
+ @target = Player.new(target_name, target_steam_id, target_team)
22
+ @ubercharge = (ubercharge == "1")
8
23
  end
9
24
 
10
25
  end
@@ -1,24 +1,18 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class PickupItem < Event
4
+ class PickupItem < PlayerActionEvent
5
5
 
6
- def self.regex
7
- @regex ||= /#{regex_time} #{regex_player} picked up item #{regex_item}/
6
+ def self.action_text
7
+ @action_text ||= "picked up item"
8
8
  end
9
9
 
10
- def self.regex_item
10
+ def self.regex_action
11
11
  @regex_item ||= '\"(?\'item\'.*)\"'
12
12
  end
13
13
 
14
- def self.attributes
15
- @attributes ||= [:time, :player_nick, :player_steamid, :player_team, :item]
16
- end
17
-
18
- def initialize(time, player_name, player_steam_id, player_team, item)
19
- @time = parse_time(time)
20
- @player = Player.new(player_name, player_steam_id, player_team)
21
- @item = item
14
+ def self.item
15
+ :item
22
16
  end
23
17
 
24
18
  end
@@ -0,0 +1,23 @@
1
+ module TF2LineParser
2
+
3
+ module Events
4
+
5
+ class PlayerActionEvent < Event
6
+
7
+ def self.regex
8
+ @regex ||= /#{regex_time} #{regex_player} #{action_text} #{regex_action}/
9
+ end
10
+
11
+ def self.attributes
12
+ @attributes ||= [:time, :player_nick, :player_steamid, :player_team, self.item]
13
+ end
14
+
15
+ def initialize(time, player_name, player_steam_id, player_team, item = self.class.item)
16
+ @time = parse_time(time)
17
+ @player = Player.new(player_name, player_steam_id, player_team)
18
+ instance_variable_set("@#{self.class.item}", item)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ module TF2LineParser
2
+
3
+ module Events
4
+
5
+ class PVPEvent < Event
6
+ def self.attributes
7
+ @attributes ||= [:time, :player_nick, :player_steamid, :player_team, :target_nick, :target_steamid, :target_team]
8
+ end
9
+
10
+ def initialize(time, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team)
11
+ @time = parse_time(time)
12
+ @player = Player.new(player_name, player_steam_id, player_team)
13
+ @target = Player.new(target_name, target_steam_id, target_team)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,24 +1,18 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class RoleChange < Event
4
+ class RoleChange < PlayerActionEvent
5
5
 
6
- def self.regex
7
- @regex ||= /#{regex_time} #{regex_player} changed role to #{regex_role}/
6
+ def self.action_text
7
+ @action_text ||= "changed role to"
8
8
  end
9
9
 
10
- def self.regex_role
10
+ def self.regex_action
11
11
  @regex_role ||= '\"(?\'role\'.*)\"'
12
12
  end
13
13
 
14
- def self.attributes
15
- @attributes ||= [:time, :player_nick, :player_steamid, :player_team, :role]
16
- end
17
-
18
- def initialize(time, player_name, player_steam_id, player_team, role)
19
- @time = parse_time(time)
20
- @player = Player.new(player_name, player_steam_id, player_team)
21
- @role = role
14
+ def self.item
15
+ :role
22
16
  end
23
17
 
24
18
  end
@@ -0,0 +1,22 @@
1
+ module TF2LineParser
2
+ module Events
3
+
4
+ class RoundEventWithVariables < Event
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} World triggered "#{round_type}" #{round_variable_regex}/
8
+ end
9
+
10
+ def self.attributes
11
+ @attributes ||= [:time, round_variable]
12
+ end
13
+
14
+ def initialize(time, round_variable)
15
+ @time = parse_time(time)
16
+ instance_variable_set("@#{self.class.round_variable}", round_variable)
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ module TF2LineParser
2
+ module Events
3
+
4
+ class RoundEventWithoutVariables < Event
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} World triggered "#{round_type}"/
8
+ end
9
+
10
+ def self.attributes
11
+ @attributes ||= [:time]
12
+ end
13
+
14
+ def initialize(time)
15
+ @time = parse_time(time)
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -1,19 +1,18 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class RoundLength < Event
4
+ class RoundLength < RoundEventWithVariables
5
5
 
6
- def self.regex
7
- @regex ||= /#{regex_time} World triggered "Round_Length" \(seconds \"(?'length'.*)"\)/
6
+ def self.round_type
7
+ @round_type ||= "Round_Length"
8
8
  end
9
9
 
10
- def self.attributes
11
- @attributes ||= [:time, :length]
10
+ def self.round_variable_regex
11
+ @round_variable_regex ||= /\(seconds \"(?'length'.*)"\)/
12
12
  end
13
13
 
14
- def initialize(time, length)
15
- @time = parse_time(time)
16
- @length = length
14
+ def self.round_variable
15
+ @round_variable ||= :length
17
16
  end
18
17
 
19
18
  end
@@ -1,18 +1,10 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class RoundStalemate < Event
4
+ class RoundStalemate < RoundEventWithoutVariables
5
5
 
6
- def self.regex
7
- @regex ||= /#{regex_time} World triggered "Round_Stalemate"/
8
- end
9
-
10
- def self.attributes
11
- @attributes ||= [:time]
12
- end
13
-
14
- def initialize(time)
15
- @time = parse_time(time)
6
+ def self.round_type
7
+ @round_type ||= "Round_Stalemate"
16
8
  end
17
9
 
18
10
  end
@@ -1,18 +1,10 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class RoundStart < Event
4
+ class RoundStart < RoundEventWithoutVariables
5
5
 
6
- def self.regex
7
- @regex ||= /#{regex_time} World triggered "Round_Start"/
8
- end
9
-
10
- def self.attributes
11
- @attributes ||= [:time]
12
- end
13
-
14
- def initialize(time)
15
- @time = parse_time(time)
6
+ def self.round_type
7
+ @round_type ||= "Round_Start"
16
8
  end
17
9
 
18
10
  end
@@ -1,20 +1,20 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class RoundWin < Event
4
+ class RoundWin < RoundEventWithVariables
5
5
 
6
- def self.regex
7
- @regex ||= /#{regex_time} World triggered "Round_Win" \(winner "(?'team'Red|Blue)"\)/
6
+ def self.round_type
7
+ @round_type ||= "Round_Win"
8
8
  end
9
9
 
10
- def self.attributes
11
- @attributes ||= [:time, :team]
10
+ def self.round_variable_regex
11
+ @round_variable_regex ||= /\(winner "(?'team'Red|Blue)"\)/
12
12
  end
13
13
 
14
- def initialize(time, team)
15
- @time = parse_time(time)
16
- @team = team
14
+ def self.round_variable
15
+ @round_variable ||= :team
17
16
  end
17
+
18
18
  end
19
19
 
20
20
  end
@@ -1,24 +1,18 @@
1
1
  module TF2LineParser
2
2
  module Events
3
3
 
4
- class Suicide < Event
4
+ class Suicide < PlayerActionEvent
5
5
 
6
- def self.regex
7
- @regex ||= /#{regex_time} #{regex_player} committed suicide with #{regex_suicide}/
6
+ def self.action_text
7
+ @action_text ||= "committed suicide with"
8
8
  end
9
9
 
10
- def self.regex_suicide
10
+ def self.regex_action
11
11
  @regex_role ||= '\"(?\'method\'\w*)\"'
12
12
  end
13
13
 
14
- def self.attributes
15
- @attributes ||= [:time, :player_nick, :player_steamid, :player_team, :method]
16
- end
17
-
18
- def initialize(time, player_name, player_steam_id, player_team, method)
19
- @time = parse_time(time)
20
- @player = Player.new(player_name, player_steam_id, player_team)
21
- @method = method
14
+ def self.item
15
+ :method
22
16
  end
23
17
 
24
18
  end
@@ -1,3 +1,3 @@
1
1
  module TF2LogLineParser
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -3,6 +3,10 @@ require "tf2_line_parser/parser"
3
3
  require "tf2_line_parser/player"
4
4
 
5
5
  require "tf2_line_parser/events/event"
6
+ require "tf2_line_parser/events/pvp_event"
7
+ require "tf2_line_parser/events/player_action_event"
8
+ require "tf2_line_parser/events/round_event_without_variables"
9
+ require "tf2_line_parser/events/round_event_with_variables"
6
10
  require "tf2_line_parser/events/score"
7
11
  Dir[File.dirname(__FILE__) + '/tf2_line_parser/events/*.rb'].each {|file| require file }
8
12
  require "tf2_line_parser/line"
@@ -89,7 +89,17 @@ module TF2LineParser
89
89
  target_name = "broder jukebox"
90
90
  target_steam_id = "STEAM_0:1:13978585"
91
91
  target_team = "Blue"
92
- Events::Kill.should_receive(:new).with(anything, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team)
92
+ weapon = "pistol_scout"
93
+ customkill = nil
94
+ Events::Kill.should_receive(:new).with(anything, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team, weapon, customkill)
95
+ parse(line)
96
+ end
97
+
98
+ it 'recognizes headshot kills' do
99
+ line = log_lines[1951]
100
+ weapon = "sniperrifle"
101
+ customkill = "headshot"
102
+ Events::Kill.should_receive(:new).with(anything, anything, anything, anything, anything, anything, anything, weapon, customkill)
93
103
  parse(line)
94
104
  end
95
105
 
@@ -199,10 +209,17 @@ module TF2LineParser
199
209
  killer_name = "Epsilon numlocked"
200
210
  killer_steam_id = "STEAM_0:1:16347045"
201
211
  killer_team = "Red"
202
- Events::MedicDeath.should_receive(:new).with(anything, killer_name, killer_steam_id, killer_team, medic_name, medic_steam_id, medic_team)
212
+ uber = false
213
+ Events::MedicDeath.should_receive(:new).with(anything, killer_name, killer_steam_id, killer_team, medic_name, medic_steam_id, medic_team, "0")
203
214
  parse(line)
204
215
  end
205
216
 
217
+ it 'recognizes medic uberdrops' do
218
+ uberdrop = 'L 10/04/2012 - 21:43:06: "TLR Traxantic<28><STEAM_0:1:1328042><Red>" triggered "medic_death" against "cc//Admirable<3><STEAM_0:0:154182><Blue>" (healing "6478") (ubercharge "1")'
219
+ Events::MedicDeath.should_receive(:new).with(anything, anything, anything, anything, anything, anything, anything, "1")
220
+ parse(uberdrop)
221
+ end
222
+
206
223
  it 'recognizes role changes' do
207
224
  line = log_lines[1712]
208
225
  player_name = "broder bybben"
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,11 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start
9
+
1
10
  require 'pry-nav'
2
11
  require "tf2_line_parser"
@@ -15,6 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.homepage = 'http://github.com/Arie/tf2_line_parser'
16
16
 
17
17
  gem.add_dependency "activesupport"
18
+ gem.add_development_dependency 'coveralls'
18
19
  gem.add_development_dependency "pry-nav", "~> 0.2.3"
19
20
  gem.add_development_dependency "rspec", "~> 2.12.0"
20
21
  gem.add_development_dependency "spec_coverage", "~> 0.0.5"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tf2_line_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: coveralls
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: pry-nav
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -103,9 +119,13 @@ files:
103
119
  - lib/tf2_line_parser/events/match_end.rb
104
120
  - lib/tf2_line_parser/events/medic_death.rb
105
121
  - lib/tf2_line_parser/events/pickup_item.rb
122
+ - lib/tf2_line_parser/events/player_action_event.rb
106
123
  - lib/tf2_line_parser/events/point_capture.rb
124
+ - lib/tf2_line_parser/events/pvp_event.rb
107
125
  - lib/tf2_line_parser/events/revenge.rb
108
126
  - lib/tf2_line_parser/events/role_change.rb
127
+ - lib/tf2_line_parser/events/round_event_with_variables.rb
128
+ - lib/tf2_line_parser/events/round_event_without_variables.rb
109
129
  - lib/tf2_line_parser/events/round_length.rb
110
130
  - lib/tf2_line_parser/events/round_stalemate.rb
111
131
  - lib/tf2_line_parser/events/round_start.rb
@@ -157,4 +177,3 @@ test_files:
157
177
  - spec/lib/tf2_line_parser/parser_spec.rb
158
178
  - spec/lib/tf2_line_parser/player_spec.rb
159
179
  - spec/spec_helper.rb
160
- has_rdoc: