hubstats 0.11.1 → 0.11.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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 911665087e0ee0d8773ce4bae6aed402795e6c2d
4
- data.tar.gz: 18461da00b85d04ab4e8aca618788eb137289894
3
+ metadata.gz: 3fc079b6e63d5a5fc7ee4503e35820ea54e09424
4
+ data.tar.gz: 46597aad8e5b14d15754cd6e4e04285e479f6b41
5
5
  SHA512:
6
- metadata.gz: ffd6cf82367d1086e2a243f59225ccb3e0e1e7afa310b58066e61ab976e79c95e07891db84b4cb75c190584ec4e22183c4e679c84188989c03f8501d6885f927
7
- data.tar.gz: 8bfeff211c2d84125ed45f72d32fa092c0840a2aca02f8243fe478289a02cccd8c1c682ba27974a4bb6927cc19d3ae034650dc6ef693e66ef1f5672f24bbca7b
6
+ metadata.gz: 353bd5e9cea0e12d4fd12b28fda94093936c854638ecf660f1f854651ce9a82ea3f5693eb5cb29771b995209953a6bad131004946268a700709db3554b76cc06
7
+ data.tar.gz: 5da5b406669dff022fab684b6f9cef6098793176f2b423ffa77ced20580accf6609555389fa47a72a3791a7629095f009b26d69520ffad11f9e2bbcf9681a105
data/CHANGELOG.markdown CHANGED
@@ -1,21 +1,3 @@
1
- #### v0.11.1
2
- * Removing places for Client IDs and Client secrets
3
-
4
- > Emma Sax: Unknown User: https://github.com/sportngin/hubstats/pull/123
5
-
6
- #### v0.11.0
7
- * Hubstats does not need to show data for deployments
8
-
9
- > Emma Sax: Unknown User: https://github.com/sportngin/hubstats/pull/121
10
-
11
- #### v0.10.0
12
- * Show list of QA Signoffs on User's show page
13
-
14
- > Emma Sax: Unknown User: https://github.com/sportngin/hubstats/pull/120
15
-
16
- #### v0.9.5
17
- * Linking Today button in Hubstats datepicker
18
-
19
- > Emma Sax: Unknown User: https://github.com/sportngin/hubstats/pull/116
20
-
21
- #### v0.9.4
1
+ #### v0.11.4
2
+ #### v0.11.3
3
+ #### v0.11.2
@@ -33,7 +33,7 @@ module Hubstats
33
33
  @team = Hubstats::Team.where(id: params[:id]).first
34
34
  @pull_requests = Hubstats::PullRequest.belonging_to_team(@team.id).merged_in_date_range(@start_date, @end_date).order("updated_at DESC").limit(20)
35
35
  @pull_count = Hubstats::PullRequest.belonging_to_team(@team.id).merged_in_date_range(@start_date, @end_date).count(:all)
36
- @users = @team.users.where("login NOT IN (?)", Hubstats.config.github_config["ignore_users_list"]).order("login ASC").distinct
36
+ @users = @team.users.where.not(login: Hubstats.config.github_config["ignore_users_list"] || []).order("login ASC").distinct
37
37
  @active_user_count = @users.length
38
38
  @comment_count = Hubstats::Comment.belonging_to_team(@users.pluck(:id)).created_in_date_range(@start_date, @end_date).count(:all)
39
39
  repos_pr = @pull_requests.pluck(:repo_id)
@@ -14,7 +14,7 @@ module Hubstats
14
14
  @users = Hubstats::User.where(id: params[:id].split(",")).order("login ASC")
15
15
  else
16
16
  @users = Hubstats::User.with_all_metrics(@start_date, @end_date)
17
- .where("login NOT IN (?)", Hubstats.config.github_config["ignore_users_list"])
17
+ .where.not(login: Hubstats.config.github_config["ignore_users_list"] || [])
18
18
  .with_id(params[:users])
19
19
  .custom_order(params[:order])
20
20
  .paginate(:page => params[:page], :per_page => 15)
@@ -5,7 +5,7 @@ module Hubstats
5
5
 
6
6
  # Various checks that can be used to filter and find info about comments.
7
7
  scope :created_in_date_range, lambda {|start_date, end_date| where("hubstats_comments.created_at BETWEEN ? AND ?", start_date, end_date)}
8
- scope :ignore_comments_by, lambda {|user_ids| where("user_id NOT IN (?)", user_ids) if user_ids}
8
+ scope :ignore_comments_by, lambda {|user_ids| where.not(user_id: user_ids || []) if user_ids}
9
9
  scope :belonging_to_pull_request, lambda {|pull_request_id| where(pull_request_id: pull_request_id)}
