mergent 0.2.0 → 1.0.0
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 +4 -4
- data/CHANGELOG.md +17 -0
- data/Gemfile.lock +21 -21
- data/README.md +8 -2
- data/lib/mergent/client.rb +22 -6
- data/lib/mergent/object.rb +2 -0
- data/lib/mergent/request_validator.rb +4 -5
- data/lib/mergent/schedule.rb +34 -0
- data/lib/mergent/task.rb +5 -2
- data/lib/mergent/version.rb +1 -1
- data/lib/mergent.rb +2 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9281f04808d0bf4eb2e778860b8a6b0d3ecd3a14c998a17b73706aac8f020994
|
4
|
+
data.tar.gz: a971e955775cbf0786567c001a814ca751c6f82c552cca96308fe5e263c55aaf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e060f3a1fe02989554c49f9023880fe263263ab72c86ec26ef5710f324b201b21518d52d834e9357ab6a85263acbae9ba8e787e344fa7073824f366ed77af40e
|
7
|
+
data.tar.gz: 0226c8ea2989c7d120d396961676956a1b813d657e794e2e0b998554310411eb5d78be5866990b77e182e65915093d750fe51721e36617686466b3733279bde2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.0] - 2022-03-10
|
4
|
+
|
5
|
+
- Switch to the V2 API
|
6
|
+
- Add `id` attribute to Task
|
7
|
+
- Make `name` optional
|
8
|
+
- Add optional `queue` attribute to Task that defaults to `default`
|
9
|
+
- Remove `description` from Task
|
10
|
+
- Add support for creating, deleting, and updating Schedules
|
11
|
+
|
12
|
+
## [0.2.2] - 2022-01-20
|
13
|
+
|
14
|
+
- Add `Mergent::RequestValidator` to validate that webhooks came from Mergent's API
|
15
|
+
|
16
|
+
## [0.2.1] - 2022-01-20
|
17
|
+
|
18
|
+
- Add `Mergent::RequestValidator` to validate that webhooks came from Mergent's API
|
19
|
+
|
3
20
|
## [0.2.0] - 2022-01-20
|
4
21
|
|
5
22
|
- Add `Mergent::RequestValidator` to validate that webhooks came from Mergent's API
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mergent (0.
|
4
|
+
mergent (1.0.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -14,43 +14,43 @@ GEM
|
|
14
14
|
diff-lcs (1.5.0)
|
15
15
|
hashdiff (1.0.1)
|
16
16
|
parallel (1.21.0)
|
17
|
-
parser (3.1.
|
17
|
+
parser (3.1.1.0)
|
18
18
|
ast (~> 2.4.1)
|
19
19
|
public_suffix (4.0.6)
|
20
20
|
rainbow (3.1.1)
|
21
21
|
rake (13.0.6)
|
22
|
-
regexp_parser (2.2.
|
22
|
+
regexp_parser (2.2.1)
|
23
23
|
rexml (3.2.5)
|
24
|
-
rspec (3.
|
25
|
-
rspec-core (~> 3.
|
26
|
-
rspec-expectations (~> 3.
|
27
|
-
rspec-mocks (~> 3.
|
28
|
-
rspec-core (3.
|
29
|
-
rspec-support (~> 3.
|
30
|
-
rspec-expectations (3.
|
24
|
+
rspec (3.11.0)
|
25
|
+
rspec-core (~> 3.11.0)
|
26
|
+
rspec-expectations (~> 3.11.0)
|
27
|
+
rspec-mocks (~> 3.11.0)
|
28
|
+
rspec-core (3.11.0)
|
29
|
+
rspec-support (~> 3.11.0)
|
30
|
+
rspec-expectations (3.11.0)
|
31
31
|
diff-lcs (>= 1.2.0, < 2.0)
|
32
|
-
rspec-support (~> 3.
|
33
|
-
rspec-mocks (3.
|
32
|
+
rspec-support (~> 3.11.0)
|
33
|
+
rspec-mocks (3.11.0)
|
34
34
|
diff-lcs (>= 1.2.0, < 2.0)
|
35
|
-
rspec-support (~> 3.
|
36
|
-
rspec-support (3.
|
37
|
-
rubocop (1.
|
35
|
+
rspec-support (~> 3.11.0)
|
36
|
+
rspec-support (3.11.0)
|
37
|
+
rubocop (1.26.0)
|
38
38
|
parallel (~> 1.10)
|
39
|
-
parser (>= 3.
|
39
|
+
parser (>= 3.1.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.
|
43
|
+
rubocop-ast (>= 1.16.0, < 2.0)
|
44
44
|
ruby-progressbar (~> 1.7)
|
45
45
|
unicode-display_width (>= 1.4.0, < 3.0)
|
46
|
-
rubocop-ast (1.
|
47
|
-
parser (>= 3.
|
48
|
-
rubocop-performance (1.13.
|
46
|
+
rubocop-ast (1.16.0)
|
47
|
+
parser (>= 3.1.1.0)
|
48
|
+
rubocop-performance (1.13.3)
|
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.
|
53
|
+
rubocop-rspec (2.9.0)
|
54
54
|
rubocop (~> 1.19)
|
55
55
|
ruby-progressbar (1.11.0)
|
56
56
|
unicode-display_width (2.1.0)
|
data/README.md
CHANGED
@@ -34,8 +34,14 @@ Mergent.api_key = "..."
|
|
34
34
|
# create a Task
|
35
35
|
task = Mergent::Task.create({ request: { url: "https://example.com" } })
|
36
36
|
|
37
|
-
# get the newly created Task's
|
38
|
-
task.
|
37
|
+
# get the newly created Task's ID
|
38
|
+
task.id
|
39
|
+
|
40
|
+
# create a Schedule
|
41
|
+
schedule = Mergent::Schedule.create({ cron: "0 8 * * *", request: { url: "https://example.com" } })
|
42
|
+
|
43
|
+
# get the newly created Schedule's cron schedule
|
44
|
+
schedule.cron
|
39
45
|
```
|
40
46
|
|
41
47
|
See the [Mergent Ruby docs](https://docs.mergent.co/libraries/ruby) for more
|
data/lib/mergent/client.rb
CHANGED
@@ -5,25 +5,42 @@ require "json"
|
|
5
5
|
|
6
6
|
module Mergent
|
7
7
|
class Client
|
8
|
-
def self.post(resource, params)
|
8
|
+
def self.post(resource, params)
|
9
|
+
request(Net::HTTP::Post, resource, params)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.delete(resource, params = {})
|
13
|
+
request(Net::HTTP::Delete, resource, params)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.patch(resource, params)
|
17
|
+
request(Net::HTTP::Patch, resource, params)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.request(request_class, resource, params) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
9
23
|
uri = URI("#{Mergent.endpoint}/#{resource}")
|
10
24
|
headers = {
|
11
25
|
Authorization: "Bearer #{Mergent.api_key}",
|
12
26
|
"Content-Type": "application/json"
|
13
27
|
}
|
14
|
-
request =
|
28
|
+
request = request_class.new(uri, headers)
|
15
29
|
request.body = params.to_json
|
16
30
|
|
17
31
|
https = Net::HTTP.new(uri.host, uri.port)
|
18
32
|
https.use_ssl = Mergent.endpoint.start_with?("https")
|
19
33
|
response = https.request(request)
|
20
34
|
|
35
|
+
read_body = response.read_body
|
36
|
+
response_body = read_body.nil? || read_body.empty? ? "{}" : read_body
|
37
|
+
|
21
38
|
case response
|
22
39
|
when Net::HTTPSuccess
|
23
|
-
JSON.parse(
|
40
|
+
JSON.parse(response_body)
|
24
41
|
else
|
25
42
|
begin
|
26
|
-
body = JSON.parse(
|
43
|
+
body = JSON.parse(response_body)
|
27
44
|
rescue JSON::ParserError
|
28
45
|
body = {}
|
29
46
|
end
|
@@ -32,8 +49,7 @@ module Mergent
|
|
32
49
|
rescue EOFError, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::EHOSTUNREACH, Errno::ETIMEDOUT, SocketError
|
33
50
|
raise Mergent::ConnectionError
|
34
51
|
end
|
35
|
-
|
36
|
-
private
|
52
|
+
private_class_method :request
|
37
53
|
|
38
54
|
def self.error_message(body)
|
39
55
|
breakdown = body.fetch("errors", []).map { |error| error.fetch("message", nil) }.compact.join(", ")
|
data/lib/mergent/object.rb
CHANGED
@@ -6,14 +6,13 @@ module Mergent
|
|
6
6
|
@api_key = api_key || Mergent.api_key
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
data = (url || "") + (body || "")
|
9
|
+
def build_signature(body)
|
11
10
|
digest = OpenSSL::Digest.new("sha1")
|
12
|
-
Base64.strict_encode64(OpenSSL::HMAC.digest(digest, @api_key,
|
11
|
+
Base64.strict_encode64(OpenSSL::HMAC.digest(digest, @api_key, body || ""))
|
13
12
|
end
|
14
13
|
|
15
|
-
def valid_signature?(
|
16
|
-
|
14
|
+
def valid_signature?(body, signature)
|
15
|
+
build_signature(body) == signature
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "client"
|
4
|
+
require_relative "object"
|
5
|
+
|
6
|
+
module Mergent
|
7
|
+
class Schedule < Mergent::Object
|
8
|
+
ATTRS = %i[id queue cron rrule dtstart type description request created_at].freeze
|
9
|
+
|
10
|
+
ATTRS.each do |name|
|
11
|
+
define_method(name) do
|
12
|
+
@_data[name]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.create(params = {})
|
17
|
+
data = Client.post(
|
18
|
+
"schedules",
|
19
|
+
{ queue: Mergent::Object::DEFAULT_QUEUE }.merge(params)
|
20
|
+
)
|
21
|
+
new(data)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.update(id, params)
|
25
|
+
data = Client.patch("schedules/#{id}", params)
|
26
|
+
new(data)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.delete(id)
|
30
|
+
Client.delete("schedules/#{id}")
|
31
|
+
true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/mergent/task.rb
CHANGED
@@ -5,7 +5,7 @@ require_relative "object"
|
|
5
5
|
|
6
6
|
module Mergent
|
7
7
|
class Task < Mergent::Object
|
8
|
-
ATTRS = %i[name
|
8
|
+
ATTRS = %i[id name queue status request scheduled_for created_at].freeze
|
9
9
|
|
10
10
|
ATTRS.each do |name|
|
11
11
|
define_method(name) do
|
@@ -14,7 +14,10 @@ module Mergent
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.create(params = {})
|
17
|
-
data = Client.post(
|
17
|
+
data = Client.post(
|
18
|
+
"tasks",
|
19
|
+
{ queue: Mergent::Object::DEFAULT_QUEUE }.merge(params)
|
20
|
+
)
|
18
21
|
new(data)
|
19
22
|
end
|
20
23
|
end
|
data/lib/mergent/version.rb
CHANGED
data/lib/mergent.rb
CHANGED
@@ -3,10 +3,11 @@
|
|
3
3
|
require_relative "mergent/errors"
|
4
4
|
require_relative "mergent/request_validator"
|
5
5
|
require_relative "mergent/task"
|
6
|
+
require_relative "mergent/schedule"
|
6
7
|
require_relative "mergent/version"
|
7
8
|
|
8
9
|
module Mergent
|
9
|
-
ENDPOINT = "https://api.mergent.co/
|
10
|
+
ENDPOINT = "https://api.mergent.co/v2"
|
10
11
|
|
11
12
|
class << self
|
12
13
|
attr_accessor :api_key, :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.
|
4
|
+
version: 1.0.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-
|
11
|
+
date: 2022-03-10 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
|
@@ -30,6 +30,7 @@ files:
|
|
30
30
|
- lib/mergent/errors.rb
|
31
31
|
- lib/mergent/object.rb
|
32
32
|
- lib/mergent/request_validator.rb
|
33
|
+
- lib/mergent/schedule.rb
|
33
34
|
- lib/mergent/task.rb
|
34
35
|
- lib/mergent/version.rb
|
35
36
|
- mergent.gemspec
|