action_message_texter 0.0.3 → 0.0.6

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: bd00de826d0db8e13aaf8b49e914d530c89582e4f0ec99a4b9353f465f0e5e9d
4
- data.tar.gz: 6f0a2f3321cfed58a7d3106670b7f253aaaf0f26774b3a43c2382003e0f401ac
3
+ metadata.gz: 8ec9d3a527b2e256c0c94e5aa95a0cae431e4fa3c779e3c2e4dee7fbee84f0f0
4
+ data.tar.gz: c3e99f6be76fe931992b7fdfa036c7f8c36110c1d76dbf66f2066033d4456652
5
5
  SHA512:
6
- metadata.gz: 475cb10cc05e0910b526d56dca462015bbbcac58e0fe92a34f6bf94b208bbf417ba6111680d22fb98947918420669ba6fca46e203d3a5e4ac56be86192a820d1
7
- data.tar.gz: 752ad19afd9068de50573f49909104c2ada1999baed798805d60393ad55e272dd4790af266a2e8e47244ee0d7c37611796f08e7aff1f2e820e9ba7d33b2c06fb
6
+ metadata.gz: e8ca48e795af093464c658b29b6fb34ed3f67f0d891fb20c9c9033666ef43d5b417e277104f37448e7b53a938cda119eaf4d75abbe1e3cb887b62e11172b42cb
7
+ data.tar.gz: 82bcd3a793e10850181fea18e0fa60b4b7f3608138ef37c685e22dab1017e86f0fbb0a244ec0b3e3c94367332d101d2353e0721d4f37ab71e27c7664a86f19e5
data/README.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  仿造Rails ActionMailer 打造的簡訊寄送模組,提供與Mailer一致的開發體驗
4
4
 
5
-
6
-
7
5
  ## Installation
8
6
  Add this line to your application's Gemfile:
9
7
 
@@ -21,15 +19,179 @@ Or install it yourself as:
21
19
  $ gem install action_message_texter
22
20
  ```
23
21
 
24
- ## Usage
22
+ ## Configuration
23
+
24
+ 1. 載入設定
25
+ 先到`config/application.rb` 新增 `require action_message_texter/engine`
26
+
27
+ 2. 簡訊寄送方式設定
28
+
29
+ 由於簡訊沒有類似SMTP的標準寄送方式,全依照簡訊提供商的API,目前我有包一個基於**三竹簡訊**的API,未來有計畫開放大家自行建立自己的寄送方式
30
+
31
+ ```ruby
32
+ # config/application.rb
33
+ config.action_message_texter.mitake_settings= :mitake, MitakeApi::SMSProvider, url: "三竹發給你的網域名稱", username: "三竹的使用者名稱", password: "三竹的密碼"
34
+ ```
35
+
36
+ 3. 設定預設寄送方式
37
+ 在`app/application.rb`裡,可以預設所有簡訊要使用哪一個寄送方式
38
+ ``` ruby
39
+ # app/application.rb
40
+
41
+ #預設值為 :mitake
42
+ config.action_message_texter.delivery_method = :mitake
43
+ ```
44
+ 若要依照不同環境使用不同的簡訊寄送方式 請在不同環境的設定檔(如`config/environments/development.rb`)內覆蓋這個設定,也可以在Texter中使用`delivery_method = :method`直接指定
45
+
46
+ ### 完整設定如下
47
+ ```ruby
48
+ # config/applications.rb
49
+
50
+ # 引用ActionMessageTexter
51
+ require 'action_message_texter/engine'
52
+ ....
53
+
54
+ class Application < Rails::Application
55
+ ...
56
+ # 加入三竹科技登入方式
57
+ config.action_message_texter.mitake_settings(:url: ENV['URL'], username: ENV['USERNAME'], password: ENV['password'])
58
+ # 設定預設的寄送方式
59
+ config.action_message_texter.delivery_method = :mitake
60
+ ...
61
+ end
62
+ ```
63
+
64
+ ## Generator
25
65
 
26
- ### Texter Generator
27
- This generator will generate Texter at `app/texter`
28
66
  ```bash
