hey-you 1.2.3 → 1.4.1

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