action_message_texter 0.0.3 → 0.0.4

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: bd00de826d0db8e13aaf8b49e914d530c89582e4f0ec99a4b9353f465f0e5e9d
4
- data.tar.gz: 6f0a2f3321cfed58a7d3106670b7f253aaaf0f26774b3a43c2382003e0f401ac
3
+ metadata.gz: bfa1e0bae8d03c42e775fa78af9bb21309f02c073ecadae12f62330285dc7343
4
+ data.tar.gz: bf5a2e62fc9341a13737bd46529c97b498ed8b6e8c1e1ed41df1bb4db91f9def
5
5
  SHA512:
6
- metadata.gz: 475cb10cc05e0910b526d56dca462015bbbcac58e0fe92a34f6bf94b208bbf417ba6111680d22fb98947918420669ba6fca46e203d3a5e4ac56be86192a820d1
7
- data.tar.gz: 752ad19afd9068de50573f49909104c2ada1999baed798805d60393ad55e272dd4790af266a2e8e47244ee0d7c37611796f08e7aff1f2e820e9ba7d33b2c06fb
6
+ metadata.gz: da388aacea57f21c6d0b27cf3e601351a369d871473dd7c2c63d1a443e1271881f16030ff2960ee169dc192252f2676b9495ecba17d48a26682d755ac18699ce
7
+ data.tar.gz: 0d3fb35b1e9bd665eee577779bfe04500ebc3cfb91f99665a6e9e8c77cb5cf9749efa9dbb45c5de97cba6ffab107f564b1f1dc5068c60d33cc80a36b87e6feb1
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_notification_observers.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.4'
3
3
  end
@@ -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,14 +1,14 @@
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.4
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
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -45,6 +45,7 @@ files:
45
45
  - lib/action_message_texter/rescuable.rb
46
46
  - lib/action_message_texter/version.rb
47
47
  - lib/generators/action_message_texter/texter_generator.rb
48
+ - lib/generators/templates/application_texter.rb
48
49
  - lib/generators/templates/i18n.yml.rb
49
50
  - lib/generators/templates/texter.rb
50
51
  - lib/sms_provider/base.rb