hubstats 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 7f4f31e5446aafe650ec92ff84fb84ae38446309
4
- data.tar.gz: 0f4f0430f62ca6c14a3574ec97eaa365debf321a
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YzQ0NzQ0ZjljODdiZjAyYTM3M2I3N2UxMGJjM2ViMmQ3OTJhY2U4Mg==
5
+ data.tar.gz: !binary |-
6
+ NTVhMGRkNWIxZDE5MGU4MDFlZjgyZTk0MmU5NWE5NWQxMTVmYzdmOA==
5
7
  SHA512:
6
- metadata.gz: 9ffb40c3b610b9f4292a171a062f0b0dfda63a2268c326005be0308900d3739b78dccd75ce17fccfbe8eafde6f0ff83fe14a2b47d87f121895b430e20acb90ed
7
- data.tar.gz: efeb154473f4b8a250c3ef3e4907ddeacbe6a03d415893f2c704e02e7a2187e90bfb5ff6fffa449cba97ff3945172e2faff0a727eb68b765ef1cd61ba9851583
8
+ metadata.gz: !binary |-
9
+ MDkzZjcxYjI2ZmVmNzYxZDhjNDAwY2EzZWY2OTMwN2MzYWM2M2NjMDNiYzc5
10
+ YTEyYmRjNTRiZjU5ZTY5NWIwN2I5NTEwY2Y0YzJlOThiN2U5OTNiODQxN2Ix
11
+ MjhkMDFiZmYyYzVkMDE5YWYxYmViYTk2YzhlM2Y1N2I0MmZmZDY=
12
+ data.tar.gz: !binary |-
13
+ OWZmYWQ3MWZkMmVjYzExYTRiMzAxZmE3OGM2NzVhMTViNTU1ODZmZGFlM2Iw
14
+ YzYyYTI1OWQzMWJmYzJhZWQyMWVmNzU3OWFjNmRhOWM0ODM5MWYyY2QxMTJh
15
+ YjU5NDY4ZmU1MzA4YjYyY2UzNzM1ZDJjMzNkNTU2NWFhMWE2Y2E=
@@ -32,7 +32,7 @@ function setTimespan() {
32
32
  createCookie("hubstats_index",this.selectedIndex,1);
33
33
  window.location.reload();
34
34
  };
35
- }
35
+ };
36
36
 
37
37
  function createCookie(name,value,days) {
38
38
  if (days) {
@@ -42,7 +42,7 @@ function createCookie(name,value,days) {
42
42
  }
43
43
  else var expires = "";
44
44
  document.cookie = name+"="+value+expires+"; path=/";
45
- }
45
+ };
46
46
 
47
47
  function readCookie(name) {
48
48
  var nameEQ = name + "=";
@@ -53,8 +53,8 @@ function readCookie(name) {
53
53
  if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
54
54
  }
55
55
  return null;
56
- }
56
+ };
57
57
 
58
58
  function eraseCookie(name) {
59
59
  createCookie(name,"",-1);
60
- }
60
+ };
@@ -57,10 +57,9 @@ function getUrlVars() {
57
57
  for (var i = 0; i < hashes.length; i++) {
58
58
  hash = hashes[i].split('=');
59
59
  vars.push(hash[0]);
60
- vars[hash[0]] = hash[1].replace(/%20/g,' ').replace(/%2C/g,',');
60
+ vars[hash[0]] = decodeURIComponent(hash[1]);
61
61
  }
62
62
  }
63
-
64
63
  return vars;
65
64
  }
66
65
 
@@ -9,9 +9,9 @@ module Hubstats
9
9
  pull_ids = Hubstats::PullRequest
10
10
  .belonging_to_users(params[:users])
11
11
  .belonging_to_repos(params[:repos])
12
- .with_state(params[:state])
12
+ .state_based_order(@timespan,params[:state],"ASC")
13
13
  .map(&:id)
14
-
14
+
15
15
  @labels = Hubstats::Label.with_a_pull_request(pull_ids).order("pull_request_count DESC")
16
16
 
17
17
  @pull_requests = Hubstats::PullRequest.includes(:user).includes(:repo)
@@ -49,9 +49,9 @@ module Hubstats
49
49
  def self.state_based_order(timespan,state,order)
50
50
  order = ["ASC","DESC"].detect{|order_type| order_type.to_s == order.to_s.upcase } || "DESC"
51
51
  if state == "closed"
52
- with_state(state).closed_since(timespan).order("hubstats_pull_requests.closed_at #{order}")
52
+ with_state(state).updated_since(timespan).order("hubstats_pull_requests.closed_at #{order}")
53
53
  else
54
- with_state(state).opened_since(timespan).order("hubstats_pull_requests.created_at #{order}")
54
+ with_state(state).updated_since(timespan).order("hubstats_pull_requests.created_at #{order}")
55
55
  end
56
56
  end
57
57
 
data/hubstats.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.add_dependency "rails", "~> 3.2.18"
20
20
  s.add_dependency "octokit", "~> 3.2"
21
21
  s.add_dependency "will_paginate-bootstrap"
22
- s.add_dependency "select2-rails", "~> 3.5"
22
+ s.add_dependency "select2-rails", "3.5.9"
23
23
 
24
24
  s.add_development_dependency "rspec-rails",'~> 3.0.0.beta'
25
25
  s.add_development_dependency "shoulda-matchers", "~> 2.6"
@@ -19,7 +19,7 @@ module Hubstats
19
19
  pull_request[:repository] = payload[:repository]
20
20
  new_pull = Hubstats::PullRequest.create_or_update(pull_request.with_indifferent_access)
21
21
  repo_name = Hubstats::Repo.where(id: new_pull.repo_id).first.full_name
22
- labels = Hubstats::GithubAPI.get_labels(repo_name, new_pull.number )
22
+ labels = Hubstats::GithubAPI.get_labels_for_pull(repo_name, new_pull.number )
23
23
  new_pull.add_labels(labels)
24
24
  end
25
25
 
@@ -3,7 +3,7 @@ module Hubstats
3
3
  include HubHelper
4
4
 
5
5
  cattr_accessor :auth_info
6
-
6
+
7
7
  def self.configure(options={})
8
8
  @@auth_info = {}
9
9
  if access_token = ENV['GITHUB_API_TOKEN'] || options["access_token"]
@@ -22,6 +22,13 @@ module Hubstats
22
22
  return ent
23
23
  end
24
24
 
25
+ # Public: Gets all of a specific kind from a repo, and processes them.
26
+ #
27
+ # repo_name - the name of a repo
28
+ # kind - a kind of object (pull,comment)
29
+ # options - any possible option a particular kind of object
30
+ #
31
+ # Returns an array of that particular kind
25
32
  def self.inline(repo_name, kind, options={})
26
33
  path = ["repos",repo_name,kind].join('/')
27
34
  octo = client({:auto_paginate => true })
@@ -31,6 +38,44 @@ module Hubstats
31
38
  end.each{|v| route(v,kind,repo_name)}.clear
32
39
  end
33
40
 
41
+ # Public: Gets repos found in configuration file
42
+ #
43
+ # Returns - an array of github repo objects
44
+ def self.get_repos
45
+ if Hubstats.config.github_config.has_key?("org_name")
46
+ repos = client.organization_repositories(Hubstats.config.github_config["org_name"])
47
+ else
48
+ repos = []
49
+ Hubstats.config.github_config["repo_list"].each do |repo|
50
+ repos << client.repository(repo)
51
+ end
52
+ end
53
+ repos
54
+ end
55
+
56
+ # Public: Gets extra information on pull requests, e.g size, additions ...
57
+ def self.update_pulls
58
+ grab_size = 250
59
+ begin
60
+ while Hubstats::PullRequest.where(deletions: nil).where(additions: nil).count > 0
61
+ client = Hubstats::GithubAPI.client
62
+ incomplete = Hubstats::PullRequest.where(deletions: nil).where(additions: nil).limit(grab_size)
63
+
64
+ incomplete.each do |pull|
65
+ repo = Hubstats::Repo.where(id: pull.repo_id).first
66
+ pr = client.pull_request(repo.full_name, pull.number)
67
+ Hubstats::PullRequest.create_or_update(HubHelper.pull_setup(pr))
68
+ end
69
+
70
+ wait_limit(grab_size,client.rate_limit)
71
+ end
72
+ puts "All Pull Requests are up to date"
73
+ rescue Faraday::ConnectionFailed
74
+ puts "Connection Timeout, restarting pull request updating"
75
+ update_pulls
76
+ end
77
+ end
78
+
34
79
  def self.create_hook(repo)
