gamer_stats 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzQzZWUxM2NhMjI5YTE2N2VjYzhmYjc5MTgzYWFmZDVhMGE0OGViMg==
4
+ ZjNkMmFkMTg4NTA1YzllMDY2MmRhYjMxMzM1ZWU2YjVkMzM3ZmM4Nw==
5
5
  data.tar.gz: !binary |-
6
- Nzg1MWM5ZmM0Yjg1NDBiOTMyNWMwM2ZjMmIyYjA1YzAwYWY3YmEwYw==
6
+ Yjg5OWMwNTRiNWEzYzRhOGRmZjk2OTBkNjMxMTJjYTJlOTBlMzdhMw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YzdkODlmZmI5ZTA2ZGJiNDgwZTNmMzQ5M2Q3N2NmZGUxY2QxN2FhNmU1ZGYz
10
- NzBlZWYwZmJhZDk0MThhYjQ3MDIzNDQzMDY3ZjMwNDUzZmQyYWU4MWEzMzcx
11
- ZDQwOWU0Y2IwYWY4MmQ2NjM0NmZjN2RkNjVlOGZhNjY5YTRiNTU=
9
+ NDU5N2RkZGZiY2ZjYzk4ZDYzMzdmOWZiMDNmYTdkOGFiYjg1Y2JmOTYwY2E5
10
+ NTllNDQ0MjA3OWUyZjg2OTgyODU2M2Q1NTMyZjBjODEyMWEyNmQzYTcxNDE5
11
+ ZmEzZTIxN2MyZTcwNjk0NmQwY2NiMGVhZTUwMjY1ZmQxZWI5YzU=
12
12
  data.tar.gz: !binary |-
13
- ZDM0MjExYTQ3NzdiMWI4OTNiYmU4Zjk4OWEyODk3ZTRkMTA4MjFjY2I0ZmIx
14
- OGQ3MTEzNjlmNGE1YTdhNzFjMzRkYjM3NGUwYjI4YmFhMzcwZGMxNzllODQ0
15
- N2Y2YjdlOTlhMjViYTdhYTZkNDRhNjI5NjNmMDJjMWY3Yzg1OTQ=
13
+ MmQzMGIxYjNlMWJkNGQ5MWY1MWQ0YTJlMWQzYzI5MDY5ZjRmODMyNTI4NTQz
14
+ MjQzODE4YTBkZmI2ZDc0MWQzMDFhNmFhYTAwMzJlY2QxNmQ3ZWU3OTEyN2M3
15
+ MGI3MDkwZDJkZWY3YzE1MWE5ZTcyYTVkYjRjZTg1N2U3ZjI4Yjg=
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ test/cassettes
data/gamer_stats.gemspec CHANGED
@@ -19,8 +19,11 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rake", "~> 10.0.4"
23
+ spec.add_development_dependency "vcr", "~> 2.4.0"
24
+ spec.add_development_dependency "webmock", "~> 1.11.0"
23
25
 
24
- spec.add_dependency "httparty"
25
- spec.add_dependency "json"
26
+ spec.add_dependency "httparty", "~> 0.11.0"
27
+ spec.add_dependency "json", "~> 1.7.7"
28
+ spec.add_dependency "percentage", "~> 1.0.0"
26
29
  end
@@ -0,0 +1,45 @@
1
+ # https://github.com/timcraft/percentage
2
+ require 'percentage'
3
+
4
+ module Achievements
5
+ class ValueInfo < Struct.new(:data, :path, :rangeFrom, :rangeTo)
6
+ end
7
+
8
+ class Achievement
9
+ def initialize(info)
10
+ @info = info
11
+ end
12
+
13
+ def getPercentage
14
+ value = getValueByPath
15
+
16
+ return 0 if (value <= @info.rangeFrom)
17
+ return 100 if (value >= @info.rangeTo)
18
+
19
+ p = Percentage.new(Rational(value, @info.rangeTo))
20
+ i = p.to_i
21
+
22
+ return i if !p.zero? && i > 1
23
+ 1
24
+ end
25
+
26
+ private
27
+
28
+ def getValueByPath
29
+ localData = @info.data
30
+
31
+ @info.path.split('/').each do |p|
32
+ # either use the symbol or the string as key
33
+ key = p.to_sym
34
+ key = p.to_s unless localData.key? key
35
+
36
+ localData = localData.fetch(key)
37
+ end
38
+
39
+ localData.to_i
40
+
41
+ rescue
42
+ 0
43
+ end
44
+ end
45
+ end
data/lib/gamer_stats.rb CHANGED
@@ -4,6 +4,7 @@ require 'gamer_stats/version'
4
4
  require 'helper/deep_dup'
