lx_data_validation 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 89ff1b56686f16ee995ad1f43e95a6dfe41d8160
4
- data.tar.gz: 4f2ae259e53910bdf95432f97033a58473908320
3
+ metadata.gz: 3e194bf49037ed8424cf3dcf33f3fabf5cb52760
4
+ data.tar.gz: 0647669d8cf15cb8f21e1c817c149ce4925f4225
5
5
  SHA512:
6
- metadata.gz: 66022de0f498b75a19d6c582aa55ef6ea1093905483bf7a65ba7d8103d33bd86f52c71150ec88f80e9c3e9785b50207862f970262418100de436931745d00199
7
- data.tar.gz: f3fddb6357cabcc1c664b6fb5105f040b8c4cd053d67dcdadab9eb3c0575c951e3bf32fb6b870740aafaca20591b6dba7d4ec27b7cbaf1fda7a2b8dd4517ec91
6
+ metadata.gz: b165e44eea570728fb66fd5156eaf4136857ca877d6515279e90543dc70135935b55782231bd37cdab2c67b2da82453ac576cc3d791302d2f0974717e39e88e2
7
+ data.tar.gz: 7671e8e28c54168f2a659b661f118a4900be3b4208049b7af391d94453ee776e7542eb7825a7d2157c91e874c5688fccd7e1a994c2ceb30154ada490ab8389ae
data/.gitignore CHANGED
@@ -8,3 +8,5 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  .idea/
11
+ log/
12
+ *.gem
data/README.md CHANGED
@@ -1,14 +1,17 @@
1
1
  # DataValidation
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/data_validation`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ This gem validate the data between web page items and mobile api response.
4
4
 
5
+ It will validate stat pages of PRO, men, woman, boys and girls.
6
+
7
+ e.g. http://php.admin.laxpower.com/update17/binmen/rating01.php
5
8
 
6
9
  ## Installation
7
10
 
8
11
  Add this line to your application's Gemfile:
9
12
 
10
13
  ```ruby