35
80
  begin
36
81
  client.create_hook(
@@ -61,61 +106,72 @@ module Hubstats
61
106
  end
62
107
  end
63
108
 
64
- def self.update_pulls
65
- grab_size = 250
109
+ # Public: Delete webhook from github repository
110
+ #
111
+ # repo - a repo github object
112
+ # old_endpoint - A string of the previous endpoint
113
+ #
114
+ # Return - nothing
115
+ def self.delete_hook(repo, old_endpoint)
66
116
  begin
67
- while Hubstats::PullRequest.where(deletions: nil).where(additions: nil).count > 0
68
- client = Hubstats::GithubAPI.client
69
- incomplete = Hubstats::PullRequest.where(deletions: nil).where(additions: nil).limit(grab_size)
70
-
71
- incomplete.each do |pull|
72
- repo = Hubstats::Repo.where(id: pull.repo_id).first
73
- pr = client.pull_request(repo.full_name, pull.number)
74
- Hubstats::PullRequest.create_or_update(HubHelper.pull_setup(pr))
117
+ client.hooks(repo.full_name).each do |hook|
118
+ if hook[:config][:url] == old_endpoint
119
+ Hubstats::GithubAPI.client.remove_hook(repo.full_name, hook[:id])
120
+ puts "successfully deleted hook with id #{hook[:id]} and url #{hook[:config][:url]} from #{repo.full_name}"
75
121
  end
76
-
77
- Hubstats::GithubAPI.wait_limit(grab_size,client.rate_limit)
78
122
  end
79
- puts "All Pull Requests are up to date"
80
- rescue Faraday::ConnectionFailed
81
- puts "Connection Timeout, restarting pull request updating"
82
- update_pulls
123
+ rescue Octokit::NotFound
124
+ puts "You don't have sufficient privledges to remove an event hook to #{repo.full_name}"
83
125
  end
84
126
  end
85
127
 
86
- def self.update_labels
87
- puts "Adding labels to pull requests"
88
- Hubstats::Repo.all.each do |repo|
89
- Hubstats::GithubAPI.client({:auto_paginate => true}).labels(repo.full_name).each do |label|
90
- label_hash = label.to_h if label.respond_to? :to_h
91
- label_data = label_hash.slice(*Hubstats::Label.column_names.map(&:to_sym))
92
- label = Hubstats::Label.where(:name => label_data[:name]).first_or_create(label_data)
93
- end
94
-
95
- Hubstats::Label.all.each do |label|
96
- inline(repo.full_name,'issues', labels: label.name, state: 'closed')
97
- inline(repo.full_name,'issues', labels: label.name, state: 'open')
98
- end
99
- end
128
+ # Public: updates a hook if it exists, otherwise creates one
129
+ #
130
+ # repo - a repo github object
131
+ # old_endpoint - A string of the previous endpoint
132
+ #
133
+ # Returns - the new hook
134
+ def self.update_hook(repo, old_endpoint = nil)
135
+ delete_hook(repo, old_endpoint) unless old_endpoint == nil
136
+ create_hook(repo)
100
137
  end
101
138
 
102
- def self.delete_hooks
103
- puts "deleting hooks"
104
- Hubstats::Repo.find_each do |repo|
105
- Hubstats::GithubAPI.client.hooks(repo.full_name).each do |hook|
106
- if hook[:config][:url] == Hubstats.config.webhook_endpoint
107
- Hubstats::GithubAPI.client.remove_hook(repo.full_name, hook[:id])
108
- puts "successfully deleted hook with id #{hook[:id]} and url #{hook[:config][:url]} from #{repo.full_name}"
109
- end
110
- end
139
+ # Public: gets labels for a particular label
140
+ #
141
+ # repo - a repo github object
142
+ #
143
+ # Returns - all the labels for a given repo
144
+ def self.get_labels(repo)
145
+ labels = []
146
+ octo = Hubstats::GithubAPI.client({:auto_paginate => true})
147
+ github_labels = octo.labels(repo.full_name)
148
+ github_labels.each do |label|
149
+ label_hash = label.to_h if label.respond_to? :to_h
150
+ label_data = label_hash.slice(*Hubstats::Label.column_names.map(&:to_sym))
151
+ labels << Hubstats::Label.where(:name => label_data[:name]).first_or_create(label_data)
111
152
  end
153
+ labels
112
154
  end
113
155
 
114
- def self.get_labels(repo_name, pull_request_number)
115
- issue = Hubstats::GithubAPI.client.issue(repo_name, pull_request_number)
156
+ # Public: gets the label for a given pull request
157
+ #
158
+ # repo_name - a the repo_name
159
+ # pull_request_number - the number of the pull_request you want labels of
160
+ #
161
+ # Returns - the issue
162
+ def self.get_labels_for_pull(repo_name, pull_request_number)
163
+ issue = client.issue(repo_name, pull_request_number)
116
164
  issue[:labels]
117
165
  end
118
166
 
167
+ # Public: Gets all the labels for a repo, adds all labels to a pull
168
+ #
169
+ # repo - the particular repository, you want to add labels to
170
+ def self.add_labels(repo)
171
+ get_labels(repo).each do |label|
172
+ inline(repo.full_name,'issues', labels: label.name, state: 'all')
173
+ end
174
+ end
119
175
 
120
176
  def self.wait_limit(grab_size,rate_limit)
121
177
  if rate_limit.remaining < grab_size
@@ -1,3 +1,3 @@
1
1
  module Hubstats
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -7,7 +7,7 @@ namespace :hubstats do
7
7
  puts "Running rake db:migrate"
8
8
  Rake::Task['db:migrate'].invoke
9
9
  puts "Pulling data from Github. This may take a while..."
10
- Rake::Task['hubstats:populate:all'].invoke
10
+ Rake::Task['hubstats:populate:setup_repos'].invoke
11
11
  end
12
12
 
13
13
  desc "Drops the database, then runs rake hubstats:setup"
@@ -17,4 +17,10 @@ namespace :hubstats do
17
17
  Rake::Task['hubstats:setup'].invoke
18
18
  end
19
19
 
20
+ desc "Updates changes to the config file"
21
+ task :update => :environment do
22
+ puts "Updating repos"
23
+ Rake::Task['hubstats:populate:update_repos'].invoke
24
+ end
25
+
20
26
  end
@@ -1,6 +1,37 @@
1
1
  namespace :hubstats do
2
2
  namespace :populate do
3
3
 
4
+ desc "Pull repos from Github save to database"
5
+ task :setup_repos => :environment do
6
+ Hubstats::GithubAPI.get_repos.each do |repo|
7
+ Rake::Task["hubstats:populate:setup_repo"].execute({repo: repo})
8
+ end
9
+ puts "Finished with initial population, grabing extra info about pull requests"
10
+ Rake::Task["hubstats:populate:update_pulls"].execute
11
+ end
12
+
13
+ desc "Updates which repos hubstats tracks"
14
+ task :update_repos => :environment do
15
+ Hubstats::GithubAPI.get_repos.each do |repo|
16
+ unless Hubstats::Repo.where(full_name: repo.full_name).first
17
+ Rake::Task["hubstats:populate:setup_repo"].execute({repo: repo})
18
+ end
19
+ end
20
+ puts "Finished with initial updating, grabing extra info about pull requests"
21
+ Rake::Task["hubstats:populate:update_pulls"].execute
22
+ end
23
+
24
+ desc "Pulls in all information for an indivdual repo"
25
+ task :setup_repo, [:repo] => :environment do |t, args|
26
+ repo = args[:repo]
27
+ Hubstats::Repo.create_or_update(repo)
28
+ Hubstats::GithubAPI.create_hook(repo)
29
+ Rake::Task["hubstats:populate:users"].execute({repo: repo})
30
+ Rake::Task["hubstats:populate:pulls"].execute({repo: repo})
31
+ Rake::Task["hubstats:populate:comments"].execute({repo: repo})
32
+ Rake::Task["hubstats:populate:labels"].execute({repo: repo})
33
+ end
34
+
4
35
  desc "Pull members from Github saves in database"
5
36
  task :users, [:repo] => :environment do |t, args|
6
37
  repo = repo_checker(args[:repo])
@@ -32,31 +63,8 @@ namespace :hubstats do
32
63
  desc "Pull labels from Github saves in database"
33
64
  task :labels, [:repo] => :environment do |t, args|
34
65
  repo = repo_checker(args[:repo])
35
- puts "Adding labels for to " + repo.full_name
36
-
37
- Hubstats::GithubAPI.client({:auto_paginate => true}).labels(repo.full_name).each do |label|
38
-
39
- label_hash = label.to_h if label.respond_to? :to_h
40
- label_data = label_hash.slice(*Hubstats::Label.column_names.map(&:to_sym))
41
- label = Hubstats::Label.where(:name => label_data[:name]).first_or_create(label_data)
42
- end
43
- end
44
-
45
- desc "Pull repos from Github save to database"
46
- task :all => :environment do
47
-
48
- get_repos.each do |repo|
49
- repo = Hubstats::Repo.create_or_update(repo)
50
- Hubstats::GithubAPI.create_hook(repo)
51
-
52
- Rake::Task["hubstats:populate:users"].execute({repo: repo})
53
- Rake::Task["hubstats:populate:pulls"].execute({repo: repo})
54
- Rake::Task["hubstats:populate:comments"].execute({repo: repo})
55
- end
56
-
57
- puts "Finished with initial population, grabing extra info for pull requests"
58
- Rake::Task["hubstats:populate:update_labels"].execute
59
- Rake::Task["hubstats:populate:update_pulls"].execute
66
+ puts "Getting labels for " + repo.full_name
67
+ Hubstats::GithubAPI.add_labels(repo)
60
68
  end
61
69
 
62
70
  desc "indivdually gets and updates pull requests"
@@ -64,14 +72,18 @@ namespace :hubstats do
64
72
  Hubstats::GithubAPI.update_pulls
65
73
  end
66
74
 
67
- desc "sets labels for pull_requests"
75
+ desc "Updates labels for all repos"
68
76
  task :update_labels => :environment do
69
- Hubstats::GithubAPI.update_labels
77
+ Hubstats::Repo.all.each do |repo|
78
+ Hubstats::GithubAPI.add_labels(repo)
79
+ end
70
80
  end
71
81
 
72
- desc "deletes WebHook for all repos"
73
- task :delete_hooks => :environment do
74
- Hubstats::GithubAPI.delete_hooks
82
+ desc "Updates WebHooks for all repos"
83
+ task :update_hooks, [:old_endpoint] => :environment do |t, args|
84
+ Hubstats::Repo.all.each do |repo|
85
+ Hubstats::GithubAPI.update_hook(repo, args[:old_endpoint])
86
+ end
75
87
  end
76
88
 
77
89
  def repo_checker(args)
@@ -83,17 +95,5 @@ namespace :hubstats do
83
95
  end
84
96
  end
85
97
 
86
- def get_repos
87
- client = Hubstats::GithubAPI.client
88
- if Hubstats.config.github_config.has_key?("org_name")
89
- repos = client.organization_repositories(Hubstats.config.github_config["org_name"])
90
- else
91
- repos = []
92
- Hubstats.config.github_config["repo_list"].each do |repo|
93
- repos << client.repository(repo)
94
- end
95
- end
96
- repos
97
- end
98
98
  end
99
99
  end
@@ -7,19 +7,18 @@ module Hubstats
7
7
  let(:repo) {build(:repo)}
8
8
  let(:payload) {build(:pull_request_payload_hash)}
9
9
 
10
+ subject {Hubstats::EventsHandler.new()}
10
11
  it 'successfully routes the event' do
11
- ehandler = Hubstats::EventsHandler.new()
12
- expect(ehandler).to receive(:pull_processor)
13
- ehandler.route(payload,payload[:type])
12
+ expect(subject).to receive(:pull_processor)
13
+ subject.route(payload,payload[:type])
14
14
  end
15
15
 
16
16
  it 'adds labels to pull request' do
17
- ehandler = Hubstats::EventsHandler.new()
18
17
  allow(Hubstats::PullRequest).to receive(:create_or_update) {pull}
19
18
  allow(Hubstats::Repo).to receive(:where) {[repo,repo]}
20
- allow(Hubstats::GithubAPI).to receive(:get_labels) {['low','high']}
19
+ allow(Hubstats::GithubAPI).to receive(:get_labels_for_pull) {['low','high']}
21
20
  expect(pull).to receive(:add_labels).with(['low','high'])
22
- ehandler.route(payload,payload[:type])
21
+ subject.route(payload,payload[:type])
23
22
  end
24
23
  end
25
24
 
@@ -66,11 +66,47 @@ module Hubstats
66
66
  end
67
67
  end
68
68
 
69
- # context ".update_pulls" do
69
+ context ".update_hook" do
70
+ subject {Hubstats::GithubAPI}
71
+ let(:repo) {'hubstats'}
72
+ context "with old_endpoint" do
73
+ let(:old_endpoint) {'www.hubstats.com'}
74
+ it 'calls delete_hook' do
75
+ allow(subject).to receive(:create_hook)
76
+ expect(subject).to receive(:delete_hook).with(repo,old_endpoint)
77
+ subject.update_hook('hubstats','www.hubstats.com')
78
+ end
79
+ end
80
+
81
+ context "without old_point" do
82
+ it 'does not call delete_hook' do
83
+ allow(subject).to receive(:create_hook)
84
+ expect(subject).to_not receive(:delete_hook).with(repo)
85
+ subject.update_hook('hubstats')
86
+ end
87
+ end
88
+ end
89
+
90
+ context ".create_hook" do
91
+ subject {Hubstats::GithubAPI}
92
+ let(:config) {double(:webhook_secret => 'a1b2c3d4', :webhook_endpoint => "hubstats.com")}
93
+ let(:client) {double}
94
+ let(:repo) {double(:full_name =>'hubstats') }
95
+ before do
96
+ allow(Hubstats).to receive(:config) {config}
97
+ allow(subject).to receive(:client) {client}
98
+ end
99
+
100
+ it "calls octokit create_hook" do
101
+ expect(client).to receive(:create_hook)
102
+ subject.create_hook(repo)
103
+ end
104
+
105
+ it "rescues unprocessable entity" do
106
+ allow(client).to receive(:create_hook) { raise Octokit::UnprocessableEntity }
107
+ subject.create_hook(repo)
108
+ end
109
+ end
70
110
 
71
- # it 'catches error and continues'
72
- # Hubstats::GithubAPI.update_pulls
73
- # end
74
- # end
75
111
  end
76
112
  end
@@ -2,6 +2,5 @@ require 'spec_helper'
2
2
 
3
3
  module Hubstats
4
4
  RSpec.describe Label, :type => :model do
5
- pending "add some examples to (or delete) #{__FILE__}"
6
5
  end
7
6
  end
metadata CHANGED
@@ -1,125 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubstats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elliot Hursh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-08 00:00:00.000000000 Z
11
+ date: 2014-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.2.18
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.2.18
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: octokit
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: will_paginate-bootstrap
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: select2-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: '3.5'
61
+ version: 3.5.9
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: '3.5'
68
+ version: 3.5.9
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec-rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: 3.0.0.beta
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: 3.0.0.beta
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: shoulda-matchers
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ~>
88
88
  - !ruby/object:Gem::Version
89
89
  version: '2.6'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: '2.6'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: factory_girl_rails
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ~>
102
102
  - !ruby/object:Gem::Version
103
103
  version: '4.4'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ~>
109
109
  - !ruby/object:Gem::Version
110
110
  version: '4.4'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: faker
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
117
  version: '1.3'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ~>
123
123
  - !ruby/object:Gem::Version
124
124
  version: '1.3'
125
125
  description: Github Statistics
@@ -129,10 +129,10 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
- - ".automation.yml"
133
- - ".gitignore"
134
- - ".rspec"
135
- - ".travis.yml"
132
+ - .automation.yml
133
+ - .gitignore
134
+ - .rspec
135
+ - .travis.yml
136
136
  - Gemfile
137
137
  - MIT-LICENSE
138
138
  - README.rdoc
@@ -282,12 +282,12 @@ require_paths:
282
282
  - lib
283
283
  required_ruby_version: !ruby/object:Gem::Requirement
284
284
  requirements:
285
- - - ">="
285
+ - - ! '>='
286
286
  - !ruby/object:Gem::Version
287
287
  version: '0'
288
288
  required_rubygems_version: !ruby/object:Gem::Requirement
289
289
  requirements:
290
- - - ">="
290
+ - - ! '>='
291
291
  - !ruby/object:Gem::Version
292
292
  version: '0'
293
293
  requirements: []