5
5
  require 'helper/deep_merge'
6
6
  require 'helper/hash_path_eval'
7
+ require 'achievements/achievements'
7
8
 
8
9
  module GamerStats
9
10
  end
@@ -1,3 +1,3 @@
1
1
  module GamerStats
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
@@ -0,0 +1,89 @@
1
+ require_relative '../test_helper'
2
+
3
+ def getAchievement(data, path, from, to)
4
+ Achievement.new(getInfo(data, path, from, to))
5
+ end
6
+
7
+ def getInfo(data, path, from, to)
8
+ ValueInfo.new(data, path, from, to)
9
+ end
10
+
11
+ describe Achievements::Achievement do
12
+ it 'can be initialized' do
13
+ achievement = Achievement.new(nil).wont_be_nil
14
+ end
15
+
16
+ it 'can take ValueInfo as parameter for initialization' do
17
+ info = ValueInfo.new
18
+ achievement = Achievement.new(info).wont_be_nil
19
+ end
20
+
21
+ it 'returns zero if target value is below range' do
22
+ getAchievement({ val: 50 }, 'val', 100, 200).getPercentage.must_equal 0
23
+ end
24
+
25
+ it 'returns 100 if target value is above range' do
26
+ getAchievement({ val: 250 }, 'val', 100, 200).getPercentage.must_equal 100
27
+ end
28
+
29
+ it 'data can be made of symbols' do
30
+ data = { a: { b: { c: 50 } } }
31
+ getAchievement(data, 'a/b/c', 0, 100).getPercentage.must_equal 50
32
+ end
33
+
34
+ it 'data can be made of literal symbols' do
35
+ data = { :"a a" => { :"b b" => { :"cc" => 50 } } }
36
+ getAchievement(data, 'a a/b b/cc', 0, 100).getPercentage.must_equal 50
37
+ end
38
+
39
+ it 'data can be made of strings' do
40
+ data = { "a" => { "b" => { "c" => 50 } } }
41
+ getAchievement(data, 'a/b/c', 0, 100).getPercentage.must_equal 50
42
+ end
43
+
44
+ it 'data can be made of strings with spaces' do
45
+ data = { "a a" => { "b b b" => { " c " => 50 } } }
46
+ getAchievement(data, 'a a/b b b/ c ', 0, 100).getPercentage.must_equal 50
47
+ end
48
+
49
+ it 'data can be made of symbols and strings' do
50
+ data = { "a a" => { b: { " c " => 50 } } }
51
+ getAchievement(data, 'a a/b/ c ', 0, 100).getPercentage.must_equal 50
52
+ end
53
+
54
+ it 'returns 99 if a very big number is close to maximum' do
55
+ getAchievement({ val: 9999999 }, 'val', 0, 10000000).getPercentage.must_equal 99
56
+ end
57
+
58
+ it 'returns 1 if a very big number is close to minimum but not rangeFrom' do
59
+ getAchievement({ val: 1 }, 'val', 0, 10000000).getPercentage.must_equal 1
60
+ end
61
+
62
+ it 'returns 0 if the target value is exact rangeFrom' do
63
+ getAchievement({ val: 0 }, 'val', 0, 100).getPercentage.must_equal 0
64
+ end
65
+
66
+ it 'returns 100 if the target value is exact rangeTo' do
67
+ getAchievement({ val: 100 }, 'val', 0, 100).getPercentage.must_equal 100
68
+ end
69
+
70
+ it 'can deal with float values in the data' do
71
+ getAchievement({ val: 50.0 }, 'val', 0, 100).getPercentage.must_equal 50
72
+ end
73
+
74
+ it 'can deal with float values in the rangeFrom' do
75
+ getAchievement({ val: 50 }, 'val', 0.0, 100).getPercentage.must_equal 50
76
+ end
77
+
78
+ it 'can deal with float values in the rangeTo' do
79
+ getAchievement({ val: 50 }, 'val', 0, 100.0).getPercentage.must_equal 50
80
+ end
81
+
82
+ it 'can deal with string value in the target value' do
83
+ getAchievement({ val: "50" }, 'val', 0, 100.0).getPercentage.must_equal 50
84
+ end
85
+
86
+ it 'can deal with an invalid string value in the target value' do
87
+ getAchievement({ val: "abc" }, 'val', 0, 100.0).getPercentage.must_equal 0
88
+ end
89
+ end
@@ -1,8 +1,4 @@
1
- require 'gamer_stats'
2
- require 'minitest/spec'
3
- require 'minitest/autorun'
4
-
5
- include GamerStats
1
+ require_relative '../test_helper'
6
2
 
