sendgrid-ruby 4.0.8 → 6.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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +21 -0
- data/.env_sample +1 -0
- data/.github/PULL_REQUEST_TEMPLATE +26 -0
- data/.gitignore +1 -0
- data/.travis.yml +11 -2
- data/CHANGELOG.md +119 -3
- data/CODE_OF_CONDUCT.md +41 -0
- data/CONTRIBUTING.md +34 -30
- data/Gemfile +4 -1
- data/LICENSE.txt +1 -1
- data/README.md +53 -24
- data/Rakefile +7 -2
- data/TROUBLESHOOTING.md +41 -15
- data/UPGRADE.md +5 -0
- data/USAGE.md +1130 -1129
- data/USE_CASES.md +280 -16
- data/config.ru +4 -0
- data/docker/Dockerfile +12 -0
- data/docker/README.md +30 -0
- data/examples/helpers/mail/example.rb +62 -45
- data/examples/helpers/settings/example.rb +23 -0
- data/examples/helpers/stats/example.rb +42 -0
- data/examples/ips/ips.rb +13 -0
- data/examples/mail/mail.rb +2 -2
- data/examples/scopes/scopes.rb +49 -3
- data/examples/{whitelabel/whitelabel.rb → senderauthentication/senderauthentication.rb} +27 -27
- data/examples/suppression/suppression.rb +10 -10
- data/gemfiles/Sinatra_1.gemfile +6 -0
- data/gemfiles/Sinatra_2.gemfile +6 -0
- data/lib/sendgrid-ruby.rb +27 -1
- data/lib/sendgrid/client.rb +12 -9
- data/lib/sendgrid/helpers/inbound/README.md +98 -0
- data/lib/sendgrid/helpers/inbound/app.rb +32 -0
- data/lib/sendgrid/helpers/inbound/config.yml +26 -0
- data/lib/sendgrid/helpers/inbound/public/index.html +10 -0
- data/lib/sendgrid/helpers/inbound/sample_data/default_data.txt +58 -0
- data/lib/sendgrid/helpers/inbound/sample_data/raw_data.txt +57 -0
- data/lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt +298 -0
- data/lib/sendgrid/helpers/inbound/send.rb +26 -0
- data/lib/sendgrid/helpers/ip_management/ip_management.rb +17 -0
- data/lib/sendgrid/helpers/mail/README.md +1 -1
- data/lib/sendgrid/helpers/mail/asm.rb +33 -0
- data/lib/sendgrid/helpers/mail/attachment.rb +86 -0
- data/lib/sendgrid/helpers/mail/bcc_settings.rb +33 -0
- data/lib/sendgrid/helpers/mail/bypass_list_management.rb +43 -0
- data/lib/sendgrid/helpers/mail/category.rb +20 -0
- data/lib/sendgrid/helpers/mail/click_tracking.rb +33 -0
- data/lib/sendgrid/helpers/mail/content.rb +20 -0
- data/lib/sendgrid/helpers/mail/custom_arg.rb +24 -0
- data/lib/sendgrid/helpers/mail/email.rb +29 -0
- data/lib/sendgrid/helpers/mail/footer.rb +43 -0
- data/lib/sendgrid/helpers/mail/ganalytics.rb +74 -0
- data/lib/sendgrid/helpers/mail/header.rb +24 -0
- data/lib/sendgrid/helpers/mail/mail.rb +36 -895
- data/lib/sendgrid/helpers/mail/mail_settings.rb +63 -0
- data/lib/sendgrid/helpers/mail/open_tracking.rb +33 -0
- data/lib/sendgrid/helpers/mail/personalization.rb +82 -0
- data/lib/sendgrid/helpers/mail/section.rb +24 -0
- data/lib/sendgrid/helpers/mail/spam_check.rb +43 -0
- data/lib/sendgrid/helpers/mail/subscription_tracking.rb +53 -0
- data/lib/sendgrid/helpers/mail/substitution.rb +24 -0
- data/lib/sendgrid/helpers/mail/tracking_settings.rb +53 -0
- data/lib/sendgrid/helpers/permissions/scope.rb +28 -0
- data/lib/sendgrid/helpers/permissions/scopes.yml +309 -0
- data/lib/sendgrid/helpers/settings/README.md +14 -0
- data/lib/sendgrid/helpers/settings/mail_settings_dto.rb +13 -0
- data/lib/sendgrid/helpers/settings/partner_settings_dto.rb +13 -0
- data/lib/sendgrid/helpers/settings/settings.rb +28 -0
- data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +24 -0
- data/lib/sendgrid/helpers/settings/user_settings_dto.rb +13 -0
- data/lib/sendgrid/helpers/stats/email_stats.rb +46 -0
- data/lib/sendgrid/helpers/stats/metrics.rb +35 -0
- data/lib/sendgrid/helpers/stats/stats_response.rb +31 -0
- data/lib/sendgrid/version.rb +2 -2
- data/mail_helper_v3.md +390 -0
- data/sendgrid-ruby.gemspec +12 -5
- data/spec/sendgrid/helpers/ip_management/ip_management_spec.rb +12 -0
- data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +32 -0
- data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +24 -0
- data/spec/sendgrid/helpers/settings/settings_spec.rb +25 -0
- data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +27 -0
- data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +24 -0
- data/spec/sendgrid/helpers/stats/email_stats_spec.rb +112 -0
- data/spec/sendgrid/helpers/stats/metrics_spec.rb +46 -0
- data/spec/sendgrid/helpers/stats/stats_response_spec.rb +76 -0
- data/spec/spec_helper.rb +10 -0
- data/test/sendgrid/helpers/mail/test_attachment.rb +35 -0
- data/test/sendgrid/helpers/mail/test_category.rb +27 -0
- data/test/sendgrid/helpers/mail/test_email.rb +34 -0
- data/test/sendgrid/helpers/mail/test_mail.rb +198 -59
- data/test/sendgrid/helpers/mail/test_personalizations.rb +161 -0
- data/test/sendgrid/permissions/test_scopes.rb +38 -0
- data/test/sendgrid/test_sendgrid-ruby.rb +90 -9
- metadata +170 -10
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# A module for sending test Twilio SendGrid Inbound Parse messages
|
|
2
|
+
# Usage: ruby ./send.rb [path to file containing test data]
|
|
3
|
+
require 'ruby_http_client'
|
|
4
|
+
require 'yaml'
|
|
5
|
+
require 'optparse'
|
|
6
|
+
|
|
7
|
+
OPTS = {}
|
|
8
|
+
opt = OptionParser.new
|
|
9
|
+
opt.on('--host=HOST') {|v| OPTS[:host] = v}
|
|
10
|
+
argv = opt.parse!(ARGV)
|
|
11
|
+
config = YAML.load_file(File.dirname(__FILE__) + '/config.yml')
|
|
12
|
+
host = OPTS[:host] || config['host']
|
|
13
|
+
client = SendGrid::Client.new(host: host)
|
|
14
|
+
File.open(argv[0]) do |file|
|
|
15
|
+
data = file.read
|
|
16
|
+
headers = {
|
|
17
|
+
'User-Agent' => 'Twilio-SendGrid-Test',
|
|
18
|
+
'Content-Type' => 'multipart/form-data; boundary=xYzZY'
|
|
19
|
+
}
|
|
20
|
+
response = client.post(
|
|
21
|
+
request_body: data, request_headers: headers
|
|
22
|
+
)
|
|
23
|
+
puts response.status_code
|
|
24
|
+
puts response.body
|
|
25
|
+
puts response.headers
|
|
26
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class IpManagement
|
|
5
|
+
attr_accessor :sendgrid_client
|
|
6
|
+
|
|
7
|
+
def initialize(sendgrid_client:)
|
|
8
|
+
@sendgrid_client = sendgrid_client
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def unassigned
|
|
12
|
+
response = @sendgrid_client.ips.get
|
|
13
|
+
ips = JSON.parse(response.body)
|
|
14
|
+
ips.select {|ip| ip.subusers.empty?}
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class ASM
|
|
5
|
+
def initialize(group_id: nil, groups_to_display: nil)
|
|
6
|
+
@group_id = group_id
|
|
7
|
+
@groups_to_display = groups_to_display
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def group_id=(group_id)
|
|
11
|
+
@group_id = group_id
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def group_id
|
|
15
|
+
@group_id
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def groups_to_display=(groups_to_display)
|
|
19
|
+
@groups_to_display = groups_to_display
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def groups_to_display
|
|
23
|
+
@groups_to_display
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_json(*)
|
|
27
|
+
{
|
|
28
|
+
'group_id' => self.group_id,
|
|
29
|
+
'groups_to_display' => self.groups_to_display
|
|
30
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
require 'base64'
|
|
3
|
+
|
|
4
|
+
module SendGrid
|
|
5
|
+
class Attachment
|
|
6
|
+
def initialize
|
|
7
|
+
@content = nil
|
|
8
|
+
@type = nil
|
|
9
|
+
@filename = nil
|
|
10
|
+
@disposition = nil
|
|
11
|
+
@content_id = nil
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def content=(content)
|
|
15
|
+
@encoded_content = nil
|
|
16
|
+
@content = content
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def content
|
|
20
|
+
return @encoded_content if @encoded_content
|
|
21
|
+
|
|
22
|
+
if @content.respond_to?(:read)
|
|
23
|
+
@encoded_content = encode @content
|
|
24
|
+
else
|
|
25
|
+
@encoded_content = @content
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def type=(type)
|
|
30
|
+
@type = type
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def type
|
|
34
|
+
@type
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def filename=(filename)
|
|
38
|
+
@filename = filename
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def filename
|
|
42
|
+
@filename
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def disposition=(disposition)
|
|
46
|
+
@disposition = disposition
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def disposition
|
|
50
|
+
@disposition
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def content_id=(content_id)
|
|
54
|
+
@content_id = content_id
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def content_id
|
|
58
|
+
@content_id
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def to_json(*)
|
|
62
|
+
{
|
|
63
|
+
'content' => self.content,
|
|
64
|
+
'type' => self.type,
|
|
65
|
+
'filename' => self.filename,
|
|
66
|
+
'disposition' => self.disposition,
|
|
67
|
+
'content_id' => self.content_id
|
|
68
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
def encode(io)
|
|
74
|
+
str = io.read
|
|
75
|
+
# Since the API expects UTF-8, we need to ensure that we're
|
|
76
|
+
# converting other formats to it so (byte-wise) Base64 encoding
|
|
77
|
+
# will come through properly on the other side.
|
|
78
|
+
#
|
|
79
|
+
# Not much to be done to try to handle encoding for files opened
|
|
80
|
+
# in binary mode, but at least we can faithfully convey the
|
|
81
|
+
# bytes.
|
|
82
|
+
str = str.encode('UTF-8') unless io.respond_to?(:binmode?) && io.binmode?
|
|
83
|
+
Base64.encode64 str
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class BccSettings
|
|
5
|
+
def initialize(enable: nil, email: nil)
|
|
6
|
+
@enable = enable
|
|
7
|
+
@email = email
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def enable=(enable)
|
|
11
|
+
@enable = enable
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def enable
|
|
15
|
+
@enable
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def email=(email)
|
|
19
|
+
@email = email
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def email
|
|
23
|
+
@email
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_json(*)
|
|
27
|
+
{
|
|
28
|
+
'enable' => self.enable,
|
|
29
|
+
'email' => self.email
|
|
30
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class BypassListManagement
|
|
5
|
+
def initialize(enable: nil)
|
|
6
|
+
@enable = enable
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def enable=(enable)
|
|
10
|
+
@enable = enable
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def enable
|
|
14
|
+
@enable
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def to_json(*)
|
|
18
|
+
{
|
|
19
|
+
'enable' => self.enable
|
|
20
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class SandBoxMode
|
|
25
|
+
def initialize(enable: nil)
|
|
26
|
+
@enable = enable
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def enable=(enable)
|
|
30
|
+
@enable = enable
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def enable
|
|
34
|
+
@enable
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def to_json(*)
|
|
38
|
+
{
|
|
39
|
+
'enable' => self.enable
|
|
40
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class Category
|
|
5
|
+
attr_accessor :name
|
|
6
|
+
|
|
7
|
+
def initialize(name: nil)
|
|
8
|
+
@name = name
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def to_json(*)
|
|
12
|
+
{
|
|
13
|
+
'category' => name
|
|
14
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
alias :category :name
|
|
18
|
+
alias :category= :name=
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class ClickTracking
|
|
5
|
+
def initialize(enable: nil, enable_text: nil)
|
|
6
|
+
@enable = enable
|
|
7
|
+
@enable_text = enable_text
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def enable=(enable)
|
|
11
|
+
@enable = enable
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def enable
|
|
15
|
+
@enable
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def enable_text=(enable_text)
|
|
19
|
+
@enable_text = enable_text
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def enable_text
|
|
23
|
+
@enable_text
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_json(*)
|
|
27
|
+
{
|
|
28
|
+
'enable' => self.enable,
|
|
29
|
+
'enable_text' => self.enable_text
|
|
30
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class Content
|
|
5
|
+
|
|
6
|
+
attr_accessor :type, :value
|
|
7
|
+
|
|
8
|
+
def initialize(type: nil, value: nil)
|
|
9
|
+
@type = type
|
|
10
|
+
@value = value
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def to_json(*)
|
|
14
|
+
{
|
|
15
|
+
'type' => self.type,
|
|
16
|
+
'value' => self.value
|
|
17
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class CustomArg
|
|
5
|
+
def initialize(key: nil, value: nil)
|
|
6
|
+
@custom_arg = {}
|
|
7
|
+
(key.nil? || value.nil?) ? @custom_arg = nil : @custom_arg[key.to_s] = value.to_s
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def custom_arg=(custom_arg)
|
|
11
|
+
@custom_arg = custom_arg
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def custom_arg
|
|
15
|
+
@custom_arg
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def to_json(*)
|
|
19
|
+
{
|
|
20
|
+
'custom_arg' => self.custom_arg
|
|
21
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class Email
|
|
5
|
+
|
|
6
|
+
attr_accessor :email, :name
|
|
7
|
+
|
|
8
|
+
def initialize(email: nil, name: nil)
|
|
9
|
+
if name
|
|
10
|
+
@email = email
|
|
11
|
+
@name = name
|
|
12
|
+
else
|
|
13
|
+
@email, @name = split_email(email)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def split_email(email)
|
|
18
|
+
split = /(?:(?<address>.+)\s)?<?(?<email>.+@[^>]+)>?/.match(email)
|
|
19
|
+
return split[:email], split[:address]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_json(*)
|
|
23
|
+
{
|
|
24
|
+
'email' => self.email,
|
|
25
|
+
'name' => self.name
|
|
26
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class Footer
|
|
5
|
+
def initialize(enable: nil, text: nil, html: nil)
|
|
6
|
+
@enable = enable
|
|
7
|
+
@text = text
|
|
8
|
+
@html = html
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def enable=(enable)
|
|
12
|
+
@enable = enable
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def enable
|
|
16
|
+
@enable
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def text=(text)
|
|
20
|
+
@text = text
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def text
|
|
24
|
+
@text
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def html=(html)
|
|
28
|
+
@html = html
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def html
|
|
32
|
+
@html
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def to_json(*)
|
|
36
|
+
{
|
|
37
|
+
'enable' => self.enable,
|
|
38
|
+
'text' => self.text,
|
|
39
|
+
'html' => self.html
|
|
40
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class Ganalytics
|
|
5
|
+
def initialize(enable: nil, utm_source: nil, utm_medium: nil, utm_term: nil, utm_content: nil, utm_campaign: nil, utm_name: nil)
|
|
6
|
+
@enable = enable
|
|
7
|
+
@utm_source = utm_source
|
|
8
|
+
@utm_medium = utm_medium
|
|
9
|
+
@utm_term = utm_term
|
|
10
|
+
@utm_content = utm_content
|
|
11
|
+
@utm_campaign = utm_campaign
|
|
12
|
+
@utm_name = utm_name
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def enable=(enable)
|
|
16
|
+
@enable = enable
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def enable
|
|
20
|
+
@enable
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def utm_source=(utm_source)
|
|
24
|
+
@utm_source = utm_source
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def utm_source
|
|
28
|
+
@utm_source
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def utm_medium=(utm_medium)
|
|
32
|
+
@utm_medium = utm_medium
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def utm_medium
|
|
36
|
+
@utm_medium
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def utm_term=(utm_term)
|
|
40
|
+
@utm_term = utm_term
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def utm_term
|
|
44
|
+
@utm_term
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def utm_content=(utm_content)
|
|
48
|
+
@utm_content = utm_content
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def utm_content
|
|
52
|
+
@utm_content
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def utm_campaign=(utm_campaign)
|
|
56
|
+
@utm_campaign = utm_campaign
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def utm_campaign
|
|
60
|
+
@utm_campaign
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def to_json(*)
|
|
64
|
+
{
|
|
65
|
+
'enable' => self.enable,
|
|
66
|
+
'utm_source' => self.utm_source,
|
|
67
|
+
'utm_medium' => self.utm_medium,
|
|
68
|
+
'utm_term' => self.utm_term,
|
|
69
|
+
'utm_content' => self.utm_content,
|
|
70
|
+
'utm_campaign' => self.utm_campaign
|
|
71
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|