29
- rails g action_message_texter:texter Devise sign_up_succeed
67
+ rails g action_message_texter:texter ModuleName action_name action_name ....
68
+ ```
69
+ 這會產生3個檔案,分別是 `app/texter/application_texter.rb` (若不存在)、`app/texter/{{name}}_texter.rb`、`config/locales/texter/{{name}}_texter.yaml`
70
+ 若有給定`function_name` 會自動生成對應的 function 以及字典檔
71
+
72
+
73
+ ```ruby
74
+ # app/texter/my_texter.rb
75
+ class MyTexter
76
+ def action_name
77
+ sms(to: "+8860987654321")
78
+ end
79
+ end
80
+ ```
81
+ ```yaml
82
+ # config/locales/texter/my_texter.yaml
83
+ zh-TW:
84
+ my_texter:
85
+ action_name:
86
+ action_name2:
87
+ ```
88
+
89
+
90
+ ## Texter
91
+
92
+ 與Mailer雷同,但因為簡訊是比較單純的文字,因此render view了,簡訊生成的部分將使用`I18n`,同時會自動帶入參數
93
+
94
+ #### Example
95
+ 假設要送出簡訊,並帶入訂單
96
+ ```ruby
97
+ class MyTexter
98
+ def uber_eat_order(phone_number, order)
99
+ # 記得設成全域變數 我會幫你自動插到I18n內,就像平常使用view 時會插入 `<%=@order>` 一樣
100
+ @order = order
101
+ sms(to: phone_number)
102
+ end
103
+ end
104
+ ```
105
+
106
+ ```yaml
107
+ zh-TW:
108
+ my_texter:
109
+ uber_eat_order: "今晚,我想來%{order}"
110
+ # 記得插值不要加 `@` 喔
111
+ ```
112
+
113
+ 若不同的`Texter`想使用不同的method 可以直接加入 `delivery_method = :method`
114
+
115
+ ```ruby
116
+ class MyTexter
117
+ delivery_method = :method
118
+ ....
119
+ ```
120
+
121
+ ## Send Message
122
+
123
+ 跟 Mailer 一樣,提供 `deliver_now` 跟 `deliver_later` 兩種寄送方式,`deliver_now` 會直接寄出,`deliver_later`會調用Job做寄出。
124
+
125
+ ```ruby
126
+ # 直接寄出,後續的動作需等待這個動作完成
127
+ MyTexter.uber_eat_order("0987654321", "林東芳牛肉麵").deliver_now
128
+ # 調用Job,後續的動作繼續執行
129
+ MyTexter.uber_eat_order("0987654321", "林東芳牛肉麵").deliver_latter
130
+
131
+ ```
132
+
133
+ ## Callbacks
134
+
135
+ 可以在Tester中加入 `before_action` 與 `after_action`,在這兩個funciton中可以取得`message`物件。
136
+ ```ruby
137
+ class MyTexter
138
+ before_action :do_before
139
+ after_action :do_after
140
+
141
+ def do_before
142
+ ...do_something
143
+ end
144
+
145
+ def do_after
146
+ ...do_something
147
+ end
148
+ ....
149
+ ```
150
+
151
+
152
+ ## Observer
153
+
154
+ 若需要再寄送後,查看寄送是否完成?儲存寄送方式結果...等
155
+ 可以註冊一個 `Observer` 或多個 `Observer`
156
+
157
+ ```ruby
158
+ class TexterObserver
159
+ def self.delivered_message(message)
160
+ # 請實作此方法
161
+ end
162
+ end
163
+
164
+
165
+ class MyTexter
166
+ self.register_observer(TexterObserver)
167
+
168
+ # 您也可以註冊多組Observer
169
+ self.register_observer(OtherObserver)
170
+ end
171
+ ```
172
+
173
+ ## Inspection
174
+
175
+ 如了`Observer` 您也可以註冊攔截器 `Inspection`
176
+
177
+ ```ruby
178
+ class TexterInspection
179
+ def self.delivering_message(message)
180
+ # 請實作此方法
181
+ end
182
+ end
183
+
184
+
185
+ class MyTexter
186
+ self.register_inspection(TexterObserver)
187
+
188
+ # 您也可以註冊多組Observer
189
+ self.register_inspection(OtherObserver)
190
+ end
30
191
  ```
192
+ ## Test
31
193
 
32
- ### Texter
194
+ 尚未規劃Test的部分
33
195
 
34
196
 
35
197
  ## Contributing
@@ -19,6 +19,18 @@ module ActionMessageTexter
19
19
  Message.register_observer(observer_class_for(observer))
20
20
  end
21
21
 
22
+ def unregister_observer(observer)
23
+ Message.unregister_observer(observer_class_for(observer))
24
+ end
25
+
26
+ def register_interceptor(interceptor)
27
+ Message.register_interceptor(observer_class_for(interceptor))
28
+ end
29
+
30
+ def unregister_interceptor(interceptor)
31
+ Message.unregister_observer(observer_class_for(interceptor))
32
+ end
33
+
22
34
  def default(value)
23
35
  self.default_params = default_params.merge(value).freeze if value
24
36
  default_params
@@ -10,6 +10,7 @@ module ActionMessageTexter
10
10
  class_attribute :delivery_method, default: :base
11
11
 
12
12
  add_delivery_method(:base, SMSProvider::Base)
13
+ add_delivery_method(:mitake, ::MitakeApi::SMSProvider, {})
13
14
  end
14
15
 
15
16
  module ClassMethods
@@ -10,6 +10,16 @@ module ActionMessageTexter
10
10
  def unregister_observer(observer)
11
11
  @@delivery_notification_observers.delete(observer)
12
12
  end
13
+
14
+ def register_interceptor(interceptor)
15
+ unless @@delivery_notification_interceptors.include?(interceptor)
16
+ @@delivery_notification_interceptors << interceptor
17
+ end
18
+ end
19
+
20
+ def unregister_interceptor(interceptor)
21
+ @@delivery_notification_interceptors.delete(interceptor)
22
+ end
13
23
  end
14
24
  attr_accessor :content, :to, :deliver_at, :delivery_options, :delivery_handler, :other_options,
15
25
  :raise_delivery_errors, :response
@@ -26,7 +36,7 @@ module ActionMessageTexter
26
36
  end
27
37
 
28
38
  def deliver
29
- # inform_interceptors
39
+ inform_interceptors
30
40
  if delivery_handler
31
41
  delivery_handler.deliver_message(self) { do_delivery }
32
42
  else
@@ -54,6 +64,12 @@ module ActionMessageTexter
54
64
  end
55
65
  end
56
66
 
67
+ def inform_interceptors
68
+ @@delivery_interceptors.each do |observer|
69
+ observer.delivering_message(self)
70
+ end
71
+ end
72
+
57
73
  def do_delivery
58
74
  delivery_method.deliver!(self)
59
75
  rescue StandardError => e
@@ -1,3 +1,3 @@
1
1
  module ActionMessageTexter
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.6'
3
3
  end
@@ -6,6 +6,7 @@ require 'action_message_texter/message'
6
6
  require 'action_message_texter/rescuable'
7
7
  require 'action_message_texter/delivery_job'
8
8
  require 'sms_provider/base'
9
+ require 'mitake_api'
9
10
 
10
11
  module ActionMessageTexter
11
12
  extend ::ActiveSupport::Autoload
@@ -8,7 +8,13 @@ module ActionMessageTexter
8
8
 
9
9
  check_class_collision suffix: 'Texter'
10
10
 
11
- def create_message_file
11
+ def create_application_texter
12
+ unless File.exist?('app/texter/application_texter.rb')
13
+ template '../templetes/application_texter.rb', File.join('app/texter', 'application_texter.rb')
14
+ end
15
+ end
16
+
17
+ def create_texter
12
18
  template '../templates/texter.rb', File.join('app/texter', "#{file_name}_texter.rb")
13
19
  end
14
20
 
@@ -0,0 +1,2 @@
1
+ class ApplicationTexter < ActionMessageTexter::Base
2
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_message_texter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arthur Li
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-27 00:00:00.000000000 Z
11
+ date: 2022-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mitake_api
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.4
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rails
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -45,6 +59,7 @@ files:
45
59
  - lib/action_message_texter/rescuable.rb
46
60
  - lib/action_message_texter/version.rb
47
61
  - lib/generators/action_message_texter/texter_generator.rb
62
+ - lib/generators/templates/application_texter.rb
48
63
  - lib/generators/templates/i18n.yml.rb
49
64
  - lib/generators/templates/texter.rb
50
65
  - lib/sms_provider/base.rb