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