mailerlite-ruby 1.0.2

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.
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