10
10
  scope :belonging_to_user, lambda {|user_id| where(user_id: user_id)}
11
11
  scope :belonging_to_team, lambda {|user_ids| where(user_id: user_ids) if user_ids}
@@ -32,6 +32,11 @@ module Hubstats
32
32
  def self.create_or_update(github_comment)
33
33
  github_comment = github_comment.to_h.with_indifferent_access if github_comment.respond_to? :to_h
34
34
 
35
+ unless github_comment[:user_id]
36
+ Rails.logger.warn "Found comment with no user, ignoring. GitHub comment ID: #{github_comment[:id]}"
37
+ return nil
38
+ end
39
+
35
40
  user = Hubstats::User.create_or_update(github_comment[:user])
36
41
  github_comment[:user_id] = user.id
37
42
 
@@ -7,9 +7,9 @@ module Hubstats
7
7
  scope :closed_in_date_range, lambda {|start_date, end_date| where("hubstats_pull_requests.closed_at BETWEEN ? AND ?", start_date, end_date)}
8
8
  scope :updated_in_date_range, lambda {|start_date, end_date| where("hubstats_pull_requests.updated_at BETWEEN ? AND ?", start_date, end_date)}
9
9
  scope :created_in_date_range, lambda {|start_date, end_date| where("hubstats_pull_requests.created_at BETWEEN ? AND ?", start_date, end_date)}
10
- scope :merged_in_date_range, lambda {|start_date, end_date| where("hubstats_pull_requests.merged").where("hubstats_pull_requests.merged_at BETWEEN ? AND ?", start_date, end_date)}
10
+ scope :merged_in_date_range, lambda {|start_date, end_date| where("hubstats_pull_requests.merged = ?", true).where("hubstats_pull_requests.merged_at BETWEEN ? AND ?", start_date, end_date)}
11
11
  scope :created_since, lambda {|days| where("hubstats_pull_requests.created_at > ?", Date.today - days)}
12
- scope :ignore_pulls_by, lambda {|user_ids| where("user_id NOT IN (?)", user_ids) if user_ids}
12
+ scope :ignore_pulls_by, lambda {|user_ids| where.not(user_id: user_ids || []) if user_ids}
13
13
  scope :belonging_to_repo, lambda {|repo_id| where(repo_id: repo_id)}
14
14
  scope :belonging_to_team, lambda {|team_id| where(team_id: team_id)}
15
15
  scope :belonging_to_user, lambda {|user_id| where(user_id: user_id)}
@@ -42,7 +42,7 @@ module Hubstats
42
42
  scope :pull_requests_count, lambda {|start_date, end_date|
43
43
  select("hubstats_repos.id as repo_id")
44
44
  .select("IFNULL(COUNT(DISTINCT hubstats_pull_requests.id),0) AS pull_request_count")
45
- .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.repo_id = hubstats_repos.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = '1'", start_date, end_date]))
45
+ .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.repo_id = hubstats_repos.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = ?", start_date, end_date, true]))
46
46
  .group("hubstats_repos.id")
47
47
  }
48
48
 
@@ -56,7 +56,7 @@ module Hubstats
56
56
  select("hubstats_repos.id as repo_id")
57
57
  .select("ROUND(IFNULL(AVG(hubstats_pull_requests.additions),0)) AS average_additions")
58
58
  .select("ROUND(IFNULL(AVG(hubstats_pull_requests.deletions),0)) AS average_deletions")
59
- .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.repo_id = hubstats_repos.id AND hubstats_pull_requests.merged = '1' AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?)", start_date, end_date]))
59
+ .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.repo_id = hubstats_repos.id AND hubstats_pull_requests.merged = ? AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?)", true, start_date, end_date]))
60
60
  .group("hubstats_repos.id")
61
61
  }
62
62
 
@@ -28,7 +28,7 @@ module Hubstats
28
28
  scope :pull_requests_count, lambda {|start_date, end_date|
29
29
  select("hubstats_teams.id as team_id")
30
30
  .select("IFNULL(COUNT(DISTINCT hubstats_pull_requests.id),0) AS pull_request_count")
31
- .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.team_id = hubstats_teams.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = '1'", start_date, end_date]))
31
+ .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.team_id = hubstats_teams.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = ?", start_date, end_date, true]))
32
32
  .group("hubstats_teams.id")
33
33
  }
