mergent 0.2.2 → 1.0.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: '091560d589e98d720d345df17008294a74ae798e2bca2a39f0a7025dfcf6dded'
4
- data.tar.gz: 6246ac0ffe441726ae3bde5923740528b79cc6069a1a2239db814bbc8f3c30d7
3
+ metadata.gz: 9281f04808d0bf4eb2e778860b8a6b0d3ecd3a14c998a17b73706aac8f020994
4
+ data.tar.gz: a971e955775cbf0786567c001a814ca751c6f82c552cca96308fe5e263c55aaf
5
5
  SHA512:
6
- metadata.gz: d110627a45389094c7040a1025b22a287af95d9f0976b194607d447ea908a553b5b05937882348fee80ff6d44c0a83ba7d8cce9fac473889b21249b0d3fd6dc1
7
- data.tar.gz: cac95a4b57248d1924ccec745872cb68f677890bc304661bd893ddd1085d8998f31e40073fe89fbcb22fc057468f7c4dc9f12042ea0914a62188d106d74580d5
6
+ metadata.gz: e060f3a1fe02989554c49f9023880fe263263ab72c86ec26ef5710f324b201b21518d52d834e9357ab6a85263acbae9ba8e787e344fa7073824f366ed77af40e
7
+ data.tar.gz: 0226c8ea2989c7d120d396961676956a1b813d657e794e2e0b998554310411eb5d78be5866990b77e182e65915093d750fe51721e36617686466b3733279bde2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
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
+
3
12
  ## [0.2.2] - 2022-01-20
4
13
 
5
14
  - 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.2.2)
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.0.0)
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.0)
22
+ regexp_parser (2.2.1)
23
23
  rexml (3.2.5)
24
- rspec (3.10.0)
25
- rspec-core (~> 3.10.0)
26
- rspec-expectations (~> 3.10.0)
27
- rspec-mocks (~> 3.10.0)
28
- rspec-core (3.10.1)
29
- rspec-support (~> 3.10.0)
30
- rspec-expectations (3.10.2)
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.10.0)
33
- rspec-mocks (3.10.2)
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.10.0)
36
- rspec-support (3.10.3)
37
- rubocop (1.24.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.0.0.0)
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.15.1, < 2.0)
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.15.1)
47
- parser (>= 3.0.1.1)
48
- rubocop-performance (1.13.2)
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.7.0)
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 name
38
- task.name
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
@@ -5,25 +5,42 @@ require "json"
5
5
 
6
6
  module Mergent
7
7
  class Client
8
- def self.post(resource, params) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
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 = Net::HTTP::Post.new(uri, headers)
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(response.read_body)
40
+ JSON.parse(response_body)
24
41
  else
25
42
  begin
26
- body = JSON.parse(response.read_body)
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(", ")
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Mergent
4
4
  class Object
5
+ DEFAULT_QUEUE = "default"
6
+
5
7
  attr_reader :_data
6
8
 
7
9
  def initialize(data = {})
@@ -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 description status request scheduled_for created_at].freeze
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("tasks", params)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mergent
4
- VERSION = "0.2.2"
4
+ VERSION = "1.0.0"
5
5
  end
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/v1"
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.2.2
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-01-20 00:00:00.000000000 Z
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