hey-you 1.2.3 → 1.4.1

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: e45a6c6dcd683af58756e5bc3702ac92e0cd7e0f4fefb469f356002334f33fce
4
- data.tar.gz: b8144f42b5cac765f8610ab05e046524e2ac9a4c5e47f08a7e6f4e7a409c309f
3
+ metadata.gz: 8ff8d80c94827be9c828c5be13e40a7a00168af78da71b0d9f45f661ea7e9077
4
+ data.tar.gz: 2722f48830d9c5dcba439630b7bd3a94925a8f45308d90754407bb0a5cb603f2
5
5
  SHA512:
6
- metadata.gz: a96ab10f4b7dd0c0a07d6e16be547f2c97d2f51f7bf5be91386541fddde61f7739154d3867695ce7e814d6974b1377e4fa64e98239c4ab296ffff20dfe2602c8
7
- data.tar.gz: e1cdb47a072bd632ea89ee6e072bc49afac86abaf570666ce92b2392b10787268552d1b599bdcb059da3488b7cc19c898b72dc3859730ab48514785291e44adf
6
+ metadata.gz: 1e28d3c2be0df2136d905cb0bf1cfafaa080032cc01a7f0653e87d4eaa42691f10ff9d83daf7bc6dcc959f5a7a39350619d90ed533913fe513938c3caba1512e
7
+ data.tar.gz: 33b895c3264b71c87a2c5647f265be8ce34f46f6ecf0ab2e718eb8635c5b5d25591d90fc32ae12b2924f74d664fc7ddb30fcc363c60f61efcc14e03610a60e2e
@@ -1,5 +1,13 @@
1
1
  # Changelog for hey-you gem
2
2
 
3
+ # 1.4.0
4
+ - Improvement: configs validations for custom classes
5
+ - Improvement: allow custom classes with '_' in name
6
+
7
+ ## 1.3.0 - 1.3.4
8
+ - Feature: `body_part` in email builder.
9
+ - Fixes
10
+
3
11
  ### 1.2.3
4
12
  - Improvement: fix ruby 2.7 warnings
5
13
  - Fix: fix `NoMethodError` in `sender.rb` when channel must be ignored by `if`
@@ -14,4 +22,4 @@
14
22
 
15
23
  ### 1.2.0
16
24
  - Feature: data source extensions (check readme for more information).
17
- __Attention__: You should rewrite your configuration for use yaml data source!
25
+ __Attention__: You should rewrite your configuration for use yaml data source!
@@ -37,8 +37,8 @@ module HeyYou
37
37
  return
38
38
  end
39
39
 
40
- ch_builder =
41
- HeyYou::Builder.const_get("#{ch.downcase.capitalize}").new(data[ch.to_s], key, **options)
40
+ klass_name = ch.to_s.downcase.split('_').map(&:capitalize).join
41
+ ch_builder = HeyYou::Builder.const_get(klass_name).new(data[ch.to_s], key, **options)
42
42
  instance_variable_set("@#{ch}".to_sym, ch_builder)
43
43
 
44
44
  define_ch_method(ch)
@@ -74,4 +74,4 @@ module HeyYou
74
74
  class DataNotFound < StandardError; end
75
75
  class RequiredChannelNotFound < StandardError; end
76
76
  end
77
- end
77
+ end
@@ -3,19 +3,36 @@ require_relative '_base'
3
3
  module HeyYou
4
4
  class Builder
5
5
  class Email < Base
6
- attr_reader :subject, :body, :layout, :mailer_class, :mailer_method, :delivery_method
6
+ attr_reader :subject, :body, :layout, :mailer_class, :mailer_method, :delivery_method, :body_parts
7
7
 
8
8
  def build
9
9
  @mailer_class = ch_data.fetch('mailer_class', nil)
10
10
  @mailer_method = ch_data.fetch('mailer_method', nil)
11
11
  @delivery_method = ch_data.fetch('delivery_method', nil)
12
- @body = interpolate(ch_data.fetch('body'), options)
12
+ @body = interpolate(ch_data['body'], options) if ch_data['body']
13
+ @body_parts = interpolate_each(ch_data.fetch('body_parts', nil)&.deep_dup, options)
13
14
  @subject = interpolate(ch_data.fetch('subject'), options)
