hubstats 0.12.2 → 1.0.0.beta

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
- SHA1:
3
- metadata.gz: 5c64060494a5b0519e55a8baaa92e0275adfec5f
4
- data.tar.gz: 32d75bfb93d1eaa5b2923832fe5b177d17364ce8
2
+ SHA256:
3
+ metadata.gz: ed7d93b16a3876de97581f4dc7c76be14e2cf40bee2ead1883231283cdd264e3
4
+ data.tar.gz: a59a5cde37267a9595f763d55916d7ef05412f6126c0578c5ba7a92de8b37e98
5
5
  SHA512:
6
- metadata.gz: dedcad39ebd8266563d7ebe10ada5d9a1fbf78fb990abc21d9cfff5d3b7f7aa05af4b0e47544df274b497cf21332e5cf8c940163e5b1fb690a98461759825d99
7
- data.tar.gz: a5ead0f76dd1b3679795dc1dc7fd250ac864e0245f6c46954eac361e38f5075b88e7a04add615b2e8859eb38d58764536924329997c4013c2cf41037437dfa5b
6
+ metadata.gz: e7666522d273e5ec4c581ab965631669685d952b478c374849593fc862a9a69fc26b4100ebe47c92b6a497076dcafc7429cdfc0e05ebb4ce972ba3aa0d767ba7
7
+ data.tar.gz: 2e1536857df35eb959f0011ba1c5dedea3fd93bfe001280ca72150db505051e76065619bc1c5d45e96dc65f68fa923c7e035fb9e6b385cd09017a669c4e5d697
data/.travis.yml CHANGED
@@ -1,9 +1,11 @@
1
1
  sudo: false
2
+ dist: trusty
3
+ language: ruby
4
+ cache: bundler
5
+
2
6
  branches:
3
7
  only:
4
8
  - master
5
- language: ruby
6
- cache: bundler
7
9
  rvm:
8
10
  - 2.1
9
11
  - 2.2
@@ -4,10 +4,9 @@ module Hubstats
4
4
 
5
5
  # Private - Reads the cookie, and then either sets @start_date and @end_date to be the cookie's values
6
6
  # or sets them to be today + 1 and two weeks ago.
7
- #
8
- # Returns - nothing
9
- private
10
- def set_time
7
+ #
8
+ # Returns - nothing
9
+ private def set_time
11
10
  cookie = cookies[:hubstats_dates]
12
11
  if cookie == nil || cookie.include?("null")
13
12
  @start_date = Date.today - 14
@@ -78,7 +78,7 @@ module Hubstats
78
78
  #
79
79
  # repo - the repository
80
80
  #
81
- # Returns - true if the repo is valid
81
+ # Returns - true if the repo is valid
82
82
  def valid_repo(repo)
83
83
  return !repo.empty?
84
84
  end
@@ -106,8 +106,7 @@ module Hubstats
106
106
  # Private - Allows only these parameters to be added when creating a deploy
107
107
  #
108
108
  # Returns - hash of parameters
109
- private
110
- def deploy_params
109
+ private def deploy_params
111
110
  params.permit(:git_revision, :repo_name, :deployed_at, :user_id, :pull_request_ids)
112
111
  end
113
112
  end
@@ -11,7 +11,7 @@ module Hubstats
11
11
  # Returns - nothing, but makes a new event
12
12
  def handler
13
13
  verify_signature(request)
14
-
14
+
15
15
  kind = request.headers['X-Github-Event']
16
16
  event = event_params.with_indifferent_access
17
17
 
@@ -25,12 +25,11 @@ module Hubstats
25
25
  end
26
26
 
27
27
  # Public - Will check that the request passed is a valid signature.
28
- #
28
+ #
29
29
  # request - the signature to be checked
30
30
  #
31
31
  # Returns - an error if the signatures don't match
32
- private
33
- def verify_signature(request)
32
+ private def verify_signature(request)
34
33
  request.body.rewind
35
34
  payload_body = request.body.read
36
35
  signature = 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), Hubstats.config.webhook_endpoint, payload_body)
@@ -40,8 +39,7 @@ module Hubstats
40
39
  # Private - Allows only these parameters to be added when creating an event
41
40
  #
42
41
  # Returns - hash of parameters
43
- private
44
- def event_params
42
+ private def event_params
45
43
  params.permit!
46
44
  end
47
45
  end
@@ -6,11 +6,11 @@ module Hubstats
6
6
  scope :with_id, lambda {|team_id| where(id: team_id.split(',')) if team_id}
7
7
 
8
8
  # Public - Counts all of the comments a selected team's members have written that occurred between the start_date and end_date.
9
- #
9
+ #
10
10
  # start_date - the start of the date range
11
11
  # end_date - the end of the data range
12
12
  # user_id_array - an array of all of the user ids in selected team
13
- #
13
+ #
14
14
  # Returns - count of comments
15
15
  scope :comments_count, lambda {|start_date, end_date|
16
16
  select("IFNULL(COUNT(DISTINCT hubstats_comments.id),0) AS comment_count, hubstats_teams.id as team_id")
@@ -20,10 +20,10 @@ module Hubstats
20
20
  }
21
21
 
22
22
  # Public - Counts all of the merged pull requests for selected team's users that occurred between the start_date and end_date.
23
- #
23
+ #
24
24
  # start_date - the start of the date range
25
25
  # end_date - the end of the data range
26
- #
26
+ #
27
27
  # Returns - count of pull requests
28
28
  scope :pull_requests_count, lambda {|start_date, end_date|
29
29
  select("hubstats_teams.id as team_id")
@@ -33,10 +33,10 @@ module Hubstats
33
33
  }
34
34
 
35
35
  # Public - Joins all of the metrics together for selected team: net additions, comments, repos, and pull requests.
36
- #
36
+ #
37
37
  # start_date - the start of the date range
38
38
  # end_date - the end of the data range
39
- #
39
+ #
40
40
  # Returns - all of the stats about the team
41
41
  scope :with_all_metrics, lambda {|start_date, end_date|
42
42
  select("hubstats_teams.*, pull_request_count, comment_count")
@@ -46,14 +46,14 @@ module Hubstats
46
46
  }
47
47
 
48
48
  has_and_belongs_to_many :users, :join_table => 'hubstats_teams_users', :uniq => true
49
-
50
- # Public - Checks if the team is currently existing, and if it isn't, then makes a new team with
49
+
50
+ # Public - Checks if the team is currently existing, and if it isn't, then makes a new team with
51
51
  # the specifications that are passed in. We are assuming that if it is not already existent,
52
52
  # then we probably don't really care about the team, so our hubstats boolean will be set to false.
53
53
  #
54
54
  # github_team - the info that's passed in about the new or updated team
55
55
  #
56
- # Returns - the team
56
+ # Returns - the team
57
57
  def self.create_or_update(github_team)
58
58
  github_team = github_team.to_h.with_indifferent_access if github_team.respond_to? :to_h
59
59
 
@@ -88,5 +88,12 @@ module Hubstats
88
88
  def self.order_by_name
89
89
  order("name ASC")
90
90
  end
91
+
92
+ def self.designed_for_hubstats?(description)
93
+ description.include?("hubstats") ||
94
+ description.include?("Hubstats") ||
95
+ description.include?("hub") ||
96
+ description.include?("Hub")
97
+ end
91
98
  end
92
99
  end
@@ -3,9 +3,8 @@ github_auth: # Must include access_token
3
3
 
4
4
  github_config: # Must include org_name. The repo_list, team_list, and ignore_users_list are optional.
5
5
  # org_name: <ORGANIZATION NAME>
6
- # team_list: [<ARRAY OF TEAMS>]
7
- # repo_list: [<ARRAY OF REPOS>]
8
- # ignore_users_list: [<ARRAY OF USERS' LOGINS TO IGNORE>]
6
+ # repo_list: [<ARRAY OF OPTIONAL REPOS>]
7
+ # ignore_users_list: [<ARRAY OF OPTIONAL USERS' LOGINS TO IGNORE>]
9
8
 
10
9
  webhook_secret: #<40 CHARACTER ACCESS TOKEN >
11
10
  webhook_endpoint: #<url of webhook endpoint>
@@ -17,8 +17,10 @@ module Hubstats
17
17
  pull_processor(payload)
18
18
  when "pull_request_review_comment", "PullRequestReviewCommentEvent"
19
19
  comment_processor(payload, "PullRequest")
20
- when "membership", "MembershipEvent"
20
+ when "membership", "MembershipEvent", "team", "TeamEvent"
21
21
  team_processor(payload)
22
+ when "repository", "RepositoryEvent"
23
+ repository_processor(payload)
22
24
  end
23
25
  end
24
26
 
@@ -67,8 +69,17 @@ module Hubstats
67
69
  # Returns - nothing, but updates or makes the team
68
70
  def team_processor(payload)
69
71
  team = payload[:team]
70
- team_list = Hubstats.config.github_config["team_list"] || []
71
- if team_list.include? team[:name]
72
+
73
+ if payload[:scope] == "team" && payload[:action] == "added"
74
+ if Hubstats::Team.designed_for_hubstats?(team[:description])
75
+ Hubstats::Team.create_or_update(team.with_indifferent_access)
76
+ hubstats_team = Hubstats::Team.where(name: team[:name]).first
77
+ hubstats_user = Hubstats::User.create_or_update(payload[:member])
78
+ Hubstats::Team.update_users_in_team(hubstats_team, hubstats_user, payload[:github_action])
79
+ end
80
+ end
81
+
82
+ if payload[:action] == "edited" && Hubstats::Team.designed_for_hubstats?(team[:description])
72
83
  Hubstats::Team.create_or_update(team.with_indifferent_access)
