mailerlite-ruby 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +1 -0
  3. data/.github/workflows/main.yml +17 -0
  4. data/.github/workflows/publish_gem.yml +21 -0
  5. data/.gitignore +60 -0
  6. data/.rspec +1 -0
  7. data/.rubocop.yml +36 -0
  8. data/CHANGELOG.md +1 -0
  9. data/Gemfile +4 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +801 -0
  12. data/Rakefile +8 -0
  13. data/bin/console +8 -0
  14. data/bin/setup +8 -0
  15. data/fixtures/automations/fetch.yml +61 -0
  16. data/fixtures/automations/get.yml +68 -0
  17. data/fixtures/automations/get_subscriber_activity.yml +71 -0
  18. data/fixtures/batch/request.yml +59 -0
  19. data/fixtures/campaigns/activity.yml +64 -0
  20. data/fixtures/campaigns/create.yml +65 -0
  21. data/fixtures/campaigns/delete.yml +53 -0
  22. data/fixtures/campaigns/fetch.yml +64 -0
  23. data/fixtures/campaigns/get.yml +68 -0
  24. data/fixtures/campaigns/languages.yml +60 -0
  25. data/fixtures/campaigns/schedule.yml +160 -0
  26. data/fixtures/campaigns/update.yml +159 -0
  27. data/fixtures/fields/create.yml +57 -0
  28. data/fixtures/fields/delete.yml +53 -0
  29. data/fixtures/fields/get.yml +60 -0
  30. data/fixtures/fields/update.yml +57 -0
  31. data/fixtures/forms/delete.yml +53 -0
  32. data/fixtures/forms/fetch.yml +60 -0
  33. data/fixtures/forms/fetch_subscribers.yml +59 -0
  34. data/fixtures/forms/list.yml +62 -0
  35. data/fixtures/forms/update.yml +60 -0
  36. data/fixtures/groups/assign_subscriber.yml +58 -0
  37. data/fixtures/groups/create.yml +58 -0
  38. data/fixtures/groups/delete.yml +53 -0
  39. data/fixtures/groups/get.yml +63 -0
  40. data/fixtures/groups/get_subscribers.yml +62 -0
  41. data/fixtures/groups/unassign_subscriber.yml +53 -0
  42. data/fixtures/groups/update.yml +58 -0
  43. data/fixtures/segments/delete.yml +53 -0
  44. data/fixtures/segments/get_subscribers.yml +61 -0
  45. data/fixtures/segments/list.yml +60 -0
  46. data/fixtures/segments/update.yml +58 -0
  47. data/fixtures/subscribers/create.yml +57 -0
  48. data/fixtures/subscribers/delete.yml +51 -0
  49. data/fixtures/subscribers/fetch.yml +68 -0
  50. data/fixtures/subscribers/fetch_count.yml +55 -0
  51. data/fixtures/subscribers/get.yml +62 -0
  52. data/fixtures/timezones/list.yml +575 -0
  53. data/fixtures/webhooks/create.yml +58 -0
  54. data/fixtures/webhooks/delete.yml +53 -0
  55. data/fixtures/webhooks/get.yml +58 -0
  56. data/fixtures/webhooks/list.yml +61 -0
  57. data/fixtures/webhooks/update.yml +58 -0
  58. data/lib/mailerlite/automations/automations.rb +62 -0
  59. data/lib/mailerlite/batch/batch.rb +24 -0
  60. data/lib/mailerlite/campaigns/campaigns.rb +216 -0
  61. data/lib/mailerlite/client.rb +35 -0
  62. data/lib/mailerlite/fields/fields.rb +61 -0
  63. data/lib/mailerlite/forms/forms.rb +73 -0
  64. data/lib/mailerlite/groups/groups.rb +90 -0
  65. data/lib/mailerlite/segments/segments.rb +62 -0
  66. data/lib/mailerlite/subscribers/subscribers.rb +116 -0
  67. data/lib/mailerlite/timezones/timezones.rb +22 -0
  68. data/lib/mailerlite/version.rb +5 -0
  69. data/lib/mailerlite/webhooks/webhooks.rb +67 -0
  70. data/lib/mailerlite-ruby.rb +3 -0
  71. data/lib/mailerlite.rb +13 -0
  72. data/mailerlite-ruby.gemspec +42 -0
  73. data/renovate.json +5 -0
  74. data/spec/automations_rspec.rb +63 -0
  75. data/spec/batches_rspec.rb +41 -0
  76. data/spec/campaigns_rspec.rb +155 -0
  77. data/spec/fields_rspec.rb +70 -0
  78. data/spec/forms_rspec.rb +81 -0
  79. data/spec/groups_rspec.rb +97 -0
  80. data/spec/segments_rspec.rb +70 -0
  81. data/spec/spec_helper.rb +101 -0
  82. data/spec/subscribers_rspec.rb +84 -0
  83. data/spec/timezones_rspec.rb +36 -0
  84. data/spec/webhooks_rspec.rb +86 -0
  85. metadata +303 -0
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MailerLite
4
+ # This is a class for manipulating the Fields from MailerLite API.
5
+ class Fields
6
+ attr_reader :client
7
+
8
+ # Inits the `Fields` class with the specified `client`.
9
+ #
10
+ # @param client [MailerLite::Client] the `Client` instance to use
11
+ def initialize(client: MailerLite::Client.new)
12
+ @client = client
13
+ end
14
+
15
+ # Returns a list of Fields that match the specified filter criteria.
16
+ #
17
+ # @param filter [:keyword, :type] Returns partial matches for fields
18
+ # @param limit [Integer] the maximum number of Fields to return
19
+ # @param page [Integer] the page number of the results to return
20
+ # @return [HTTP::Response] the response from the API
21
+ def get(limit: nil, page: nil, filter: {}, sort: nil)
22
+ params = {}
23
+ params['filter[keyword]'] = filter[:keyword] if filter.key?(:keyword)
24
+ params['filter[type]'] = filter[:type] if filter.key?(:type)
25
+ params['sort'] = sort if sort
26
+ params['limit'] = limit if limit
27
+ params['page'] = page if page
28
+ uri = URI("#{API_URL}/fields")
29
+ uri.query = URI.encode_www_form(params.compact)
30
+ client.http.get(uri)
31
+ end
32
+
33
+ # Update the specified Field
34
+ #
35
+ # @param name [String] the name of the field to create
36
+ # @param type [String] the type, can be text, number or date
37
+ # @return [HTTP::Response] the response from the API
38
+ def create(type:, name:)
39
+ params = { 'name' => name, 'type' => type }
40
+ client.http.post("#{API_URL}/fields", json: params.compact)
41
+ end
42
+
43
+ # Update the specified Field
44
+ #
45
+ # @param field_id [Integer] the field_id to update
46
+ # @param name [String] the name to update
47
+ # @return [HTTP::Response] the response from the API
48
+ def update(field_id:, name:)
49
+ params = { 'name' => name }
50
+ client.http.put("#{API_URL}/fields/#{field_id}", json: params.compact)
51
+ end
52
+
53
+ # Deletes the specified Field.
54
+ #
55
+ # @param field_id [String] the ID of the Field to delete
56
+ # @return [HTTP::Response] the response from the API
57
+ def delete(field_id)
58
+ client.http.delete("#{API_URL}/fields/#{field_id}")
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MailerLite
4
+ # This is a class for manipulating the Forms from MailerLite API.
5
+ class Forms
6
+ attr_reader :client
7
+
8
+ # Inits the `Forms` class with the specified `client`.
9
+ #
10
+ # @param client [MailerLite::Client] the `Client` instance to use
11
+ def initialize(client: MailerLite::Client.new)
12
+ @client = client
13
+ end
14
+
15
+ # Returns a list of Forms that match the specified filter criteria.
16
+ #
17
+ # @param filter [#name] the name of the Forms to include in the results
18
+ # @param limit [Integer] the maximum number of Forms to return
19
+ # @param page [Integer] the page number of the results to return
20
+ # @return [HTTP::Response] the response from the API
21
+ def list(type:, filter: {}, limit: nil, sort: nil, page: nil)
22
+ params = {}
23
+ params['filter[name]'] = filter[:name] if filter.key?(:name)
24
+ params['limit'] = limit if limit
25
+ params['sort'] = sort if sort
26
+ params['page'] = page if page
27
+ uri = URI("#{API_URL}/forms/#{type}")
28
+ uri.query = URI.encode_www_form(params.compact)
29
+ client.http.get(uri)
30
+ end
31
+
32
+ # Returns the details of the specified Forms
33
+ #
34
+ # @param form_id [String] the ID of the forms to fetch
35
+ # @return [HTTP::Response] the response from the API
36
+ def fetch(form_id)
37
+ client.http.get("#{API_URL}/forms/#{form_id}")
38
+ end
39
+
40
+ # Returns the subscribers who signed up to a specific form
41
+ #
42
+ # @param form_id [String] the ID of the forms to fetch
43
+ # @return [HTTP::Response] the response from the API
44
+ def fetch_subscribers(form_id)
45
+ client.http.get("#{API_URL}/forms/#{form_id}/subscribers")
46
+ end
47
+
48
+ # Update the specified Forms
49
+ #
50
+ # @param form_id [String] the ID of the forms to fetch
51
+ # @param name [String] the name to update
52
+ # @return [HTTP::Response] the response from the API
53
+ def update(form_id:, name:)
54
+ params = { 'name' => name }
55
+ client.http.put("#{API_URL}/forms/#{form_id}", json: params.compact)
56
+ end
57
+
58
+ # Returns the total number of Forms in the MailerLite account.
59
+ #
60
+ # @return [HTTP::Response] the response from the API
61
+ def fetch_count
62
+ client.http.get("#{API_URL}/forms/?limit=0")
63
+ end
64
+
65
+ # Deletes the specified forms.
66
+ #
67
+ # @param form_id [String] the ID of the forms to delete
68
+ # @return [HTTP::Response] the response from the API
69
+ def delete(form_id)
70
+ client.http.delete("#{API_URL}/forms/#{form_id}")
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MailerLite
4
+ # This is a class for manipulating the Groups from MailerLite API.
5
+ class Groups
6
+ attr_reader :client
7
+
8
+ # Inits the `Groups` class with the specified `client`.
9
+ #
10
+ # @param client [MailerLite::Client] the `Client` instance to use
11
+ def initialize(client: MailerLite::Client.new)
12
+ @client = client
13
+ end
14
+
15
+ # Returns a list of Groups that match the specified filter criteria.
16
+ #
17
+ # @param filter[:name] the name of the Groups to include in the results
18
+ # @param limit [Integer] the maximum number of Groups to return
19
+ # @param page [Integer] the page number of the results to return
20
+ # @return [HTTP::Response] the response from the API
21
+ def get(filter: {}, limit: nil, sort: nil, page: nil)
22
+ params = {}
23
+ params['filter[name]'] = filter[:name] if filter.key?(:name)
24
+ params['limit'] = limit if limit
25
+ params['sort'] = sort if sort
26
+ params['page'] = page if page
27
+ uri = URI("#{API_URL}/groups")
28
+ uri.query = URI.encode_www_form(params.compact)
29
+ client.http.get(uri)
30
+ end
31
+
32
+ # create a Group
33
+ #
34
+ # @param name [String] the name to update
35
+ # @return [HTTP::Response] the response from the API
36
+ def create(name:)
37
+ params = { 'name' => name }
38
+ client.http.post("#{API_URL}/groups", json: params.compact)
39
+ end
40
+
41
+ # Update the specified Group
42
+ #
43
+ # @param group_id [String] the ID of the Groups to update
44
+ # @param name [String] the name to update
45
+ # @return [HTTP::Response] the response from the API
46
+ def update(group_id:, name:)
47
+ params = { 'name' => name }
48
+ client.http.put("#{API_URL}/groups/#{group_id}", json: params.compact)
49
+ end
50
+
51
+ # Get Subscribers assigned to the specified group.
52
+ # @param group_id [Integer] The id of existing group belonging to the account
53
+ # @param filter[:status] [String] Must be one of the possible statuses: active, unsubscribed, unconfirmed, bounced or junk. Defaults to active.
54
+ # @param limit [Integer] the maximum number of subscribers to return
55
+ # @param page [Integer] the page number of the results to return
56
+ # @return [HTTP::Response] the response from the API
57
+ def get_subscribers(group_id:, filter: {}, limit: nil, page: nil, sort: nil)
58
+ params = {}
59
+ params['filter[status]'] = filter[:status] if filter.key?(:status)
60
+ params['limit'] = limit if limit
61
+ params['sort'] = sort if sort
62
+ params['page'] = page if page
63
+ client.http.get("#{API_URL}/groups/#{group_id}/subscribers", json: params.compact)
64
+ end
65
+
66
+ # Assign Subscriber to the specified group.
67
+ # @param group_id [Integer] The id of existing group belonging to the account
68
+ # @param subscriber [Integer] The id of existing subscriber belonging to the account
69
+ # @return [HTTP::Response] the response from the API
70
+ def assign_subscriber(group_id:, subscriber:)
71
+ client.http.post("#{API_URL}/subscribers/#{subscriber}/groups/#{group_id}")
72
+ end
73
+
74
+ # Unassign Subscriber to the specified group.
75
+ # @param group_id [Integer] The id of existing group belonging to the account
76
+ # @param subscriber [Integer] The id of existing subscriber belonging to the account
77
+ # @return [HTTP::Response] the response from the API
78
+ def unassign_subscriber(group_id:, subscriber:)
79
+ client.http.delete("#{API_URL}/subscribers/#{subscriber}/groups/#{group_id}")
80
+ end
81
+
82
+ # Deletes the specified Groups.
83
+ #
84
+ # @param group_id [String] the ID of the Groups to delete
85
+ # @return [HTTP::Response] the response from the API
86
+ def delete(group_id)
87
+ client.http.delete("#{API_URL}/groups/#{group_id}")
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MailerLite
4
+ # This is a class for manipulating the Segments from MailerLite API.
5
+ class Segments
6
+ attr_reader :client
7
+
8
+ # Inits the `Segments` class with the specified `client`.
9
+ #
10
+ # @param client [MailerLite::Client] the `Client` instance to use
11
+ def initialize(client: MailerLite::Client.new)
12
+ @client = client
13
+ end
14
+
15
+ # Returns a list of Segments that match the specified filter criteria.
16
+ #
17
+ # @param limit [Integer] the maximum number of Segments to return
18
+ # @param page [Integer] the page number of the results to return
19
+ # @return [HTTP::Response] the response from the API
20
+ def list(limit: nil, page: nil)
21
+ params = {}
22
+ params['limit'] = limit if limit
23
+ params['page'] = page if page
24
+
25
+ client.http.get("#{API_URL}/segments", json: params.compact)
26
+ end
27
+
28
+ # Update the specified Segment
29
+ #
30
+ # @param segment_id [String] the ID of the Segments to update
31
+ # @param name [String] the name to update
32
+ # @return [HTTP::Response] the response from the API
33
+ def update(segment_id:, name:)
34
+ params = { 'name' => name }
35
+ client.http.put("#{API_URL}/segments/#{segment_id}", json: params.compact)
36
+ end
37
+
38
+ # Get Subscribers assigned to the specified Segment.
39
+ # @param segment_id [Integer] The id of existing Segment belonging to the account
40
+ # @param filter[status] [String] Must be one of the possible statuses: active, unsubscribed, unconfirmed, bounced or junk. Defaults to active.
41
+ # @param limit [Integer] the maximum number of subscribers to return
42
+ # @param after [Integer] The last subscriber id, available in meta.last
43
+ # @return [HTTP::Response] the response from the API
44
+ def get_subscribers(segment_id:, filter: {}, limit: nil, after: nil)
45
+ params = {}
46
+ params['filter[status]'] = filter[:status] if filter.key?(:status)
47
+ params['limit'] = limit if limit
48
+ params['after'] = after if after
49
+ uri = URI("#{API_URL}/segments/#{segment_id}/subscribers")
50
+ uri.query = URI.encode_www_form(params.compact)
51
+ client.http.get(uri)
52
+ end
53
+
54
+ # Deletes the specified Segments.
55
+ #
56
+ # @param segment_id [String] the ID of the Segments to delete
57
+ # @return [HTTP::Response] the response from the API
58
+ def delete(segment_id)
59
+ client.http.delete("#{API_URL}/segments/#{segment_id}")
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MailerLite
4
+ # This is a class for manipulating the subscribers from MailerLite API.
5
+ class Subscribers
6
+ attr_reader :client
7
+
8
+ # Inits the `Subscribers` class with the specified `client`.
9
+ #
10
+ # @param client [MailerLite::Client] the `Client` instance to use
11
+ def initialize(client: MailerLite::Client.new)
12
+ @client = client
13
+ end
14
+
15
+ # Returns a list of subscribers that match the specified filter criteria.
16
+ #
17
+ # @param filter[:status] [Array] the status of the subscribers to include in the results
18
+ # @param limit [Integer] the maximum number of subscribers to return
19
+ # @param page [Integer] the page number of the results to return
20
+ # @return [HTTP::Response] the response from the API
21
+ def fetch(filter:, limit: nil, page: nil)
22
+ params = { 'filter[status]' => filter[:status] }
23
+
24
+ params['limit'] = limit if limit
25
+ params['page'] = page if page
26
+ uri = URI("#{API_URL}/subscribers")
27
+ uri.query = URI.encode_www_form(params.compact)
28
+ client.http.get(uri)
29
+ end
30
+
31
+ # Creates a new subscriber with the specified details.
32
+ #
33
+ # @param email [String] the email address of the new subscriber
34
+ # @param fields [Hash] a hash of custom fields and their values for the subscriber
35
+ # @param groups [Array] an array of group IDs to add the subscriber to
36
+ # @param status [String] the status of the new subscriber
37
+ # @param subscribed_at [DateTime] the date and time when the subscriber was added
38
+ # @param ip_address [String] the IP address of the subscriber
39
+ # @param opted_in_at [DateTime] the date and time when the subscriber confirmed their subscription
40
+ # @param optin_ip [String] the IP address of the subscriber when they confirmed their subscription
41
+ # @param unsubscribed_at [DateTime] the date and time when the subscriber was unsubscribed
42
+ # @return [HTTP::Response] the response from the API
43
+ def create(email:, fields: nil, groups: nil, status: nil, subscribed_at: nil, ip_address: nil, opted_in_at: nil, optin_ip: nil, unsubscribed_at: nil)
44
+ params = { 'email' => email }
45
+
46
+ params['fields'] = fields if fields
47
+ params['groups'] = groups if groups
48
+ params['status'] = status if status
49
+ params['subscribed_at'] = subscribed_at if subscribed_at
50
+ params['ip_address'] = ip_address if ip_address
51
+ params['opted_in_at'] = opted_in_at if opted_in_at
52
+ params['optin_ip'] = optin_ip if optin_ip
53
+ params['unsubscribed_at'] = unsubscribed_at if unsubscribed_at
54
+
55
+ client.http.post("#{API_URL}/subscribers", json: params.compact)
56
+ end
57
+
58
+ # Creates a new subscriber with the specified details.
59
+ #
60
+ # @param email [String] the email address of the new subscriber
61
+ # @param fields [Hash] a hash of custom fields and their values for the subscriber
62
+ # @param groups [Array] an array of group IDs to add the subscriber to
63
+ # @param status [String] the status of the new subscriber
64
+ # @param subscribed_at [DateTime] the date and time when the subscriber was added
65
+ # @param ip_address [String] the IP address of the subscriber
66
+ # @param opted_in_at [DateTime] the date and time when the subscriber confirmed their subscription
67
+ # @param optin_ip [String] the IP address of the subscriber when they confirmed their subscription
68
+ # @param unsubscribed_at [DateTime] the date and time when the subscriber was unsubscribed
69
+ # @return [HTTP::Response] the response from the API
70
+ def update(email:, fields: nil, groups: nil, status: nil, subscribed_at: nil, ip_address: nil, opted_in_at: nil, optin_ip: nil, unsubscribed_at: nil)
71
+ params = { 'email' => email }
72
+
73
+ params['fields'] = fields if fields
74
+ params['groups'] = groups if groups
75
+ params['status'] = status if status
76
+ params['subscribed_at'] = subscribed_at if subscribed_at
77
+ params['ip_address'] = ip_address if ip_address
78
+ params['opted_in_at'] = opted_in_at if opted_in_at
79
+ params['optin_ip'] = optin_ip if optin_ip
80
+ params['unsubscribed_at'] = unsubscribed_at if unsubscribed_at
81
+
82
+ client.http.post("#{API_URL}/subscribers", json: params.compact)
83
+ end
84
+
85
+ # Returns the details of the specified subscribers
86
+ #
87
+ # @param subscriber_id [String] the ID of the subscriber to get
88
+ # @return [HTTP::Response] the response from the API
89
+ def get(subscriber_id)
90
+ client.http.get("#{API_URL}/subscribers/#{subscriber_id}")
91
+ end
92
+
93
+ # Returns the details of the specified subscribers
94
+ #
95
+ # @param import_id [String] the ID of the import to fetch report
96
+ # @return [HTTP::Response] the response from the API
97
+ def get_single_import(import_id)
98
+ client.http.get("#{API_URL}/subscribers/import/#{import_id}")
99
+ end
100
+
101
+ # Returns the total number of subscribers in the MailerLite account.
102
+ #
103
+ # @return [HTTP::Response] the response from the API
104
+ def fetch_count
105
+ client.http.get("#{API_URL}/subscribers/?limit=0")
106
+ end
107
+
108
+ # Deletes the specified subscriber.
109
+ #
110
+ # @param subscriber_id [String] the ID of the subscriber to delete
111
+ # @return [HTTP::Response] the response from the API
112
+ def delete(subscriber_id)
113
+ client.http.delete("#{API_URL}/subscribers/#{subscriber_id}")
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MailerLite
4
+ # This is a class for manipulating the Timezones from MailerLite API.
5
+ class Timezones
6
+ attr_reader :client
7
+
8
+ # Inits the `Timezones` class with the specified `client`.
9
+ #
10
+ # @param client [MailerLite::Client] the `Client` instance to use
11
+ def initialize(client: MailerLite::Client.new)
12
+ @client = client
13
+ end
14
+
15
+ # Returns a list of Timezones
16
+ #
17
+ # @return [HTTP::Response] the response from the API
18
+ def list
19
+ client.http.get("#{API_URL}/timezones")
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MailerLite
4
+ VERSION = '1.0.2'
5
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MailerLite
4
+ # This is a class for manipulating the Webhooks from MailerLite API.
5
+ class Webhooks
6
+ attr_reader :client
7
+
8
+ # Inits the `Webhooks` class with the specified `client`.
9
+ #
10
+ # @param client [MailerLite::Client] the `Client` instance to use
11
+ def initialize(client: MailerLite::Client.new)
12
+ @client = client
13
+ end
14
+
15
+ # Returns a list of Webhooks
16
+ #
17
+ # @return [HTTP::Response] the response from the API
18
+ def list
19
+ client.http.get("#{API_URL}/webhooks")
20
+ end
21
+
22
+ # Returns the details of the specified webhooks
23
+ #
24
+ # @param webhook_id [String] the ID of the webhooks to fetch
25
+ # @return [HTTP::Response] the response from the API
26
+ def get(webhook_id)
27
+ client.http.get("#{API_URL}/webhooks/#{webhook_id}")
28
+ end
29
+
30
+ # Create a Webhook
31
+ #
32
+ # @param name [String] the name of the Webhook to create
33
+ # @param events [Array] the events, must one from the list of supported events
34
+ # @param url [String] the events, can be text, number or date
35
+ # @return [HTTP::Response] the response from the API
36
+ def create(events:, url:, name: nil)
37
+ params = { 'events' => events, 'url' => url }
38
+ params['name'] = name if name
39
+ client.http.post("#{API_URL}/webhooks", json: params.compact)
40
+ end
41
+
42
+ # Update the specified Webhook
43
+ #
44
+ # @param webhook_id [String] the ID of the Webhook to update
45
+ # @param name [String] the name to update
46
+ # @param events [Array] the events to update
47
+ # @param url [String] the url to update
48
+ # @param enabled [Boolean] the enabled to update
49
+ # @return [HTTP::Response] the response from the API
50
+ def update(webhook_id:, events: nil, name: nil, url: nil, enabled: nil)
51
+ params = {}
52
+ params['events'] = events if events
53
+ params['name'] = name if name
54
+ params['url'] = url if url
55
+ params['enabled'] = enabled if enabled
56
+ client.http.put("#{API_URL}/webhooks/#{webhook_id}", json: params.compact)
57
+ end
58
+
59
+ # Deletes the specified Webhook.
60
+ #
61
+ # @param webhook_id [String] the ID of the Webhook to delete
62
+ # @return [HTTP::Response] the response from the API
63
+ def delete(webhook_id)
64
+ client.http.delete("#{API_URL}/webhooks/#{webhook_id}")
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mailerlite'
data/lib/mailerlite.rb ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'mailerlite/client'
4
+ require_relative 'mailerlite/subscribers/subscribers'
5
+ require_relative 'mailerlite/campaigns/campaigns'
6
+ require_relative 'mailerlite/forms/forms'
7
+ require_relative 'mailerlite/groups/groups'
8
+ require_relative 'mailerlite/segments/segments'
9
+ require_relative 'mailerlite/fields/fields'
10
+ require_relative 'mailerlite/automations/automations'
11
+ require_relative 'mailerlite/webhooks/webhooks'
12
+ require_relative 'mailerlite/batch/batch'
13
+ require_relative 'mailerlite/timezones/timezones'
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'mailerlite/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'mailerlite-ruby'
9
+ spec.version = MailerLite::VERSION
10
+ spec.authors = ['Nikola Milojević', 'Ahsan Gondal']
11
+ spec.email = ['info@mailerlite.com']
12
+
13
+ spec.summary = "MailerLite's official Ruby SDK"
14
+ spec.description = "MailerLite's official Ruby SDK. Interacts with all endpoints at MailerLite API."
15
+ spec.homepage = 'https://www.MailerLite.com'
16
+ spec.license = 'MIT'
17
+ spec.required_ruby_version = '>= 2.5.0'
18
+
19
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
20
+
21
+ spec.metadata['homepage_uri'] = spec.homepage
22
+ spec.metadata['source_code_uri'] = 'https://github.com/mailerlite/mailerlite-ruby'
23
+ spec.metadata['changelog_uri'] = 'https://github.com/mailerlite/mailerlite-ruby/blob/main/CHANGELOG.md'
24
+ spec.metadata['rubygems_mfa_required'] = 'true'
25
+
26
+ spec.files = `git ls-files -z`.split("\x0")
27
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
28
+ spec.require_paths = ['lib']
29
+
30
+ spec.add_development_dependency 'bundler', '~> 2.4.7'
31
+ spec.add_development_dependency 'rake', '~> 13.0'
32
+ spec.add_development_dependency 'rubocop', '~> 1.7'
33
+ spec.add_dependency 'dotenv', '~> 2.7'
34
+ spec.add_dependency 'http', '~> 5.0'
35
+ spec.add_dependency 'json', '~> 2.5'
36
+ spec.add_dependency 'uri', '~> 0.12.0'
37
+ spec.add_development_dependency 'rspec'
38
+ spec.add_development_dependency 'simplecov'
39
+ spec.add_development_dependency 'vcr'
40
+ spec.add_development_dependency 'webmock'
41
+ spec.add_development_dependency 'yard'
42
+ end
data/renovate.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ]
5
+ }
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Import the RSpec and VCR gems
4
+ require 'spec_helper'
5
+ require 'vcr'
6
+ require 'json'
7
+
8
+ # require "webmock/rspec"
9
+ # Import the `Automations` class
10
+
11
+ # Configure VCR to save and replay HTTP requests
12
+ VCR.configure do |config|
13
+ config.cassette_library_dir = './fixtures'
14
+ config.hook_into :webmock
15
+ config.filter_sensitive_data('<AUTH>') do |interaction|
16
+ interaction.request.headers['Authorization'][0]
17
+ end
18
+ end
19
+
20
+ # Set up the test for the `Automations` class
21
+ RSpec.describe MailerLite::Automations do
22
+ let(:client) { MailerLite::Client.new }
23
+ let(:automations) { described_class.new(client: client) }
24
+
25
+ describe '#get' do
26
+ # Use VCR to record and replay the HTTP request
27
+ it 'gets all automation' do
28
+ VCR.use_cassette('automations/get') do
29
+ response = automations.get
30
+ body = JSON.parse(response.body)
31
+ expect(response.status).to eq 200
32
+ expect(body['data']).to be_an Array
33
+ end
34
+ end
35
+ end
36
+
37
+ describe '#fetch' do
38
+ # Use VCR to record and replay the HTTP request
39
+ it 'fetchs all automation' do
40
+ VCR.use_cassette('automations/fetch') do
41
+ response = automations.fetch(75_040_845_299_975_641)
42
+ body = JSON.parse(response.body)
43
+ expect(response.status).to eq 200
44
+ expect(Integer(body['data']['id'])).to be_an Integer
45
+ end
46
+ end
47
+ end
48
+
49
+ describe '#get_subscriber_activity' do
50
+ # Use VCR to record and replay the HTTP request
51
+ it 'get_subscriber_activitys all automation' do
52
+ VCR.use_cassette('automations/get_subscriber_activity') do
53
+ response = automations.get_subscriber_activity(
54
+ automation_id: '75040845299975641',
55
+ filter: { status: 'completed' }
56
+ )
57
+ # body = JSON.parse(response.body)
58
+ expect(response.status).to eq 200
59
+ # expect(Integer(body['data']['id'])).to be_an Integer
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Import the RSpec and VCR gems
4
+ require 'spec_helper'
5
+ require 'vcr'
6
+ require 'json'
7
+
8
+ # require "webmock/rspec"
9
+ # Import the `Batch` class
10
+
11
+ # Configure VCR to save and replay HTTP requests
12
+ VCR.configure do |config|
13
+ config.cassette_library_dir = './fixtures'
14
+ config.hook_into :webmock
15
+ config.filter_sensitive_data('<AUTH>') do |interaction|
16
+ interaction.request.headers['Authorization'][0]
17
+ end
18
+ end
19
+
20
+ # Set up the test for the `Batch` class
21
+ RSpec.describe MailerLite::Batch do
22
+ let(:client) { MailerLite::Client.new }
23
+ let(:batch) { described_class.new(client: client) }
24
+
25
+ describe '#request' do
26
+ # Use VCR to record and replay the HTTP request
27
+ it 'executes a batch request' do
28
+ VCR.use_cassette('batch/request') do
29
+ response = batch.request(
30
+ requests: [
31
+ { method: 'GET', path: 'api/subscribers/list' },
32
+ { method: 'GET', path: 'api/campaigns/list' }
33
+ ]
34
+ )
35
+ body = JSON.parse(response.body)
36
+ expect(response.status).to eq 200
37
+ expect(body['responses']).to be_an Array
38
+ end
39
+ end
40
+ end
41
+ end