active_sms 0.2.0 → 0.2.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
  SHA1:
3
- metadata.gz: f43dbcec303c16dfb88899f1ba8d3e2ddfabbcb9
4
- data.tar.gz: 72e62060817e39e792f8399e843b3255e344f7fa
3
+ metadata.gz: 59e9b08c771768bd28c41dd03a642630f202797d
4
+ data.tar.gz: 2894e6c82dd8e1c5aae0fe5bfb6548c748f17fbe
5
5
  SHA512:
6
- metadata.gz: 43d8e793fa4bd36ae722d02a12a0ac7a1ac43b1ec6fcc35e7dc3d4a8e8e788a0990152c0f87565a82048507990d4b3df4ee162494eadd4654ea1626a86170a1a
7
- data.tar.gz: 5ea42d6c63e10fb618485531617aecf2f9afcaeff35060a631f6ba4e3f8987f88991691ca8ff8cc4b7a96bf8d453e50be7a02b967134fab4e97cb5855c2cf970
6
+ metadata.gz: a0d690df8f46ccd4496df62a2104c8fb83d032e2430e8cbeeeeb720ad1afe2a7aa3cca21150c6873c06623cda55e02d28848f88f74bb0fa06709fabdeeea93a4
7
+ data.tar.gz: 66c9c108d4f6bb4cd20dc73eb234f1a7e8174c840b6a9be38dc702ef40dac3d278dd6814d20fe4d7e15412b14bc70d5ebaf9827317ef8f002dd2c762336d3625
@@ -1,3 +1,6 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.1
3
+
1
4
  Style/StringLiterals:
2
5
  EnforcedStyle: double_quotes
3
6
  ConsistentQuotesInMultiline: true
data/README.md CHANGED
@@ -20,24 +20,27 @@ gem "active_sms"
20
20
  Then somewhere in your initialization code:
21
21
 
22
22
  ```ruby
23
+ require "active_sms"
24
+ require "logger"
25
+
23
26
  ActiveSMS.configure do |config|
24
- c.register_backend :my_backend_name,
25
- ActiveSMS::Backend::Logger,
26
- logger: Logger.new(STDOUT),
27
- severity: :info
27
+ config.register_backend :my_backend_name,
28
+ ActiveSMS::Backend::Logger,
29
+ logger: Logger.new(STDOUT),
30
+ severity: :info
28
31
 
29
- c.default_backend = :my_backend_name
32
+ config.default_backend = :my_backend_name
30
33
  end
31
34
  ```
32
35
 
33
36
  Now, whenever you need to send SMS, just do:
34
37
 
35
38
  ```ruby
36
- phone = "799999999"
39
+ phone = "+10000000000"
37
40
  text = "My sms text"
38
41
 
39
- # Should print to console [SMS] 79999999999: text
40
- ActiveSMS.send_sms("79999999999", "text")
42
+ # Should print to console [SMS] +10000000000: text
43
+ ActiveSMS.send_sms(phone, text)
41
44
  ```
42
45
 
43
46
  Now your code is capable of sending sms.
@@ -46,29 +49,37 @@ Later you may add any sms-backend you want, or even write your own.
46
49
  ### Adding real sms backend
47
50
 
48
51
  If you followed steps above, you code still doesn't *really* send sms.
49
- It uses `ActiveSMS::Backend::NullSender`
50
- which actually does nothing when called.
51
- To actually send sms you need to pick gem-provider
52
- or write your own simple class.
52
+ It uses `ActiveSMS::Backend::Logger`
53
+ which actually just print sms contents to console.
54
+ To actually send sms you need *gem-provider*
55
+ or your own simple class.
53
56
 
54
- At this moment i made ready to use implementation for only one service:
57
+ Here's a list of my implementations for some sms services.
55
58
 
56
59
  <table>
57
60
  <tr>
58
61
  <th>Gem name</th>
59
62
  <th>Sms service name</th>
60
63
  </tr>
64
+ <tr>
65
+ <td>
66
+ <a href="https://github.com/Fedcomp/active_sms-backend-aws">
67
+ active_sms-backend-aws
68
+ </a>
69
+ </td>
70
+ <td><a href="https://aws.amazon.com/ru/documentation/sns/">Amazon Web Services SNS</a></td>
71
+ </tr>
61
72
  <tr>
62
73
  <td>
