github_webhook 1.1.0 → 1.3.0

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
- SHA1:
3
- metadata.gz: 482d71a9312b1b80aeee8af5c230e80ca9b5cd15
4
- data.tar.gz: 8e788b3145ab2874ff71f5a4fda3c2a8f89557a3
2
+ SHA256:
3
+ metadata.gz: 68085b2caf36fbd2af5d858a0fd98ce539d0c98a0c23b45e399eca378f17175b
4
+ data.tar.gz: 547ce4ef7686bb5a886a03e2f7c550a8602729608302aa1f9daeaacee9a26acd
5
5
  SHA512:
6
- metadata.gz: cbe5e47e926c147748387234219b18a2b330b526f2f7804a5e8bb9d1fbe4ef16c978a72437525bdbfbdcd95f2f62901d5b7f26a4eb637721d734ac87c0a0b354
7
- data.tar.gz: 8eda80c2a630d17eed37e66b8c15c30ae4eadf57d71430ba1ea1e3665d68c9514d39b8c75bcd1f4d8f8d86c0e550a53dd5bd1203f60438cd5759fffd2171e479
6
+ metadata.gz: e4cd1c3ff4f074510e1228e950b9d71d2e663869cb78e5f7f98cc0028d365ece7ddacd447c0bfd1525ed04739d3b156ffe1cc8f9fde12a865212ab379eed5252
7
+ data.tar.gz: 549b72dcc5a79abddbd693c1771c96f51a35a58dd53012240bad08164f5217f71c399d71ca4c4d30aff3d8047775907bb1132515601c6d0f0eea37bce4bff519
@@ -0,0 +1,24 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ build:
11
+
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ - name: Set up Ruby 2.7
17
+ uses: actions/setup-ruby@v1
18
+ with:
19
+ ruby-version: 2.7.x
20
+ - name: Build and test with Rake
21
+ run: |
22
+ gem install bundler
23
+ bundle install --jobs 4 --retry 3
24
+ bundle exec rake
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
1
  .DS_Store
2
2
  *.gem
3
3
  coverage
