mergent 0.1.2 → 0.2.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
2
  SHA256:
3
- metadata.gz: 642ea17eb70a5ca0ff84a2925c80fa1e733500ab83e27cfeba9b88daf2ded004
4
- data.tar.gz: 2866865e873ec4122c4bda14f2b7e003293679c452745ff7897375a11a318b4b
3
+ metadata.gz: cc06e24825269b013a4a16a36b4efbacce4bff7072a3f477d315a2662b6e9d1b
4
+ data.tar.gz: e1827059fe19cce91e14bacea197db6d56d9faafb4499103e2a03515491064be
5
5
  SHA512:
6
- metadata.gz: 61903d6cdb937faaa6a30c77f6088dd766825a14ee72b4e8234b228d84bb56e44fea75f9b36d7e7aff17f3bdabad1881d3514ea6ee0b8f1e722b3489862eecb3
7
- data.tar.gz: 7309d2edd09df2c59dec2fb22df1e5cfa82caa2e6faba27e42f03999f35093b913df83a7ee4e23385b1ddd7d498e3aba663e7f0cc1a3fabd78e01521383f0364
6
+ metadata.gz: 2b205d9443bb5589e6425969bc735fdfb01b43f14b60c5b94b5409e8ce4113c11c3504f2f28dd1898030a4ca2364d7162367ff59f4483ea1d0d299ac4182b953
7
+ data.tar.gz: baeff3cb6c216746c0b39007b4271282cdc85a9c2ef9de0d7953a0ad6cd46e0a09b4bbec8b231377f72ae2ee977b6d0255ff58f3292d00002faacf507682a57b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.0] - 2022-01-20
4
+
5
+ - Add `Mergent::RequestValidator` to validate that webhooks came from Mergent's API
6
+
3
7
  ## [0.1.2] - 2022-1-13
4
8
 
5
9
  - Define explicit methods in `Mergent::Task`, to allow for use of verifying doubles when testing against them.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mergent (0.1.2)
4
+ mergent (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -17,7 +17,7 @@ GEM
17
17
  parser (3.1.0.0)
18
18
  ast (~> 2.4.1)
19
19
  public_suffix (4.0.6)
20
- rainbow (3.0.0)
20
+ rainbow (3.1.1)
21
21
  rake (13.0.6)
22
22
  regexp_parser (2.2.0)
23
23
  rexml (3.2.5)
@@ -27,7 +27,7 @@ GEM
27
27
  rspec-mocks (~> 3.10.0)
28
28
  rspec-core (3.10.1)
29
29
  rspec-support (~> 3.10.0)
30
- rspec-expectations (3.10.1)
30
+ rspec-expectations (3.10.2)
31
31
  diff-lcs (>= 1.2.0, < 2.0)
32
32
  rspec-support (~> 3.10.0)
33
33
  rspec-mocks (3.10.2)
@@ -45,7 +45,7 @@ GEM
45
45
  unicode-display_width (>= 1.4.0, < 3.0)
46
46
  rubocop-ast (1.15.1)
47
47
  parser (>= 3.0.1.1)
48
- rubocop-performance (1.13.1)
48
+ rubocop-performance (1.13.2)
49
49
  rubocop (>= 1.7.0, < 2.0)
50
50
  rubocop-ast (>= 0.4.0)
51
51
  rubocop-rake (0.6.0)
data/README.md CHANGED
@@ -47,10 +47,11 @@ After checking out the repo, run `bundle` to install dependencies. Then, run
47
47
  `rake spec` to run the tests.
48
48
 
49
49
  To install this gem onto your local machine, run `bundle exec rake install`.
50
- To release a new version, update the version number in `version.rb`, and then
51
- run `bundle exec rake release`, which will create a git tag for the version,
52
- push git commits and the created tag, and push the `.gem` file to
53
- [rubygems.org](https://rubygems.org).
50
+
51
+ To release a new version, update the changelog, bump the version number in
52
+ `version.rb`, commit that change, and then run `bundle exec rake release`, which
53
+ will create a git tag for the version, push git commits and the created tag, and
54
+ push the `.gem` file to [rubygems.org](https://rubygems.org).
54
55
 
55
56
  ## Contributing
56
57
 
@@ -6,7 +6,7 @@ require "json"
6
6
  module Mergent
7
7
  class Client
8
8
  def self.post(resource, params) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
9
- uri = URI("https://api.mergent.co/v1/#{resource}")
9
+ uri = URI("#{Mergent.endpoint}/#{resource}")
10
10
  headers = {
11
11
  Authorization: "Bearer #{Mergent.api_key}",
12
12
  "Content-Type": "application/json"
@@ -15,7 +15,7 @@ module Mergent
15
15
  request.body = params.to_json
16
16
 
17
17
  https = Net::HTTP.new(uri.host, uri.port)
18
- https.use_ssl = true
18
+ https.use_ssl = Mergent.endpoint.start_with?("https")
19
19
  response = https.request(request)
20
20
 
21
21
  case response
@@ -27,10 +27,20 @@ module Mergent
27
27
  rescue JSON::ParserError
28
28
  body = {}
29
29
  end
30
- raise Mergent::Error, body["message"]
30
+ raise Mergent::Error, error_message(body)
31
31
  end
32
32
  rescue EOFError, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::EHOSTUNREACH, Errno::ETIMEDOUT, SocketError
33
33
  raise Mergent::ConnectionError
34
34
  end
35
+
36
+ private
37
+
38
+ def self.error_message(body)
39
+ breakdown = body.fetch("errors", []).map { |error| error.fetch("message", nil) }.compact.join(", ")
40
+ msg = body["message"]
41
+ msg << " - #{breakdown}" unless breakdown.empty?
42
+ msg
43
+ end
44
+ private_class_method :error_message
35
45
  end
36
46
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mergent
4
+ class RequestValidator
5
+ def initialize(api_key)
6
+ @api_key = api_key || Mergent.api_key
7
+ end
8
+
9
+ def build_signature_for(url, body)
10
+ data = (url || "") + (body || "")
11
+ digest = OpenSSL::Digest.new("sha1")
12
+ Base64.strict_encode64(OpenSSL::HMAC.digest(digest, @api_key, data))
13
+ end
14
+
15
+ def valid_signature?(url, body, signature)
16
+ build_signature_for(url, body) == signature
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mergent
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/mergent.rb CHANGED
@@ -1,11 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "mergent/errors"
4
+ require_relative "mergent/request_validator"
4
5
  require_relative "mergent/task"
5
6
  require_relative "mergent/version"
6
7
 
7
8
  module Mergent
9
+ ENDPOINT = "https://api.mergent.co/v1"
10
+
8
11
  class << self
9
- attr_accessor :api_key
12
+ attr_accessor :api_key, :endpoint
10
13
  end
11
14
  end
15
+
16
+ Mergent.endpoint = Mergent::ENDPOINT
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mergent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mergent
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-13 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby library for the Mergent API. See https://mergent.co for details.
14
14
  email: support@mergent.co
@@ -29,6 +29,7 @@ files:
29
29
  - lib/mergent/client.rb
30
30
  - lib/mergent/errors.rb
31
31
  - lib/mergent/object.rb
32
+ - lib/mergent/request_validator.rb
32
33
  - lib/mergent/task.rb
33
34
  - lib/mergent/version.rb
34
35
  - mergent.gemspec