mergent 0.2.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|