4
+ /Gemfile.lock
5
+ /gemfiles/*.gemfile.lock
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.4.2
1
+ 2.7.4
data/Appraisals ADDED
@@ -0,0 +1,15 @@
1
+ appraise "rails-4.2" do
2
+ gem "rails", "~> 4.2.0"
3
+ end
4
+
5
+ appraise "rails-5.0" do
6
+ gem "rails", "~> 5.0.0"
7
+ end
8
+
9
+ appraise "rails-5.1" do
10
+ gem "rails", "~> 5.1.0"
11
+ end
12
+
13
+ appraise "rails-6.0" do
14
+ gem "rails", "~> 6.0"
15
+ end
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in github_webhook.gemspec
4
4
  gemspec
5
+
6
+ gem 'simplecov', require: false
data/README.md CHANGED
@@ -1,19 +1,27 @@
1
- [![Build Status](https://travis-ci.org/ssaunier/github_webhook.svg?branch=master)](https://travis-ci.org/ssaunier/github_webhook)
2
- [![Code Climate](https://codeclimate.com/github/ssaunier/github_webhook/badges/gpa.svg)](https://codeclimate.com/github/ssaunier/github_webhook)
1
+
3
2
  [![Gem Version](https://badge.fury.io/rb/github_webhook.svg)](http://badge.fury.io/rb/github_webhook)
4
3
 
5
4
 
6
- # GithubWebhook
5
+ # Github Webhook for Rails
7
6
 
8
7
  This gem will help you to quickly setup a route in your Rails application which listens
9
8
  to a [GitHub webhook](https://developer.github.com/webhooks/)
10
9
 
10
+ ## Alternatives
11
+
12
+ If you want to use this logic outside of Rails, you should consider the following gems (cf [#19](https://github.com/ssaunier/github_webhook/issues/19)):
13
+
14
+ - [`sinatra-github_webhooks`](https://github.com/chrismytton/sinatra-github_webhooks)
15
+ - [`rack-github_webhooks`](https://github.com/chrismytton/rack-github_webhooks)
16
+
17
+ If you are on Rails, please read on!
18
+
11
19
  ## Installation
12
20
 
13
21
  Add this line to your application's Gemfile:
14
22
 
15
23
  ```ruby
16
- gem 'github_webhook', '~> 1.1'
24
+ gem 'github_webhook', '~> 1.2'
17
25
  ```
18
26
 
19
27
  And then execute:
@@ -93,3 +101,17 @@ You can have an overview of your webhooks at the following URL:
93
101
  ```
94
102
  https://github.com/:username/:repo/settings/hooks
95
103
  ```
104
+
105
+ ## Contributing
106
+
107
+ ### Specs
108
+
109
+ This project uses [Appraisal](https://github.com/thoughtbot/appraisal) to test against multiple
110
+ versions of Rails.
111
+
112
+ On Travis, builds are also run on multiple versions of Ruby, each with multiple versions of Rails.
113
+
114
+ When you run `bundle install`, it will use the latest version of Rails.
115
+ You can then run `bundle exec rake spec` to run the test with that version of Rails.
116
+
117
+ To run the specs against each version of Rails, use `bundle exec appraisal rake spec`.
data/Rakefile CHANGED
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env rake
2
+ require "rubygems"
3
+ require "bundler/setup"
4
+
2
5
  require "bundler/gem_tasks"
3
6
 
4
7
  require 'rspec'
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.2.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 5.0.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 5.1.0"
6
+
7
+ gemspec path: "../"
@@ -22,8 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency "activesupport", ">= 4"
23
23
  spec.add_dependency "railties", ">= 4"
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.5"
26
- spec.add_development_dependency "rake", "~> 10.1"
27
- spec.add_development_dependency "rspec", "~> 2.14"
28
- spec.add_development_dependency "codeclimate-test-reporter"
25
+ spec.add_development_dependency "rake", "~> 12.3"
26
+ spec.add_development_dependency "rspec", "~> 3.9"
27
+ spec.add_development_dependency "appraisal"
29
28
  end
@@ -13,54 +13,61 @@ module GithubWebhook::Processor
13
13
 
14
14
  # To fetch list from https://developer.github.com/v3/activity/events/types
15
15
  # run this little JS code in the console:
16
- # var events = "ping";
17
- # $('h3').each(function(i, item) {
18
- # if ($(item).text().match(/webhook event name/i)) {
19
- # events = events + ' ' + $(item).next('p').find('code').html();
20
- # }
21
- # });
22
- # console.log(events);
23
- GITHUB_EVENTS_WHITELIST = %w(
16
+ # document.querySelectorAll('.list-style-none li.lh-condensed a').forEach(e => console.log(e.text))
17
+ GITHUB_EVENTS = %w(
18
+ check_run
19
+ check_suite
20
+ code_scanning_alert
24
21
  commit_comment
22
+ content_reference
25
23
  create
26
24
  delete
25
+ deploy_key
27
26
  deployment
28
27
  deployment_status
29
- download
30
- follow
28
+ discussion
29
+ discussion_comment
31
30
  fork
32
- fork_apply
33
- gist
31
+ github_app_authorization
34
32
  gollum
35
33
  installation
36
34
  installation_repositories
37
- integration_installation
38
- integration_installation_repositories
39
- issues
40
35
  issue_comment
36
+ issues
41
37
  label
42
38
  marketplace_purchase
43
39
  member
44
40
  membership
41
+ meta
45
42
  milestone
46
43
  organization
47
44
  org_block
45
+ package
48
46
  page_build
49
47
  ping
50
- project
51
48
  project_card
52
49
  project_column
50
+ project
53
51
  public
54
52
  pull_request
55
53
  pull_request_review
56
54
  pull_request_review_comment
57
55
  push
58
56
  release
57
+ repository_dispatch
59
58
  repository
59
+ repository_import
60
+ repository_vulnerability_alert
61
+ secret_scanning_alert
62
+ security_advisory
63
+ sponsorship
64
+ star
60
65
  status
61
66
  team
62
67
  team_add
63
68
  watch
69
+ workflow_dispatch
70
+ workflow_run
64
71
  )
65
72
 
66
73
  def create
@@ -79,14 +86,14 @@ module GithubWebhook::Processor
79
86
 
80
87
  private
81
88
 
82
- HMAC_DIGEST = OpenSSL::Digest.new('sha1')
89
+ HMAC_DIGEST = OpenSSL::Digest.new('sha256')
83
90
 
84
91
  def authenticate_github_request!
85
92
  raise UnspecifiedWebhookSecretError.new unless respond_to?(:webhook_secret, true)
86
93
  secret = webhook_secret(json_body)
87
94
 
88
- expected_signature = "sha1=#{OpenSSL::HMAC.hexdigest(HMAC_DIGEST, secret, request_body)}"
89
- if signature_header != expected_signature
95
+ expected_signature = "sha256=#{OpenSSL::HMAC.hexdigest(HMAC_DIGEST, secret, request_body)}"
96
+ unless ActiveSupport::SecurityUtils.secure_compare(signature_header, expected_signature)
90
97
  GithubWebhook.logger && GithubWebhook.logger.warn("[GithubWebhook::Processor] signature "\
91
98
  "invalid, actual: #{signature_header}, expected: #{expected_signature}")
92
99
  raise SignatureError
@@ -94,8 +101,8 @@ module GithubWebhook::Processor
94
101
  end
95
102
 
96
103
  def check_github_event!
97
- unless GITHUB_EVENTS_WHITELIST.include?(request.headers['X-GitHub-Event'])
98
- raise UnsupportedGithubEventError.new("#{request.headers['X-GitHub-Event']} is not a whiltelisted GitHub event. See https://developer.github.com/v3/activity/events/types/")
104
+ unless GITHUB_EVENTS.include?(request.headers['X-GitHub-Event'])
105
+ raise UnsupportedGithubEventError.new("#{request.headers['X-GitHub-Event']} is not a whitelisted GitHub event. See https://developer.github.com/v3/activity/events/types/")
99
106
  end
100
107
  end
101
108
 
@@ -117,14 +124,14 @@ module GithubWebhook::Processor
117
124
  payload = request_body
118
125
  else
119
126
  raise UnsupportedContentTypeError.new(
120
- "Content-Type #{content_type} is not supported. Use 'application/x-www-form-urlencoded' or 'application.json")
127
+ "Content-Type #{content_type} is not supported. Use 'application/x-www-form-urlencoded' or 'application/json")
121
128
  end
122
129
  ActiveSupport::HashWithIndifferentAccess.new(JSON.load(payload))
123
130
  )
124
131
  end
125
132
 
126
133
  def signature_header
127
- @signature_header ||= request.headers['X-Hub-Signature']
134
+ @signature_header ||= request.headers['X-Hub-Signature-256'] || ''
128
135
  end
129
136
 
130
137
  def event_method
@@ -1,3 +1,3 @@
1
1
  module GithubWebhook
2
- VERSION = "1.1.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -65,7 +65,7 @@ module GithubWebhook
65
65
  it "calls the #push method in controller" do
66
66
  expect(controller).to receive(:github_push)
67
67
  controller.request.body = StringIO.new({ :foo => "bar" }.to_json.to_s)
68
- controller.request.headers['X-Hub-Signature'] = "sha1=52b582138706ac0c597c315cfc1a1bf177408a4d"
68
+ controller.request.headers['X-Hub-Signature-256'] = "sha256=3f3ab3986b656abb17af3eb1443ed6c08ef8fff9fea83915909d1b421aec89be"
69
69
  controller.request.headers['X-GitHub-Event'] = 'push'
70
70
  controller.request.headers['Content-Type'] = 'application/json'
71
71
  controller.send :authenticate_github_request! # Manually as we don't have the before_filter logic in our Mock object
@@ -75,7 +75,7 @@ module GithubWebhook
75
75
 
76
76
  it "calls the #push method in controller (json)" do
77
77
  controller.request.body = StringIO.new({ :foo => "bar" }.to_json.to_s)
78
- controller.request.headers['X-Hub-Signature'] = "sha1=52b582138706ac0c597c315cfc1a1bf177408a4d"
78
+ controller.request.headers['X-Hub-Signature-256'] = "sha256=3f3ab3986b656abb17af3eb1443ed6c08ef8fff9fea83915909d1b421aec89be"
79
79
  controller.request.headers['X-GitHub-Event'] = 'push'
80
80
  controller.request.headers['Content-Type'] = 'application/json'
81
81
  controller.send :authenticate_github_request! # Manually as we don't have the before_action logic in our Mock object
@@ -86,7 +86,7 @@ module GithubWebhook
86
86
  it "calls the #push method (x-www-form-urlencoded encoded)" do
87
87
  body = "payload=" + CGI::escape({ :foo => "bar" }.to_json.to_s)
88
88
  controller.request.body = StringIO.new(body)
89
- controller.request.headers['X-Hub-Signature'] = "sha1=6986874ecdf710b04de7ef5a040161d41687407a"
89
+ controller.request.headers['X-Hub-Signature-256'] = "sha256=cefe60b775fcb22483ceece8f20be4869868a20fb4aa79829e53c1de61b99d01"
90
90
  controller.request.headers['X-GitHub-Event'] = 'push'
91
91
  controller.request.headers['Content-Type'] = 'application/x-www-form-urlencoded'
92
92
  controller.send :authenticate_github_request! # Manually as we don't have the before_action logic in our Mock object
@@ -96,7 +96,7 @@ module GithubWebhook
96
96
 
97
97
  it "raises an error when signature does not match" do
98
98
  controller.request.body = StringIO.new({ :foo => "bar" }.to_json.to_s)
99
- controller.request.headers['X-Hub-Signature'] = "sha1=FOOBAR"
99
+ controller.request.headers['X-Hub-Signature-256'] = "sha256=FOOBAR"
100
100
  controller.request.headers['X-GitHub-Event'] = 'push'
101
101
  controller.request.headers['Content-Type'] = 'application/json'
102
102
  expect { controller.send :authenticate_github_request! }.to raise_error(Processor::SignatureError)
@@ -116,11 +116,18 @@ module GithubWebhook
116
116
 
117
117
  it "raises an error when the content type is not correct" do
118
118
  controller.request.body = StringIO.new({ :foo => "bar" }.to_json.to_s)
119
- controller.request.headers['X-Hub-Signature'] = "sha1=52b582138706ac0c597c315cfc1a1bf177408a4d"
119
+ controller.request.headers['X-Hub-Signature-256'] = "sha256=3f3ab3986b656abb17af3eb1443ed6c08ef8fff9fea83915909d1b421aec89be"
120
120
  controller.request.headers['X-GitHub-Event'] = 'ping'
121
121
  controller.request.headers['Content-Type'] = 'application/xml'
122
122
  expect { controller.send :authenticate_github_request! }.to raise_error(Processor::UnsupportedContentTypeError)
123
123
  end
124
+
125
+ it 'raises SignatureError when the X-Hub-Signature header is missing' do
126
+ controller.request.body = StringIO.new('{}')
127
+ controller.request.headers['Content-Type'] = 'application/json'
128
+ controller.request.headers['X-GitHub-Event'] = 'ping'
129
+ expect { controller.send :authenticate_github_request! }.to raise_error(Processor::SignatureError)
130
+ end
124
131
  end
125
132
  end
126
133
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  ENV['RAILS_ENV'] ||= 'test'
2
2
 
3
- require "codeclimate-test-reporter"
4
- CodeClimate::TestReporter.start
3
+ require 'simplecov'
4
+ SimpleCov.start
5
5
 
6
6
  require "github_webhook"
7
7
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github_webhook
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastien Saunier
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-03 00:00:00.000000000 Z
11
+ date: 2021-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -52,50 +52,36 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '4'
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.5'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.5'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '10.1'
61
+ version: '12.3'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '10.1'
68
+ version: '12.3'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '2.14'
75
+ version: '3.9'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '2.14'
82
+ version: '3.9'
97
83
  - !ruby/object:Gem::Dependency
98
- name: codeclimate-test-reporter
84
+ name: appraisal
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -115,14 +101,17 @@ executables: []
115
101
  extensions: []
116
102
  extra_rdoc_files: []
117
103
  files:
104
+ - ".github/workflows/ruby.yml"
118
105
  - ".gitignore"
119
106
  - ".ruby-version"
120
- - ".travis.yml"
107
+ - Appraisals
121
108
  - Gemfile
122
- - Gemfile.lock
123
109
  - LICENSE.txt
124
110
  - README.md
125
111
  - Rakefile
112
+ - gemfiles/rails_4.2.gemfile
113
+ - gemfiles/rails_5.0.gemfile
114
+ - gemfiles/rails_5.1.gemfile
126
115
  - github_webhook.gemspec
127
116
  - lib/github_webhook.rb
128
117
  - lib/github_webhook/processor.rb
@@ -134,7 +123,7 @@ homepage: https://github.com/ssaunier/github_webhook
134
123
  licenses:
135
124
  - MIT
136
125
  metadata: {}
137
- post_install_message:
126
+ post_install_message:
138
127
  rdoc_options: []
139
128
  require_paths:
140
129
  - lib
@@ -149,9 +138,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
138
  - !ruby/object:Gem::Version
150
139
  version: '0'
151
140
  requirements: []
152
- rubyforge_project:
153
- rubygems_version: 2.6.13
154
- signing_key:
141
+ rubygems_version: 3.1.6
142
+ signing_key:
155
143
  specification_version: 4
156
144
  summary: Process GitHub Webhooks in your Rails app (Controller mixin)
157
145
  test_files:
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.4.2
4
- - 2.3.5
5
- addons:
6
- code_climate:
7
- repo_token: 50425d682162d68af0b65bd9e5160da8337d2159fc3ebc00d2a5b14386548ac5
data/Gemfile.lock DELETED
@@ -1,92 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- github_webhook (1.1.0)
5
- activesupport (>= 4)
6
- rack (>= 1.3)
7
- railties (>= 4)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- actionpack (5.1.4)
13
- actionview (= 5.1.4)
14
- activesupport (= 5.1.4)
15
- rack (~> 2.0)
16
- rack-test (>= 0.6.3)
17
- rails-dom-testing (~> 2.0)
18
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
19
- actionview (5.1.4)
20
- activesupport (= 5.1.4)
21
- builder (~> 3.1)
22
- erubi (~> 1.4)
23
- rails-dom-testing (~> 2.0)
24
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
25
- activesupport (5.1.4)
26
- concurrent-ruby (~> 1.0, >= 1.0.2)
27
- i18n (~> 0.7)
28
- minitest (~> 5.1)
29
- tzinfo (~> 1.1)
30
- builder (3.2.3)
31
- codeclimate-test-reporter (0.4.8)
32
- simplecov (>= 0.7.1, < 1.0.0)
33
- concurrent-ruby (1.0.5)
34
- crass (1.0.2)
35
- diff-lcs (1.2.5)
36
- docile (1.1.5)
37
- erubi (1.6.1)
38
- i18n (0.8.6)
39
- json (1.8.6)
40
- loofah (2.1.1)
41
- crass (~> 1.0.2)
42
- nokogiri (>= 1.5.9)
43
- method_source (0.9.0)
44
- mini_portile2 (2.3.0)
45
- minitest (5.10.3)
46
- nokogiri (1.8.1)
47
- mini_portile2 (~> 2.3.0)
48
- rack (2.0.3)
49
- rack-test (0.7.0)
50
- rack (>= 1.0, < 3)
51
- rails-dom-testing (2.0.3)
52
- activesupport (>= 4.2.0)
53
- nokogiri (>= 1.6)
54
- rails-html-sanitizer (1.0.3)
55
- loofah (~> 2.0)
56
- railties (5.1.4)
57
- actionpack (= 5.1.4)
58
- activesupport (= 5.1.4)
59
- method_source
60
- rake (>= 0.8.7)
61
- thor (>= 0.18.1, < 2.0)
62
- rake (10.3.1)
63
- rspec (2.14.1)
64
- rspec-core (~> 2.14.0)
65
- rspec-expectations (~> 2.14.0)
66
- rspec-mocks (~> 2.14.0)
67
- rspec-core (2.14.8)
68
- rspec-expectations (2.14.5)
69
- diff-lcs (>= 1.1.3, < 2.0)
70
- rspec-mocks (2.14.6)
71
- simplecov (0.11.2)
72
- docile (~> 1.1.0)
73
- json (~> 1.8)
74
- simplecov-html (~> 0.10.0)
75
- simplecov-html (0.10.0)
76
- thor (0.20.0)
77
- thread_safe (0.3.6)
78
- tzinfo (1.2.3)
79
- thread_safe (~> 0.1)
80
-
81
- PLATFORMS
82
- ruby
83
-
84
- DEPENDENCIES
85
- bundler (~> 1.5)
86
- codeclimate-test-reporter
87
- github_webhook!
88
- rake (~> 10.1)
89
- rspec (~> 2.14)
90
-
91
- BUNDLED WITH
92
- 1.16.0.pre.2