mergent 0.1.1 → 0.2.2

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: 6fa436289497477ab6333360f5d93cf451a31a30de5f935b0837bcf2766028af
4
- data.tar.gz: 2e9563a47585a5c1b950c8430fe16835418087cca8959d624f4065c482194c47
3
+ metadata.gz: '091560d589e98d720d345df17008294a74ae798e2bca2a39f0a7025dfcf6dded'
4
+ data.tar.gz: 6246ac0ffe441726ae3bde5923740528b79cc6069a1a2239db814bbc8f3c30d7
5
5
  SHA512:
6
- metadata.gz: 7485effdaa452ede27002ee7cab32e4962e826b6cadf17781dfed2ae60e09c34cfad6bc5782db829f5c934297096f2f1cc54e2b10419d9e23bc94bddc1205bd7
7
- data.tar.gz: 4ad86522e95f4dfbb934a5e66b80842042df15943371db92a6ff3ff8fc01361e64b25e7c677c28ef61f01102095e8716b4b17f95bda6d3b196697fe317e3d7b2
6
+ metadata.gz: d110627a45389094c7040a1025b22a287af95d9f0976b194607d447ea908a553b5b05937882348fee80ff6d44c0a83ba7d8cce9fac473889b21249b0d3fd6dc1
7
+ data.tar.gz: cac95a4b57248d1924ccec745872cb68f677890bc304661bd893ddd1085d8998f31e40073fe89fbcb22fc057468f7c4dc9f12042ea0914a62188d106d74580d5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.2] - 2022-01-20
4
+
5
+ - Add `Mergent::RequestValidator` to validate that webhooks came from Mergent's API
6
+
7
+ ## [0.2.1] - 2022-01-20
8
+
9
+ - Add `Mergent::RequestValidator` to validate that webhooks came from Mergent's API
10
+
11
+ ## [0.2.0] - 2022-01-20
12
+
13
+ - Add `Mergent::RequestValidator` to validate that webhooks came from Mergent's API
14
+
15
+ ## [0.1.2] - 2022-1-13
16
+
17
+ - Define explicit methods in `Mergent::Task`, to allow for use of verifying doubles when testing against them.
18
+ - Remove deprecated `cron` method definition
19
+
3
20
  ## [0.1.1] - 2021-12-21
4
21
 
5
22
  - 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.1)
4
+ mergent (0.2.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -11,15 +11,15 @@ GEM
11
11
  ast (2.4.2)
12
12
  crack (0.4.5)
13
13
  rexml
14
- diff-lcs (1.4.4)
14
+ diff-lcs (1.5.0)
15
15
  hashdiff (1.0.1)
16
16
  parallel (1.21.0)
17
- parser (3.0.2.0)
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
- regexp_parser (2.1.1)
22
+ regexp_parser (2.2.0)
23
23
  rexml (3.2.5)
24
24
  rspec (3.10.0)
25
25
  rspec-core (~> 3.10.0)
@@ -27,30 +27,30 @@ 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)
34
34
  diff-lcs (>= 1.2.0, < 2.0)
35
35
  rspec-support (~> 3.10.0)
36
- rspec-support (3.10.2)
37
- rubocop (1.23.0)
36
+ rspec-support (3.10.3)
37
+ rubocop (1.24.1)
38
38
  parallel (~> 1.10)
39
39
  parser (>= 3.0.0.0)
40
40
  rainbow (>= 2.2.2, < 4.0)
41
41
  regexp_parser (>= 1.8, < 3.0)
42
42
  rexml
43
- rubocop-ast (>= 1.12.0, < 2.0)
43
+ rubocop-ast (>= 1.15.1, < 2.0)
44
44
  ruby-progressbar (~> 1.7)
45
45
  unicode-display_width (>= 1.4.0, < 3.0)
46
- rubocop-ast (1.13.0)
46
+ rubocop-ast (1.15.1)
47
47
  parser (>= 3.0.1.1)
48
- rubocop-performance (1.12.0)
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)
52
52
  rubocop (~> 1.0)