7
3
  describe Bf3::Player do
8
4
 
@@ -1,6 +1,4 @@
1
- require_relative '../lib/helper/hash_path_eval'
2
- require 'minitest/spec'
3
- require 'minitest/autorun'
1
+ require_relative '../test_helper'
4
2
 
5
3
  describe Hash do
6
4
  let(:h_empty) { {} }
@@ -0,0 +1,27 @@
1
+ require 'minitest/spec'
2
+ require 'minitest/autorun'
3
+ require 'vcr'
4
+
5
+ require 'gamer_stats'
6
+
7
+ include GamerStats
8
+ include Achievements
9
+
10
+ VCR.configure do |c|
11
+ c.hook_into :webmock
12
+ c.cassette_library_dir = 'test/cassettes'
13
+ # :new_episodes = add new requests to the same cassette
14
+ c.default_cassette_options = { :record => :new_episodes, :erb => true }
15
+ # dont raise exceptions when no cassette is in the tray
16
+ c.allow_http_connections_when_no_cassette = true
17
+ # ignore local host calls (local development)
18
+ c.ignore_localhost = true
19
+
20
+ # catch all requests and store them
21
+ c.around_http_request do |request|
22
+ VCR.use_cassette("all", &request)
23
+ end
24
+ end
25
+
26
+ # dont raise exceptions when the http connection is unexpected (turn off with WebMock.disable_net_connect!)
27
+ WebMock.allow_net_connect!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamer_stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - SeriousM - Bernhard Millauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-05 00:00:00.000000000 Z
11
+ date: 2013-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,44 +28,86 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 10.0.4
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.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: vcr
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
32
46
  - !ruby/object:Gem::Version
33
- version: '0'
47
+ version: 2.4.0
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ! '>='
52
+ - - ~>
39
53
  - !ruby/object:Gem::Version
40
- version: '0'
54
+ version: 2.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.11.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 1.11.0
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: httparty
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - ! '>='
73
+ - - ~>
46
74
  - !ruby/object:Gem::Version
47
- version: '0'
75
+ version: 0.11.0
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - ! '>='
80
+ - - ~>
53
81
  - !ruby/object:Gem::Version
54
- version: '0'
82
+ version: 0.11.0
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: json
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - ! '>='
87
+ - - ~>
60
88
  - !ruby/object:Gem::Version
61
- version: '0'
89
+ version: 1.7.7
62
90
  type: :runtime
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - ! '>='
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 1.7.7
97
+ - !ruby/object:Gem::Dependency
98
+ name: percentage
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 1.0.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
67
109
  - !ruby/object:Gem::Version
68
- version: '0'
110
+ version: 1.0.0
69
111
  description: Provides a way to gather gamer stats from the http://p-stats.com network
70
112
  email:
71
113
  - bernhard.millauer@gmail.com
@@ -79,6 +121,7 @@ files:
79
121
  - README.md
80
122
  - Rakefile
81
123
  - gamer_stats.gemspec
124
+ - lib/achievements/achievements.rb
82
125
  - lib/bf3/bf3.rb
83
126
  - lib/error/gamer_stats_error.rb
84
127
  - lib/gamer_stats.rb
@@ -86,8 +129,10 @@ files:
86
129
  - lib/helper/deep_dup.rb
87
130
  - lib/helper/deep_merge.rb
88
131
  - lib/helper/hash_path_eval.rb
89
- - test/bf3_test.rb
90
- - test/hash_path_eval_test.rb
132
+ - test/achievements/achievements_test.rb
133
+ - test/bf3/bf3_test.rb
134
+ - test/helper/hash_path_eval_test.rb
135
+ - test/test_helper.rb
91
136
  homepage: https://github.com/SeriousM/gamer_stats
92
137
  licenses:
93
138
  - MIT
@@ -113,6 +158,8 @@ signing_key:
113
158
  specification_version: 4
114
159
  summary: Provides a way to gather gamer stats from the http://p-stats.com network
115
160
  test_files:
116
- - test/bf3_test.rb
117
- - test/hash_path_eval_test.rb
161
+ - test/achievements/achievements_test.rb
162
+ - test/bf3/bf3_test.rb
163
+ - test/helper/hash_path_eval_test.rb
164
+ - test/test_helper.rb
118
165
  has_rdoc: