txbr 2.3.0 → 2.4.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/lib/txbr/campaign.rb +13 -2
- data/lib/txbr/campaign_handler.rb +2 -2
- data/lib/txbr/email_template.rb +13 -2
- data/lib/txbr/email_template_handler.rb +2 -2
- data/lib/txbr/uploader.rb +12 -6
- data/lib/txbr/version.rb +1 -1
- data/spec/campaign_spec.rb +50 -20
- data/spec/email_template_spec.rb +53 -19
- data/spec/spec_helper.rb +5 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3a26e4fcc27b8a68d3fa2d1460aafaf08966ee6aeaf7a8d16745e79c509955c3
|
|
4
|
+
data.tar.gz: 10d380377a107dd01c46489870abb21b6fc663d018f3ce88b10670d1f377262f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 53f0538ee6675d79068528bf834b2df19996f21d1e4c0c731a1cae9b19ee9eccdd5ddb4b6981dd0c68b53dcff6eabe95654037308cecf3a65f6543390f89fa45
|
|
7
|
+
data.tar.gz: cfddc02280c8c413c4f4a8b0f8f389fc2358b35cdf8940dd149ba7dbab5b6b6013174af205dbf9bad5965d5e14d3b571c0d1d7d5a883a6313a05165ed4f9177a
|
data/lib/txbr/campaign.rb
CHANGED
|
@@ -2,6 +2,7 @@ require 'liquid'
|
|
|
2
2
|
|
|
3
3
|
module Txbr
|
|
4
4
|
class Campaign
|
|
5
|
+
ITEM_TYPE = 'campaign'.freeze
|
|
5
6
|
TEMPLATE_KEYS = %w(body subject preheader message alert).freeze
|
|
6
7
|
|
|
7
8
|
attr_reader :project, :campaign_id
|
|
@@ -16,6 +17,16 @@ module Txbr
|
|
|
16
17
|
template_group.each_resource(&block)
|
|
17
18
|
end
|
|
18
19
|
|
|
20
|
+
def metadata
|
|
21
|
+
@metadata ||= {
|
|
22
|
+
item_type: ITEM_TYPE,
|
|
23
|
+
campaign_name: campaign_name,
|
|
24
|
+
campaign_id: campaign_id
|
|
25
|
+
}
|
|
26
|
+
rescue => e
|
|
27
|
+
{}
|
|
28
|
+
end
|
|
29
|
+
|
|
19
30
|
private
|
|
20
31
|
|
|
21
32
|
def template_group
|
|
@@ -29,8 +40,8 @@ module Txbr
|
|
|
29
40
|
if message = props[key]
|
|
30
41
|
ret << Txbr::Template.new(message_id, ::Liquid::Template.parse(message))
|
|
31
42
|
end
|
|
32
|
-
rescue
|
|
33
|
-
Txgh.events.publish_error!(e)
|
|
43
|
+
rescue => e
|
|
44
|
+
Txgh.events.publish_error!(e, metadata.merge(template_key: key))
|
|
34
45
|
end
|
|
35
46
|
end
|
|
36
47
|
end
|
|
@@ -11,8 +11,6 @@ module Txbr
|
|
|
11
11
|
each_campaign { |campaign| campaign.each_resource(&block) }
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
private
|
|
15
|
-
|
|
16
14
|
def each_campaign
|
|
17
15
|
return to_enum(__method__) unless block_given?
|
|
18
16
|
|
|
@@ -20,5 +18,7 @@ module Txbr
|
|
|
20
18
|
yield Campaign.new(project, campaign['id'])
|
|
21
19
|
end
|
|
22
20
|
end
|
|
21
|
+
|
|
22
|
+
alias_method :each_item, :each_campaign
|
|
23
23
|
end
|
|
24
24
|
end
|
data/lib/txbr/email_template.rb
CHANGED
|
@@ -3,6 +3,7 @@ require 'txgh'
|
|
|
3
3
|
|
|
4
4
|
module Txbr
|
|
5
5
|
class EmailTemplate
|
|
6
|
+
ITEM_TYPE = 'email_template'.freeze
|
|
6
7
|
TEMPLATE_KEYS = %w(body subject preheader).freeze
|
|
7
8
|
|
|
8
9
|
attr_reader :project, :email_template_id
|
|
@@ -17,6 +18,16 @@ module Txbr
|
|
|
17
18
|
template_group.each_resource(&block)
|
|
18
19
|
end
|
|
19
20
|
|
|
21
|
+
def metadata
|
|
22
|
+
@metadata ||= {
|
|
23
|
+
item_type: ITEM_TYPE,
|
|
24
|
+
template_name: template_name,
|
|
25
|
+
template_id: email_template_id
|
|
26
|
+
}
|
|
27
|
+
rescue => e
|
|
28
|
+
{}
|
|
29
|
+
end
|
|
30
|
+
|
|
20
31
|
private
|
|
21
32
|
|
|
22
33
|
def template_group
|
|
@@ -28,8 +39,8 @@ module Txbr
|
|
|
28
39
|
begin
|
|
29
40
|
liquid_tmpl = ::Liquid::Template.parse(details[name])
|
|
30
41
|
ret << Txbr::Template.new(email_template_id, liquid_tmpl)
|
|
31
|
-
rescue
|
|
32
|
-
Txgh.events.publish_error!(e)
|
|
42
|
+
rescue => e
|
|
43
|
+
Txgh.events.publish_error!(e, metadata.merge(template_key: name))
|
|
33
44
|
end
|
|
34
45
|
end
|
|
35
46
|
end
|
|
@@ -14,8 +14,6 @@ module Txbr
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
private
|
|
18
|
-
|
|
19
17
|
def each_template
|
|
20
18
|
return to_enum(__method__) unless block_given?
|
|
21
19
|
|
|
@@ -23,5 +21,7 @@ module Txbr
|
|
|
23
21
|
yield EmailTemplate.new(project, tmpl['email_template_id'])
|
|
24
22
|
end
|
|
25
23
|
end
|
|
24
|
+
|
|
25
|
+
alias_method :each_item, :each_template
|
|
26
26
|
end
|
|
27
27
|
end
|
data/lib/txbr/uploader.rb
CHANGED
|
@@ -7,21 +7,27 @@ module Txbr
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def upload_all
|
|
10
|
-
project.handler.
|
|
11
|
-
|
|
12
|
-
upload_resource(resource)
|
|
13
|
-
rescue ::Txgh::TransifexApiError => e
|
|
14
|
-
Txgh.events.publish_error!(e)
|
|
15
|
-
end
|
|
10
|
+
project.handler.each_item do |item|
|
|
11
|
+
upload_item(item)
|
|
16
12
|
end
|
|
17
13
|
end
|
|
18
14
|
|
|
15
|
+
def upload_item(item)
|
|
16
|
+
item.each_resource do |resource|
|
|
17
|
+
upload_resource(resource)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
19
23
|
def upload_resource(resource)
|
|
20
24
|
stream = StringIO.new
|
|
21
25
|
resource.write_to(stream)
|
|
22
26
|
project.transifex_api.create_or_update(
|
|
23
27
|
resource.tx_resource, stream.string
|
|
24
28
|
)
|
|
29
|
+
rescue ::Txgh::TransifexApiError => e
|
|
30
|
+
Txgh.events.publish_error!(e)
|
|
25
31
|
end
|
|
26
32
|
end
|
|
27
33
|
end
|
data/lib/txbr/version.rb
CHANGED
data/spec/campaign_spec.rb
CHANGED
|
@@ -36,27 +36,27 @@ describe Txbr::Campaign do
|
|
|
36
36
|
HTML
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
end
|
|
39
|
+
let(:braze_interactions) do
|
|
40
|
+
[{
|
|
41
|
+
request: {
|
|
42
|
+
verb: 'get',
|
|
43
|
+
url: Txbr::CampaignsApi::CAMPAIGN_DETAILS_PATH,
|
|
44
|
+
params: { campaign_id: campaign_id }
|
|
45
|
+
},
|
|
46
|
+
response: {
|
|
47
|
+
status: 200,
|
|
48
|
+
body: {
|
|
49
|
+
name: 'World Domination',
|
|
50
|
+
messages: {
|
|
51
|
+
abc123: { name: 'Subliminal Messaging', message: first_message },
|
|
52
|
+
def456: { name: 'Propaganda', message: second_message }
|
|
53
|
+
}
|
|
54
|
+
}.to_json
|
|
55
|
+
}
|
|
56
|
+
}]
|
|
57
|
+
end
|
|
59
58
|
|
|
59
|
+
describe '#each_resource' do
|
|
60
60
|
it 'extracts and groups all strings with the same project, resource, and prefix' do
|
|
61
61
|
resource = campaign.each_resource.to_a.first
|
|
62
62
|
expect(resource.tx_resource.project_slug).to eq('my_project')
|
|
@@ -132,5 +132,35 @@ describe Txbr::Campaign do
|
|
|
132
132
|
expect(resources.first.tx_resource.resource_slug).to eq('my_other_resource')
|
|
133
133
|
end
|
|
134
134
|
end
|
|
135
|
+
|
|
136
|
+
context 'when an error occurs' do
|
|
137
|
+
before do
|
|
138
|
+
allow(::Liquid::Template).to receive(:parse).and_raise('jelly beans')
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it 'passes item metadata to the error handler' do
|
|
142
|
+
errors = []
|
|
143
|
+
|
|
144
|
+
Txgh.events.subscribe('errors') do |e, params|
|
|
145
|
+
errors << [e, params]
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
expect { campaign.each_resource.to_a }.to change { errors.size }.by_at_least(1)
|
|
149
|
+
|
|
150
|
+
errors.each do |(_error, params)|
|
|
151
|
+
expect(params).to eq(campaign.metadata.merge(template_key: 'message'))
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
describe '#metadata' do
|
|
158
|
+
it 'includes the correct values' do
|
|
159
|
+
expect(campaign.metadata).to eq(
|
|
160
|
+
item_type: 'campaign',
|
|
161
|
+
campaign_name: 'World Domination',
|
|
162
|
+
campaign_id: campaign_id
|
|
163
|
+
)
|
|
164
|
+
end
|
|
135
165
|
end
|
|
136
166
|
end
|
data/spec/email_template_spec.rb
CHANGED
|
@@ -54,26 +54,26 @@ describe Txbr::EmailTemplate do
|
|
|
54
54
|
HTML
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
end
|
|
57
|
+
let(:braze_interactions) do
|
|
58
|
+
[{
|
|
59
|
+
request: {
|
|
60
|
+
verb: 'get',
|
|
61
|
+
url: Txbr::EmailTemplatesApi::TEMPLATE_DETAILS_PATH,
|
|
62
|
+
params: { email_template_id: email_template_id }
|
|
63
|
+
},
|
|
64
|
+
response: {
|
|
65
|
+
status: 200,
|
|
66
|
+
body: {
|
|
67
|
+
template_name: 'Super Slick Awesome',
|
|
68
|
+
body: body_html,
|
|
69
|
+
subject: subject_html,
|
|
70
|
+
preheader: preheader_html
|
|
71
|
+
}.to_json
|
|
72
|
+
}
|
|
73
|
+
}]
|
|
74
|
+
end
|
|
76
75
|
|
|
76
|
+
describe '#each_resource' do
|
|
77
77
|
it 'extracts and groups all strings with the same project, resource, and prefix' do
|
|
78
78
|
resource = email_template.each_resource.to_a.first
|
|
79
79
|
expect(resource.tx_resource.project_slug).to eq('my_project')
|
|
@@ -151,5 +151,39 @@ describe Txbr::EmailTemplate do
|
|
|
151
151
|
expect(resources.last.tx_resource.resource_slug).to eq('my_other_resource')
|
|
152
152
|
end
|
|
153
153
|
end
|
|
154
|
+
|
|
155
|
+
context 'when an error occurs' do
|
|
156
|
+
before do
|
|
157
|
+
allow(::Liquid::Template).to receive(:parse).and_raise('jelly beans')
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it 'passes item metadata to the error handler' do
|
|
161
|
+
errors = []
|
|
162
|
+
|
|
163
|
+
Txgh.events.subscribe('errors') do |e, params|
|
|
164
|
+
errors << [e, params]
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
expect { email_template.each_resource.to_a }.to change { errors.size }.by_at_least(1)
|
|
168
|
+
|
|
169
|
+
email_template.class::TEMPLATE_KEYS.each do |key|
|
|
170
|
+
idx = errors.index { |(_err, params)| params[:template_key] == key }
|
|
171
|
+
expect(errors[idx][1]).to eq(email_template.metadata.merge(template_key: key))
|
|
172
|
+
errors.delete_at(idx)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
expect(errors).to be_empty
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
describe '#metadata' do
|
|
181
|
+
it 'includes the correct values' do
|
|
182
|
+
expect(email_template.metadata).to eq(
|
|
183
|
+
item_type: 'email_template',
|
|
184
|
+
template_name: 'Super Slick Awesome',
|
|
185
|
+
template_id: email_template_id
|
|
186
|
+
)
|
|
187
|
+
end
|
|
154
188
|
end
|
|
155
189
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: txbr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Cameron Dutro
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-09-
|
|
11
|
+
date: 2019-09-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: abroad
|