63
74
  <a href="https://github.com/Fedcomp/active_sms-backend-smsru">
64
75
  active_sms-backend-smsru
65
- </a>
76
+ </a> (russian)
66
77
  </td>
67
- <td><a href="https://sms.ru">sms-ru</a></td>
78
+ <td><a href="https://sms.ru">sms.ru</a></td>
68
79
  </tr>
69
80
  </table>
70
81
 
71
- The gem documentation should be self explanatory.
82
+ These gems documentation should be self explanatory.
72
83
 
73
84
  ### Writing your own sms backend
74
85
 
@@ -82,18 +93,22 @@ class ActiveSMS::Backend::MyCustomBackend < ActiveSMS::Backend::Base
82
93
  # your initialization which parses params if needed.
83
94
  # the params here is the ones you set in initializer
84
95
 
96
+ # (you may also use keyword arguments instead)
85
97
  @token = params.delete(:token)
86
98
  end
87
99
 
88
100
  def send_sms(phone, sms_text)
89
101
  # your code to call your sms service
90
- # or somehow send actual sms
102
+ # or somehow else send actual sms
91
103
 
92
104
  # if everything went fine, you may use helper from base class:
93
105
  respond_with_status :success
94
106
 
95
- # Or if you want to return failed status code:
107
+ # any other than :success response considered as failure
96
108
  respond_with_status :not_enough_funds
109
+
110
+ # optionally you may return some metadata
111
+ respond_with_status :success, meta: { funds_left: 42 }
97
112
  end
98
113
  end
99
114
  ```
@@ -101,6 +116,9 @@ end
101
116
  Then in initializer:
102
117
 
103
118
  ```ruby
119
+ require "active_sms"
120
+ require_relative "mycustombackend"
121
+
104
122
  ActiveSMS.configure do |c|
105
123
  c.register_backend :my_custom_backend,
106
124
  ActiveSMS::Backend::MyCustomBackend,
@@ -123,6 +141,10 @@ else
123
141
  fail_status = result.status
124
142
  # :not_enough_funds for example
125
143
  end
144
+
145
+ # (optionally) Read metadata if any.
146
+ # Not recommended for control flow.
147
+ result.meta
126
148
  ```
127
149
 
128
150
  ### Multiple backends
@@ -130,6 +152,9 @@ end
130
152
  You can specify which backend to use per call:
131
153
 
132
154
  ```ruby
155
+ require "active_sms"
156
+ require_relative "mycustombackend"
157
+
133
158
  ActiveSMS.configure do |c|
134
159
  c.register_backend :my_custom_backend,
135
160
  ActiveSMS::Backend::MyCustomBackend,
@@ -161,6 +186,10 @@ to actually send them using your service.
161
186
  Here's how you can achieve that:
162
187
 
163
188
  ```ruby
189
+ require "active_sms"
190
+ require_relative "mycustombackend"
191
+ require_relative "mycustombackend2"
192
+
164
193
  ActiveSMS.configure do |c|
165
194
  if development?
166
195
  c.register_backend :my_custom_backend,
@@ -168,7 +197,7 @@ ActiveSMS.configure do |c|
168
197
  logger: Logger.new(STDOUT),
169
198
  severity: :info
170
199
 
171
- # You can also specify different formatter for second one
200
+ # You can also, for example, specify different formatter for second one
172
201
  logger = Logger.new(STDOUT)
173
202
  logger.formatter = proc do |severity, datetime, progname, msg|
174
203
  "[MYBackend2]: #{msg}\n"
@@ -181,6 +210,7 @@ ActiveSMS.configure do |c|
181
210
  end
182
211
 
183
212
  if test?
213
+ # Null sender does nothing when called for sending sms
184
214
  c.register_backend :my_custom_backend, ActiveSMS::Backend::NullSender
185
215
  c.register_backend :my_custom_backend2, ActiveSMS::Backend::NullSender
186
216
  end
@@ -211,8 +241,8 @@ ActiveSMS.send_sms(phone, text, backend: :my_custom_backend2)
211
241
  # in different environments.
212
242
  ```
213
243
 
214
- Of course `development?` and `production?` is not real methods.
215
- You have to detect environment yourself.
244
+ Of course `development?`, `test?` and `production?` are not real methods.
245
+ You have to detect environment yourself somehow.
216
246
 
217
247
  While possible, i strongly discourage to use more than two backends
218
248
  (One default, another is required in certain situations for some reason).