34
34
 
@@ -3,11 +3,12 @@ module Hubstats
3
3
 
4
4
  # Various checks that can be used to filter and find info about users.
5
5
  scope :with_id, lambda {|user_id| where(id: user_id.split(',')) if user_id}
6
- scope :only_active, -> { where("login NOT IN (?)", Hubstats.config.github_config["ignore_users_list"]).having("comment_count > 0 OR pull_request_count > 0 OR deploy_count > 0") }
7
- scope :is_developer, -> { where("login NOT IN (?)", Hubstats.config.github_config["ignore_users_list"]).having("pull_request_count > 0") }
8
- scope :is_reviewer, -> { where("login NOT IN (?)", Hubstats.config.github_config["ignore_users_list"]).having("comment_count > 0") }
6
+ scope :only_active, -> { not_ignored.having("comment_count > 0 OR pull_request_count > 0 OR deploy_count > 0") }
7
+ scope :is_developer, -> { not_ignored.having("pull_request_count > 0") }
8
+ scope :is_reviewer, -> { not_ignored.having("comment_count > 0") }
9
9
  scope :with_contributions, lambda {|start_date, end_date, repo_id| with_all_metrics_repos(start_date, end_date, repo_id) if repo_id}
10
- scope :ignore_users_ids, -> { where("login IN (?)", Hubstats.config.github_config["ignore_users_list"]).pluck(:id) }
10
+ scope :ignore_users_ids, -> { where(login: Hubstats.config.github_config["ignore_users_list"] || []).pluck(:id) }
11
+ scope :not_ignored, -> { where.not(login: Hubstats.config.github_config["ignore_users_list"] || []) }
11
12
 
12
13
  # Public - Counts all of the deploys for selected user that occurred between the start_date and end_date.
13
14
  #
@@ -57,7 +58,7 @@ module Hubstats
57
58
  scope :pull_requests_count, lambda {|start_date, end_date|
58
59
  select("hubstats_users.id as user_id")
59
60
  .select("IFNULL(COUNT(DISTINCT hubstats_pull_requests.id),0) AS pull_request_count")
60
- .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.user_id = hubstats_users.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = '1'", start_date, end_date]))
61
+ .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.user_id = hubstats_users.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = ?", start_date, end_date, true]))
61
62
  .group("hubstats_users.id")
62
63
  }
63
64
 
@@ -124,7 +125,7 @@ module Hubstats
124
125
  scope :pull_requests_count_by_repo, lambda {|start_date, end_date, repo_id|
125
126
  select("hubstats_users.id as user_id")
126
127
  .select("IFNULL(COUNT(DISTINCT hubstats_pull_requests.id),0) AS pull_request_count")
127
- .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.user_id = hubstats_users.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND (hubstats_pull_requests.repo_id LIKE ?) AND hubstats_pull_requests.merged = '1'", start_date, end_date, repo_id]))
128
+ .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.user_id = hubstats_users.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND (hubstats_pull_requests.repo_id LIKE ?) AND hubstats_pull_requests.merged = ?", start_date, end_date, repo_id, true]))
128
129
  .group("hubstats_users.id")
129
130
  }
130
131
 
@@ -155,7 +156,7 @@ module Hubstats
155
156
  select("hubstats_users.id as user_id")
156
157
  .select("SUM(IFNULL(hubstats_pull_requests.additions, 0)) AS additions")
157
158
  .select("SUM(IFNULL(hubstats_pull_requests.deletions, 0)) AS deletions")
158
- .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.user_id = hubstats_users.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = '1'", start_date, end_date]))
159
+ .joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.user_id = hubstats_users.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = ?", start_date, end_date, true]))
159
160
  .group("hubstats_users.id")
160
161
  }
161
162
 
@@ -44,7 +44,7 @@ module Hubstats
44
44
  octo = client({:auto_paginate => true})
45
45
  octo.paginate(path, options) do |data, last_response|
46
46
  last_response.data.each{|v| route(v,kind,repo_name)}.clear
47
- wait_limit(1,octo.rate_limit)
47
+ wait_limit(false, 1, octo.rate_limit)
48
48
  end.each{|v| route(v,kind,repo_name)}.clear
49
49
  end
50
50
 
@@ -82,7 +82,7 @@ module Hubstats
82
82
  pr = client.pull_request(repo.full_name, pull.number)
83
83
  Hubstats::PullRequest.create_or_update(HubHelper.pull_setup(pr))