73
84
  hubstats_team = Hubstats::Team.where(name: team[:name]).first
74
85
  hubstats_user = Hubstats::User.create_or_update(payload[:member])
@@ -76,6 +87,17 @@ module Hubstats
76
87
  end
77
88
  end
78
89
 
90
+ def repository_processor(payload)
91
+ repo = payload[:repository]
92
+
93
+ if payload[:action] == "created" # it's a new repository
94
+ Hubstats::Repo.create_or_update
95
+ Hubstats::GithubAPI.create_repo_hook(repo)
96
+ # The hook was probably already made when we made the repository,
97
+ # but we'll put this here just in case
98
+ end
99
+ end
100
+
79
101
  # Public - Grabs the PR number off of any of the various places it can be
80
102
  #
81
103
  # payload - the thing that we will use to try to attain the PR number
@@ -100,10 +100,9 @@ module Hubstats
100
100
  Octokit.auto_paginate = true
101
101
  client = Hubstats::GithubAPI.client
102
102
  all_teams_in_org = client.organization_teams(Hubstats.config.github_config["org_name"])
103
- team_list = Hubstats.config.github_config["team_list"] || []
104
103
 
105
104
  all_teams_in_org.each do |team|
106
- if team_list.include? team[:name]
105
+ if Hubstats::Team.designed_for_hubstats?(team[:description])
107
106
  puts "Making a team"
108
107
  Hubstats::Team.create_or_update(team)
109
108
  users = client.team_members(team[:id])
@@ -126,12 +125,12 @@ module Hubstats
126
125
  # Public - Goes through entire team database and updates the hubstats boolean based on the octokit.yml file
127
126
  #
128
127
  # Returns - nothing
129
- def self.deprecate_teams_from_file
130
- team_list = Hubstats.config.github_config["team_list"] || []
128
+ def self.deprecate_teams
131
129
  teams = Hubstats::Team.all
132
130
 
133
131
  teams.each do |team|
134
- if (!team_list.include? team[:name]) && (team[:hubstats] == true)
132
+ desc = client.team(team.id)[:description]
133
+ if Hubstats::Team.designed_for_hubstats?(desc) && (team[:hubstats] == true)
135
134
  team.update_column(:hubstats, false)
136
135
  team.save!
137
136
  puts "Changed #{team[:name]} from true to false"
@@ -147,7 +146,7 @@ module Hubstats
147
146
  # repo - the repository that is attempting to have a hook made with
148
147
  #
149
148
  # Returns - the hook and a message (or just a message and no hook)
150
- def self.create_hook(repo)
149
+ def self.create_repo_hook(repo)
151
150
  begin
152
151
  client.create_hook(
153
152
  repo.full_name,
@@ -185,7 +184,7 @@ module Hubstats
185
184
  :secret => Hubstats.config.webhook_secret
186
185
  },
187
186
  {
188
- :events => ['membership'],
187
+ :events => ['membership', 'repository', 'team'],
189
188
  :active => true
190
189
  }
191
190
  )
@@ -197,36 +196,6 @@ module Hubstats
197
196
  end
198
197
  end
199
198
 
200
- # Public - Delete webhook from github repository
201
- #
202
- # repo - a repo github object
203
- # old_endpoint - A string of the previous endpoint
204
- #
205
- # Return - nothing
206
- def self.delete_hook(repo, old_endpoint)
207
- begin
208
- client.hooks(repo.full_name).each do |hook|
209
- if hook[:config][:url] == old_endpoint
210
- Hubstats::GithubAPI.client.remove_hook(repo.full_name, hook[:id])
211
- puts "Successfully deleted hook with id #{hook[:id]} and url #{hook[:config][:url]} from #{repo.full_name}"
212
- end
213
- end
214
- rescue Octokit::NotFound
215
- puts "You don't have sufficient privileges to remove an event hook to #{repo.full_name}"
216
- end
217
- end
218
-
219
- # Public - updates a hook if it exists, otherwise creates one
220
- #
221
- # repo - a repo github object
222
- # old_endpoint - A string of the previous endpoint
223
- #
224
- # Returns - the new hook
225
- def self.update_hook(repo, old_endpoint = nil)
226
- delete_hook(repo, old_endpoint) unless old_endpoint == nil
227
- create_hook(repo)
228
- end
229
-
230
199
  # Public - gets labels for a particular label
231
200
  #
232
201
  # repo - a repo github object
@@ -1,3 +1,3 @@
1
1
  module Hubstats
2
- VERSION = "0.12.2"
2
+ VERSION = "1.0.0.beta"
3
3
  end
@@ -8,8 +8,7 @@ namespace :hubstats do
8
8
  puts "Running rake db:migrate"
9
9
  Rake::Task['db:migrate'].invoke
10
10
  puts "Pulling data from Github. This may take a while..."
11
- Rake::Task['hubstats:populate:setup_repos'].invoke
12
- Rake::Task['hubstats:populate:setup_teams'].invoke
11
+ Rake::Task['hubstats:populate:setup'].invoke
13
12
  end
14
13
 
15
14
  desc "Drops the database, then runs rake hubstats:setup"
@@ -21,8 +20,8 @@ namespace :hubstats do
21
20
 
22
21
  desc "Updates changes to the config file"
23
22
  task :update => :environment do
24
- puts "Updating repos"
25
- Rake::Task['hubstats:populate:update_repos'].invoke
23
+ puts "Updating repos and teams"
24
+ Rake::Task['hubstats:populate:update'].invoke
26
25
  end
27
26
 
28
27
  desc "Updates the seed"
@@ -43,16 +42,15 @@ namespace :hubstats do
43
42
  Rake::Task['hubstats:populate:update_teams'].invoke
44
43
  end
45
44
 
46
- desc "Deprecates teams based on the octokit.yml file"
47
- task :deprecate_teams_from_file => :environment do
48
- puts "Deprecating teams based on whitelist in octokit.yml"
49
- Rake::Task['hubstats:populate:deprecate_teams_from_file'].invoke
45
+ desc "Deprecates teams"
46
+ task :deprecate_teams => :environment do
47
+ puts "Deprecating teams"
48
+ Rake::Task['hubstats:populate:deprecate_teams'].invoke
50
49
  end
51
50
 
52
51
  desc "Creates webhook from github for organization"
53
52
  task :make_org_webhook => :environment do
54
53
  puts "Making a webhook for an organization in octokit.yml"
55
- Rake::Task['hubstats:populate:setup_teams'].invoke
54
+ Rake::Task['hubstats:populate:create_organization_hook'].invoke
56
55
  end
57
-
58
56
  end
@@ -1,23 +1,23 @@
1
1
  # A variety of commands that can be used to populate the database information
2
- namespace :hubstats do
2
+ namespace :hubstats do
3
3
  namespace :populate do
4
4
 
5
5
  desc "Pull repos from Github saves in database"
6
- task :setup_repos => :environment do
6
+ task :setup => :environment do
7
7
  Hubstats::GithubAPI.get_repos.each do |repo|
8
- Rake::Task["hubstats:populate:setup_repo"].execute({repo: repo})
8
+ setup_repo(repo)
9
9
  end
10
10
  puts "Finished with initial population, grabbing extra info about pull requests"
11
- Rake::Task["hubstats:populate:update_pulls"].execute
11
+ update_pulls
12
12
  puts "Finished grabbing info about pull requests, populating teams"
13
- Rake::Task["hubstats:populate:teams"].execute
13
+ update_teams
14
14
  end
15
15
 
16
- desc "Updates which repos hubstats tracks"
17
- task :update_repos => :environment do
16
+ desc "Updates which repos hubstats tracks"
17
+ task :update => :environment do
18
18
  Hubstats::GithubAPI.get_repos.each_with_index do |repo, index|
19
19
  unless Hubstats::Repo.where(full_name: repo.full_name).first
20
- Rake::Task["hubstats:populate:setup_repo"].execute({repo: repo})
20
+ setup_repo(repo)
21
21
  end
22
22
 
23
23
  if index % 10 == 0
@@ -26,49 +26,52 @@ namespace :hubstats do
26
26
  end
27
27
 
28
28
  puts "Finished with initial updating, grabbing extra info about pull requests"
29
- Rake::Task["hubstats:populate:update_pulls"].execute
29
+ update_pulls
30
30
  puts "Finished grabbing info about pull requests, populating teams"
31
- Rake::Task["hubstats:populate:teams"].execute
31
+ update_teams
32
32
  end
33
33
 
34
34
  desc "Updates teams for past pull requests"
35
35
  task :update_teams_in_pulls => :environment do
36
- Rake::Task["hubstats:populate:update_teams_in_prs"].execute
36
+ update_teams_in_prs
37
37
  end
38
38
 
39
39
  desc "Updates the teams"
40
40
  task :update_teams => :environment do
41
- Rake::Task['hubstats:populate:teams'].execute
41
+ update_teams
42
42
  end
43
43
 
44
- desc "Deprecates teams based on the octokit.yml file"
45
- task :deprecate_teams_from_file => :environment do
46
- Hubstats::GithubAPI.deprecate_teams_from_file
44
+ desc "Deprecates teams"
45
+ task :deprecate_teams => :environment do
46
+ Hubstats::GithubAPI.deprecate_teams
47
47
  end
48
48
 
49
49
  desc "Creates the webhook for the current org"
50
- task :setup_teams => :environment do
51
- Rake::Task['hubstats:populate:create_org_hook'].execute
50
+ task :create_organization_hook => :environment do
51
+ create_org_hook
52
52
  end
53
53
 
54
54
  task :create_org_hook => :environment do
55
+ create_org_hook
56
+ end
57
+
58
+ private def create_org_hook
55
59
  Hubstats::GithubAPI.create_org_hook(Hubstats.config.github_config["org_name"])
56
60
  end
57
61
 
58
- desc "Pulls in all information for an indivdual repo"
59
- task :setup_repo, [:repo] => :environment do |t, args|
60
- repo = args[:repo]
62
+ private def setup_repo(repo)
61
63
  Hubstats::Repo.create_or_update(repo)
62
- Hubstats::GithubAPI.create_hook(repo)
63
- Rake::Task["hubstats:populate:users"].execute({repo: repo})
64
- Rake::Task["hubstats:populate:pulls"].execute({repo: repo})
65
- Rake::Task["hubstats:populate:comments"].execute({repo: repo})
66
- Rake::Task["hubstats:populate:labels"].execute({repo: repo})
64
+ Hubstats::GithubAPI.create_repo_hook(repo)
65
+ # These are the pieces that take forever when we run the command. Let's not do this, and just make
66
+ # hubstats accurate from this time on out.
67
+ # populate_users(repo)
68
+ # populate_pulls(repo)
69
+ # populate_comments(repo)
70
+ # populate_labels(repo)
67
71
  end
68
72
 
69
- desc "Pull members from Github saves in database"
70
- task :users, [:repo] => :environment do |t, args|
71
- repo = repo_checker(args[:repo])
73
+ private def populate_users(repo)
74
+ repo = repo_checker(repo)
72
75
  puts "Adding contributors to " + repo.full_name
73
76
 
74
77
  users = Hubstats::GithubAPI.client({:auto_paginate => true}).contribs(repo.full_name)
@@ -77,9 +80,8 @@ namespace :hubstats do
77
80
  end unless users == "" # there are no contributors because there are no commits yet
78
81
  end
79
82
 
80
- desc "Pull comments from Github saves in database"
81
- task :comments, [:repo] => :environment do |t, args|
82
- repo = repo_checker(args[:repo])
83
+ private def populate_comments(repo)
84
+ repo = repo_checker(repo)
83
85
  puts "Adding comments to " + repo.full_name
84
86
 
85
87
  pull_comments = Hubstats::GithubAPI.inline(repo.full_name,'pulls/comments')
@@ -87,58 +89,38 @@ namespace :hubstats do
87
89
  commit_comments = Hubstats::GithubAPI.inline(repo.full_name,'comments')
88
90
  end
89
91
 
90
- desc "Pull pull requests from Github saves in database"
91
- task :pulls, [:repo] => :environment do |t, args|
92
- repo = repo_checker(args[:repo])
92
+ private def populate_pulls(repo)
93
+ repo = repo_checker(repo)
93
94
  puts "Adding pulls to " + repo.full_name
94
-
95
+
95
96
  pull_requests = Hubstats::GithubAPI.inline(repo.full_name,'pulls', :state => "all")
96
97
  end
97
98
 
98
- desc "Pull labels from Github saves in database"
99
- task :labels, [:repo] => :environment do |t, args|
100
- repo = repo_checker(args[:repo])
99
+ private def populate_labels(repo)
100
+ repo = repo_checker(repo)
101
101
  puts "Getting labels for " + repo.full_name
102
102
  Hubstats::GithubAPI.add_labels(repo)
103
103
  end
104
104
 
105
- desc "indivdually gets and updates pull requests"
106
- task :update_pulls => :environment do
105
+ private def update_pulls
107
106
  Hubstats::GithubAPI.update_pulls
108
107
  end
109
108
 
110
- desc "Updates labels for all repos"
111
- task :update_labels => :environment do
112
- Hubstats::Repo.all.each do |repo|
113
- Hubstats::GithubAPI.add_labels(repo)
114
- end
115
- end
116
-
117
- desc "indivdually gets and updates all of the teams"
118
- task :teams => :environment do
109
+ private def update_teams
119
110
  Hubstats::GithubAPI.update_teams
120
111
  end
121
112
 
122
- desc "updates the teams for all pull requests from past 365 days"
123
- task :update_teams_in_prs => :environment do
113
+ private def update_teams_in_prs
124
114
  Hubstats::PullRequest.update_teams_in_pulls(365)
125
115
  end
126
116
 
127
- desc "Updates WebHooks for all repos"
128
- task :update_hooks, [:old_endpoint] => :environment do |t, args|
129
- Hubstats::Repo.all.each do |repo|
130
- Hubstats::GithubAPI.update_hook(repo, args[:old_endpoint])
131
- end
132
- end
133
-
134
- def repo_checker(args)
117
+ private def repo_checker(args)
135
118
  raise ArgumentError, "Must be called with repo argument. [:org/:repo]" if args.nil?
136
119
  if args.is_a? String
137
120
  return Hubstats::Repo.where(full_name: args).first
138
- else
121
+ else
139
122
  return args
140
123
  end
141
124
  end
142
-
143
125
  end
144
126
  end
@@ -16,14 +16,15 @@ FactoryGirl.define do
16
16
  name "Team One"
17
17
  hubstats true
18
18
  action "added"
19
- initialize_with { attributes }
19
+ description "description"
20
+ initialize_with { attributes }
20
21
  end
21
22
 
22
- factory :team_payload_hash, class:Hash do
23
+ factory :team_payload_hash, class:Hash do
23
24
  id {Faker::Number.number(6).to_i}
24
25
  type "MembershipEvent"
25
26
  association :user, factory: :user_hash, strategy: :build
26
27
  association :team, factory: :team_hash, strategy: :build
27
- initialize_with { attributes }
28
- end
28
+ initialize_with { attributes }
29
+ end
29
30
  end
@@ -66,7 +66,7 @@ module Hubstats
66
66
  payload = build(:comment_payload_hash,
67
67
  :user => {:login=>"hermina", :id=>0, :role=>"User"},
68
68
  :comment => {
69
- "id"=>194761,
69
+ "id"=>194761,
70
70
  "body"=>"Quidem ea minus ut odio optio.",
71
71
  "kind"=>"Issue",
72
72
  "user"=>{},
@@ -83,11 +83,11 @@ module Hubstats
83
83
  payload = build(:comment_payload_hash,
84
84
  :user => {:login=>"hermina", :id=>0, :role=>"User"},
85
85
  :comment => {
86
- "id"=>194761,
86
+ "id"=>194761,
87
87
  "body"=>"Quidem ea minus ut odio optio.",
88
- "kind"=>"Issue",
88
+ "kind"=>"Issue",
89
89
  "user"=>nil,
90
- "created_at" => Date.today,
90
+ "created_at" => Date.today,
91
91
  "updated_at" => Date.today
92
92
  }
93
93
  )
@@ -108,11 +108,12 @@ module Hubstats
108
108
  ehandler = Hubstats::EventsHandler.new()
109
109
  payload = build(:team_payload_hash)
110
110
  user = build(:user)
111
- allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("team_list") { ["Team One", "Team Two", "Team Three"] }
112
111
  allow(payload).to receive(:[]).with(:event).and_return(payload)
113
- allow(payload).to receive(:[]).with(:team).and_return({:name => "Team One"})
112
+ allow(payload).to receive(:[]).with(:team).and_return({:name => "Team One", :description => "Hubstats"})
114
113
  allow(payload).to receive(:[]).with(:member).and_return(user)
115
114
  allow(payload).to receive(:[]).with(:github_action).and_return("added")
115
+ allow(payload).to receive(:[]).with(:scope).and_return("team")
116
+ allow(payload).to receive(:[]).with(:action).and_return("added")
116
117
  allow(Hubstats::User).to receive(:create_or_update).and_return(user)
117
118
  expect(Hubstats::Team).to receive(:create_or_update)
118
119
  expect(Hubstats::Team).to receive(:update_users_in_team)
@@ -124,12 +125,13 @@ module Hubstats
124
125
  payload = build(:team_payload_hash)
125
126
  team = build(:team)
126
127
  user = build(:user)
127
- allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("team_list") { ["Team One", "Team Two", "Team Three"] }
128
128
  allow(Hubstats::User).to receive(:create_or_update).and_return(user)
129
129
  allow(payload).to receive(:[]).with(:event).and_return(payload)
130
- allow(payload).to receive(:[]).with(:team).and_return({:name => "Team One"})
130
+ allow(payload).to receive(:[]).with(:team).and_return({:name => "Team One", :description => "Hubstats"})
131
131
  allow(payload).to receive(:[]).with(:member).and_return(user)
132
132
  allow(payload).to receive(:[]).with(:github_action).and_return("added")
133
+ allow(payload).to receive(:[]).with(:scope).and_return("team")
134
+ allow(payload).to receive(:[]).with(:action).and_return("added")
133
135
  expect(Hubstats::Team).to receive(:update_users_in_team)
134
136
  expect(Hubstats::Team).to receive(:create_or_update).and_return(team)
135
137
  ehandler.route(payload, "MembershipEvent")
@@ -70,7 +70,7 @@ module Hubstats
70
70
  context '.update_teams' do
71
71
  subject {Hubstats::GithubAPI}
72
72
  let(:org) {'sportngin'}
73
- let(:team1) {build(:team_hash, :name => "Team One")}
73
+ let(:team1) {build(:team_hash, :name => "Team One", description: "hubstats")}
74
74
  let(:team2) {build(:team_hash, :name => "Team Four")}
75
75
  let(:team3) {build(:team_hash, :name => "Team Five")}
76
76
  let(:team4) {build(:team_hash, :name => "Team Six")}
@@ -82,12 +82,14 @@ module Hubstats
82
82
  let(:hubstats_user) {build(:user)}
83
83
  let(:access_token) { "access_token" }
84
84
  let(:user) { double }
85
- let(:client) { double(:user => user) }
85
+ let(:octokit_team) {double(:octokit_team)}
86
+ let(:client) {double(:octokit_client, team: octokit_team, user: user)}
86
87
 
87
88
  it 'should successfully update all teams' do
88
89
  allow_message_expectations_on_nil
89
90
  allow(client).to receive(:organization_teams).with("sportngin").and_return([team1, team2, team3, team4])
90
91
  allow(client).to receive(:team_members).with(team1[:id]).and_return([user1, user2, user3])
92
+ allow(client).to receive(:team).and_return(octokit_team)
91
93
  allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("team_list") { ["Team One", "Team Two", "Team Three"] }
92
94
  allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("org_name") {"sportngin"}
93
95
  allow(Hubstats::GithubAPI).to receive(:client).and_return(client)
@@ -101,44 +103,30 @@ module Hubstats
101
103
  end
102
104
  end
103
105
 
104
- context '.deprecate_teams_from_file' do
106
+ context '.deprecate_teams' do
105
107
  subject {Hubstats::GithubAPI}
106
108
  let(:team1) {create(:team, :name => "Team One")}
107
109
  let(:team2) {create(:team, :name => "Team Two")}
108
110
  let(:team3) {create(:team, :name => "Team Three")}
109
111
  let(:team4) {create(:team, :name => "Team Four")}
110
112
  let(:team5) {create(:team, :name => "Team Five")}
113
+ let(:octokit_team) {double(:octokit_team, description: "Description for Hubstats")}
114
+ let(:client) {double(:octokit_client, team: octokit_team)}
115
+
116
+ before do
117
+ allow(octokit_team).to receive(:[]).with(:description).and_return("Description for Hubstats")
118
+ end
111
119
 
112
120
  it 'should update the teams in the database based on a given whitelist' do
113
- allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("team_list") { ["Team One", "Team Two", "Team Three", "Team Four"] }
114
121
  allow(Hubstats::Team).to receive(:all).and_return( [team1, team2, team3, team4, team5] )
122
+ allow(client).to receive(:team).and_return(octokit_team)
123
+ allow(subject).to receive(:client).and_return(client)
115
124
  expect(team5).to receive(:update_column).with(:hubstats, false)
116
- subject.deprecate_teams_from_file
117
- end
118
- end
119
-
120
- context ".update_hook" do
121
- subject {Hubstats::GithubAPI}
122
- let(:repo) {'hubstats'}
123
- context "with old_endpoint" do
124
- let(:old_endpoint) {'www.hubstats.com'}
125
- it 'should call delete_hook' do
126
- allow(subject).to receive(:create_hook)
127
- expect(subject).to receive(:delete_hook).with(repo,old_endpoint)
128
- subject.update_hook('hubstats','www.hubstats.com')
129
- end
130
- end
131
-
132
- context "without old_point" do
133
- it 'should not call delete_hook' do
134
- allow(subject).to receive(:create_hook)
135
- expect(subject).to_not receive(:delete_hook).with(repo)
136
- subject.update_hook('hubstats')
137
- end
125
+ subject.deprecate_teams
138
126
  end
139
127
  end
140
128
 
141
- context ".create_hook" do
129
+ context ".create_repo_hook" do
142
130
  subject {Hubstats::GithubAPI}
143
131
  let(:config) {double(:webhook_secret => 'a1b2c3d4', :webhook_endpoint => "hubstats.com")}
144
132
  let(:client) {double}
@@ -150,12 +138,12 @@ module Hubstats
150
138
 
151
139
  it "should call octokit create_hook for repositories" do
152
140
  expect(client).to receive(:create_hook)
153
- subject.create_hook(repo)
141
+ subject.create_repo_hook(repo)
154
142
  end
155
143
 
156
144
  it "should rescue unprocessable entity from repo hook" do
157
145
  allow(client).to receive(:create_hook) { raise Octokit::UnprocessableEntity }
158
- subject.create_hook(repo)
146
+ subject.create_repo_hook(repo)
159
147
  end
160
148
  end
161
149
 
@@ -169,14 +157,14 @@ module Hubstats
169
157
  allow(subject).to receive(:client) {client}
170
158
  end
171
159
 
172
- it "should call octokit create_hook for organizations" do
173
- expect(client).to receive(:create_hook)
174
- subject.create_hook(org)
160
+ it "should call octokit create_org_hook for organizations" do
161
+ expect(client).to receive(:create_org_hook)
162
+ subject.create_org_hook(org)
175
163
  end
176
164
 
177
165
  it "should rescue unprocessable entity from organization hook" do
178
- allow(client).to receive(:create_hook) { raise Octokit::UnprocessableEntity }
179
- subject.create_hook(org)
166
+ allow(client).to receive(:create_org_hook) { raise Octokit::UnprocessableEntity }
167
+ subject.create_org_hook(org)
180
168
  end
181
169
  end
182
170
 
@@ -11,19 +11,20 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20161222173633) do
14
+ ActiveRecord::Schema.define(version: 20161222173310) do
15
15
 
16
16
  create_table "hubstats_comments", force: :cascade do |t|
17
- t.string "html_url", limit: 255
18
- t.string "url", limit: 255
19
- t.string "pull_request_url", limit: 255
20
- t.integer "path", limit: 4
21
17
  t.string "kind", limit: 255
22
18
  t.integer "user_id", limit: 4
23
19
  t.integer "pull_request_id", limit: 4
24
20
  t.integer "repo_id", limit: 4
25
21
  t.datetime "created_at"
26
22
  t.datetime "updated_at"
23
+ t.string "body_string", limit: 255
24
+ t.integer "path", limit: 4
25
+ t.string "html_url", limit: 255
26
+ t.string "url", limit: 255
27
+ t.string "pull_request_url", limit: 255
27
28
  t.text "body", limit: 65535
28
29
  end
29
30
 
@@ -55,21 +56,21 @@ ActiveRecord::Schema.define(version: 20161222173633) do
55
56
  add_index "hubstats_labels_pull_requests", ["pull_request_id"], name: "index_hubstats_labels_pull_requests_on_pull_request_id", using: :btree
56
57
 
57
58
  create_table "hubstats_pull_requests", force: :cascade do |t|
59
+ t.integer "number", limit: 4
60
+ t.integer "user_id", limit: 4
61
+ t.integer "repo_id", limit: 4
62
+ t.datetime "created_at"
63
+ t.datetime "updated_at"
64
+ t.datetime "closed_at"
65
+ t.integer "additions", limit: 4
66
+ t.integer "deletions", limit: 4
67
+ t.integer "comments", limit: 4
58
68
  t.string "url", limit: 255
59
69
  t.string "html_url", limit: 255
60
70
  t.string "issue_url", limit: 255
61
- t.integer "number", limit: 4
62
71
  t.string "state", limit: 255
63
72
  t.string "title", limit: 255
64
- t.datetime "created_at", null: false
65
- t.datetime "updated_at", null: false
66
- t.datetime "closed_at"
67
73
  t.string "merged", limit: 255
68
- t.integer "comments", limit: 4
69
- t.integer "additions", limit: 4
70
- t.integer "deletions", limit: 4
71
- t.integer "user_id", limit: 4
72
- t.integer "repo_id", limit: 4
73
74
  t.integer "deploy_id", limit: 4
74
75
  t.integer "merged_by", limit: 4
75
76
  t.datetime "merged_at"
@@ -94,15 +95,15 @@ ActiveRecord::Schema.define(version: 20161222173633) do
94
95
  add_index "hubstats_qa_signoffs", ["user_id"], name: "index_hubstats_qa_signoffs_on_user_id", using: :btree
95
96
 
96
97
  create_table "hubstats_repos", force: :cascade do |t|
98
+ t.integer "owner_id", limit: 4
97
99
  t.string "name", limit: 255
98
100
  t.string "full_name", limit: 255
101
+ t.datetime "pushed_at"
102
+ t.datetime "created_at"
103
+ t.datetime "updated_at"
99
104
  t.string "url", limit: 255
100
105
  t.string "html_url", limit: 255
101
106
  t.string "labels_url", limit: 255
102
- t.datetime "pushed_at"
103
- t.datetime "created_at", null: false
104
- t.datetime "updated_at", null: false
105
- t.integer "owner_id", limit: 4
106
107
  end
107
108
 
108
109
  add_index "hubstats_repos", ["owner_id"], name: "index_hubstats_repos_on_owner_id", using: :btree
@@ -122,12 +123,12 @@ ActiveRecord::Schema.define(version: 20161222173633) do
122
123
 
123
124
  create_table "hubstats_users", force: :cascade do |t|
124
125
  t.string "login", limit: 255
126
+ t.string "role", limit: 255
127
+ t.datetime "created_at"
128
+ t.datetime "updated_at"
125
129
  t.string "avatar_url", limit: 255
126
130
  t.string "url", limit: 255
127
131
  t.string "html_url", limit: 255
128
- t.string "role", limit: 255
129
- t.datetime "created_at", null: false
130
- t.datetime "updated_at", null: false
131
132
  end
132
133
 
133
134
  end
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.12.2
4
+ version: 1.0.0.beta
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: 2018-08-27 00:00:00.000000000 Z
12
+ date: 2019-01-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -402,12 +402,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
402
402
  version: '0'
403
403
  required_rubygems_version: !ruby/object:Gem::Requirement
404
404
  requirements:
405
- - - ">="
405
+ - - ">"
406
406
  - !ruby/object:Gem::Version
407
- version: '0'
407
+ version: 1.3.1
408
408
  requirements: []
409
409
  rubyforge_project:
410
- rubygems_version: 2.6.14
410
+ rubygems_version: 2.7.8
411
411
  signing_key:
412
412
  specification_version: 4
413
413
  summary: Github Statistics