gamer_stats 0.2.3 → 0.2.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.
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: