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 +4 -4
- data/README.md +169 -7
- data/lib/action_message_texter/base.rb +12 -0
- data/lib/action_message_texter/delivery_methods.rb +1 -0
- data/lib/action_message_texter/message.rb +17 -1
- data/lib/action_message_texter/version.rb +1 -1
- data/lib/action_message_texter.rb +1 -0
- data/lib/generators/action_message_texter/texter_generator.rb +7 -1
- data/lib/generators/templates/application_texter.rb +2 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ec9d3a527b2e256c0c94e5aa95a0cae431e4fa3c779e3c2e4dee7fbee84f0f0
|
4
|
+
data.tar.gz: c3e99f6be76fe931992b7fdfa036c7f8c36110c1d76dbf66f2066033d4456652
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
##
|
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
|
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
|
-
|
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,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
|
-
|
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
|
@@ -8,7 +8,13 @@ module ActionMessageTexter
|
|
8
8
|
|
9
9
|
check_class_collision suffix: 'Texter'
|
10
10
|
|
11
|
-
def
|
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
|
|
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.
|
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-
|
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
|