84
84
  end
85
- wait_limit(grab_size,client.rate_limit)
85
+ wait_limit(false, grab_size, client.rate_limit)
86
86
  end
87
87
  puts "All Pull Requests are up to date"
88
88
  rescue Faraday::ConnectionFailed
@@ -115,7 +115,7 @@ module Hubstats
115
115
  end
116
116
  end
117
117
  end
118
- wait_limit(grab_size,client.rate_limit)
118
+ wait_limit(false, grab_size, client.rate_limit)
119
119
  puts "All teams are up to date"
120
120
  rescue Faraday::ConnectionFailed
121
121
  puts "Connection Timeout, restarting team updating"
@@ -270,9 +270,12 @@ module Hubstats
270
270
  # rate_limit - the amount of time to wait to grab data
271
271
  #
272
272
  # Returns - nothing
273
- def self.wait_limit(grab_size, rate_limit)
274
- if rate_limit.remaining < grab_size
275
- puts "Hit Github rate limit, waiting #{Time.at(rate_limit.resets_in).utc.strftime("%H:%M:%S")} to get more"
273
+ def self.wait_limit(force, grab_size=nil, rate_limit=nil)
274
+ rate_limit = client.rate_limit unless rate_limit
275
+ grab_size = 250 unless grab_size
276
+
277
+ if force || rate_limit.remaining < grab_size
278
+ puts "We don't want to hit the GitHub wait limit; waiting #{Time.at(rate_limit.resets_in).utc.strftime("%H:%M:%S")} to get more"
276
279
  sleep(rate_limit.resets_in)
277
280
  end
278
281
  end
@@ -1,3 +1,3 @@
1
1
  module Hubstats
2
- VERSION = "0.11.1"
2
+ VERSION = "0.11.4"
3
3
  end
@@ -15,11 +15,16 @@ namespace :hubstats do
15
15
 
16
16
  desc "Updates which repos hubstats tracks"
17
17
  task :update_repos => :environment do
18
- Hubstats::GithubAPI.get_repos.each do |repo|
18
+ Hubstats::GithubAPI.get_repos.each_with_index do |repo, index|
19
19
  unless Hubstats::Repo.where(full_name: repo.full_name).first
20
20
  Rake::Task["hubstats:populate:setup_repo"].execute({repo: repo})
21
21
  end
22
+
23
+ if index % 10 == 0
24
+ Hubstats::GithubAPI.wait_limit(true)
25
+ end
22
26
  end
27
+
23
28
  puts "Finished with initial updating, grabbing extra info about pull requests"
24
29
  Rake::Task["hubstats:populate:update_pulls"].execute
25
30
  puts "Finished grabbing info about pull requests, populating teams"
@@ -70,6 +70,16 @@ module Hubstats
70
70
  allow(Hubstats::User).to receive_message_chain(:create_or_update).and_return(user)
71
71
  expect(ehandler.route(payload, payload[:type]).class).to eq(Hubstats::Comment)
72
72
  end
73
+
74
+ it 'should successfully creates_or_updates the event even if the user_id is missing' do
75
+ ehandler = Hubstats::EventsHandler.new()
76
+ payload = build(:comment_payload_hash, :user => {:login=>"hermina", :id=>0, :role=>"User"},
77
+ :comment => {"id"=>194761, "body"=>"Quidem ea minus ut odio optio.",
78
+ "kind"=>"Issue", "repo_id"=>101010,
79
+ "created_at" => Date.today, "updated_at" => Date.today})
80
+ allow(Hubstats::User).to receive_message_chain(:create_or_update).and_return(user)
81
+ expect(ehandler.route(payload, payload[:type])).to be_nil
82
+ end
73
83
  end
74
84
 
75
85
  context "TeamEvent" do
@@ -15,7 +15,7 @@ development:
15
15
  test:
16
16
  adapter: mysql2
17
17
  database: hubstats_test
18
- username: <%= ENV['TRAVIS'] ? 'travis' : 'root' %>
18
+ username: 'root'
19
19
  pool: 5
20
20
  timeout: 5000
21
21
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubstats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.11.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elliot Hursh
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-07-14 00:00:00.000000000 Z
12
+ date: 2017-11-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -407,7 +407,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
407
407
  version: '0'
408
408
  requirements: []
409
409
  rubyforge_project:
410
- rubygems_version: 2.5.1
410
+ rubygems_version: 2.6.13
411
411
  signing_key:
412
412
  specification_version: 4
413
413
  summary: Github Statistics