14
15
  end
15
16
 
16
17
  def to_hash
17
- { body: body, subject: subject }
18
+ { body: body, subject: subject, body_parts: body_parts }
19
+ end
20
+
21
+ private
22
+
23
+ def interpolate_each(notification_hash, options)
24
+ return notification_hash unless notification_hash.is_a?(Hash)
25
+
26
+ notification_hash.each do |k, v|
27
+ next interpolate_each(v, options) if v.is_a?(Hash)
28
+
29
+ begin
30
+ notification_hash[k] = v % options
31
+ rescue KeyError => err
32
+ raise InterpolationError, "Failed build notification string `#{v}`: #{err.message}"
33
+ end
34
+ end
18
35
  end
19
36
  end
20
37
  end
21
- end
38
+ end
@@ -62,6 +62,13 @@ module HeyYou
62
62
  @registered_receivers << receiver_class
63
63
  end
64
64
 
65
+ def validate_config
66
+ registered_channels.each do |ch|
67
+ ch_config = send(ch)
68
+ ch_config.validate_config if ch_config.respond_to?(:validate_config)
69
+ end
70
+ end
71
+
65
72
  # Registrate new custom channel.
66
73
  # For successful registration, in application must be exists:
67
74
  # 1. HeyYou::Channels::<YOUR_CHANNEL_NAME> < HeyYou::Channels::Base
@@ -94,7 +101,8 @@ module HeyYou
94
101
  # For example, if ch == 'push' will define method #push for class instance.
95
102
  # New method will return instance of channel config instance
96
103
  def define_ch_config_method(ch)
97
- method_proc = -> { self.class.const_get(ch.capitalize).config }
104
+ klass_name = ch.to_s.split('_').map(&:capitalize).join
105
+ method_proc = -> { self.class.const_get(klass_name).config }
98
106
  self.class.send(:define_method, ch, method_proc)
99
107
  end
100
108
 
@@ -102,4 +110,4 @@ module HeyYou
102
110
  data_source.load_data
103
111
  end
104
112
  end
105
- end
113
+ end
@@ -13,6 +13,7 @@ module HeyYou
13
13
  def configure(&block)
14
14
  @configured ? raise(AlreadyConfiguredError, 'You already configure HeyYou') : instance_eval(&block)
15
15
  @configured = true
16
+ instance.validate_config if instance.respond_to?(:validate_config)
16
17
  end
17
18
 
18
19
  def config
@@ -20,6 +21,7 @@ module HeyYou
20
21
  end
21
22
 
22
23
  class AlreadyConfiguredError < StandardError; end
24
+ class RequiredConfigsNotPassed < StandardError; end
23
25
  end
24
26
  end
25
- end
27
+ end
@@ -38,7 +38,7 @@ module HeyYou
38
38
  # Fetch receiver's info for sending: phone_number, email, etc
39
39
  subject: receiver.public_send("#{ch}_ch_receive_info"),
40
40
  # Fetch receiver's options like :mailer_class
41
- options: receiver.public_send("#{ch}_ch_receive_options") || {}
41
+ options: receiver.public_send("#{ch}_ch_receive_options").merge(options) || {}
42
42
  }
43
43
  end
44
44
 
@@ -55,7 +55,8 @@ module HeyYou
55
55
  " and options: #{receive_info[ch][:options]}"
56
56
  )
57
57
  receive_options = receive_info[ch].fetch(:options, {}) || {}
58
- response[ch] = Channels.const_get(ch.to_s.capitalize).send!(
58
+ klass_name = ch.to_s.downcase.split('_').map(&:capitalize).join
59
+ response[ch] = Channels.const_get(klass_name).send!(
59
60
  builder, to: receive_info[ch][:subject], **receive_options
60
61
  )
61
62
  else
@@ -89,4 +90,4 @@ module HeyYou
89
90
 
90
91
  class NotRegisteredReceiver < StandardError; end
91
92
  end
92
- end
93
+ end
@@ -1,3 +1,3 @@
1
1
  module HeyYou
2
- VERSION = "1.2.3"
2
+ VERSION = "1.4.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hey-you
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Nesterov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-04 00:00:00.000000000 Z
11
+ date: 2021-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fcm