11
- gem 'data_validation'
14
+ gem 'lx_data_validation'
12
15
  ```
13
16
 
14
17
  And then execute:
@@ -20,7 +23,16 @@ Or install it yourself as:
20
23
  $ gem install lx_data_validation
21
24
 
22
25
  ## Usage
26
+
27
+ Validate the data of 2017 season (the default season)
28
+
29
+ $ compare
30
+
31
+ Validate the data of 2016 season
32
+
33
+ $ compare 16
23
34
 
35
+ It will generate a new folder named log under your current directory. All mismatched data will be recorded into the log files in the sub-directories
24
36
 
25
37
  ## Development
26
38
 
data/bin/compare CHANGED
@@ -2,4 +2,8 @@
2
2
 
3
3
  require 'data_validation'
4
4
 
5
- DataValidation.compare_with_season ARGV[0]
5
+ season = '17'
6
+ if ARGV[0]
7
+ season = ARGV[0]
8
+ end
9
+ DataValidation.compare_with_season season
@@ -21,6 +21,8 @@ module DataValidation
21
21
  end
22
22
 
23
23
  def compare_with_season(season = '17')
24
+ compare_with_url(web_request_host + '/mll')
25
+ compare_with_url(web_request_host + '/nll')
24
26
  %w|men women boys girls|.each { |category| compare_with_season_and_category season, category }
25
27
  end
26
28
 
@@ -56,7 +56,7 @@ module DataValidation
56
56
  (team_value.is_a?(Float) && team_value == item[i].to_f) ||
57
57
  (team_value.is_a?(Integer) && team_value == item[i].to_i)
58
58
 
59
- logger.error "team #{item[0]}'s #{filed_name} is not correct: #{item[i]} -- #{team_value}"
59
+ logger.error "team #{item[0]}'s #{filed_name}: #{item[i]} -- #{team_value}"
60
60
  end
61
61
 
62
62
  i += 1
@@ -91,23 +91,23 @@ module DataValidation
91
91
  record.each_with_index do |item, index|
92
92
  if index == 0 && item.to_i != team_data['rank']
93
93
  elsif index == 1 && item.to_f != team_data['powerRating']
94
- logger.error "team #{i} has incorrect powerRating in #{full_conf}: #{item.to_f} -- #{team_data['powerRating']}"
94
+ logger.error "team #{i} powerRating in #{full_conf}: #{item.to_f} -- #{team_data['powerRating']}"
95
95
  elsif index == 2 && item.to_i != team_data['conference']['wins']
96
- logger.error "team #{i} has incorrect conference wins in #{full_conf}: #{item.to_i} -- #{team_data['conference']['wins']}"
96
+ logger.error "team #{i} conference wins in #{full_conf}: #{item.to_i} -- #{team_data['conference']['wins']}"
97
97
  elsif index == 3 && item.to_i != team_data['conference']['losses']
98
- logger.error "team #{i} has incorrect conference losses in #{full_conf}: #{item.to_i} -- #{team_data['conference']['losses']}"
98
+ logger.error "team #{i} conference losses in #{full_conf}: #{item.to_i} -- #{team_data['conference']['losses']}"
99
99
  elsif index == 4 && item.to_i != team_data['conference']['ties']
100
- logger.error "team #{i} has incorrect conference ties in #{full_conf}: #{item.to_i} -- #{team_data['conference']['ties']}"
100
+ logger.error "team #{i} conference ties in #{full_conf}: #{item.to_i} -- #{team_data['conference']['ties']}"
101
101
  elsif index == 5 && item.to_f != team_data['winLossConf']
102
- logger.error "team #{i} has incorrect winLossConf in #{full_conf}: #{item.to_f} -- #{team_data['winLossConf']}"
102
+ logger.error "team #{i} winLossConf in #{full_conf}: #{item.to_f} -- #{team_data['winLossConf']}"
103
103
  elsif index == 6 && item.to_i != team_data['total']['wins']
104
- logger.error "team #{i} has incorrect total wins in #{full_conf}: #{item.to_i} -- #{team_data['total']['wins']}"
104
+ logger.error "team #{i} total wins in #{full_conf}: #{item.to_i} -- #{team_data['total']['wins']}"
105
105
  elsif index == 7 && item.to_i != team_data['total']['losses']
106
- logger.error "team #{i} has incorrect total losses in #{full_conf}: #{item.to_i} -- #{team_data['total']['losses']}"
106
+ logger.error "team #{i} total losses in #{full_conf}: #{item.to_i} -- #{team_data['total']['losses']}"
107
107
  elsif index == 8 && item.to_i != team_data['total']['ties']
108
- logger.error "team #{i} has incorrect total ties in #{full_conf}: #{item.to_i} -- #{team_data['total']['ties']}"
108
+ logger.error "team #{i} total ties in #{full_conf}: #{item.to_i} -- #{team_data['total']['ties']}"
109
109
  elsif index == 9 && item.to_f != team_data['winLossTotal']
110
- logger.error "team #{i} has incorrect winLossTotal in #{full_conf}: #{item.to_f} -- #{team_data['winLossTotal']}"
110
+ logger.error "team #{i} winLossTotal in #{full_conf}: #{item.to_f} -- #{team_data['winLossTotal']}"
111
111
  end
112
112
  end
113
113
  end
@@ -134,12 +134,14 @@ module DataValidation
134
134
 
135
135
  def logger
136
136
  @logger ||= begin
137
- tokens = logger_name.split('/')
138
- 1.upto(tokens.size - 1) do |n|
139
- dir = tokens[0...n].join('/')
140
- Dir.mkdir(dir) unless Dir.exist?(dir)
141
- end
142
- Logger.new File.new(logger_name, 'w')
137
+ tokens = logger_name.split('/')
138
+ 1.upto(tokens.size - 1) do |n|
139
+ dir = tokens[0...n].join('/')
140
+ Dir.mkdir(dir) unless Dir.exist?(dir)
141
+ end
142
+ logger = Logger.new(File.new(logger_name, 'w'))
143
+ logger.info(web_url)
144
+ logger
143
145
  end
144
146
  end
145
147
 
@@ -7,6 +7,7 @@ require 'data_validation/comparison/ranking_table_mw_poll_comparison'
7
7
  require 'data_validation/comparison/ranking_table_mw_trend_comparison'
8
8
  require 'data_validation/comparison/ranking_table_mw_tsi_comparison'
9
9
  require 'data_validation/comparison/ranking_table_mw_pr_comparison'
10
+ require 'data_validation/comparison/ranking_table_pro_pr_comparison'
10
11
 
11
12
  module DataValidation
12
13
  module Comparison
@@ -30,6 +31,8 @@ module DataValidation
30
31
  return RankingTableMwTrendComparison.new url
31
32
  elsif url.match /update\d\d\/bin\S+\/tsi\d+.php/ # Trend page for collage division
32
33
  return RankingTableMwTsiComparison.new url
34
+ elsif url.match /\.com\/(mll|nll)/ # Pro ranking page
35
+ return RankingTableProPrComparison.new url
33
36
  end
34
37
  end
35
38
  end
@@ -55,7 +55,7 @@ module DataValidation
55
55
  (team_value.is_a?(Float) && team_value == item[i].to_f) ||
56
56
  (team_value.is_a?(Integer) && team_value == item[i].to_i)
57
57
 
58
- logger.error "team #{item[0]}'s #{filed_name} is not correct: #{item[i]} -- #{team_value}"
58
+ logger.error "team #{item[0]}'s #{filed_name}: #{item[i]} -- #{team_value}"
59
59
  end
60
60
 
61
61
  i += 1
@@ -54,7 +54,7 @@ module DataValidation
54
54
  (team_value.is_a?(Float) && team_value == item[i].to_f) ||
55
55
  (team_value.is_a?(Integer) && team_value == item[i].to_i)
56
56
 
57
- logger.error "team #{item[0]}'s #{filed_name} is not correct: #{item[i]} -- #{team_value}"
57
+ logger.error "team #{item[0]}'s #{filed_name}: #{item[i]} -- #{team_value}"
58
58
  end
59
59
 
60
60
  i += 1
@@ -0,0 +1,73 @@
1
+ module DataValidation
2
+ module Comparison
3
+ class RankingTableProPrComparison
4
+
5
+ attr_reader :web_url
6
+
7
+ def initialize(web_url)
8
+ @web_url = web_url
9
+ end
10
+
11
+ def api_path
12
+ '/rest/LaxPower/rankingTableProPR'
13
+ end
14
+
15
+ def field_array
16
+ ['rank', 'teamName', 'powerRating', %w|record wins|, %w|record losses|]
17
+ end
18
+
19
+ def compare
20
+ div_id = web_url.match(/mll/) ? '12' : '11'
21
+ season = 2017
22
+ is_old_season = false
23
+
24
+ web_data = DataValidation::DataAccess.get_pro_pr_table web_url
25
+
26
+ api_data = (DataValidation::DataAccess.get_pr_for_pro season, 'PRO', div_id)
27
+ if api_data.nil?
28
+ season = 2016
29
+ api_data = DataValidation::DataAccess.get_pr_for_pro season, 'PRO', div_id
30
+ is_old_season = true
31
+ end
32
+
33
+ @logger_name = "log/#{season}/pro/pr/#{season}_pro_#{div_id}.log"
34
+ if is_old_season
35
+ puts 'This PR ranking is still for 2016'
36
+ end
37
+
38
+ if web_data.size != api_data.size
39
+ logger.error 'team size is incorrect'
40
+ else
41
+ web_data.each_with_index do |web_record, index|
42
+ api_record = api_data[index]
43
+ field_array.each_with_index do |field_name, i|
44
+ api_record_item = api_record[field_name]
45
+ web_record_item = web_record[i]
46
+
47
+ if (api_record_item.is_a?(String) && !api_record_item.include?(web_record_item.strip)) ||
48
+ ((api_record_item.is_a?(Float) && api_record_item != web_record_item.to_f)) ||
49
+ ((api_record_item.is_a?(Integer) && api_record_item != web_record_item.to_i))
50
+ logger.error "team #{index + 1}'s #{field_name}: #{api_record_item} -- #{web_record_item}"
51
+ end
52
+ end
53
+ end
54
+
55
+ end
56
+ end
57
+
58
+ def logger
59
+ @logger ||= begin
60
+ tokens = @logger_name.split('/')
61
+ 1.upto(tokens.size - 1) do |n|
62
+ dir = tokens[0...n].join('/')
63
+ Dir.mkdir(dir) unless Dir.exist?(dir)
64
+ end
65
+ logger = Logger.new(File.new(@logger_name, 'w'))
66
+ logger.info(web_url)
67
+ logger
68
+ end
69
+ end
70
+
71
+ end
72
+ end
73
+ end
@@ -88,6 +88,8 @@ module DataValidation
88
88
  end
89
89
  end
90
90
 
91
+
92
+
91
93
  def get_response_from_mobile_api
92
94
  HTTParty.post(api_url, headers: {'Content-Type' => 'application/json'}, body: api_body)
93
95
  end
@@ -103,6 +105,32 @@ module DataValidation
103
105
  body: %Q|{"season": "#{season}","category": "#{category}", "divisionId": #{div_id}}|)
104
106
  end
105
107
 
108
+ # for pro only
109
+ def self.get_pro_pr_table html_url
110
+ table = []
111
+ doc = Nokogiri::HTML(open(html_url))
112
+ doc.search('div#content_well td:nth-of-type(3) > div:nth-of-type(2) tr:not(:first-of-type)').map do |team|
113
+ team_data = []
114
+ team.children.each_with_index do |item, index|
115
+ value = item.text
116
+ if index == 3 # number of win and loss
117
+ value.split('-').each { |n| team_data << n }
118
+ else
119
+ team_data << value
120
+ end
121
+ end
122
+ table << team_data
123
+ end
124
+ table
125
+ end
126
+
127
+ def self.get_pr_for_pro(season, category, div_id)
128
+ puts "get PR ranking for #{season}, #{category}, #{div_id} from " + DataValidation.api_request_host + '/rest/LaxPower/rankingTableProPR'
129
+ HTTParty.post(DataValidation.api_request_host + '/rest/LaxPower/rankingTableProPR',
130
+ headers: {'Content-Type' => 'application/json'},
131
+ body: %Q|{"season": "#{season}","category": "#{category}", "divisionId": #{div_id}, "pageSize": 1000, "currPage": 1}|)['results']['results']['teams']
132
+ end
133
+
106
134
  def self.get_high_school_div_stat_urls(season='17', category='boys')
107
135
  is_for_hs = category == 'boys' || category == 'girls'
108
136
  high_school_div_stat_main_url = if is_for_hs
@@ -1,3 +1,3 @@
1
1
  module DataValidation
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lx_data_validation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Tong
@@ -70,6 +70,7 @@ files:
70
70
  - lib/data_validation/comparison/ranking_table_mw_sos_comparison.rb
71
71
  - lib/data_validation/comparison/ranking_table_mw_trend_comparison.rb
72
72
  - lib/data_validation/comparison/ranking_table_mw_tsi_comparison.rb
73
+ - lib/data_validation/comparison/ranking_table_pro_pr_comparison.rb
73
74
  - lib/data_validation/data_access.rb
74
75
  - lib/data_validation/version.rb
75
76
  homepage: https://gitlab.dev.activenetwork.com/rtong/data-validation-for-laxpower