txbr 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f3c02b553986a17b56b22b342fb17880d8fdae3d5d61a109967b26c7a29a0524
4
- data.tar.gz: ac13219636877bc7c61536a53bf7e20e6c4f83bdd4c706f4eec05bc15aea436f
3
+ metadata.gz: 3a26e4fcc27b8a68d3fa2d1460aafaf08966ee6aeaf7a8d16745e79c509955c3
4
+ data.tar.gz: 10d380377a107dd01c46489870abb21b6fc663d018f3ce88b10670d1f377262f
5
5
  SHA512:
6
- metadata.gz: 6b2759f1235b6e7490d2d3247f5c3e5e97181857d03a20cda5fb520d11a18ef20ea9651a266e9d5d11022b49979b8843f678f7bee60bb6d72a81fe9b1e799da3
7
- data.tar.gz: 85c04374c3c46bfa5a9a51b08ed95ebf09067fd82d87b90f5a40abcf9de880fc097e103b2c34d0346148fc91ea01d88c96fa5258cb923dd10aea8081449be757
6
+ metadata.gz: 53f0538ee6675d79068528bf834b2df19996f21d1e4c0c731a1cae9b19ee9eccdd5ddb4b6981dd0c68b53dcff6eabe95654037308cecf3a65f6543390f89fa45
7
+ data.tar.gz: cfddc02280c8c413c4f4a8b0f8f389fc2358b35cdf8940dd149ba7dbab5b6b6013174af205dbf9bad5965d5e14d3b571c0d1d7d5a883a6313a05165ed4f9177a
@@ -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 ::Liquid::SyntaxError => e
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
@@ -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 ::Liquid::SyntaxError => e
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
@@ -7,21 +7,27 @@ module Txbr
7
7
  end
8
8
 
9
9
  def upload_all
10
- project.handler.each_resource do |resource|
11
- begin
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
@@ -1,3 +1,3 @@
1
1
  module Txbr
2
- VERSION = '2.3.0'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -36,27 +36,27 @@ describe Txbr::Campaign do
36
36
  HTML
37
37
  end
38
38
 
39
- describe '#each_resource' do
40
- let(:braze_interactions) do
41
- [{
42
- request: {
43
- verb: 'get',
44
- url: Txbr::CampaignsApi::CAMPAIGN_DETAILS_PATH,
45
- params: { campaign_id: campaign_id }
46
- },
47
- response: {
48
- status: 200,
49
- body: {
50
- name: 'World Domination',
51
- messages: {
52
- abc123: { name: 'Subliminal Messaging', message: first_message },
53
- def456: { name: 'Propaganda', message: second_message }
54
- }
55
- }.to_json
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
@@ -54,26 +54,26 @@ describe Txbr::EmailTemplate do
54
54
  HTML
55
55
  end
56
56
 
57
- describe '#each_resource' do
58
- let(:braze_interactions) do
59
- [{
60
- request: {
61
- verb: 'get',
62
- url: Txbr::EmailTemplatesApi::TEMPLATE_DETAILS_PATH,
63
- params: { email_template_id: email_template_id }
64
- },
65
- response: {
66
- status: 200,
67
- body: {
68
- template_name: 'Super Slick Awesome',
69
- body: body_html,
70
- subject: subject_html,
71
- preheader: preheader_html
72
- }.to_json
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
@@ -11,4 +11,9 @@ require 'support/env_helpers'
11
11
 
12
12
  RSpec.configure do |config|
13
13
  config.include(EnvHelpers)
14
+
15
+ config.after(:each) do
16
+ # clear out event handlers
17
+ Txgh.events.channel_hash.clear
18
+ end
14
19
  end
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.3.0
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-13 00:00:00.000000000 Z
11
+ date: 2019-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: abroad