@@ -227,6 +257,20 @@ For now you may just mock `ActiveSMS.send_sms` and check it was executed.
227
257
 
228
258
  Bug reports and pull requests are welcome on GitHub at https://github.com/Fedcomp/active_sms
229
259
 
260
+ ## Submitting a Pull Request
261
+ 1. Fork the [official repository](https://github.com/Fedcomp/active_sms).
262
+ 2. Create a topic branch.
263
+ 3. Implement your feature or bug fix.
264
+ 4. Add, commit, and push your changes.
265
+ 5. Submit a pull request.
266
+
267
+ * Please add tests if you changed code. Contributions without tests won't be accepted.
268
+ * If you don't know how to add tests, please put in a PR and leave a comment
269
+ asking for help.
270
+ * Please don't update the Gem version.
271
+
272
+ ( Inspired by https://github.com/thoughtbot/factory_girl/blob/master/CONTRIBUTING.md )
273
+
230
274
  ## License
231
275
 
232
276
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "active_sms/version"
@@ -6,6 +6,6 @@ require "active_sms/configuration"
6
6
  require "active_sms/response"
7
7
  require "active_sms/sending"
8
8
 
9
- # rubocop:ignore Style/Documentation
9
+ # :nodoc:
10
10
  module ActiveSMS
11
11
  end
@@ -7,7 +7,7 @@ module ActiveSMS::Backend
7
7
  # accept secrets which were defined in initializer
8
8
  # or other configuration options if any.
9
9
  #
10
- # @params [Hash] List of arguments received from configure code.
10
+ # @param params [Hash] List of arguments received from configure code.
11
11
  def initialize(params = {})
12
12
  end
13
13
 
@@ -15,8 +15,8 @@ module ActiveSMS::Backend
15
15
  # Every subclass should implement method itself.
16
16
  # Raises error in default implementation.
17
17
  #
18
- # @_phone [String] Phone number to send sms (not used in this implementation)
19
- # @_text [String] Sms text (not used in this implementation)
18
+ # @param _phone [String] Phone number to send sms (not used in this implementation)
19
+ # @param _text [String] Sms text (not used in this implementation)
20
20
  def send_sms(_phone, _text)
21
21
  raise NotImplementedError,
22
22
  "You should create your own class for every sms service you use"
@@ -24,8 +24,15 @@ module ActiveSMS::Backend
24
24
 
25
25
  protected
26
26
 
27
- def respond_with_status(status)
28
- ActiveSMS::Response.new(status: status)
27
+ # Returns ActiveSMS::Reponse object with status and meta
28
+ #
29
+ # @param status [Symbol]
30
+ # Query status, any other than :success considered as failure
31
+ # @param meta [Hash]
32
+ # Optional metadata you can return from api or implementation
33
+ # @return [ActiveSMS::Reponse] Response object with meta and status
34
+ def respond_with_status(status, meta: nil)
35
+ ActiveSMS::Response.new(status: status, meta: meta)
29
36
  end
30
37
  end
31
38
  end
@@ -1,11 +1,11 @@
1
- # Sms backend for logging outgoing sms
2
- # instead of actually sending them
1
+ # Sms backend for logging outgoing sms instead of actually sending them
3
2
  class ActiveSMS::Backend::Logger < ActiveSMS::Backend::Base
4
- # has anyone heard how to receive log levels from logger itself?
3
+ # Log level validation, all invalid values lead to ArgumentError.
4
+ # Has anyone heard how to receive log levels from ruby logger itself?
5
5
  LOG_SEVERITY = [:debug, :info, :warn, :error, :fatal, :unknown].freeze
6
6
 
7
7
  # @param logger [::Logger] Class implementing logger interface
8
- # @param severity [Symbol] Backend will use log severity you provide
8
+ # @param severity [Symbol] Severity to log with
9
9
  def initialize(logger: Logger.new(STDOUT), severity: :info)
10
10
  @logger = logger
11
11
  @severity = severity
@@ -18,8 +18,8 @@ class ActiveSMS::Backend::Logger < ActiveSMS::Backend::Base
18
18
 
19
19
  # Method that sends phone and text to logger
20
20
  #
21
- # @phone [String] Phone number to send sms
22
- # @text [String] Sms text
21
+ # @param phone [String] Phone number to send sms
22
+ # @param text [String] Sms text
23
23
  def send_sms(phone, text)
24
24
  @logger.send(@severity, "[SMS] #{phone}: #{text}")
25
25
  respond_with_status :success
@@ -1,10 +1,10 @@
1
- # Sms backend to not send anything.
2
- # Purely for usage in tests
1
+ # Sms backend for mocking sending.
2
+ # Purely for usage in tests.
3
3
  class ActiveSMS::Backend::NullSender < ActiveSMS::Backend::Base
4
- # Method that emulates sms sending. Does nothing. Called by `ActiveSMS.send_sms`
4
+ # Method that emulates sms sending. Does nothing.
5
5
  #
6
- # @_phone [String] Phone number to send sms (not used in this implementation)
7
- # @_text [String] Sms text (not used in this implementation)
6
+ # @param _phone [String] Phone number to send sms (not used in this implementation)
7
+ # @param _text [String] Sms text (not used in this implementation)
8
8
  def send_sms(_phone, _text)
9
9
  respond_with_status :success
10
10
  end
@@ -30,7 +30,7 @@ module ActiveSMS
30
30
 
31
31
  # Specify default sms backend. It must be registered.
32
32
  #
33
- # @value [Symbol] Backend key which will be used as default
33
+ # @param value [Symbol] Backend key which will be used as default
34
34
  def default_backend=(value)
35
35
  raise ArgumentError, "default_backend must be a symbol!" unless value.is_a? Symbol
36
36
 
@@ -43,9 +43,10 @@ module ActiveSMS
43
43
 
44
44
  # Register sms provider backend
45
45
  #
46
- # @key [Symbol] Key for acessing backend in any part of ActiveSMS
47
- # @classname [Class] Real class implementation of sms backend
48
- # @params [Hash] Optional params for backend. Useful for passing tokens and options
46
+ # @param key [Symbol] Key for acessing backend in any part of ActiveSMS
47
+ # @param classname [Class] Real class implementation of sms backend
48
+ # @param params [Hash]
49
+ # Optional params for backend. Useful for passing tokens and options
49
50
  def register_backend(key, classname, params = {})
50
51
  raise ArgumentError, "backend key must be a symbol!" unless key.is_a? Symbol
51
52
 
@@ -62,7 +63,7 @@ module ActiveSMS
62
63
 
63
64
  # Removes registered sms backend
64
65
  #
65
- # @key [Symbol] Key of already registered backend
66
+ # @param key [Symbol] Key of already registered backend
66
67
  def remove_backend(key)
67
68
  if key == default_backend
68
69
  raise ArgumentError, "Removing default_backend is prohibited"
@@ -1,11 +1,19 @@
1
1
  # Response object.
2
2
  # Generated on each ActiveSMS.send_sms by backend implementations.
3
3
  class ActiveSMS::Response
4
- # Sms sending status. Anything other than :success considered as failure.
4
+ # see initialize
5
5
  attr_reader :status
6
6
 
7
- def initialize(args = {})
8
- @status = args.delete(:status)
7
+ # see initialize
8
+ attr_accessor :meta
9
+
10
+ # @param status [Symbol]
11
+ # Status of sms request. Anything other than *:success* considered as failure.
12
+ # @param meta [Hash]
13
+ # Meta information which optionally can be returned by backend.
14
+ def initialize(status:, meta: nil)
15
+ @status = status
16
+ @meta = meta
9
17
  end
10
18
 
11
19
  # @return [Boolean] whether request was succesful or not.
@@ -3,9 +3,9 @@ module ActiveSMS
3
3
  class << self
4
4
  # Core of the gem, method responsible for sending sms
5
5
  #
6
- # @phone [String] Phone number for sms
7
- # @text [String] Text for sms
8
- # @args [Hash] Additional options for delivery. Currently only :backend
6
+ # @param phone [String] Phone number for sms
7
+ # @param text [String] Text for sms
8
+ # @param args [Hash] Additional options for delivery. Currently only :backend
9
9
  def send_sms(phone, text, args = {})
10
10
  backend_name = args.delete(:backend)
11
11
  backend_class(backend_name).new(backend_params(backend_name))
@@ -1,3 +1,3 @@
1
1
  module ActiveSMS
2
- VERSION = "0.2.0".freeze
2
+ VERSION = "0.2.1".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_sms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fedcomp
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-11 00:00:00.000000000 Z
11
+ date: 2016-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler