adsmedia 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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/adsmedia.rb +148 -0
  3. metadata +69 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fcebac9d67b5a87413c929c447db8e7c648858aad6a7d8d7363b8edcbf436f7d
4
+ data.tar.gz: 34302ccb5e38d1b79bf90c46f7b1e67a64c50cb3481a5956aa1c1996ca17ecc5
5
+ SHA512:
6
+ metadata.gz: a7a3b40279322b4d734421e3876b8014189c073802338f95cd66460ecb026df7978e8bd1c31f023012ad29e132ae6d50a0b6cb91df00c1fc6b32acaaedc70f21
7
+ data.tar.gz: dfe1bd226f91447bb00357696fde27b6f2b2931f8ed4caf6bc29561e435b608014093a40502724a9ebba0721feb84b589d721aebf92975250edaf1bfe4b00395
data/lib/adsmedia.rb ADDED
@@ -0,0 +1,148 @@
1
+ require 'faraday'
2
+ require 'json'
3
+
4
+ module ADSMedia
5
+ class Client
6
+ BASE_URL = 'https://api.adsmedia.live/v1'.freeze
7
+
8
+ def initialize(api_key)
9
+ @api_key = api_key
10
+ @conn = Faraday.new(url: BASE_URL) do |f|
11
+ f.request :json
12
+ f.response :json
13
+ f.adapter Faraday.default_adapter
14
+ end
15
+ end
16
+
17
+ # Test connection
18
+ def ping
19
+ get('/ping')
20
+ end
21
+
22
+ # Send single email
23
+ def send_email(to:, subject:, html:, to_name: nil, from_name: nil, text: nil, reply_to: nil)
24
+ payload = { to: to, subject: subject, html: html }
25
+ payload[:to_name] = to_name if to_name
26
+ payload[:from_name] = from_name if from_name
27
+ payload[:text] = text if text
28
+ payload[:reply_to] = reply_to if reply_to
29
+
30
+ post('/send', payload)
31
+ end
32
+
33
+ # Send batch emails
34
+ def send_batch(recipients:, subject:, html:, text: nil, preheader: nil, from_name: nil)
35
+ payload = { recipients: recipients, subject: subject, html: html }
36
+ payload[:text] = text if text
37
+ payload[:preheader] = preheader if preheader
38
+ payload[:from_name] = from_name if from_name
39
+
40
+ post('/send/batch', payload)
41
+ end
42
+
43
+ # Check email status
44
+ def get_status(message_id)
45
+ get('/send/status', message_id: message_id)
46
+ end
47
+
48
+ # List campaigns
49
+ def get_campaigns(limit: 50, offset: 0)
50
+ get('/campaigns', limit: limit, offset: offset)
51
+ end
52
+
53
+ # Get campaign
54
+ def get_campaign(id)
55
+ get('/campaigns/get', id: id)
56
+ end
57
+
58
+ # Create campaign
59
+ def create_campaign(name:, subject:, html:, text: nil, preheader: nil, type: 1)
60
+ payload = { name: name, subject: subject, html: html, type: type }
61
+ payload[:text] = text if text
62
+ payload[:preheader] = preheader if preheader
63
+
64
+ post('/campaigns/create', payload)
65
+ end
66
+
67
+ # List contact lists
68
+ def get_lists
69
+ get('/lists')
70
+ end
71
+
72
+ # Create list
73
+ def create_list(name:, type: 1)
74
+ post('/lists/create', name: name, type: type)
75
+ end
76
+
77
+ # Add contacts to list
78
+ def add_contacts(list_id:, contacts:)
79
+ post("/lists/contacts/add?id=#{list_id}", contacts: contacts)
80
+ end
81
+
82
+ # List schedules
83
+ def get_schedules(status: 'queue')
84
+ get('/schedules', status: status)
85
+ end
86
+
87
+ # Create schedule
88
+ def create_schedule(campaign_id:, list_id:, server_id:, sender_name: nil, schedule: nil)
89
+ payload = { campaign_id: campaign_id, list_id: list_id, server_id: server_id }
90
+ payload[:sender_name] = sender_name if sender_name
91
+ payload[:schedule] = schedule if schedule
92
+
93
+ post('/schedules/create', payload)
94
+ end
95
+
96
+ # List servers
97
+ def get_servers
98
+ get('/servers')
99
+ end
100
+
101
+ # Verify domain
102
+ def verify_domain(server_id)
103
+ get('/domains/verify', server_id: server_id)
104
+ end
105
+
106
+ # Check suppression
107
+ def check_suppression(email)
108
+ get('/suppressions/check', email: email)
109
+ end
110
+
111
+ # Get account info
112
+ def get_account
113
+ get('/account')
114
+ end
115
+
116
+ # Get usage
117
+ def get_usage
118
+ get('/account/usage')
119
+ end
120
+
121
+ private
122
+
123
+ def get(endpoint, params = {})
124
+ response = @conn.get(endpoint) do |req|
125
+ req.headers['Authorization'] = "Bearer #{@api_key}"
126
+ req.params = params unless params.empty?
127
+ end
128
+ handle_response(response)
129
+ end
130
+
131
+ def post(endpoint, payload)
132
+ response = @conn.post(endpoint) do |req|
133
+ req.headers['Authorization'] = "Bearer #{@api_key}"
134
+ req.body = payload
135
+ end
136
+ handle_response(response)
137
+ end
138
+
139
+ def handle_response(response)
140
+ data = response.body
141
+ raise ADSMediaError, data['error']['message'] || 'API Error' unless data['success']
142
+ data['data']
143
+ end
144
+ end
145
+
146
+ class ADSMediaError < StandardError; end
147
+ end
148
+
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: adsmedia
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - ADSMedia
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: faraday
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: json
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ description: Send transactional and marketing emails via ADSMedia API
41
+ email:
42
+ - dev@adsmedia.ai
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/adsmedia.rb
48
+ homepage: https://github.com/ADSMedia-ai/ADSMedia
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 2.7.0
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubygems_version: 3.6.9
67
+ specification_version: 4
68
+ summary: Official Ruby SDK for ADSMedia Email API
69
+ test_files: []