53
- rubocop-rspec (2.6.0)
53
+ rubocop-rspec (2.7.0)
54
54
  rubocop (~> 1.19)
55
55
  ruby-progressbar (1.11.0)
56
56
  unicode-display_width (2.1.0)
@@ -73,4 +73,4 @@ DEPENDENCIES
73
73
  webmock
74
74
 
75
75
  BUNDLED WITH
76
- 2.2.33
76
+ 2.3.4
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Mergent
1
+ # Mergent Ruby Library
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/mergent.svg)](https://badge.fury.io/rb/mergent)
4
4
  [![CI](https://github.com/mergentlabs/mergent-ruby/actions/workflows/ci.yml/badge.svg)](https://github.com/mergentlabs/mergent-ruby/actions/workflows/ci.yml)
@@ -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,22 +15,32 @@ 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
22
22
  when Net::HTTPSuccess
23
- JSON.parse(response.read_body, object_class: Mergent::Object)
23
+ JSON.parse(response.read_body)
24
24
  else
25
25
  begin
26
26
  body = JSON.parse(response.read_body)
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
@@ -1,5 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mergent
4
- class Object < OpenStruct; end # rubocop:disable Style/OpenStructUse
4
+ class Object
5
+ attr_reader :_data
6
+
7
+ def initialize(data = {})
8
+ @_data = data.transform_keys(&:to_sym)
9
+ end
10
+ end
5
11
  end
@@ -0,0 +1,18 @@
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(body)
10
+ digest = OpenSSL::Digest.new("sha1")
11
+ Base64.strict_encode64(OpenSSL::HMAC.digest(digest, @api_key, body || ""))
12
+ end
13
+
14
+ def valid_signature?(body, signature)
15
+ build_signature(body) == signature
16
+ end
17
+ end
18
+ end
data/lib/mergent/task.rb CHANGED
@@ -5,15 +5,17 @@ require_relative "object"
5
5
 
6
6
  module Mergent
7
7
  class Task < Mergent::Object
8
- def self.create(params = {})
9
- object = Client.post("tasks", params)
10
- new(object)
11
- end
8
+ ATTRS = %i[name description status request scheduled_for created_at].freeze
12
9
 
13
- %i[name description status request scheduled_for delay cron].each do |name|
10
+ ATTRS.each do |name|
14
11
  define_method(name) do
15
- self[name]
12
+ @_data[name]
16
13
  end
17
14
  end
15
+
16
+ def self.create(params = {})
17
+ data = Client.post("tasks", params)
18
+ new(data)
19
+ end
18
20
  end
19
21
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mergent
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.2"
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
data/mergent.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/mergent/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "mergent"
7
+ spec.version = Mergent::VERSION
8
+ spec.author = "Mergent"
9
+ spec.email = "support@mergent.co"
10
+
11
+ spec.summary = "Ruby library for the Mergent API."
12
+ spec.description = "Ruby library for the Mergent API. See https://mergent.co for details."
13
+ spec.homepage = "https://mergent.co"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 2.6.0"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/mergentlabs/mergent-ruby"
19
+ spec.metadata["changelog_uri"] = "https://github.com/mergentlabs/mergent-ruby/blob/main/CHANGELOG.md"
20
+ spec.metadata["rubygems_mfa_required"] = "true"
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
+ `git ls-files -z`.split("\x0").reject do |f|
26
+ (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
27
+ end
28
+ end
29
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+ end
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.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mergent
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-21 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,8 +29,10 @@ 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
35
+ - mergent.gemspec
34
36
  homepage: https://mergent.co
35
37
  licenses:
36
38
  - MIT
@@ -54,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
56
  - !ruby/object:Gem::Version
55
57
  version: '0'
56
58
  requirements: []
57
- rubygems_version: 3.2.22
59
+ rubygems_version: 3.3.3
58
60
  signing_key:
59
61
  specification_version: 4
60
62
  summary: Ruby library for the Mergent API.